integration wip: togglegrid, newnode
[fnpeditor.git] / modules / documentCanvas / canvas / canvas.test3.js
index 34c372d..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() {