integration wip: lists - creating, unnesting
[fnpeditor.git] / modules / documentCanvas / canvas / canvas.test3.js
index ff7c5c4..2244653 100644 (file)
@@ -426,31 +426,86 @@ describe('Canvas', function() {
                     expect(wrapperChildren[2].getText()).to.equal(' cat');
                 });
             });
                     expect(wrapperChildren[2].getText()).to.equal(' cat');
                 });
             });
+
+            describe('unwrapping', function() {
+                it('unwraps DocumentTextElement from its parent DocumentNodeElement if it\'s its only child', function() {
+                    var c = canvas.fromXML('<section><div>Alice has a cat</div></section>'),
+                    section = c.doc(),
+                    text = section.children()[0].children()[0];
+
+                    text.unwrap();
+
+                    expect(section.children().length).to.equal(1);
+                    expect(section.children()[0].getText()).to.equal('Alice has a cat');
+                })
+            });
         });
 
         describe('Lists api', function() {
         });
 
         describe('Lists api', function() {
-            it('allows creation of a list from existing sibling DocumentElements', function() {
-                var c = canvas.fromXML('\
-                    <section>\
-                        Alice\
-                        <div>has</div>\
-                        a\
-                        <div>cat</div>\
-                    </section>'),
-                    section = c.doc(),
-                    textAlice = section.children()[0],
-                    divCat = section.children()[3]
+            describe('creating lists', function() {
+                it('allows creation of a list from existing sibling DocumentElements', function() {
+                    var c = canvas.fromXML('\
+                        <section>\
+                            Alice\
+                            <div>has</div>\
+                            a\
+                            <div>cat</div>\
+                        </section>'),
+                        section = c.doc(),
+                        textHas = section.children()[1],
+                        divA = section.children()[2]
+                    
+                    c.list.create({element1: textHas, element2: divA});
+
+                    expect(section.children().length).to.equal(3, 'section has three child elements');
+
+                    var child1 = section.children()[0],
+                        list = section.children()[1],
+                        child3 = section.children()[2];
+
+                    expect(child1.getText()).to.equal('Alice');
+                    expect(list.is('list')).to.equal(true, 'second child is a list');
+                    expect(list.children().length).to.equal(2, 'list contains two elements');
+                    list.children().forEach(function(child) {
+                        expect(child.getWlxmlClass()).to.equal('item', 'list childs have wlxml class of item');
+                    });
+                    expect(child3.children()[0].getText()).to.equal('cat');
+                });
                 
                 
-                c.list.create({element1: textAlice, element2: divCat});
+                it('allows creating nested list from existing sibling list items', function() {
+                    var c = canvas.fromXML('\
+                        <section>\
+                            <div class="list-items">\
+                                <div class="item">A</div>\
+                                <div class="item">B</div>\
+                                <div class="item">C</div>\
+                                <div class="item">D</div>\
+                            </div>\
+                        </section>'),
+                        outerList = c.doc().children()[0],
+                        itemB = outerList.children()[1],
+                        itemC = outerList.children()[2];
 
 
-                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');
-                list.children().forEach(function(child) {
-                    expect(child.getWlxmlClass()).to.equal('item', 'list childs have wlxml class of item');
+                        c.list.create({element1: itemB, element2: itemC});
+
+                    var outerListItems = outerList.children(),
+                        innerList = outerListItems[1].children()[0],
+                        innerListItems = innerList.children();
+
+                    expect(outerListItems.length).to.equal(3, 'outer list has three items');
+                    expect(outerListItems[0].children()[0].getText()).to.equal('A', 'first outer item ok');
+                    expect(outerListItems[1].getWlxmlClass()).to.equal('item', 'inner list is wrapped by item element');
+
+                    expect(innerList.is('list')).to.equal(true, 'inner list created');
+                    expect(innerListItems.length).to.equal(2, 'inner list has two items');
+                    expect(innerListItems[0].children()[0].getText()).to.equal('B', 'first inner item ok');
+                    expect(innerListItems[1].children()[0].getText()).to.equal('C', 'second inner item ok');
+
+                    expect(outerListItems[2].children()[0].getText()).to.equal('D', 'last outer item ok');
+
                 });
                 });
+
             });
 
             describe('extracting list items', function() {
             });
 
             describe('extracting list items', function() {