intergration wip: unwrapping DocumentTextNode from its parent if it's its parent...
[fnpeditor.git] / modules / documentCanvas / canvas / canvas.test3.js
index 2aa50d9..9aab247 100644 (file)
@@ -107,6 +107,22 @@ describe('Canvas', function() {
                 expect(section.getWlxmlClass()).to.be.undefined;
             });
         });
+
+        it('returns DocumentNodeElement instance from HTMLElement', function() {
+            var c = canvas.fromXML('<section></section>'),
+                htmlElement = c.doc().dom().get(0),
+                element = c.getDocumentElement(htmlElement);
+            expect(element).to.be.instanceOf(documentElement.DocumentNodeElement);
+            expect(element.sameNode(c.doc()));
+        });
+        
+        it('returns DocumentTextElement instance from Text Node', function() {
+            var c = canvas.fromXML('<section>Alice</section>'),
+                textNode = c.doc().children(0)[0].dom().get(0),
+                element = c.getDocumentElement(textNode);
+            expect(element).to.be.instanceOf(documentElement.DocumentTextElement);
+            expect(element.sameNode(c.doc().children()[0]));
+        });
     });
 
 
@@ -375,26 +391,42 @@ describe('Canvas', function() {
                     expect(returned.getWlxmlClass()).to.equal('some.class');
                 });
                 
-                it('wraps part of DocumentTextElement', function() {
-                    var c = canvas.fromXML('<section>Alice has a cat</section>'),
-                        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');
+                describe('wrapping part of DocumentTextElement', function() {
+                    [{start: 5, end: 12}, {start: 12, end: 5}].forEach(function(offsets) {
+                        it('wraps in the middle ' + offsets.start + '/' + offsets.end, function() {
+                            var c = canvas.fromXML('<section>Alice has a cat</section>'),
+                                text = c.doc().children()[0];
+                            
+                            var returned = text.wrapWithNodeElement({tag: 'header', klass: 'some.class', start: offsets.start, end: offsets.end}),
+                                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(returned.getWlxmlTag()).to.equal('header');
+                            expect(returned.getWlxmlClass()).to.equal('some.class');
+                            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');
+                        });
+                    });
 
-                    expect(children[1].sameNode(returned)).to.be.true;
-                    expect(returned.getWlxmlTag()).to.equal('header');
-                    expect(returned.getWlxmlClass()).to.equal('some.class');
-                    expect(children[1].children().length).to.equal(1);
-                    expect(children[1].children()[0].getText()).to.equal(' has a ');
+                    it('wraps whole text inside DocumentTextElement if offsets span entire content', function() {
+                         var c = canvas.fromXML('<section>Alice has a cat</section>'),
+                             text = c.doc().children()[0];
+                         
+                         var returned = text.wrapWithNodeElement({tag: 'header', klass: 'some.class', start: 0, end: 15}),
+                             children = c.doc().children();
 
-                    expect(children[2]).to.be.instanceOf(documentElement.DocumentTextElement);
-                    expect(children[2].getText()).to.equal('cat');
+                         expect(children.length).to.equal(1);
+                         expect(children[0]).to.be.instanceOf(documentElement.DocumentNodeElement);
+                         expect(children[0].children()[0].getText()).to.equal('Alice has a cat');
+                    });
                 });
 
                 it('wraps text spanning multiple sibling DocumentTextNodes', function() {
@@ -793,6 +825,41 @@ describe('Canvas', function() {
                     expect(item3.children()[0].getText()).to.equal('1.2', 'third item ok');
                     expect(item4.children()[0].getText()).to.equal('2', 'fourth item ok');
                 });
+
+                it('extracts items out of outer most list when merge flag is set to false', function() {
+                    var c = canvas.fromXML('\
+                        <section>\
+                            <div class="list.items">\
+                                <div class="item">0</div>\
+                                <div class="item">\
+                                    <div class="list.items">\
+                                        <div class="item">1.1</div>\
+                                        <div class="item">1.2</div>\
+                                    </div>\
+                                </div>\
+                                <div class="item">2</div>\
+                            </div>\
+                        </section>'),
+                        section = c.doc(),
+                        list = section.children()[0],
+                        nestedList = list.children()[1].children()[0],
+                        nestedListItem = nestedList.children()[0];
+
+                    var test = c.list.extractItems({element1: nestedListItem, element2: nestedListItem, merge: false});
+
+                    expect(test).to.equal(true, 'extraction status ok');
+
+                    var sectionChildren = section.children(),
+                        extractedItem = sectionChildren[1];
+
+                    expect(sectionChildren.length).to.equal(3, 'section has three children');
+                    expect(sectionChildren[0].is('list')).to.equal(true, 'first child is a list');
+
+                    expect(extractedItem.getWlxmlTag()).to.equal('div', 'extracted item is a wlxml div');
+                    expect(extractedItem.getWlxmlClass()).to.equal(undefined, 'extracted item has no wlxml class');
+                    expect(extractedItem.children()[0].getText()).to.equal('1.1', 'extracted item ok');
+                    expect(sectionChildren[2].is('list')).to.equal(true, 'second child is a list');
+                });
             });
         });