tor-browser

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

HTMLCollection-supported-property-names.html (4458B)


      1 <!doctype html>
      2 <meta charset=utf-8>
      3 <link rel=help href=https://dom.spec.whatwg.org/#interface-htmlcollection>
      4 <script src=/resources/testharness.js></script>
      5 <script src=/resources/testharnessreport.js></script>
      6 
      7 <div id=log></div>
      8 
      9 <!-- with no attribute -->
     10 <span></span>
     11 
     12 <!-- with `id` attribute -->
     13 <span id=''></span>
     14 <span id='some-id'></span>
     15 <span id='some-id'></span><!-- to ensure no duplicates -->
     16 
     17 <!-- with `name` attribute -->
     18 <span name=''></span>
     19 <span name='some-name'></span>
     20 <span name='some-name'></span><!-- to ensure no duplicates -->
     21 
     22 <!-- with `name` and `id` attribute -->
     23 <span id='another-id' name='another-name'></span>
     24 
     25 <script>
     26 test(function () {
     27  var elements = document.getElementsByTagName("span");
     28  assert_array_equals(
     29    Object.getOwnPropertyNames(elements),
     30    ['0', '1', '2', '3', '4', '5', '6', '7', 'some-id', 'some-name', 'another-id', 'another-name']
     31  );
     32 }, 'Object.getOwnPropertyNames on HTMLCollection');
     33 
     34 test(function () {
     35  var elem = document.createElementNS('some-random-namespace', 'foo');
     36  this.add_cleanup(function () {elem.remove();});
     37  elem.setAttribute("name", "some-name");
     38  document.body.appendChild(elem);
     39 
     40  var elements = document.getElementsByTagName("foo");
     41  assert_array_equals(Object.getOwnPropertyNames(elements), ['0']);
     42 }, 'Object.getOwnPropertyNames on HTMLCollection with non-HTML namespace');
     43 
     44 test(function () {
     45  var elem = document.createElement('foo');
     46  this.add_cleanup(function () {elem.remove();});
     47  document.body.appendChild(elem);
     48 
     49  var elements = document.getElementsByTagName("foo");
     50  elements.someProperty = "some value";
     51 
     52  assert_array_equals(Object.getOwnPropertyNames(elements), ['0', 'someProperty']);
     53 }, 'Object.getOwnPropertyNames on HTMLCollection with expando object');
     54 
     55 test(function() {
     56  var elements = document.getElementsByTagName("span");
     57  var old_item = elements["some-id"];
     58  var old_desc = Object.getOwnPropertyDescriptor(elements, "some-id");
     59  assert_equals(old_desc.value, old_item);
     60  assert_false(old_desc.enumerable);
     61  assert_true(old_desc.configurable);
     62  assert_false(old_desc.writable);
     63 
     64  elements["some-id"] = 5;
     65  assert_equals(elements["some-id"], old_item);
     66  assert_throws_js(TypeError, function() {
     67    "use strict";
     68    elements["some-id"] = 5;
     69  });
     70  assert_throws_js(TypeError, function() {
     71    Object.defineProperty(elements, "some-id", { value: 5 });
     72  });
     73 
     74  delete elements["some-id"];
     75  assert_equals(elements["some-id"], old_item);
     76 
     77  assert_throws_js(TypeError, function() {
     78    "use strict";
     79    delete elements["some-id"];
     80  });
     81  assert_equals(elements["some-id"], old_item);
     82 
     83 }, 'Trying to set an expando that would shadow an already-existing named property');
     84 
     85 test(function() {
     86  var elements = document.getElementsByTagName("span");
     87  var old_item = elements["new-id"];
     88  var old_desc = Object.getOwnPropertyDescriptor(elements, "new-id");
     89  assert_equals(old_item, undefined);
     90  assert_equals(old_desc, undefined);
     91 
     92  elements["new-id"] = 5;
     93  assert_equals(elements["new-id"], 5);
     94 
     95  var span = document.createElement("span");
     96  this.add_cleanup(function () {span.remove();});
     97  span.id = "new-id";
     98  document.body.appendChild(span);
     99 
    100  assert_equals(elements.namedItem("new-id"), span);
    101  assert_equals(elements["new-id"], 5);
    102 
    103  delete elements["new-id"];
    104  assert_equals(elements["new-id"], span);
    105 }, 'Trying to set an expando that shadows a named property that gets added later');
    106 
    107 test(function() {
    108  var elements = document.getElementsByTagName("span");
    109  var old_item = elements["new-id2"];
    110  var old_desc = Object.getOwnPropertyDescriptor(elements, "new-id2");
    111  assert_equals(old_item, undefined);
    112  assert_equals(old_desc, undefined);
    113 
    114  Object.defineProperty(elements, "new-id2", { configurable: false, writable:
    115                                              false, value: 5 });
    116  assert_equals(elements["new-id2"], 5);
    117 
    118  var span = document.createElement("span");
    119  this.add_cleanup(function () {span.remove();});
    120  span.id = "new-id2";
    121  document.body.appendChild(span);
    122 
    123  assert_equals(elements.namedItem("new-id2"), span);
    124  assert_equals(elements["new-id2"], 5);
    125 
    126  delete elements["new-id2"];
    127  assert_equals(elements["new-id2"], 5);
    128 
    129  assert_throws_js(TypeError, function() {
    130    "use strict";
    131    delete elements["new-id2"];
    132  });
    133  assert_equals(elements["new-id2"], 5);
    134 }, 'Trying to set a non-configurable expando that shadows a named property that gets added later');
    135 </script>