X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/2a317c49f0b5110cc3717878a4f988aba8c63c5e..90a4709555ba28d2175c7a359d538e7775f9bf64:/src/smartxml/smartxml.test.js diff --git a/src/smartxml/smartxml.test.js b/src/smartxml/smartxml.test.js index c7cb6ad..08598aa 100644 --- a/src/smartxml/smartxml.test.js +++ b/src/smartxml/smartxml.test.js @@ -769,7 +769,9 @@ describe('smartxml', function() { c = b.contents()[0]; var parents = c.parents(); - expect(parents).to.eql([b,a]); + // @@ + expect(parents[0].sameNode(b)).to.be.true; + expect(parents[1].sameNode(a)).to.be.true; }); }); @@ -827,63 +829,228 @@ describe('smartxml', function() { }); }); - describe('Undo/redo', function() { + describe('Extension API', function() { + var doc, extension, elementNode, textNode, testClassNode; - it('does work', function() { - var doc = getDocumentFromXML('
Alice
'), - span = doc.root.contents()[0]; + beforeEach(function() { + doc = getDocumentFromXML('
Alice
'); + elementNode = doc.root; + textNode = doc.root.contents()[0]; + extension = {}; + + expect(elementNode.testTransformation).to.be.undefined; + expect(textNode.testTransformation).to.be.undefined; + expect(doc.testTransformation).to.be.undefined; + + expect(doc.testMethod).to.be.undefined; + expect(elementNode.testMethod).to.be.undefined; + expect(textNode.testMethod).to.be.undefined; + expect(elementNode.elementTestMethod).to.be.undefined; + expect(textNode.textTestMethod).to.be.undefined; + }); + + it('allows adding method to a document', function() { + extension = {document: {methods: { + testMethod: function() { return this; } + }}}; - span.transform('smartxml.detach'); + doc.registerExtension(extension); + expect(doc.testMethod()).to.equal(doc, 'context is set to a document instance'); + }); + it('allows adding transformation to a document', function() { + extension = {document: {transformations: { + testTransformation: function() { return this; }, + testTransformation2: {impl: function() { return this;}} + }}}; - doc.undo(); + doc.registerExtension(extension); + expect(doc.testTransformation()).to.equal(doc, 'context is set to a document instance'); + expect(doc.testTransformation2()).to.equal(doc, 'context is set to a document instance'); + }); - expect(doc.root.contents()).to.have.length(1); - expect(doc.root.contents()[0].getTagName()).to.equal('span'); - expect(doc.root.contents()[0].contents()[0].getText()).to.equal('Alice'); + it('allows adding method to a DocumentNode instance', function() { + extension = { + documentNode: { + methods: { + testMethod: function() { return this; } + } + }, + textNode: { + methods: { + textTestMethod: function() { return this; } + } + }, + elementNode: { + methods: { + elementTestMethod: function() { return this; } + } + } + }; + + doc.registerExtension(extension); + + /* refresh */ + elementNode = doc.root; + textNode = doc.root.contents()[0]; + + expect(elementNode.testMethod().sameNode(elementNode)).to.equal(true, 'context is set to a node instance'); + expect(textNode.testMethod().sameNode(textNode)).to.equal(true, 'context is set to a node instance'); + + expect(elementNode.elementTestMethod().sameNode(elementNode)).to.be.true; + expect(elementNode.textTestMethod).to.be.undefined; + + expect(textNode.textTestMethod().sameNode(textNode)).to.be.true; + expect(textNode.elementTestMethod).to.be.undefined; + }); - doc.redo(); - expect(doc.root.contents()).to.have.length(0); + it('allows adding transformation to a DocumentNode', function() { + extension = { + documentNode: { + transformations: { + testTransformation: function() { return this; }, + testTransformation2: {impl: function() { return this;}} + } + }, + textNode: { + transformations: { + textTestTransformation: function() { return this; } + } + }, + elementNode: { + transformations: { + elementTestTransformation: function() { return this; } + } + } + }; + + doc.registerExtension(extension); - doc.undo(); - expect(doc.root.contents()).to.have.length(1); - expect(doc.root.contents()[0].getTagName()).to.equal('span'); - expect(doc.root.contents()[0].contents()[0].getText()).to.equal('Alice'); + /* refresh */ + elementNode = doc.root; + textNode = doc.root.contents()[0]; + + expect(elementNode.testTransformation().sameNode(elementNode)).to.equal(true, '1'); + expect(elementNode.testTransformation2().sameNode(elementNode)).to.equal(true, '2'); + expect(textNode.testTransformation().sameNode(textNode)).to.equal(true, '3'); + expect(textNode.testTransformation2().sameNode(textNode)).to.equal(true, '4'); + expect(elementNode.elementTestTransformation().sameNode(elementNode)).to.be.true; + expect(elementNode.textTestTransformation).to.be.undefined; + + expect(textNode.textTestTransformation().sameNode(textNode)).to.be.true; + expect(textNode.elementTestTransfomation).to.be.undefined; }); - it('does work - merged text nodes case', function() { - var doc = getDocumentFromXML('
Alice has a cat.
'), - span = doc.root.contents()[1]; - span.transform('smartxml.detach'); + it('allows text/element node methods and transformations to access node and transormations on document node', function() { + + var doc = getDocumentFromXML('
text
'); + + doc.registerExtension({ + documentNode: { + methods: { + test: function() { + return 'super'; + } + }, + transformations: { + testT: function() { + return 'super_trans'; + } + } + }, + elementNode: { + methods: { + test: function() { + return 'element_sub_' + this.__super__.test(); + } + }, + transformations: { + testT: function() { + return 'element_trans_sub_' + this.__super__.testT(); + } + } + }, + textNode: { + methods: { + test: function() { + return 'text_sub_' + this.__super__.test(); + } + }, + transformations: { + testT: function() { + return 'text_trans_sub_' + this.__super__.testT(); + } + } + } + }); + var textNode = doc.root.contents()[0]; - doc.undo(); + expect(doc.root.test()).to.equal('element_sub_super'); + expect(textNode.test()).to.equal('text_sub_super'); + expect(doc.root.testT()).to.equal('element_trans_sub_super_trans'); + expect(textNode.testT()).to.equal('text_trans_sub_super_trans'); + }); + }); - expect(doc.root.contents().length).to.equal(3); - //console.log(doc.toXML()); - expect(doc.root.contents()[1].contents()[0].getText()).to.equal('has'); + // describe('Undo/redo', function() { - }); - it('dbg - don not store nodes in tranformation state!', function() { - var doc = getDocumentFromXML('
'), - a = doc.root.contents()[0], - b = doc.root.contents()[1]; + // it('does work', function() { + // var doc = getDocumentFromXML('
Alice
'), + // span = doc.root.contents()[0]; - a.transform('smartxml.detach'); - b.transform('smartxml.detach'); - doc.undo(); - doc.undo(); - expect(doc.root.contents().length).to.equal(2); - expect(doc.root.contents()[0].getTagName()).to.equal('a'); - expect(doc.root.contents()[1].getTagName()).to.equal('b'); + // span.transform('smartxml.detach'); - doc.redo(); - doc.redo(); - expect(doc.root.contents().length).to.equal(0); - }); - }); + // doc.undo(); + + // expect(doc.root.contents()).to.have.length(1); + // expect(doc.root.contents()[0].getTagName()).to.equal('span'); + // expect(doc.root.contents()[0].contents()[0].getText()).to.equal('Alice'); + + // doc.redo(); + // expect(doc.root.contents()).to.have.length(0); + + // doc.undo(); + // expect(doc.root.contents()).to.have.length(1); + // expect(doc.root.contents()[0].getTagName()).to.equal('span'); + // expect(doc.root.contents()[0].contents()[0].getText()).to.equal('Alice'); + + // }); + // it('does work - merged text nodes case', function() { + // var doc = getDocumentFromXML('
Alice has a cat.
'), + // span = doc.root.contents()[1]; + + // span.transform('smartxml.detach'); + + + // doc.undo(); + + // expect(doc.root.contents().length).to.equal(3); + // //console.log(doc.toXML()); + // expect(doc.root.contents()[1].contents()[0].getText()).to.equal('has'); + + // }); + // it('dbg - don not store nodes in tranformation state!', function() { + // var doc = getDocumentFromXML('
'), + // a = doc.root.contents()[0], + // b = doc.root.contents()[1]; + + // a.transform('smartxml.detach'); + // b.transform('smartxml.detach'); + // doc.undo(); + // doc.undo(); + // expect(doc.root.contents().length).to.equal(2); + // expect(doc.root.contents()[0].getTagName()).to.equal('a'); + // expect(doc.root.contents()[1].getTagName()).to.equal('b'); + + // doc.redo(); + // doc.redo(); + // expect(doc.root.contents().length).to.equal(0); + + // }); + // }); });