X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/8f3efc2235f836dd2b624d569d97a7ae0dad77ff..9a86d3896e80d26848248760feb159dedd75de35:/src/editor/plugins/core/core.test.js diff --git a/src/editor/plugins/core/core.test.js b/src/editor/plugins/core/core.test.js index 940e22e..0ed38eb 100644 --- a/src/editor/plugins/core/core.test.js +++ b/src/editor/plugins/core/core.test.js @@ -14,6 +14,40 @@ var getDocumentFromXML = function(xml, options) { return doc; }; +var getTextNodes = function(text, doc) { + /* globals Node */ + var toret = []; + var search = function(node) { + node.contents().forEach(function(node) { + if(node.nodeType === Node.TEXT_NODE) { + if(node.getText() === text) { + toret.push(node); + } + } else { + search(node); + } + }); + }; + search(doc.root); + return toret; +}; + +var getTextNode = function(text, doc) { + var nodes = getTextNodes(text, doc), + error; + if(nodes.length === 0) { + error = 'Text not found'; + } else if(nodes.length > 1) { + error = 'Text not unique'; + } else if(nodes[0].getText() !== text) { + error = 'I was trying to cheat your test :('; + } + if(error) { + throw new Error(error); + } + return nodes[0]; +}; + describe('Document extensions', function() { describe('break content', function() { @@ -53,6 +87,67 @@ describe('Document extensions', function() { expect(result.emptyText.getText()).to.equal(''); }); }); + + describe('merging with adjacent content', function() { + + describe('when text preceded by element', function() { + describe('when text followed by element', function() { + it('appends text to the preceding element, following elements stays in place', function() { + var doc = getDocumentFromXML('
AtextB
'), + text = getTextNode('text', doc); + + text.mergeContentUp(); + var contents = doc.root.contents(); + + expect(contents.length).to.equal(2); + expect(contents[0].getTagName()).to.equal('a'); + expect(contents[0].contents()[0].getText()).to.equal('Atext'); + expect(contents[1].getTagName()).to.equal('b'); + }); + }); + describe('when text is a last child', function() { + it('appends text to the preceding element', function() { + var doc = getDocumentFromXML('
Atext
'), + text = getTextNode('text', doc); + + text.mergeContentUp(); + var contents = doc.root.contents(); + + expect(contents.length).to.equal(1); + expect(contents[0].getTagName()).to.equal('a'); + expect(contents[0].contents()[0].getText()).to.equal('Atext'); + }); + }); + }); + + describe('when text is a first child', function() { + describe('when text followed by element', function() { + it('appends text and its siblings to the parent preceding element', function() { + var doc = getDocumentFromXML('
B
textA
'), + text = getTextNode('text', doc); + + text.mergeContentUp(); + var contents = doc.root.contents(); + + expect(contents.length).to.equal(3); + expect(contents[0].getTagName()).to.equal('b'); + expect(contents[1].getText()).to.equal('text'); + expect(contents[2].getTagName()).to.equal('a'); + }); + it('appends text and its siblings after the parent preceding text', function() { + var doc = getDocumentFromXML('
B
textA
'), + text = getTextNode('text', doc); + + text.mergeContentUp(); + var contents = doc.root.contents(); + + expect(contents.length).to.equal(2); + expect(contents[0].getText()).to.equal('Btext'); + expect(contents[1].getTagName()).to.equal('a'); + }); + }); + }); + }); });