X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/dec5a3d8b3a4cc70a9b2bc7bc1305ba0ae11a369..55826c1f7f8bfec8c90096b1c1c779e118e357fc:/src/smartxml/smartxml.test.js?ds=sidebyside
diff --git a/src/smartxml/smartxml.test.js b/src/smartxml/smartxml.test.js
index 5430278..ce0d98a 100644
--- a/src/smartxml/smartxml.test.js
+++ b/src/smartxml/smartxml.test.js
@@ -240,6 +240,29 @@ describe('smartxml', function() {
});
});
});
+
+ describe('Putting nodes around', function() {
+ it('will not allow to put node before or after root node', function() {
+ var doc = getDocumentFromXML(''),
+ spy = sinon.spy(),
+ root = doc.root,
+ result;
+
+ doc.on('change', spy);
+
+ result = doc.root.before({tagName: 'test'});
+
+ expect(spy.callCount).to.equal(0);
+ expect(result).to.undefined;
+
+ result = doc.root.after({tagName: 'test'});
+
+ expect(spy.callCount).to.equal(0);
+ expect(result).to.undefined;
+
+ expect(doc.root.sameNode(root));
+ });
+ });
});
describe('Basic TextNode properties', function() {
@@ -578,6 +601,24 @@ describe('smartxml', function() {
expect(node.contents()[2].getText()).to.equal(' a cat!');
});
+ it('removes parent-describing sibling nodes of unwrapped node', function() {
+ var doc = getDocumentFromXML(''),
+ div = doc.root.contents()[0],
+ x = div.contents()[1];
+
+ doc.registerExtension({documentNode: {methods: {
+ object: {
+ describesParent: function() {
+ return this.getTagName() === 'x';
+ }
+ }
+ }}});
+
+ div.unwrapContent();
+ expect(doc.root.contents().length).to.equal(2);
+ expect(x.isInDocument()).to.be.false;
+ });
+
it('unwrap single element node from its parent', function() {
var doc = getDocumentFromXML('
'),
div = doc.root,
@@ -630,6 +671,32 @@ describe('smartxml', function() {
expect(wrapperContents[1].contents().length).to.equal(1);
expect(wrapperContents[1].contents()[0].getText()).to.equal('small');
});
+
+ it('keeps parent-describing nodes in place', function() {
+ var doc = getDocumentFromXML('Alice probably has a cat'),
+ root = doc.root,
+ x = root.contents()[1],
+ y = root.contents()[3];
+
+ doc.registerExtension({documentNode: {methods: {
+ object: {
+ describesParent: function() {
+ /* globals Node */
+ return this.nodeType === Node.ELEMENT_NODE && this.getTagName() === 'x';
+ }
+ }
+ }}});
+
+ root.wrapText({
+ _with: {tagName: 'span', attrs: {'attr1': 'value1'}},
+ offsetStart: 1,
+ offsetEnd: 4,
+ textNodeIdx: [0,4]
+ });
+
+ expect(x.parent().sameNode(root)).to.be.true;
+ expect(y.parent().getTagName()).to.equal('span');
+ });
});
describe('Wrapping Nodes', function() {
@@ -678,6 +745,31 @@ describe('smartxml', function() {
expect(headerChildren[0].sameNode(div2)).to.equal(true, 'first node wrapped');
expect(headerChildren[1].sameNode(div3)).to.equal(true, 'second node wrapped');
});
+
+ it('keeps parent-describing nodes in place', function() {
+ var section = elementNodeFromXML(''),
+ aliceText = section.contents()[0],
+ x = section.contents()[1],
+ lastDiv = section.contents()[2];
+
+ section.document.registerExtension({documentNode: {methods: {
+ object: {
+ describesParent: function() {
+ return this.nodeType === Node.ELEMENT_NODE && this.getTagName() === 'x';
+ }
+ }
+ }}});
+
+ section.document.wrapNodes({
+ node1: aliceText,
+ node2: lastDiv,
+ _with: {tagName: 'header'}
+ });
+
+ expect(x.parent().sameNode(section)).to.be.true;
+ expect(aliceText.parent().getTagName()).to.equal('header');
+ expect(lastDiv.parent().getTagName()).to.equal('header');
+ });
});
});
@@ -850,6 +942,28 @@ describe('smartxml', function() {
expect(contents[1].contents().length).to.equal(1);
expect(contents[1].contents()[0].getText()).to.equal('b');
});
+ it('removes across elements - 6', function() {
+ var doc = getDocumentFromXML('aaabbbccc
ddd
');
+ doc.deleteText({
+ from: {
+ node: getTextNode('aaa', doc),
+ offset: 1
+ },
+ to: {
+ node: getTextNode('ddd', doc),
+ offset: 1
+ }
+ }, {
+ error: function(e) {throw e;}
+ });
+
+ var contents = doc.root.contents();
+ expect(contents.length).to.equal(2);
+ expect(contents[0].contents().length).to.equal(1);
+ expect(contents[0].contents()[0].getText()).to.equal('a');
+ expect(contents[1].contents().length).to.equal(1);
+ expect(contents[1].contents()[0].getText()).to.equal('dd');
+ });
});
describe('Splitting text', function() {