X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/c601e8aff30efc0b4fd69765d5671e3ee88c4bf4..7bc06393365fdffe695cef6dd825edf4ce521919:/modules/documentCanvas/canvas/canvas.test3.js diff --git a/modules/documentCanvas/canvas/canvas.test3.js b/modules/documentCanvas/canvas/canvas.test3.js index ded28c2..477aca0 100644 --- a/modules/documentCanvas/canvas/canvas.test3.js +++ b/modules/documentCanvas/canvas/canvas.test3.js @@ -207,6 +207,39 @@ describe('Canvas', function() { }); }); + describe('accessing sibling parents of two elements', function() { + it('returns elements themself if they have direct common parent', function() { + var c = canvas.fromXML('
\ +
\ +
A
\ +
B
\ +
\ +
'), + section = c.doc(), + wrappingDiv = c.doc().children()[0], + divA = wrappingDiv.children()[0], + divB = wrappingDiv.children()[1]; + + var siblingParents = c.getSiblingParents({element1: divA, element2: divB}); + + expect(siblingParents.element1.sameNode(divA)).to.equal(true, 'divA'); + expect(siblingParents.element2.sameNode(divB)).to.equal(true, 'divB'); + }); + + it('returns sibling parents - example 1', function() { + var c = canvas.fromXML('
Alice has a cat
'), + section = c.doc(), + aliceText = section.children()[0], + span = section.children()[1], + spanText = span.children()[0]; + + var siblingParents = c.getSiblingParents({element1: aliceText, element2: spanText}); + + expect(siblingParents.element1.sameNode(aliceText)).to.equal(true, 'aliceText'); + expect(siblingParents.element2.sameNode(span)).to.equal(true, 'span'); + }); + }) + describe('free text handling', function() { it('sees free text', function() { var c = canvas.fromXML('
Alice has a cat
'), @@ -217,12 +250,24 @@ describe('Canvas', function() { expect(children[2]).to.be.instanceOf(documentElement.DocumentTextElement); }); }); - - describe('white characters handling', function() { - it('says empty element node has no children', function() { + + describe('empty nodes handling', function() { + it('says empty element node from XML source has one empty DocumentTextElement', function() { var c = canvas.fromXML('
'); - expect(c.doc().children().length).to.equal(0); + expect(c.doc().children()).to.have.length(1); + expect(c.doc().children()[0].getText()).to.equal(''); + }); + + it('allows creation of an empty element node', function() { + var c = canvas.fromXML('
'), + section = c.doc(), + header = section.append({tag: 'header'}); + expect(header.children()).to.have.length(0); }); + }); + + describe('white characters handling', function() { + it('says element node with one space has one DocumentTextElement', function() { var c = canvas.fromXML('
'); expect(c.doc().children().length).to.equal(1); @@ -297,22 +342,22 @@ describe('Canvas', function() { describe('Basic Element inserting', function() { it('can put new NodeElement at the end', function() { - var c = canvas.fromXML('
'), + var c = canvas.fromXML('
'), appended = c.doc().append({tag: 'header', klass: 'some.class'}), children = c.doc().children(); - expect(children.length).to.equal(1); - expect(children[0].sameNode(appended)).to.be.true; + expect(children.length).to.equal(2); + expect(children[1].sameNode(appended)).to.be.true; }); it('can put new TextElement at the end', function() { - var c = canvas.fromXML('
'), + var c = canvas.fromXML('
'), appended = c.doc().append({text: 'Alice'}), children = c.doc().children(); - expect(children.length).to.equal(1); - expect(children[0].sameNode(appended)).to.be.true; - expect(children[0].getText()).to.equal('Alice'); + expect(children.length).to.equal(2); + expect(children[1].sameNode(appended)).to.be.true; + expect(children[1].getText()).to.equal('Alice'); }); it('can put new NodeElement at the beginning', function() { @@ -425,6 +470,22 @@ describe('Canvas', function() { }); }); + describe('Removing elements', function() { + it('merges left and right DocumentTextElement sibling of a detached DocumentNodeElement', function() { + var c = canvas.fromXML('
Alice
has
a cat
'), + section = c.doc(), + div = section.children()[1]; + + div.detach(); + + var sectionChildren = section.children(), + textElement = sectionChildren[0]; + + expect(sectionChildren).to.have.length(1); + expect(textElement.getText()).to.equal('Alicea cat'); + }); + }); + describe('Splitting text', function() { it('splits DocumentTextElement\'s parent into two DocumentNodeElements of the same type', function() { @@ -603,10 +664,76 @@ describe('Canvas', function() { expect(wrapperChildren[2].getText()).to.equal(' cat'); }); + + it('wraps multiple sibling Elements', function() { + var c = canvas.fromXML('
Alice
has
a cat
'), + section = c.doc(), + aliceText = section.children()[0], + firstDiv = section.children()[1], + lastDiv = section.children()[section.children().length -1]; + + var returned = c.wrapElements({ + element1: aliceText, + element2: lastDiv, + _with: {tag: 'header'} + }); + + var sectionChildren = section.children(), + header = sectionChildren[0], + headerChildren = header.children(); + + expect(sectionChildren).to.have.length(1); + expect(header.sameNode(returned)).to.equal(true, 'wrapper returned'); + expect(headerChildren).to.have.length(3); + expect(headerChildren[0].sameNode(aliceText)).to.equal(true, 'first node wrapped'); + expect(headerChildren[1].sameNode(firstDiv)).to.equal(true, 'second node wrapped'); + expect(headerChildren[2].sameNode(lastDiv)).to.equal(true, 'third node wrapped'); + }); + it('wraps multiple sibling Elements - middle case', function() { + var c = canvas.fromXML('
div>
'), + section = c.doc(), + div1 = section.children()[0], + div2 = section.children()[1], + div3 = section.children()[2], + div4 = section.children()[3]; + + var returned = c.wrapElements({ + element1: div2, + element2: div3, + _with: {tag: 'header'} + }); + + var sectionChildren = section.children(), + header = sectionChildren[1], + headerChildren = header.children(); + + expect(sectionChildren).to.have.length(3); + expect(headerChildren).to.have.length(2); + expect(headerChildren[0].sameNode(div2)).to.equal(true, 'first node wrapped'); + expect(headerChildren[1].sameNode(div3)).to.equal(true, 'second node wrapped'); + }); }); - describe('unwrapping', function() { - it('unwraps DocumentTextElement from its parent DocumentNodeElement if it\'s its only child', function() { + describe('unwrapping DocumentTextElement from its parent DocumentNodeElement if it\'s its only child', function() { + it('unwraps text element from its parent and stays between its old parent siblings', function() { + var c = canvas.fromXML('
Alice
has
a cat
'), + section = c.doc(), + sectionChildren = section.children(), + divAlice = sectionChildren[0], + divHas = sectionChildren[1], + textHas = divHas.children()[0], + divCat = sectionChildren[2]; + + var newTextContainer = textHas.unwrap(), + sectionChildren = section.children(); + + expect(sectionChildren[0].sameNode(divAlice)).to.equal(true, 'divAlice ok'); + expect(newTextContainer.sameNode(section)).to.equal(true, 'unwrap returns new text parent DocumentNodeElement'); + expect(sectionChildren[1].getText()).to.equal('has'); + expect(sectionChildren[2].sameNode(divCat)).to.equal(true, 'divCat ok'); + + }); + it('unwraps and join with its old parent adjacent text elements ', function() { var c = canvas.fromXML('
Alice has a cat
'), section = c.doc(), text = section.children()[1].children()[0]; @@ -616,7 +743,20 @@ describe('Canvas', function() { expect(section.children().length).to.equal(1, 'section has one child'); expect(section.children()[0].getText()).to.equal('Alice has a cat'); expect(newTextContainer.sameNode(c.doc())).to.equal(true, 'unwrap returns new text parent DocumentNodeElement'); - }) + }); + + it('unwraps text element from its parent - first child case', function() { + var c = canvas.fromXML('
Sometext
'), + section = c.doc(), + span = section.children()[0]; + + span.children()[0].unwrap(); + + var sectionChildren = section.children(); + + expect(sectionChildren).to.have.length(1); + expect(sectionChildren[0].getText()).to.equal('Sometext'); + }); }); }); @@ -1222,8 +1362,9 @@ describe('Canvas', function() { it('keeps white space between XML nodes - inline case', function() { var xmlIn = '
\n\n\n\n\n\n\n\n\n
', - c = canvas.fromXML(xmlIn), - xmlOut = c.toXML(); + c = canvas.fromXML(xmlIn); + + var xmlOut = c.toXML(); var partsIn = xmlIn.split('\n\n\n'), partsOut = xmlOut.split('\n\n\n');