X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/86ecf0f60182c63eecb45c7cc836fe5a050d8d8a..72006ca5628befdc32bb1cd31002f22c4a7c8bca:/modules/documentCanvas/canvas/canvas.test3.js
diff --git a/modules/documentCanvas/canvas/canvas.test3.js b/modules/documentCanvas/canvas/canvas.test3.js
index a92ddb3..56f8ee6 100644
--- a/modules/documentCanvas/canvas/canvas.test3.js
+++ b/modules/documentCanvas/canvas/canvas.test3.js
@@ -28,6 +28,15 @@ describe('Canvas', function() {
child = root.children()[1];
expect(root.childIndex(child)).to.equal(1);
});
+
+ describe('DocumentTextElement can have its content set', function() {
+ var c = canvas.fromXML(''),
+ root = c.doc(),
+ text = root.children()[0];
+
+ text.setText('a cat');
+ expect(root.children()[0].getText()).to.equal('a cat');
+ });
});
});
@@ -123,6 +132,27 @@ describe('Canvas', function() {
expect(children[idx]).to.be.instanceOf(documentElement.DocumentNodeElement);
});
});
+
+ it('trims white space from the beginning and the end of the block elements', function() {
+ var c = canvas.fromXML('');
+ expect(c.doc().children()[0].getText()).to.equal('Alice ');
+ expect(c.doc().children()[2].getText()).to.equal(' a cat');
+ });
+
+ it('normalizes string of white characters to one space at the inline element boundries', function() {
+ var c = canvas.fromXML(' Alice has a cat ');
+ expect(c.doc().children()[0].getText()).to.equal(' Alice has a cat ');
+ });
+
+ it('normalizes string of white characters to one space before inline element', function() {
+ var c = canvas.fromXML('
Alice has a cat
');
+ expect(c.doc().children()[0].getText()).to.equal('Alice has ');
+ });
+
+ it('normalizes string of white characters to one space after inline element', function() {
+ var c = canvas.fromXML('Alice has a cat
');
+ expect(c.doc().children()[2].getText()).to.equal(' cat');
+ });
});
});
@@ -138,6 +168,16 @@ describe('Canvas', function() {
expect(children[0].sameNode(appended));
});
+ it('can put new TextElement at the end', function() {
+ 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));
+ expect(children[0].getText()).to.equal('Alice');
+ });
+
it('can put new NodeElement after another NodeElement', function() {
var c = canvas.fromXML(''),
div = c.doc().children()[0],
@@ -146,6 +186,93 @@ describe('Canvas', function() {
expect(children.length).to.equal(2);
expect(children[1].sameNode(added));
});
+
+ it('can put new Nodeelement before another element', function() {
+ var c = canvas.fromXML(''),
+ div = c.doc().children()[0],
+ added = div.before({tag: 'header', klass: 'some.class'}),
+ children = c.doc().children();
+ expect(children.length).to.equal(2);
+ expect(children[0].sameNode(added));
+ });
+
+ it('can put new DocumentNodeElement after DocumentTextElement', function() {
+ var c = canvas.fromXML(''),
+ text = c.doc().children()[0],
+ added = text.after({tag: 'p'}),
+ children = c.doc().children();
+
+ expect(children.length).to.equal(2);
+ expect(children[0]).to.be.instanceOf(documentElement.DocumentTextElement);
+ expect(children[0].getText()).to.equal('Alice');
+ expect(children[1]).to.be.instanceOf(documentElement.DocumentNodeElement);
+ expect(children[1].sameNode(added)).to.be.true;
+ });
+ it('can put new DocumentNodeElement before DocumentTextElement', function() {
+ var c = canvas.fromXML(''),
+ text = c.doc().children()[0],
+ added = text.before({tag: 'p'}),
+ children = c.doc().children();
+
+ expect(children.length).to.equal(2);
+ expect(children[0]).to.be.instanceOf(documentElement.DocumentNodeElement);
+ expect(children[0].sameNode(added)).to.be.true;
+ expect(children[1]).to.be.instanceOf(documentElement.DocumentTextElement);
+ expect(children[1].getText()).to.equal('Alice');
+ });
+ });
+
+ describe('Splitting text', function() {
+
+ it('splits DocumentTextElement\'s parent into two DocumentNodeElements of the same type', function() {
+ var c = canvas.fromXML(''),
+ section = c.doc(),
+ text = section.children()[0].children()[0];
+
+ text.split({offset: 5});
+ expect(section.children().length).to.equal(2, 'section has two children');
+
+ var header1 = section.children()[0];
+ var header2 = section.children()[1];
+
+ expect(header1.wlxmlTag).to.equal('header', 'first section child represents wlxml header');
+ expect(header1.children().length).to.equal(1, 'first header has one text child');
+ expect(header1.children()[0].getText()).to.equal('Some ', 'first header has correct content');
+ expect(header2.wlxmlTag).to.equal('header', 'second section child represents wlxml header');
+ expect(header2.children().length).to.equal(1, 'second header has one text child');
+ expect(header2.children()[0].getText()).to.equal('header', 'second header has correct content');
+ });
+
+ it('keeps DocumentTextElement\'s parent\'s children elements intact', function() {
+ var c = canvas.fromXML('\
+ \
+ \
+ A fancy and nice header\
+ \
+ '),
+ section = c.doc(),
+ header = section.children()[0],
+ textAnd = header.children()[2];
+
+ textAnd.split({offset: 2});
+
+ var sectionChildren = section.children();
+ expect(sectionChildren.length).to.equal(2, 'Section has two children');
+ expect(sectionChildren[0].wlxmlTag).to.equal('header', 'First section element is a wlxml header');
+ expect(sectionChildren[1].wlxmlTag).to.equal('header', 'Second section element is a wlxml header');
+
+ var firstHeaderChildren = sectionChildren[0].children();
+ expect(firstHeaderChildren.length).to.equal(3, 'First header has three children');
+ expect(firstHeaderChildren[0].getText()).to.equal('A ', 'First header starts with a text');
+ expect(firstHeaderChildren[1].wlxmlTag).to.equal('span', 'First header has span in the middle');
+ expect(firstHeaderChildren[2].getText()).to.equal(' a', 'First header ends with text');
+
+ var secondHeaderChildren = sectionChildren[1].children();
+ expect(secondHeaderChildren.length).to.equal(3, 'Second header has three children');
+ expect(secondHeaderChildren[0].getText()).to.equal('nd ', 'Second header starts with text');
+ expect(secondHeaderChildren[1].wlxmlTag).to.equal('span', 'Second header has span in the middle');
+ expect(secondHeaderChildren[2].getText()).to.equal(' header', 'Second header ends with text');
+ });
});
describe('wrapping', function() {
@@ -171,6 +298,78 @@ describe('Canvas', function() {
expect(returned.sameNode(parent)).to.be.true;
expect(returned.sameNode(parent2)).to.be.true;
});
+
+ it('wraps part of DocumentTextElement', function() {
+ var c = canvas.fromXML(''),
+ text = c.doc().children()[0];
+
+ var returned = text.wrapWithNodeElement({tag: 'header', klass: 'some.class', start: 5, end: 12}),
+ children = c.doc().children();
+
+ expect(children.length).to.equal(3);
+
+ expect(children[0]).to.be.instanceOf(documentElement.DocumentTextElement);
+ expect(children[0].getText()).to.equal('Alice');
+
+ expect(children[1].sameNode(returned)).to.be.true;
+ expect(children[1].children().length).to.equal(1);
+ expect(children[1].children()[0].getText()).to.equal(' has a ');
+
+ expect(children[2]).to.be.instanceOf(documentElement.DocumentTextElement);
+ expect(children[2].getText()).to.equal('cat');
+ });
+
+ it('wraps text spanning multiple sibling DocumentTextNodes', function() {
+ var c = canvas.fromXML(''),
+ section = c.doc(),
+ wrapper = c.wrapText({
+ inside: section,
+ _with: {tag: 'span', klass: 'some.class'},
+ offsetStart: 6,
+ offsetEnd: 4,
+ textNodeIdx: [0,2]
+ });
+
+ expect(section.children().length).to.equal(2);
+ expect(section.children()[0]).to.be.instanceOf(documentElement.DocumentTextElement);
+ expect(section.children()[0].getText()).to.equal('Alice ');
+
+ var wrapper2 = section.children()[1];
+ expect(wrapper2.sameNode(wrapper)).to.be.true;
+
+ var wrapperChildren = wrapper.children();
+ expect(wrapperChildren.length).to.equal(3);
+ expect(wrapperChildren[0].getText()).to.equal('has a ');
+
+ expect(wrapperChildren[1]).to.be.instanceOf(documentElement.DocumentNodeElement);
+ expect(wrapperChildren[1].children().length).to.equal(1);
+ expect(wrapperChildren[1].children()[0].getText()).to.equal('small');
+
+ expect(wrapperChildren[2].getText()).to.equal(' cat');
+ });
+ });
+ });
+
+ describe('Lists api', function() {
+ it('allows creation of a list from existing sibling DocumentElements', function() {
+ var c = canvas.fromXML('\
+ \
+ Alice\
+ has
\
+ a\
+ cat
\
+ '),
+ section = c.doc(),
+ textAlice = section.children()[0],
+ divCat = section.children()[3]
+
+ c.list.create({element1: textAlice, element2: divCat});
+
+ expect(section.children().length).to.equal(1, 'section has one child element');
+
+ var list = section.children()[0];
+ expect(list.is('list')).to.equal(true, 'section\'s only child is a list');
+ expect(list.children().length).to.equal(4, 'list contains four elements');
});
});