tor-browser

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

htmlallcollection.html (11648B)


      1 <!DOCTYPE HTML>
      2 <html id="root">
      3 <head>
      4 <title>HTMLAllCollection Tests</title>
      5 <link rel="author" title="Dan Druta" href="mailto:dan.druta@att.com"/>
      6 <link rel="author" title="Philip Jägenstedt" href="mailto:philip@foolip.org"/>
      7 <link rel="help" href="https://html.spec.whatwg.org/multipage/infrastructure.html#the-htmlallcollection-interface"/>
      8 <meta name="flags" content="TOKENS" />
      9 <meta name="assert" content="TEST ASSERTION"/>
     10 <script src="/resources/testharness.js"></script>
     11 <script src="/resources/testharnessreport.js"></script>
     12 </head>
     13 <body id="tags">
     14 <img src="../../../../images/green.png" name="picture">
     15 <a name="foo"></a>
     16 <a name="foo"></a>
     17 <span id="42"></span>
     18 <span id="043"></span>
     19 <div id="4294967294"></div>
     20 <div id="4294967295"></div>
     21 <div id="4294967296"></div>
     22 <div id="undefined"></div>
     23 <div id="null"></div>
     24 <div name="divwithname"></div>
     25 <div id="-0"></div>
     26 <div id="log"></div>
     27 <script>
     28 var anchors = document.querySelectorAll("a");
     29 var divs = document.querySelectorAll("div");
     30 var scripts = document.querySelectorAll("script");
     31 var spans = document.querySelectorAll("span");
     32 
     33 test(function() {
     34  assert_true(document.all instanceof HTMLAllCollection);
     35 }, "document.all is an HTMLAllCollection");
     36 
     37 test(function() {
     38  assert_equals(document.all.length, 25);
     39 }, "length attribute");
     40 
     41 // indexed property getter
     42 
     43 test(function() {
     44  assert_equals(document.all[0], document.documentElement);
     45  assert_equals(document.all[-0], document.documentElement);
     46  assert_equals(document.all[24], scripts[2]);
     47 }, "indexed property getter");
     48 
     49 test(function() {
     50  assert_equals(document.all[-1], undefined);
     51  assert_equals(document.all[25], undefined);
     52  assert_equals(document.all[42], undefined);
     53  assert_equals(document.all[43], undefined);
     54  assert_equals(document.all[4294967294], undefined);
     55  assert_equals(document.all[4294967295], divs[1]);
     56  assert_equals(document.all[4294967296], divs[2]);
     57 }, "indexed property getter out of range");
     58 
     59 // named property getter
     60 
     61 test(function() {
     62  assert_equals(document.all["root"], document.documentElement);
     63  assert_equals(document.all["flags"].content, "TOKENS");
     64  assert_equals(document.all["picture"].tagName, "IMG");
     65 }, "named property getter");
     66 
     67 test(function() {
     68  assert_equals(document.all.root, document.documentElement);
     69  assert_equals(document.all.flags.content, "TOKENS");
     70  assert_equals(document.all.picture.tagName, "IMG");
     71 }, "named property getter with dot syntax");
     72 
     73 test(function() {
     74  assert_equals(document.all[""], undefined);
     75  assert_equals(document.all["noname"], undefined);
     76  assert_equals(document.all.noname, undefined);
     77  assert_equals(document.all["divwithname"], undefined);
     78  assert_equals(document.all.divwithname, undefined);
     79 }, "named property getter with invalid name");
     80 
     81 test(function() {
     82  var collection = document.all["foo"];
     83  assert_equals(collection.length, 2);
     84  assert_equals(collection[0], anchors[0]);
     85  assert_equals(collection[1], anchors[1]);
     86 }, "named property getter returning collection");
     87 
     88 test(function() {
     89  assert_equals(document.all["0"], document.documentElement);
     90  assert_equals(document.all["24"], document.scripts[2]);
     91  assert_equals(document.all["25"], undefined);
     92  assert_equals(document.all["42"], undefined);
     93  assert_equals(document.all["43"], undefined);
     94 }, "named property getter with \"array index property name\"");
     95 
     96 test(function() {
     97  assert_equals(document.all["00"], undefined);
     98  assert_equals(document.all["042"], undefined);
     99  assert_equals(document.all["043"], spans[1]);
    100  assert_equals(document.all["4294967294"], undefined);
    101  assert_equals(document.all["4294967295"], divs[1]);
    102  assert_equals(document.all["4294967296"], divs[2]);
    103  assert_equals(document.all["-0"], divs[6]);
    104 }, "named property getter with invalid \"array index property name\"");
    105 
    106 test(function() {
    107  assert_equals(document.all[undefined], divs[3]);
    108 }, "named property getter with undefined");
    109 
    110 test(function() {
    111  assert_equals(document.all[null], divs[4]);
    112 }, "named property getter with null");
    113 
    114 // namedItem method
    115 
    116 test(function() {
    117  assert_equals(document.all.namedItem("root"), document.documentElement);
    118  assert_equals(document.all.namedItem("flags").content, "TOKENS");
    119  assert_equals(document.all.namedItem("picture").tagName, "IMG");
    120 }, "namedItem method");
    121 
    122 test(function() {
    123  assert_equals(document.all.namedItem(""), null);
    124  assert_equals(document.all.namedItem("noname"), null);
    125  assert_equals(document.all.namedItem("divwithname"), null);
    126 }, "namedItem method with invalid name");
    127 
    128 test(function() {
    129  var collection = document.all.namedItem("foo");
    130  assert_equals(collection.length, 2);
    131  assert_equals(collection[0], anchors[0]);
    132  assert_equals(collection[1], anchors[1]);
    133 }, "namedItem method returning collection");
    134 
    135 test(function() {
    136  assert_equals(document.all.namedItem("0"), null);
    137  assert_equals(document.all.namedItem("23"), null);
    138  assert_equals(document.all.namedItem("24"), null);
    139  assert_equals(document.all.namedItem("42"), spans[0]);
    140  assert_equals(document.all.namedItem("43"), null);
    141 }, "namedItem method with \"array index property name\"");
    142 
    143 test(function() {
    144  assert_equals(document.all.namedItem("00"), null);
    145  assert_equals(document.all.namedItem("042"), null);
    146  assert_equals(document.all.namedItem("043"), spans[1]);
    147  assert_equals(document.all.namedItem("4294967294"), divs[0]);
    148  assert_equals(document.all.namedItem("4294967295"), divs[1]);
    149  assert_equals(document.all.namedItem("4294967296"), divs[2]);
    150  assert_equals(document.all.namedItem("-0"), divs[6]);
    151 }, "namedItem method with invalid \"array index property name\"");
    152 
    153 test(function() {
    154  assert_equals(document.all.namedItem(undefined), divs[3]);
    155 }, "namedItem method with undefined");
    156 
    157 test(function() {
    158  assert_equals(document.all.namedItem(null), divs[4]);
    159 }, "namedItem method with null");
    160 
    161 test(function() {
    162  assert_equals(document.all.namedItem.length, 1);
    163  assert_throws_js(TypeError, function() {
    164    document.all.namedItem();
    165  });
    166 }, "namedItem method with no argument");
    167 
    168 // legacy caller
    169 
    170 test(function() {
    171  assert_equals(document.all("root"), document.documentElement);
    172  assert_equals(document.all("flags").content, "TOKENS");
    173  assert_equals(document.all("picture").tagName, "IMG");
    174 }, "legacy caller");
    175 
    176 test(function() {
    177  assert_equals(document.all(""), null);
    178  assert_equals(document.all("noname"), null);
    179  assert_equals(document.all("divwithname"), null);
    180 }, "legacy caller with invalid name");
    181 
    182 test(function() {
    183  var collection = document.all("foo");
    184  assert_equals(collection.length, 2);
    185  assert_equals(collection[0], anchors[0]);
    186  assert_equals(collection[1], anchors[1]);
    187 }, "legacy caller returning collection");
    188 
    189 test(function() {
    190  assert_equals(document.all("0"), document.documentElement);
    191  assert_equals(document.all("24"), document.scripts[2]);
    192  assert_equals(document.all("25"), null);
    193  assert_equals(document.all("42"), null);
    194  assert_equals(document.all("43"), null);
    195 }, "legacy caller with \"array index property name\"");
    196 
    197 test(function() {
    198  assert_equals(document.all(0), document.documentElement);
    199  assert_equals(document.all(24), document.scripts[2]);
    200  assert_equals(document.all(25), null);
    201  assert_equals(document.all(42), null);
    202  assert_equals(document.all(43), null);
    203 }, "legacy caller with \"array index property name\" as number");
    204 
    205 test(function() {
    206  assert_equals(document.all("00"), null);
    207  assert_equals(document.all("042"), null);
    208  assert_equals(document.all("043"), spans[1]);
    209  assert_equals(document.all("4294967294"), null);
    210  assert_equals(document.all("4294967295"), divs[1]);
    211  assert_equals(document.all("4294967296"), divs[2]);
    212  assert_equals(document.all("-0"), divs[6]);
    213 }, "legacy caller with invalid \"array index property name\"");
    214 
    215 test(function() {
    216  assert_equals(document.all(undefined), null);
    217 }, "legacy caller with undefined");
    218 
    219 test(function() {
    220  assert_equals(document.all(null), divs[4]);
    221 }, "legacy caller with null");
    222 
    223 test(function() {
    224  assert_equals(document.all(), null);
    225 }, "legacy caller with no argument");
    226 
    227 test(function() {
    228  assert_throws_js(TypeError, function() {
    229    new document.all("picture");
    230  }, "New should not work on document.all()");
    231 
    232  // https://esdiscuss.org/topic/isconstructor#content-11
    233  assert_throws_js(TypeError, function() {
    234    new (new Proxy(document.all, {
    235      construct: function() {
    236        return {};
    237      }
    238    }));
    239  }, "Proxies should treat document.all() as not-a-constructor");
    240 }, "legacy caller is not a constructor");
    241 
    242 test(function() {
    243  [undefined, null, {}, document.body].forEach(function(thisValue) {
    244    assert_equals(Function.prototype.call.call(document.all, thisValue, "043"), spans[1]);
    245  });
    246 }, "legacy caller with arbitrary this value");
    247 
    248 // item method
    249 
    250 test(function() {
    251  assert_equals(document.all.item("root"), document.documentElement);
    252  assert_equals(document.all.item("flags").content, "TOKENS");
    253  assert_equals(document.all.item("picture").tagName, "IMG");
    254 }, "item method");
    255 
    256 test(function() {
    257  assert_equals(document.all.item(""), null);
    258  assert_equals(document.all.item("noname"), null);
    259  assert_equals(document.all.item("divwithname"), null);
    260 }, "item method with invalid name");
    261 
    262 test(function() {
    263  var collection = document.all.item("foo");
    264  assert_equals(collection.length, 2);
    265  assert_equals(collection[0], anchors[0]);
    266  assert_equals(collection[1], anchors[1]);
    267 }, "item method returning collection");
    268 
    269 test(function() {
    270  assert_equals(document.all.item("0"), document.documentElement);
    271  assert_equals(document.all.item("24"), document.scripts[2]);
    272  assert_equals(document.all.item("25"), null);
    273  assert_equals(document.all.item("42"), null);
    274  assert_equals(document.all.item("43"), null);
    275 }, "item method with \"array index property name\"");
    276 
    277 test(function() {
    278  assert_equals(document.all.item(0), document.documentElement);
    279  assert_equals(document.all.item(24), document.scripts[2]);
    280  assert_equals(document.all.item(25), null);
    281  assert_equals(document.all.item(42), null);
    282  assert_equals(document.all.item(43), null);
    283 }, "item method with \"array index property name\" as number");
    284 
    285 test(function() {
    286  assert_equals(document.all.item("00"), null);
    287  assert_equals(document.all.item("042"), null);
    288  assert_equals(document.all.item("043"), spans[1]);
    289  assert_equals(document.all.item("4294967294"), null);
    290  assert_equals(document.all.item("4294967295"), divs[1]);
    291  assert_equals(document.all.item("4294967296"), divs[2]);
    292  assert_equals(document.all.item("-0"), divs[6]);
    293 }, "item method with invalid \"array index property name\"");
    294 
    295 test(function() {
    296  assert_equals(document.all.item(undefined), null);
    297 }, "item method with undefined");
    298 
    299 test(function() {
    300  assert_equals(document.all.item(null), divs[4]);
    301 }, "item method with null");
    302 
    303 test(function() {
    304  assert_equals(document.all.item.length, 0);
    305  assert_equals(document.all.item(), null);
    306 }, "item method with no argument");
    307 
    308 // live HTMLCollection
    309 
    310 test(function() {
    311  var collections = [
    312    document.all["foo"],
    313    document.all.namedItem("foo"),
    314    document.all("foo"),
    315    document.all.item("foo"),
    316  ];
    317  // a new HTMLCollection is created for each call
    318  for (var i = 0; i < collections.length; i++) {
    319    assert_true(collections[i] instanceof HTMLCollection);
    320    for (var j = i + 1; j < collections.length; j++) {
    321      assert_not_equals(collections[i], collections[j]);
    322    }
    323  }
    324  for (var c of collections) {
    325    assert_equals(c.length, 2);
    326  }
    327  anchors[0].name = "bar";
    328  for (var c of collections) {
    329    assert_equals(c.length, 1);
    330  }
    331 }, "collections are new live HTMLCollection instances");
    332 </script>
    333 </body>
    334 </html>