X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/b5d516652ee4cc58a8a0636074456b344126f7d7..a8dddd8aadd5c5c56c7a91d833bc770b42d0ccdc:/src/smartxml/smartxml.test.js diff --git a/src/smartxml/smartxml.test.js b/src/smartxml/smartxml.test.js index 0883ba7..542237a 100644 --- a/src/smartxml/smartxml.test.js +++ b/src/smartxml/smartxml.test.js @@ -458,6 +458,68 @@ describe('smartxml', function() { expect(node1.contents()[1].sameNode(node2)).to.be.true; }); + describe('adding text nodes', function() { + it('merges text nodes on append', function() { + var doc = getDocumentFromXML('text1'), + returned; + returned = doc.root.append({text: 'text2'}); + expect(doc.root.contents().length).to.equal(1); + expect(returned.sameNode(doc.root.contents()[0])).to.equal(true, 'modified node returned'); + expect(doc.root.contents()[0].getText()).to.equal('text1text2'); + }); + + it('merges text nodes on prepend', function() { + var doc = getDocumentFromXML('text1'), + returned; + returned = doc.root.prepend({text: 'text2'}); + expect(doc.root.contents().length).to.equal(1); + expect(returned.sameNode(doc.root.contents()[0])).to.equal(true, 'modified node returned'); + expect(doc.root.contents()[0].getText()).to.equal('text2text1'); + }); + + it('merges text nodes on before text node', function() { + var doc = getDocumentFromXML('text1'), + textNode = doc.root.contents()[0], + returned; + returned = textNode.before({text: 'text2'}); + expect(doc.root.contents().length).to.equal(1); + expect(returned.sameNode(doc.root.contents()[0])).to.equal(true, 'modified node returned'); + expect(doc.root.contents()[0].getText()).to.equal('text2text1'); + }); + + it('merges text nodes on after text node', function() { + var doc = getDocumentFromXML('text1'), + textNode = doc.root.contents()[0], + returned; + returned = textNode.after({text: 'text2'}); + expect(doc.root.contents().length).to.equal(1); + expect(returned.sameNode(doc.root.contents()[0])).to.equal(true, 'modified node returned'); + expect(doc.root.contents()[0].getText()).to.equal('text1text2'); + }); + + it('merges text nodes on before element node', function() { + var doc = getDocumentFromXML('text1
'), + textNode = doc.root.contents()[0], + div = doc.root.contents()[1], + returned; + returned = div.before({text: 'text2'}); + expect(doc.root.contents().length).to.equal(2); + expect(returned.sameNode(doc.root.contents()[0])).to.equal(true, 'modified node returned'); + expect(textNode.getText()).to.equal('text1text2'); + }); + + it('merges text nodes on after element node', function() { + var doc = getDocumentFromXML('
text1
'), + textNode = doc.root.contents()[1], + div = doc.root.contents()[0], + returned; + returned = div.after({text: 'text2'}); + expect(doc.root.contents().length).to.equal(2); + expect(returned.sameNode(doc.root.contents()[1])).to.equal(true, 'modified node returned'); + expect(textNode.getText()).to.equal('text2text1'); + }); + }); + it('wraps element node with another element node', function() { var node = elementNodeFromXML('
'), wrapper = elementNodeFromXML(''); @@ -1139,6 +1201,7 @@ describe('smartxml', function() { var sampleMethod = function(val) { this._$.attr('x', val); + this.triggerChangeEvent(); }; var transformations = { @@ -1235,10 +1298,12 @@ describe('smartxml', function() { doc.registerExtension({elementNode: {transformations: { nested: function(v) { this._$.attr('innerAttr', v); + this.triggerChangeEvent(); }, outer: function(v) { this.nested(v); this._$.attr('outerAttr', v); + this.triggerChangeEvent(); } }}}); @@ -1270,6 +1335,20 @@ describe('smartxml', function() { }); + it('ignores transformation if document didn\'t emit change event', function() { + var doc = getDocumentFromXML('
'); + + doc.registerExtension({elementNode: {transformations: { + test: function() { + // empty + } + }}}); + + doc.root.test(); + expect(doc.undoStack.length).to.equal(0); + + }); + describe('Transactions', function() { it('allows to undo/redo series of transformations at once', function() { var doc = getDocumentFromXML('
'); @@ -1314,14 +1393,17 @@ describe('smartxml', function() { elementNode: {transformations: { unaware: function(v) { this.setAttr('unware', v); + this.triggerChangeEvent(); }, smart: { impl: function(t, v) { t.oldVal = this.getAttr('smart'); this.setAttr('smart', v); + this.triggerChangeEvent(); }, undo: function(t) { this.setAttr('smart', t.oldVal); + this.triggerChangeEvent(); } } }}