smartxml: refactoring
[fnpeditor.git] / src / smartxml / smartxml.test.js
index db9777f..ccaf0ef 100644 (file)
@@ -40,6 +40,17 @@ describe('smartxml', function() {
             doc.loadXML('<header></header>');
             expect(doc.root.getTagName()).to.equal('header');
         });
+
+        it('knows if it contains an ElementNode in its tree', function() {
+            var doc = getDocumentFromXML('<root><a></a>text</root>'),
+                root = doc.root,
+                a = root.contents()[0],
+                text = root.contents()[1];
+
+            expect(doc.containsNode(root)).to.equal(true, 'contains its root');
+            expect(doc.containsNode(a)).to.equal(true, 'contains Element Node');
+            expect(doc.containsNode(text)).to.equal(true, 'contains Text Node');
+        });
     });
 
     describe('Basic ElementNode properties', function() {
@@ -251,6 +262,17 @@ describe('smartxml', function() {
 
     describe('Manipulations', function() {
 
+        it('merges adjacent text nodes resulting from detaching an element node in between', function() {
+            var doc = getDocumentFromXML('<div>Alice <span>has</span>a cat</div>'),
+                span = doc.root.contents()[1];
+
+            span.detach();
+
+            var rootContents = doc.root.contents();
+            expect(rootContents).to.have.length(1, 'one child left');
+            expect(rootContents[0].getText()).to.equal('Alice a cat');
+        });
+
         it('appends element node to another element node', function() {
             var node1 = elementNodeFromParams({tag: 'div'}),
                 node2 = elementNodeFromParams({tag: 'a'}),
@@ -291,6 +313,32 @@ describe('smartxml', function() {
             expect(node.contents()[2].getText()).to.equal(' a cat!');
         });
 
+        it('unwrap single element node from its parent', function() {
+            var doc = getDocumentFromXML('<div><a><b></b></a></div>'),
+                div = doc.root,
+                a = div.contents()[0],
+                b = a.contents()[0];
+
+            var parent = b.unwrap();
+
+            expect(parent.sameNode(div)).to.equal(true, 'returns new parent');
+            expect(div.contents()).to.have.length(1, 'root contains only one node');
+            expect(div.contents()[0].sameNode(b)).to.equal(true, 'node got unwrapped');
+        });
+
+        it('unwrap single text node from its parent', function() {
+            var doc = getDocumentFromXML('<div>Some <span>text</span>!</div>'),
+                div = doc.root,
+                span = div.contents()[1],
+                text = span.contents()[0];
+
+            var parent = text.unwrap();
+
+            expect(parent.sameNode(div)).to.equal(true, 'returns new parent');
+            expect(div.contents()).to.have.length(1, 'root contains only one node');
+            expect(div.contents()[0].getText()).to.equal('Some text!');
+        });
+
         describe('Wrapping text', function() {
             it('wraps text spanning multiple sibling TextNodes', function() {
                 var section = elementNodeFromXML('<section>Alice has a <span>small</span> cat</section>'),