X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/0bea7025f60aa5cc2ed89eed72da0d616f3574ef..75e12ca1b25cdcdb457ee2a159a0bf4287841c63:/src/editor/modules/documentCanvas/canvas/canvas.test.js diff --git a/src/editor/modules/documentCanvas/canvas/canvas.test.js b/src/editor/modules/documentCanvas/canvas/canvas.test.js index 8e3c1c8..028c767 100644 --- a/src/editor/modules/documentCanvas/canvas/canvas.test.js +++ b/src/editor/modules/documentCanvas/canvas/canvas.test.js @@ -4,16 +4,17 @@ define([ 'libs/sinon', 'modules/documentCanvas/canvas/canvas', 'modules/documentCanvas/canvas/utils', +'modules/documentCanvas/canvas/documentElement', 'wlxml/wlxml', -], function($, chai, sinon, canvas, utils, wlxml) { +], function($, chai, sinon, canvas, utils, documentElement, wlxml) { 'use strict'; /* global describe, it, beforeEach, afterEach */ var expect = chai.expect; -var getCanvasFromXML = function(xml) { - return canvas.fromXMLDocument(getDocumentFromXML(xml), null); +var getCanvasFromXML = function(xml, elements) { + return canvas.fromXMLDocument(getDocumentFromXML(xml), elements); }; var getDocumentFromXML = function(xml) { @@ -35,7 +36,7 @@ describe('wtf', function() { txtNode.wrapWith({tagName: 'header', start: 1, end: 2}); expect(c.doc().children().length).to.equal(3); }); -}) +}); describe('new Canvas', function() { it('abc', function() { @@ -81,7 +82,6 @@ describe('Listening to document changes', function() { b = doc.root.contents()[1], c = canvas.fromXMLDocument(doc); - debugger; a.before(b); var sectionChildren = c.doc().children(); expect(sectionChildren.length).to.equal(2); @@ -125,7 +125,7 @@ describe('Listening to document changes', function() { aTextElement; canvas.fromXMLDocument(doc); - aTextElement = utils.findCanvasElementInParent(aTextNode, aTextNode.parent()); // TODO: This really should be easier... + aTextElement = utils.getElementForNode(aTextNode); aTextElement.setText(''); @@ -208,16 +208,42 @@ describe('Default document changes handling', function() { }); it('handles moved node', function() { - var doc = getDocumentFromXML('
'), - a = doc.root.contents()[0], - b = doc.root.contents()[1], - c = canvas.fromXMLDocument(doc); + var doc = getDocumentFromXML('
'), + c = doc.root.contents()[0], + a = doc.root.contents()[1], + b = doc.root.contents()[2], + cv = canvas.fromXMLDocument(doc); + + a.document.transaction(function() { + a.before(b); // => cab + b.after(c); // => bca + }, { + error: function(e) {throw e;} + }); - a.before(b); + var sectionChildren = cv.doc().children(); + expect(sectionChildren.length).to.equal(3); + expect(sectionChildren[0].wlxmlNode.getTagName()).to.equal('b'); + expect(sectionChildren[1].wlxmlNode.getTagName()).to.equal('c'); + expect(sectionChildren[2].wlxmlNode.getTagName()).to.equal('a'); + }); + + it('handles moving text node to another parent', function() { + var c = getCanvasFromXML('
Alice
has
a cat.
'), + doc = c.wlxmlDocument, + text = doc.root.contents()[0], + div = doc.root.contents()[1]; + + div.append(text); + var sectionChildren = c.doc().children(); expect(sectionChildren.length).to.equal(2); - expect(sectionChildren[0].wlxmlNode.getTagName()).to.equal('b'); - expect(sectionChildren[1].wlxmlNode.getTagName()).to.equal('a'); + expect(sectionChildren[0].wlxmlNode.sameNode(div)).to.equal(true); + expect(sectionChildren[1].getText()).to.equal('a cat.'); + + expect(div.contents().length).to.equal(2); + expect(div.contents()[0].getTagName()).to.equal('span'); + expect(div.contents()[1].getText()).to.equal('Alice'); }); it('handles change in a text node', function() { @@ -225,48 +251,76 @@ describe('Default document changes handling', function() { c.wlxmlDocument.root.contents()[0].setText('cat'); expect(c.doc().children()[0].getText()).to.equal('cat'); }); + + describe('Regression tests', function() { + it('handles moving node after its next neighbour correctly', function() { + var c = getCanvasFromXML('
'), + doc = c.wlxmlDocument, + a = doc.root.contents()[0], + b = doc.root.contents()[1]; + b.after(a); + var sectionChildren = c.doc().children(); + expect(sectionChildren[0].wlxmlNode.getTagName()).to.equal('b'); + expect(sectionChildren[1].wlxmlNode.getTagName()).to.equal('a'); + }); + }); }); describe('Custom elements based on wlxml class attribute', function() { it('allows custom rendering', function() { - var c = getCanvasFromXML('
', { - testClass: { + var prototype = $.extend({}, documentElement.DocumentNodeElement.prototype, { init: function() { - debugger; - this.dom.append(''); + this._container().append(''); } - } - }); + }), + c = getCanvasFromXML('
', [ + {tag: 'div', klass: 'testClass', prototype: prototype} + ]); + expect(c.doc().children()[0]._container().children('test').length).to.equal(1); // @! }); it('allows handling changes to internal structure of rendered node', function() { - var c = getCanvasFromXML('
', { - testClass: { + var prototype = $.extend({}, documentElement.DocumentNodeElement.prototype, { init: function() { this.header = $('

'); - this.dom.append(this.header); + this._container().append(this.header); this.refresh2(); }, refresh2: function() { - this.header.text(this.el.wlxmlNode.contents().length); + this.header.text(this.wlxmlNode.contents().length); }, onNodeAdded: function(event) { void(event); this.refresh2(); - } - } + }, + onNodeTextChange: function(event) { + this.header.text(event.meta.node.getText()); + }, + children: function() { return []; } }); + var c = getCanvasFromXML('
', [ + {tag: 'div', klass: 'testClass', prototype: prototype} + ]); + var node = c.wlxmlDocument.root.contents()[0], element = node.getData('canvasElement'); - var header = element.dom().find('h1'); + var header = element.dom.find('h1'); expect(header.text()).to.equal('1', 'just '); node.append({tagName: 'div'}); expect(header.text()).to.equal('2', 'added div'); + + var textNode = node.append({text: 'test'}); + + expect(header.text()).to.equal('3', 'added text node'); + + textNode.setText('test2'); + + expect(header.text()).to.equal('test2', 'text node change handled'); }); describe('Handling unknown class', function() { @@ -302,7 +356,7 @@ describe('Cursor', function() { it('returns position when browser selection collapsed', function() { var c = getCanvasFromXML('
Alice has a cat
'), - dom = c.doc().dom(), + dom = c.doc().dom, text = findTextNode(dom, 'Alice has a cat'); expect(text.nodeType).to.equal(Node.TEXT_NODE, 'correct node selected'); @@ -336,7 +390,7 @@ describe('Cursor', function() { it('recognizes selection start and end on document order', function() { var c = getCanvasFromXML('
Alicehas a cat
abc...cde
'), - dom = c.doc().dom(), + dom = c.doc().dom, textFirst = findTextNode(dom, 'Alice'), textSecond = findTextNode(dom, 'has a cat'), textAbc = findTextNode(dom, 'abc'), @@ -435,9 +489,9 @@ describe('Cursor', function() { }); }); - it('returns boundries of selection when browser selection not collapsed', function() { + it('returns boundaries of selection when browser selection not collapsed', function() { var c = getCanvasFromXML('
Alice has a big cat
'), - dom = c.doc().dom(), + dom = c.doc().dom, text = { alice: findTextNode(dom, 'Alice '), has: findTextNode(dom, 'has'), @@ -467,9 +521,9 @@ describe('Cursor', function() { }); }); - it('recognizes when browser selection boundries lies in sibling DocumentTextElements', function() { + it('recognizes when browser selection boundaries lies in sibling DocumentTextElements', function() { var c = getCanvasFromXML('
Alice has a big cat
'), - dom = c.doc().dom(), + dom = c.doc().dom, text = { alice: findTextNode(dom, 'Alice '), has: findTextNode(dom, 'has'),