X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/676e34c6c2ce383f61cb4b20fec74aaba0dcbdbd..9156bcda05de78865d7f2ef202824dd2a1a03ea1:/src/smartxml/smartxml.test.js diff --git a/src/smartxml/smartxml.test.js b/src/smartxml/smartxml.test.js index 31d854a..29c4244 100644 --- a/src/smartxml/smartxml.test.js +++ b/src/smartxml/smartxml.test.js @@ -207,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'); + }); + }); }); }); @@ -220,6 +258,16 @@ describe('smartxml', function() { expect(node1.contents()[0].sameNode(node2)).to.be.true; }); + it('prepends element node to another element node', function() { + var node1 = elementNodeFromParams({tag: 'div'}), + node2 = elementNodeFromParams({tag: 'a'}), + node3 = elementNodeFromParams({tag: 'p'}); + node1.prepend(node2); + node1.prepend(node3); + expect(node1.contents()[0].sameNode(node3)).to.be.true; + expect(node1.contents()[1].sameNode(node2)).to.be.true; + }); + it('wraps element node with another element node', function() { var node = elementNodeFromXML('
'), wrapper = elementNodeFromXML(''); @@ -240,6 +288,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() {