smartxml: fix in Document.getNodeByPath
[fnpeditor.git] / src / smartxml / smartxml.test.js
index b50da7f..524c976 100644 (file)
@@ -69,6 +69,24 @@ describe('smartxml', function() {
             expect(node.contents()[0].getText()).to.equal('Alice');
             expect(node.contents()[1].getTagName()).to.equal('b');
         });
+
+        describe('Retrieving node by path', function() {
+            it('passes smoke tests', function() {
+                var doc = getDocumentFromXML('<root><a><b>c</b></a>');
+                expect(doc.getNodeByPath([0]).sameNode(doc.root.contents()[0])).to.be.true;
+                expect(doc.getNodeByPath([0,0]).sameNode(doc.root.contents()[0].contents()[0])).to.be.true;
+            });
+            it('treats empty path as a root path', function() {
+                var doc = getDocumentFromXML('<root></root>');
+                expect(doc.getNodeByPath([]).sameNode(doc.root)).to.be.true;
+            });
+            it('returns undefined for non existing paths', function() {
+                var doc = getDocumentFromXML('<root><a></a></root>');
+                expect(doc.getNodeByPath([1])).to.be.undefined;
+                expect(doc.getNodeByPath([0,1])).to.be.undefined;
+                expect(doc.getNodeByPath([10,1])).to.be.undefined;
+            });
+        });
     });
 
     describe('DocumentNode', function() {
@@ -942,6 +960,28 @@ describe('smartxml', function() {
             expect(contents[1].contents().length).to.equal(1);
             expect(contents[1].contents()[0].getText()).to.equal('b');
         });
+        it('removes across elements - 6', function() {
+            var doc = getDocumentFromXML('<root><div>aaa<span>bbb</span>ccc</div><div>ddd</div></root>');
+            doc.deleteText({
+                from: {
+                    node: getTextNode('aaa', doc),
+                    offset: 1
+                },
+                to: {
+                    node: getTextNode('ddd', doc),
+                    offset: 1
+                }
+            }, {
+                error: function(e) {throw e;}
+            });
+
+            var contents = doc.root.contents();
+            expect(contents.length).to.equal(2);
+            expect(contents[0].contents().length).to.equal(1);
+            expect(contents[0].contents()[0].getText()).to.equal('a');
+            expect(contents[1].contents().length).to.equal(1);
+            expect(contents[1].contents()[0].getText()).to.equal('dd');
+        });
     });
 
     describe('Splitting text', function() {