tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>