From 5ddb7eefedcbd8b2cddb3caa0a17ce1ef6fd98e2 Mon Sep 17 00:00:00 2001 From: Sam Duvall Date: Tue, 8 Jun 2021 21:30:08 -0400 Subject: [PATCH] Fix YXmlElement.clone and YXmlFragment.clone --- src/types/YXmlElement.js | 2 +- src/types/YXmlFragment.js | 2 +- tests/y-xml.tests.js | 18 ++++++++++++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) 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()) +}