tor-browser

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

test_nodelist.js (14649B)


      1 /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
      2 function run_test() {
      3  test_getElementsByTagName();
      4  test_getElementsByTagNameNS();
      5  test_getElementsByAttribute();
      6  test_getElementsByAttributeNS();
      7 
      8  // What else should we test?
      9  // XXXbz we need more tests here to test liveness!
     10 }
     11 
     12 function test_getElementsByTagName() {
     13  var doc = ParseFile("nodelist_data_1.xml");
     14  var root = doc.documentElement;
     15 
     16  // Check that getElementsByTagName returns an HTMLCollection.
     17  Assert.equal(
     18    ChromeUtils.getClassName(doc.getElementsByTagName("*")),
     19    "HTMLCollection"
     20  );
     21  Assert.ok(
     22    ChromeUtils.getClassName(root.getElementsByTagName("*")),
     23    "HTMLCollection"
     24  );
     25 
     26  // Check that getElementsByTagName excludes the element it's called on.
     27  Assert.equal(
     28    doc.getElementsByTagName("*").length,
     29    root.getElementsByTagName("*").length + 1
     30  );
     31  Assert.equal(doc.getElementById("test2").getElementsByTagName("*").length, 8);
     32  Assert.equal(
     33    doc.getElementById("test2").getElementsByTagName("test").length,
     34    3
     35  );
     36 
     37  // Check that the first element of getElementsByTagName on the document is
     38  // the right thing.
     39  Assert.equal(doc.getElementsByTagName("*").item(0), root);
     40 
     41  // Check that we get the right things in the right order
     42  var numTests = doc.getElementsByTagName("test").length;
     43  Assert.equal(numTests, 5);
     44 
     45  for (var i = 1; i <= numTests; ++i) {
     46    Assert.ok(Element.isInstance(doc.getElementById("test" + i)));
     47    Assert.equal(
     48      doc.getElementById("test" + i),
     49      doc.getElementsByTagName("test").item(i - 1)
     50    );
     51  }
     52 
     53  // Check that we handle tagnames containing ':' correctly
     54  Assert.equal(
     55    ChromeUtils.getClassName(doc.getElementsByTagName("foo:test")),
     56    "HTMLCollection"
     57  );
     58  Assert.equal(doc.getElementsByTagName("foo:test").length, 2);
     59 
     60  Assert.equal(
     61    ChromeUtils.getClassName(doc.getElementsByTagName("foo2:test")),
     62    "HTMLCollection"
     63  );
     64  Assert.equal(doc.getElementsByTagName("foo2:test").length, 3);
     65 
     66  Assert.equal(
     67    ChromeUtils.getClassName(doc.getElementsByTagName("bar:test")),
     68    "HTMLCollection"
     69  );
     70  Assert.equal(doc.getElementsByTagName("bar:test").length, 4);
     71 }
     72 
     73 function test_getElementsByTagNameNS() {
     74  var doc = ParseFile("nodelist_data_1.xml");
     75  var root = doc.documentElement;
     76 
     77  // Check that getElementsByTagNameNS returns an HTMLCollection.
     78  Assert.equal(
     79    ChromeUtils.getClassName(doc.getElementsByTagNameNS("*", "*")),
     80    "HTMLCollection"
     81  );
     82  Assert.equal(
     83    ChromeUtils.getClassName(root.getElementsByTagNameNS("*", "*")),
     84    "HTMLCollection"
     85  );
     86 
     87  // Check that passing "" and null for the namespace URI gives the same result
     88  var list1 = doc.getElementsByTagNameNS("", "test");
     89  var list2 = doc.getElementsByTagNameNS(null, "test");
     90  Assert.equal(list1.length, list2.length);
     91  for (var i = 0; i < list1.length; ++i) {
     92    Assert.equal(list1.item(i), list2.item(i));
     93  }
     94 
     95  // Check that getElementsByTagNameNS excludes the element it's called on.
     96  Assert.equal(
     97    doc.getElementsByTagNameNS("*", "*").length,
     98    root.getElementsByTagNameNS("*", "*").length + 1
     99  );
    100  Assert.equal(
    101    doc.getElementById("test2").getElementsByTagNameNS("*", "*").length,
    102    8
    103  );
    104  Assert.equal(
    105    doc.getElementById("test2").getElementsByTagNameNS("", "test").length,
    106    1
    107  );
    108  Assert.equal(
    109    doc.getElementById("test2").getElementsByTagNameNS("*", "test").length,
    110    7
    111  );
    112 
    113  // Check that the first element of getElementsByTagNameNS on the document is
    114  // the right thing.
    115  Assert.equal(doc.getElementsByTagNameNS("*", "*").item(0), root);
    116  Assert.equal(doc.getElementsByTagNameNS(null, "*").item(0), root);
    117 
    118  // Check that we get the right things in the right order
    119 
    120  var numTests = doc.getElementsByTagNameNS("*", "test").length;
    121  Assert.equal(numTests, 14);
    122 
    123  for (i = 1; i <= numTests; ++i) {
    124    Assert.ok(Element.isInstance(doc.getElementById("test" + i)));
    125    Assert.equal(
    126      doc.getElementById("test" + i),
    127      doc.getElementsByTagNameNS("*", "test").item(i - 1)
    128    );
    129  }
    130 
    131  // Check general proper functioning of having a non-wildcard namespace.
    132  var test2 = doc.getElementById("test2");
    133  Assert.equal(doc.getElementsByTagNameNS("", "test").length, 3);
    134  Assert.equal(test2.getElementsByTagNameNS("", "test").length, 1);
    135  Assert.equal(doc.getElementsByTagNameNS("foo", "test").length, 7);
    136  Assert.equal(test2.getElementsByTagNameNS("foo", "test").length, 4);
    137  Assert.equal(doc.getElementsByTagNameNS("foo2", "test").length, 0);
    138  Assert.equal(test2.getElementsByTagNameNS("foo2", "test").length, 0);
    139  Assert.equal(doc.getElementsByTagNameNS("bar", "test").length, 4);
    140  Assert.equal(test2.getElementsByTagNameNS("bar", "test").length, 2);
    141 
    142  // Check that we handle tagnames containing ':' correctly
    143  Assert.equal(
    144    ChromeUtils.getClassName(doc.getElementsByTagNameNS(null, "foo:test")),
    145    "HTMLCollection"
    146  );
    147  Assert.equal(doc.getElementsByTagNameNS(null, "foo:test").length, 0);
    148  Assert.equal(doc.getElementsByTagNameNS("foo", "foo:test").length, 0);
    149  Assert.equal(doc.getElementsByTagNameNS("bar", "foo:test").length, 0);
    150  Assert.equal(doc.getElementsByTagNameNS("*", "foo:test").length, 0);
    151 
    152  Assert.equal(
    153    ChromeUtils.getClassName(doc.getElementsByTagNameNS(null, "foo2:test")),
    154    "HTMLCollection"
    155  );
    156  Assert.equal(doc.getElementsByTagNameNS(null, "foo2:test").length, 0);
    157  Assert.equal(doc.getElementsByTagNameNS("foo2", "foo2:test").length, 0);
    158  Assert.equal(doc.getElementsByTagNameNS("bar", "foo2:test").length, 0);
    159  Assert.equal(doc.getElementsByTagNameNS("*", "foo2:test").length, 0);
    160 
    161  Assert.equal(
    162    ChromeUtils.getClassName(doc.getElementsByTagNameNS(null, "bar:test")),
    163    "HTMLCollection"
    164  );
    165  Assert.equal(doc.getElementsByTagNameNS(null, "bar:test").length, 0);
    166  Assert.equal(doc.getElementsByTagNameNS("bar", "bar:test").length, 0);
    167  Assert.equal(doc.getElementsByTagNameNS("*", "bar:test").length, 0);
    168 
    169  // Check that previously-unknown namespaces are handled right.  Note that we
    170  // can just hardcode the strings, since we're running only once in XPCshell.
    171  // If someone wants to run these in a browser, some use of Math.random() may
    172  // be in order.
    173  list1 = doc.getElementsByTagNameNS("random-bogus-namespace", "foo");
    174  list2 = doc.documentElement.getElementsByTagNameNS(
    175    "random-bogus-namespace2",
    176    "foo"
    177  );
    178  Assert.notEqual(list1, list2);
    179  Assert.equal(list1.length, 0);
    180  Assert.equal(list2.length, 0);
    181  var newNode = doc.createElementNS("random-bogus-namespace", "foo");
    182  doc.documentElement.appendChild(newNode);
    183  newNode = doc.createElementNS("random-bogus-namespace2", "foo");
    184  doc.documentElement.appendChild(newNode);
    185  Assert.equal(list1.length, 1);
    186  Assert.equal(list2.length, 1);
    187 }
    188 
    189 function test_getElementsByAttribute() {
    190  var doc = ParseFile("nodelist_data_2.xhtml");
    191  var root = doc.documentElement;
    192 
    193  Assert.equal(ChromeUtils.getClassName(root), "XULElement");
    194 
    195  Assert.equal(
    196    ChromeUtils.getClassName(root.getElementsByAttribute("foo", "foo")),
    197    "HTMLCollection"
    198  );
    199 
    200  var master1 = doc.getElementById("master1");
    201  var master2 = doc.getElementById("master2");
    202  var master3 = doc.getElementById("master3");
    203  var external = doc.getElementById("external");
    204 
    205  Assert.equal(ChromeUtils.getClassName(master1), "XULElement");
    206  Assert.equal(ChromeUtils.getClassName(master2), "XULElement");
    207  Assert.equal(ChromeUtils.getClassName(master3), "XULElement");
    208  Assert.equal(ChromeUtils.getClassName(external), "XULElement");
    209 
    210  // Basic tests
    211  Assert.equal(root.getElementsByAttribute("foo", "foo").length, 14);
    212  Assert.equal(master1.getElementsByAttribute("foo", "foo").length, 4);
    213 
    214  Assert.equal(root.getElementsByAttribute("foo", "bar").length, 7);
    215  Assert.equal(master1.getElementsByAttribute("foo", "bar").length, 2);
    216 
    217  Assert.equal(root.getElementsByAttribute("bar", "bar").length, 7);
    218  Assert.equal(master1.getElementsByAttribute("bar", "bar").length, 2);
    219 
    220  Assert.equal(root.getElementsByAttribute("foo", "*").length, 21);
    221  Assert.equal(master1.getElementsByAttribute("foo", "*").length, 6);
    222 
    223  // Test the various combinations of attributes with colons in the name
    224  Assert.equal(root.getElementsByAttribute("foo:foo", "foo").length, 16);
    225  Assert.equal(master1.getElementsByAttribute("foo:foo", "foo").length, 5);
    226  Assert.equal(master2.getElementsByAttribute("foo:foo", "foo").length, 4);
    227  Assert.equal(master3.getElementsByAttribute("foo:foo", "foo").length, 4);
    228  Assert.equal(external.getElementsByAttribute("foo:foo", "foo").length, 2);
    229 
    230  Assert.equal(root.getElementsByAttribute("foo:foo", "bar").length, 9);
    231  Assert.equal(master1.getElementsByAttribute("foo:foo", "bar").length, 2);
    232  Assert.equal(master2.getElementsByAttribute("foo:foo", "bar").length, 3);
    233  Assert.equal(master3.getElementsByAttribute("foo:foo", "bar").length, 2);
    234  Assert.equal(external.getElementsByAttribute("foo:foo", "bar").length, 1);
    235 
    236  Assert.equal(root.getElementsByAttribute("foo:bar", "foo").length, 7);
    237  Assert.equal(master1.getElementsByAttribute("foo:bar", "foo").length, 2);
    238  Assert.equal(master2.getElementsByAttribute("foo:bar", "foo").length, 2);
    239  Assert.equal(master3.getElementsByAttribute("foo:bar", "foo").length, 2);
    240  Assert.equal(external.getElementsByAttribute("foo:bar", "foo").length, 1);
    241 
    242  Assert.equal(root.getElementsByAttribute("foo:bar", "bar").length, 14);
    243  Assert.equal(master1.getElementsByAttribute("foo:bar", "bar").length, 4);
    244  Assert.equal(master2.getElementsByAttribute("foo:bar", "bar").length, 4);
    245  Assert.equal(master3.getElementsByAttribute("foo:bar", "bar").length, 4);
    246  Assert.equal(external.getElementsByAttribute("foo:bar", "bar").length, 2);
    247 
    248  Assert.equal(root.getElementsByAttribute("foo2:foo", "foo").length, 8);
    249  Assert.equal(master1.getElementsByAttribute("foo2:foo", "foo").length, 2);
    250  Assert.equal(master2.getElementsByAttribute("foo2:foo", "foo").length, 2);
    251  Assert.equal(master3.getElementsByAttribute("foo2:foo", "foo").length, 3);
    252  Assert.equal(external.getElementsByAttribute("foo2:foo", "foo").length, 1);
    253 
    254  Assert.equal(root.getElementsByAttribute("foo:foo", "*").length, 25);
    255  Assert.equal(master1.getElementsByAttribute("foo:foo", "*").length, 7);
    256  Assert.equal(master2.getElementsByAttribute("foo:foo", "*").length, 7);
    257  Assert.equal(master3.getElementsByAttribute("foo:foo", "*").length, 6);
    258  Assert.equal(external.getElementsByAttribute("foo:foo", "*").length, 3);
    259 
    260  Assert.equal(root.getElementsByAttribute("foo2:foo", "bar").length, 0);
    261  Assert.equal(root.getElementsByAttribute("foo:foo", "baz").length, 0);
    262 }
    263 
    264 function test_getElementsByAttributeNS() {
    265  var doc = ParseFile("nodelist_data_2.xhtml");
    266  var root = doc.documentElement;
    267 
    268  Assert.equal(ChromeUtils.getClassName(root), "XULElement");
    269 
    270  // Check that getElementsByAttributeNS returns an HTMLCollection.
    271  Assert.equal(
    272    ChromeUtils.getClassName(root.getElementsByAttributeNS("*", "*", "*")),
    273    "HTMLCollection"
    274  );
    275 
    276  var master1 = doc.getElementById("master1");
    277  var master2 = doc.getElementById("master2");
    278  var master3 = doc.getElementById("master3");
    279  var external = doc.getElementById("external");
    280 
    281  Assert.equal(ChromeUtils.getClassName(master1), "XULElement");
    282  Assert.equal(ChromeUtils.getClassName(master2), "XULElement");
    283  Assert.equal(ChromeUtils.getClassName(master3), "XULElement");
    284  Assert.equal(ChromeUtils.getClassName(external), "XULElement");
    285 
    286  // Test wildcard namespace
    287  Assert.equal(root.getElementsByAttributeNS("*", "foo", "foo").length, 38);
    288  Assert.equal(master1.getElementsByAttributeNS("*", "foo", "foo").length, 11);
    289  Assert.equal(master2.getElementsByAttributeNS("*", "foo", "foo").length, 10);
    290  Assert.equal(master3.getElementsByAttributeNS("*", "foo", "foo").length, 11);
    291 
    292  Assert.equal(root.getElementsByAttributeNS("*", "foo", "bar").length, 16);
    293  Assert.equal(master1.getElementsByAttributeNS("*", "foo", "bar").length, 4);
    294  Assert.equal(master2.getElementsByAttributeNS("*", "foo", "bar").length, 5);
    295  Assert.equal(master3.getElementsByAttributeNS("*", "foo", "bar").length, 4);
    296 
    297  Assert.equal(root.getElementsByAttributeNS("*", "bar", "bar").length, 21);
    298  Assert.equal(master1.getElementsByAttributeNS("*", "bar", "bar").length, 6);
    299  Assert.equal(master2.getElementsByAttributeNS("*", "bar", "bar").length, 6);
    300  Assert.equal(master3.getElementsByAttributeNS("*", "bar", "bar").length, 6);
    301 
    302  Assert.equal(root.getElementsByAttributeNS("*", "foo", "*").length, 54);
    303  Assert.equal(master1.getElementsByAttributeNS("*", "foo", "*").length, 15);
    304  Assert.equal(master2.getElementsByAttributeNS("*", "foo", "*").length, 15);
    305  Assert.equal(master3.getElementsByAttributeNS("*", "foo", "*").length, 15);
    306 
    307  // Test null namespace. This should be the same as getElementsByAttribute.
    308  Assert.equal(
    309    root.getElementsByAttributeNS("", "foo", "foo").length,
    310    root.getElementsByAttribute("foo", "foo").length
    311  );
    312  Assert.equal(
    313    master1.getElementsByAttributeNS("", "foo", "foo").length,
    314    master1.getElementsByAttribute("foo", "foo").length
    315  );
    316  Assert.equal(
    317    master2.getElementsByAttributeNS("", "foo", "foo").length,
    318    master2.getElementsByAttribute("foo", "foo").length
    319  );
    320  Assert.equal(
    321    master3.getElementsByAttributeNS("", "foo", "foo").length,
    322    master3.getElementsByAttribute("foo", "foo").length
    323  );
    324 
    325  // Test namespace "foo"
    326  Assert.equal(root.getElementsByAttributeNS("foo", "foo", "foo").length, 24);
    327  Assert.equal(master1.getElementsByAttributeNS("foo", "foo", "foo").length, 7);
    328  Assert.equal(master2.getElementsByAttributeNS("foo", "foo", "foo").length, 6);
    329  Assert.equal(master3.getElementsByAttributeNS("foo", "foo", "foo").length, 7);
    330 
    331  Assert.equal(root.getElementsByAttributeNS("foo", "foo", "bar").length, 9);
    332  Assert.equal(master1.getElementsByAttributeNS("foo", "foo", "bar").length, 2);
    333  Assert.equal(master2.getElementsByAttributeNS("foo", "foo", "bar").length, 3);
    334  Assert.equal(master3.getElementsByAttributeNS("foo", "foo", "bar").length, 2);
    335 
    336  Assert.equal(root.getElementsByAttributeNS("foo", "bar", "foo").length, 7);
    337  Assert.equal(master1.getElementsByAttributeNS("foo", "bar", "foo").length, 2);
    338  Assert.equal(master2.getElementsByAttributeNS("foo", "bar", "foo").length, 2);
    339  Assert.equal(master3.getElementsByAttributeNS("foo", "bar", "foo").length, 2);
    340 
    341  Assert.equal(root.getElementsByAttributeNS("foo", "bar", "bar").length, 14);
    342  Assert.equal(master1.getElementsByAttributeNS("foo", "bar", "bar").length, 4);
    343  Assert.equal(master2.getElementsByAttributeNS("foo", "bar", "bar").length, 4);
    344  Assert.equal(master3.getElementsByAttributeNS("foo", "bar", "bar").length, 4);
    345 }