X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/58425daa1aa7e717e92eaec170262de31ed47bc0..5625717737822065383ef29c6b5709e9984c3508:/src/smartxml/smartxml.test.js diff --git a/src/smartxml/smartxml.test.js b/src/smartxml/smartxml.test.js index 58156c2..7880017 100644 --- a/src/smartxml/smartxml.test.js +++ b/src/smartxml/smartxml.test.js @@ -179,6 +179,20 @@ describe('smartxml', function() { expect(event.type).to.equal('nodeTextChange'); }); + it('puts NodeElement after itself', function() { + var node = elementNodeFromXML('
Alice
'), + textNode = node.contents()[0], + returned = textNode.after({tagName:'div'}); + expect(returned.sameNode(node.contents()[1])).to.be.true; + }); + + it('puts NodeElement before itself', function() { + var node = elementNodeFromXML('
Alice
'), + textNode = node.contents()[0], + returned = textNode.before({tagName:'div'}); + expect(returned.sameNode(node.contents()[0])).to.be.true; + }); + describe('Wrapping TextNode contents', function() { it('wraps DocumentTextElement', function() { @@ -193,6 +207,44 @@ describe('smartxml', function() { expect(returned.sameNode(parent2)).to.be.equal(true, 'wrapper has a correct parent'); expect(returned.getTagName()).to.equal('header'); }); + + describe('wrapping part of DocumentTextElement', function() { + [{start: 5, end: 12}, {start: 12, end: 5}].forEach(function(offsets) { + it('wraps in the middle ' + offsets.start + '/' + offsets.end, function() { + var node = elementNodeFromXML('
Alice has a cat
'), + textNode = node.contents()[0]; + + var returned = textNode.wrapWith({tagName: 'header', attrs: {'attr1': 'value1'}, start: offsets.start, end: offsets.end}), + contents = node.contents(); + + expect(contents.length).to.equal(3); + + expect(contents[0].nodeType).to.be.equal(Node.TEXT_NODE, 'first node is text node'); + expect(contents[0].getText()).to.equal('Alice'); + + expect(contents[1].sameNode(returned)).to.be.true; + expect(returned.getTagName()).to.equal('header'); + expect(returned.getAttr('attr1')).to.equal('value1'); + expect(contents[1].contents().length).to.equal(1, 'wrapper has one node inside'); + expect(contents[1].contents()[0].getText()).to.equal(' has a '); + + expect(contents[2].nodeType).to.be.equal(Node.TEXT_NODE, 'third node is text node'); + expect(contents[2].getText()).to.equal('cat'); + }); + }); + + it('wraps whole text inside DocumentTextElement if offsets span entire content', function() { + var node = elementNodeFromXML('
Alice has a cat
'), + textNode = node.contents()[0]; + + textNode.wrapWith({tagName: 'header', start: 0, end: 15}); + + var contents = node.contents(); + expect(contents.length).to.equal(1); + expect(contents[0].getTagName()).to.equal('header'); + expect(contents[0].contents()[0].getText()).to.equal('Alice has a cat'); + }); + }); }); }); @@ -226,6 +278,32 @@ describe('smartxml', function() { expect(node.contents()[2].getText()).to.equal(' a cat!'); }); + describe('Wrapping text', function() { + it('wraps text spanning multiple sibling TextNodes', function() { + var section = elementNodeFromXML('
Alice has a small cat
'), + wrapper = section.wrapText({ + _with: {tag: 'span', attrs: {'attr1': 'value1'}}, + offsetStart: 6, + offsetEnd: 4, + textNodeIdx: [0,2] + }); + + expect(section.contents().length).to.equal(2); + expect(section.contents()[0].nodeType).to.equal(Node.TEXT_NODE); + expect(section.contents()[0].getText()).to.equal('Alice '); + + var wrapper2 = section.contents()[1]; + expect(wrapper2.sameNode(wrapper)).to.be.true; + + var wrapperContents = wrapper.contents(); + expect(wrapperContents.length).to.equal(3); + expect(wrapperContents[0].getText()).to.equal('has a '); + + expect(wrapperContents[1].nodeType).to.equal(Node.ELEMENT_NODE); + expect(wrapperContents[1].contents().length).to.equal(1); + expect(wrapperContents[1].contents()[0].getText()).to.equal('small'); + }); + }); }); describe('Serializing document to WLXML', function() {