Node-isEqualNode.html (7033B)
1 <!DOCTYPE html> 2 <meta charset="utf-8"> 3 <title>Node.prototype.isEqualNode</title> 4 <link rel=help href="https://dom.spec.whatwg.org/#dom-node-isequalnode"> 5 <script src="/resources/testharness.js"></script> 6 <script src="/resources/testharnessreport.js"></script> 7 8 <script> 9 "use strict"; 10 11 test(function() { 12 13 var doctype1 = document.implementation.createDocumentType("qualifiedName", "publicId", "systemId"); 14 var doctype2 = document.implementation.createDocumentType("qualifiedName", "publicId", "systemId"); 15 var doctype3 = document.implementation.createDocumentType("qualifiedName2", "publicId", "systemId"); 16 var doctype4 = document.implementation.createDocumentType("qualifiedName", "publicId2", "systemId"); 17 var doctype5 = document.implementation.createDocumentType("qualifiedName", "publicId", "systemId3"); 18 19 assert_true(doctype1.isEqualNode(doctype1), "self-comparison"); 20 assert_true(doctype1.isEqualNode(doctype2), "same properties"); 21 assert_false(doctype1.isEqualNode(doctype3), "different name"); 22 assert_false(doctype1.isEqualNode(doctype4), "different public ID"); 23 assert_false(doctype1.isEqualNode(doctype5), "different system ID"); 24 25 }, "doctypes should be compared on name, public ID, and system ID"); 26 27 test(function() { 28 29 var element1 = document.createElementNS("namespace", "prefix:localName"); 30 var element2 = document.createElementNS("namespace", "prefix:localName"); 31 var element3 = document.createElementNS("namespace2", "prefix:localName"); 32 var element4 = document.createElementNS("namespace", "prefix2:localName"); 33 var element5 = document.createElementNS("namespace", "prefix:localName2"); 34 35 var element6 = document.createElementNS("namespace", "prefix:localName"); 36 element6.setAttribute("foo", "bar"); 37 38 assert_true(element1.isEqualNode(element1), "self-comparison"); 39 assert_true(element1.isEqualNode(element2), "same properties"); 40 assert_false(element1.isEqualNode(element3), "different namespace"); 41 assert_false(element1.isEqualNode(element4), "different prefix"); 42 assert_false(element1.isEqualNode(element5), "different local name"); 43 assert_false(element1.isEqualNode(element6), "different number of attributes"); 44 45 }, "elements should be compared on namespace, namespace prefix, local name, and number of attributes"); 46 47 test(function() { 48 49 var element1 = document.createElement("element"); 50 element1.setAttributeNS("namespace", "prefix:localName", "value"); 51 52 var element2 = document.createElement("element"); 53 element2.setAttributeNS("namespace", "prefix:localName", "value"); 54 55 var element3 = document.createElement("element"); 56 element3.setAttributeNS("namespace2", "prefix:localName", "value"); 57 58 var element4 = document.createElement("element"); 59 element4.setAttributeNS("namespace", "prefix2:localName", "value"); 60 61 var element5 = document.createElement("element"); 62 element5.setAttributeNS("namespace", "prefix:localName2", "value"); 63 64 var element6 = document.createElement("element"); 65 element6.setAttributeNS("namespace", "prefix:localName", "value2"); 66 67 assert_true(element1.isEqualNode(element1), "self-comparison"); 68 assert_true(element1.isEqualNode(element2), "attribute with same properties"); 69 assert_false(element1.isEqualNode(element3), "attribute with different namespace"); 70 assert_true(element1.isEqualNode(element4), "attribute with different prefix"); 71 assert_false(element1.isEqualNode(element5), "attribute with different local name"); 72 assert_false(element1.isEqualNode(element6), "attribute with different value"); 73 74 }, "elements should be compared on attribute namespace, local name, and value"); 75 76 test(function() { 77 78 var pi1 = document.createProcessingInstruction("target", "data"); 79 var pi2 = document.createProcessingInstruction("target", "data"); 80 var pi3 = document.createProcessingInstruction("target2", "data"); 81 var pi4 = document.createProcessingInstruction("target", "data2"); 82 83 assert_true(pi1.isEqualNode(pi1), "self-comparison"); 84 assert_true(pi1.isEqualNode(pi2), "same properties"); 85 assert_false(pi1.isEqualNode(pi3), "different target"); 86 assert_false(pi1.isEqualNode(pi4), "different data"); 87 88 }, "processing instructions should be compared on target and data"); 89 90 test(function() { 91 92 var text1 = document.createTextNode("data"); 93 var text2 = document.createTextNode("data"); 94 var text3 = document.createTextNode("data2"); 95 96 assert_true(text1.isEqualNode(text1), "self-comparison"); 97 assert_true(text1.isEqualNode(text2), "same properties"); 98 assert_false(text1.isEqualNode(text3), "different data"); 99 100 }, "text nodes should be compared on data"); 101 102 test(function() { 103 104 var comment1 = document.createComment("data"); 105 var comment2 = document.createComment("data"); 106 var comment3 = document.createComment("data2"); 107 108 assert_true(comment1.isEqualNode(comment1), "self-comparison"); 109 assert_true(comment1.isEqualNode(comment2), "same properties"); 110 assert_false(comment1.isEqualNode(comment3), "different data"); 111 112 }, "comments should be compared on data"); 113 114 test(function() { 115 116 var documentFragment1 = document.createDocumentFragment(); 117 var documentFragment2 = document.createDocumentFragment(); 118 119 assert_true(documentFragment1.isEqualNode(documentFragment1), "self-comparison"); 120 assert_true(documentFragment1.isEqualNode(documentFragment2), "same properties"); 121 122 }, "document fragments should not be compared based on properties"); 123 124 test(function() { 125 126 var document1 = document.implementation.createDocument("", ""); 127 var document2 = document.implementation.createDocument("", ""); 128 129 assert_true(document1.isEqualNode(document1), "self-comparison"); 130 assert_true(document1.isEqualNode(document2), "another empty XML document"); 131 132 var htmlDoctype = document.implementation.createDocumentType("html", "", ""); 133 var document3 = document.implementation.createDocument("http://www.w3.org/1999/xhtml", "html", htmlDoctype); 134 document3.documentElement.appendChild(document3.createElement("head")); 135 document3.documentElement.appendChild(document3.createElement("body")); 136 var document4 = document.implementation.createHTMLDocument(); 137 assert_true(document3.isEqualNode(document4), "default HTML documents, created different ways"); 138 139 }, "documents should not be compared based on properties"); 140 141 test(function() { 142 143 testDeepEquality(function() { return document.createElement("foo") }); 144 testDeepEquality(function() { return document.createDocumentFragment() }); 145 testDeepEquality(function() { return document.implementation.createDocument("", "") }); 146 testDeepEquality(function() { return document.implementation.createHTMLDocument() }); 147 148 function testDeepEquality(parentFactory) { 149 // Some ad-hoc tests of deep equality 150 151 var parentA = parentFactory(); 152 var parentB = parentFactory(); 153 154 parentA.appendChild(document.createComment("data")); 155 assert_false(parentA.isEqualNode(parentB)); 156 parentB.appendChild(document.createComment("data")); 157 assert_true(parentA.isEqualNode(parentB)); 158 } 159 160 }, "node equality testing should test descendant equality too"); 161 </script>