editor: canvas - let every child of a detached element clean up after itself
[fnpeditor.git] / src / wlxml / wlxml.test.js
index 9f846f6..af0e23b 100644 (file)
@@ -27,9 +27,19 @@ describe('WLXMLDocument', function() {
             expect(node.getClass()).to.equal('class.subclass');
         });
 
-        it('returns attributes other than class and meta-* as other attributes', function() {
-            var node = nodeFromXML('<span class="uri" meta-attr="val" attr1="val1" attr2="val2"></span>');
-            expect(node.getOtherAttributes()).to.eql({attr1: 'val1', attr2: 'val2'});
+        it('returns its class hierarchy', function() {
+            var node = nodeFromXML('<div class="a.b.c"></div>');
+            expect(node.getClassHierarchy()).to.eql(['', 'a', 'a.b', 'a.b.c']);
+        });
+
+        it('returns unregistered attributes', function() {
+            var testClasses = {
+                    'testClass': {
+                        attrs: {'attr1': {type: 'string'}}
+                    }
+                },
+                doc = getDocumentFromXML('<span class="testClass" attr="val" attr1="val1"></span>', {wlxmlClasses: testClasses});
+            expect(doc.root.getOtherAttributes()).to.eql({attr: {value:'val'}});
         });
     });
 
@@ -76,7 +86,7 @@ describe('WLXMLDocument', function() {
                         }
                     },
                     node = getDocumentFromXML(
-                        '<span class="test" meta-attr1="val1" meta-attr2="2014-01-01"></span>',
+                        '<span class="test" attr1="val1" attr2="2014-01-01"></span>',
                         {wlxmlClasses: testClasses}
                     ).root,
                     attrs = node.getMetaAttributes();
@@ -257,7 +267,7 @@ describe('WLXMLDocument', function() {
         var doc, extension, elementNode, textNode, testClassNode;
 
         beforeEach(function() {
-            doc = getDocumentFromXML('<section>Alice<div class="test_class"></div></section>');
+            doc = getDocumentFromXML('<section>Alice<div class="test_class"></div><div class="test_class.a"></div></section>');
             elementNode = doc.root;
             textNode = doc.root.contents()[0];
             testClassNode = doc.root.contents('.test_class');
@@ -276,6 +286,15 @@ describe('WLXMLDocument', function() {
             expect(testClassNode.object.testMethod().sameNode(testClassNode)).to.equal(true, '1');
         });
 
+        it('allows adding non-function properties to an ElementNode of specific class', function() {
+            extension = {wlxmlClass: {test_class: {methods: {
+                testProp: 123
+            }}}};
+            doc.registerExtension(extension);
+            testClassNode = doc.root.contents()[1];
+            expect(testClassNode.object.testProp).to.equal(123);
+        });
+
         it('allows adding transformation to an ElementNode of specific class', function() {
             extension = {wlxmlClass: {test_class: {transformations: {
                 testTransformation: function() { return this; },
@@ -287,9 +306,25 @@ describe('WLXMLDocument', function() {
             expect(testClassNode.object.testTransformation2().sameNode(testClassNode)).to.equal(true, '1');
         });
 
-
+        it('added methods are inherited by nodes with subclasses', function() {
+            extension = {wlxmlClass: {test_class: {methods: {
+                testMethod: function() { return this; }
+            }}}};
+            doc.registerExtension(extension);
+            testClassNode = doc.root.contents()[2];
+            expect(testClassNode.object.testMethod().sameNode(testClassNode)).to.equal(true);
+        });
+        it('added transformations are inherited by nodes with subclasses', function() {
+            extension = {wlxmlClass: {test_class: {transformations: {
+                testTransformation: function() { return this; },
+                testTransformation2: {impl: function() { return this; }}
+            }}}};
+            doc.registerExtension(extension);
+            testClassNode = doc.root.contents()[2];
+            expect(testClassNode.object.testTransformation().sameNode(testClassNode)).to.equal(true, '1');
+            expect(testClassNode.object.testTransformation2().sameNode(testClassNode)).to.equal(true, '2');
+        });
     });
-
 });
 
 });
\ No newline at end of file