smartxml: fix DocumentNode.parent
authorAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Mon, 18 Nov 2013 14:57:21 +0000 (15:57 +0100)
committerAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Mon, 18 Nov 2013 14:57:21 +0000 (15:57 +0100)
src/smartxml/smartxml.js
src/smartxml/smartxml.test.js

index 18664c7..5ad3010 100644 (file)
@@ -38,7 +38,11 @@ $.extend(DocumentNode.prototype, {
     },
 
     parent: function() {
     },
 
     parent: function() {
-        return this.nativeNode.parentNode ? this.document.createElementNode(this.nativeNode.parentNode) : null;
+        var parentNode = this.nativeNode.parentNode;
+        if(parentNode && parentNode.nodeType === Node.ELEMENT_NODE) {
+            return this.document.createElementNode(parentNode);
+        }
+        return null;
     },
 
     after: function(node) {
     },
 
     after: function(node) {
index 8154ff5..df35a37 100644 (file)
@@ -486,6 +486,19 @@ describe('smartxml', function() {
         });
     });
 
         });
     });
 
+    describe('Traversing', function() {
+        describe('Basic', function() {
+            it('can access node parent', function() {
+                var doc = getDocumentFromXML('<a><b></b></a>'),
+                    a = doc.root,
+                    b = a.contents()[0];
+
+                expect(a.parent()).to.equal(null, 'parent of a root is null');
+                expect(b.parent().sameNode(a)).to.be.true;
+            });
+        });
+    });
+
     describe('Serializing document to WLXML', function() {
         it('keeps document intact when no changes have been made', function() {
             var xmlIn = '<section>Alice<div>has</div>a <span class="uri" meta-uri="http://cat.com">cat</span>!</section>',
     describe('Serializing document to WLXML', function() {
         it('keeps document intact when no changes have been made', function() {
             var xmlIn = '<section>Alice<div>has</div>a <span class="uri" meta-uri="http://cat.com">cat</span>!</section>',