Extracting list items out of all outer lists
[fnpeditor.git] / modules / documentCanvas / canvas / canvas.test3.js
index 609a36b..34c372d 100644 (file)
@@ -442,33 +442,70 @@ describe('Canvas', 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(),
-                    textHas = section.children()[1],
-                    divA = section.children()[2]
+            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: textHas, element2: divA});
+                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];
+
+
+                        c.list.create({element1: itemB, element2: itemC});
 
-                expect(section.children().length).to.equal(3, 'section has three child elements');
+                    var outerListItems = outerList.children(),
+                        innerList = outerListItems[1].children()[0],
+                        innerListItems = innerList.children();
 
-                var child1 = section.children()[0],
-                    list = section.children()[1],
-                    child3 = section.children()[2];
+                    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');
 
-                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');
+
             });
 
             describe('extracting list items', function() {
@@ -610,7 +647,7 @@ describe('Canvas', function() {
                         nestedList = list.children()[1].children()[0],
                         nestedListItem = nestedList.children()[1];
 
-                    c.list.extractItems({element1: nestedListItem, element2: nestedListItem, merge: true});
+                    c.list.extractItems({element1: nestedListItem, element2: nestedListItem});
 
                     var section = c.doc(),
                         list = section.children()[0],
@@ -659,7 +696,7 @@ describe('Canvas', function() {
                         nestedListItem1 = nestedList.children()[1],
                         nestedListItem2 = nestedList.children()[2];
 
-                    c.list.extractItems({element1: nestedListItem1, element2: nestedListItem2, merge: true});
+                    c.list.extractItems({element1: nestedListItem1, element2: nestedListItem2});
 
                     var section = c.doc(),
                         list = section.children()[0],
@@ -700,7 +737,7 @@ describe('Canvas', function() {
                         nestedListItem1 = nestedList.children()[0],
                         nestedListItem2 = nestedList.children()[1];
 
-                    c.list.extractItems({element1: nestedListItem1, element2: nestedListItem2, merge: true});
+                    c.list.extractItems({element1: nestedListItem1, element2: nestedListItem2});
 
                     var section = c.doc(),
                         list = section.children()[0],
@@ -741,7 +778,7 @@ describe('Canvas', function() {
                         nestedListItem1 = nestedList.children()[0],
                         nestedListItem2 = nestedList.children()[1];
 
-                    c.list.extractItems({element1: nestedListItem1, element2: nestedListItem2, merge: true});
+                    c.list.extractItems({element1: nestedListItem1, element2: nestedListItem2});
 
                     var section = c.doc(),
                         list = section.children()[0],
@@ -756,6 +793,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');
+                });
             });
         });