diff --git a/src/types/YXmlElement.js b/src/types/YXmlElement.js index b3ce6ef9..2dfaa659 100644 --- a/src/types/YXmlElement.js +++ b/src/types/YXmlElement.js @@ -81,7 +81,7 @@ export class YXmlElement extends YXmlFragment { el.setAttribute(key, attrs[key]) } // @ts-ignore - el.insert(0, el.toArray().map(item => item instanceof AbstractType ? item.clone() : item)) + el.insert(0, this.toArray().map(item => item instanceof AbstractType ? item.clone() : item)) return el } diff --git a/src/types/YXmlFragment.js b/src/types/YXmlFragment.js index 828a9d07..c18b9ca0 100644 --- a/src/types/YXmlFragment.js +++ b/src/types/YXmlFragment.js @@ -167,7 +167,7 @@ export class YXmlFragment extends AbstractType { clone () { const el = new YXmlFragment() // @ts-ignore - el.insert(0, el.toArray().map(item => item instanceof AbstractType ? item.clone() : item)) + el.insert(0, this.toArray().map(item => item instanceof AbstractType ? item.clone() : item)) return el } diff --git a/tests/y-xml.tests.js b/tests/y-xml.tests.js index f0b6fd38..89fbe239 100644 --- a/tests/y-xml.tests.js +++ b/tests/y-xml.tests.js @@ -133,3 +133,21 @@ export const testInsertafter = tc => { el.insertAfter(deepsecond1, [new Y.XmlText()]) }) } + + +/** + * @param {t.TestCase} tc + */ + export const testClone = tc => { + const ydoc = new Y.Doc() + const yxml = ydoc.getXmlFragment() + const first = new Y.XmlText('text') + const second = new Y.XmlElement('p') + const third = new Y.XmlElement('p') + yxml.push([first, second, third]) + t.compareArrays(yxml.toArray(), [first, second, third]) + + const cloneYxml = yxml.clone() + t.assert(cloneYxml.length === 3) + t.assert(cloneYxml.toJSON() === yxml.toJSON()) +}