tor-browser

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

test_bug588990.html (8775B)


      1 <html>
      2 <!--
      3 https://bugzilla.mozilla.org/show_bug.cgi?id=588990
      4 -->
      5 <head>
      6  <title>Test for Bug 588990</title>
      7  <script src="/tests/SimpleTest/SimpleTest.js"></script>
      8  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
      9 </head>
     10 <body>
     11 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=588990">Mozilla Bug 588990</a>
     12 <!-- DOM to muck around with for tests -->
     13 <p id="root">
     14 <img name="n1">
     15 <img name="n2">
     16 <img name="n2">
     17 <img name="n3">
     18 <img name="n3">
     19 <img name="n3">
     20 </p>
     21 
     22 <pre id="test">
     23 <script class="testbody" type="text/javascript">
     24 
     25 function test() {
     26  root = $('root');
     27  i1_1 = root.children[0];
     28  i2_1 = root.children[1];
     29  i2_2 = root.children[2];
     30  i3_1 = root.children[3];
     31  i3_2 = root.children[4];
     32  i3_3 = root.children[5];
     33 
     34  function checkHasName(test) {
     35    // Check name first to avoid flushes from hiding problems
     36    checkHasNameNoDocProp(test);
     37 
     38    is(document.n1, i1_1, "i1_1 doc.name " + test);
     39    is(document.n2[0], i2_1, "i2_1 doc.name " + test);
     40    is(document.n2[1], i2_2, "i2_2 doc.name " + test);
     41    is(document.n2.length, 2, "doc.name.length " + test);
     42    is(document.n3[0], i3_1, "i3_1 doc.name " + test);
     43    is(document.n3[1], i3_2, "i3_2 doc.name " + test);
     44    is(document.n3[2], i3_3, "i3_3 doc.name " + test);
     45    is(document.n3.length, 3, "doc.name.length " + test);
     46  }
     47 
     48  function checkHasNameNoDocProp(test) {
     49    is(i1_1.name, "n1", "i1_1 name " + test);
     50    is(i2_1.name, "n2", "i2_1 name " + test);
     51    is(i2_2.name, "n2", "i2_2 name " + test);
     52    is(i3_1.name, "n3", "i3_1 name " + test);
     53    is(i3_2.name, "n3", "i3_2 name " + test);
     54    is(i3_3.name, "n3", "i3_3 name " + test);
     55  }
     56 
     57  function checkHasNoName(removed, test) {
     58    is(i1_1.name, "", "i1_1 name " + test);
     59    is(i2_1.name, "", "i2_1 name " + test);
     60    is(i2_2.name, "", "i2_2 name " + test);
     61    is(i3_1.name, "", "i3_1 name " + test);
     62    is(i3_2.name, "", "i3_2 name " + test);
     63    is(i3_3.name, "", "i3_3 name " + test);
     64 
     65    var attrValue = removed ? null : "";
     66    is(i1_1.getAttribute("name"), attrValue, "i1_1 getAttribute " + test);
     67    is(i2_1.getAttribute("name"), attrValue, "i2_1 getAttribute " + test);
     68    is(i2_2.getAttribute("name"), attrValue, "i2_2 getAttribute " + test);
     69    is(i3_1.getAttribute("name"), attrValue, "i3_1 getAttribute " + test);
     70    is(i3_2.getAttribute("name"), attrValue, "i3_2 getAttribute " + test);
     71    is(i3_3.getAttribute("name"), attrValue, "i3_3 getAttribute " + test);
     72 
     73    is(document.n1,  undefined, "doc.n1 " + test);
     74    is(document.n2,  undefined, "doc.n2 " + test);
     75    is(document.n3,  undefined, "doc.n3 " + test);
     76  }
     77 
     78  // Check that dynamic modifications of attribute work
     79 
     80  checkHasName("in markup");
     81 
     82  i1_1.name = "";
     83  i2_1.name = "";
     84  i2_2.name = "";
     85  i3_1.name = "";
     86  i3_2.name = "";
     87  i3_3.name = "";
     88 
     89  checkHasNoName(false, "set to empty");
     90 
     91  i1_1.name = "n1";
     92  i2_1.name = "n2";
     93  i2_2.name = "n2";
     94  i3_1.name = "n3";
     95  i3_2.name = "n3";
     96  i3_3.name = "n3";
     97 
     98  checkHasName("set using .name");
     99 
    100  i1_1.setAttribute("name", "");
    101  i2_1.setAttribute("name", "");
    102  i2_2.setAttribute("name", "");
    103  i3_1.setAttribute("name", "");
    104  i3_2.setAttribute("name", "");
    105  i3_3.setAttribute("name", "");
    106 
    107  checkHasNoName(false, "setAttribute to empty");
    108 
    109  i1_1.name = "n1";
    110  i2_1.name = "n2";
    111  i2_2.name = "n2";
    112  i3_1.name = "n3";
    113  i3_2.name = "n3";
    114  i3_3.name = "n3";
    115 
    116  checkHasName("set again using .name");
    117 
    118  i1_1.removeAttribute("name");
    119  i2_1.removeAttribute("name");
    120  i2_2.removeAttribute("name");
    121  i3_1.removeAttribute("name");
    122  i3_2.removeAttribute("name");
    123  i3_3.removeAttribute("name");
    124 
    125  checkHasNoName(true, "removed attribute");
    126 
    127  i1_1.setAttribute("name", "n1");
    128  i2_1.setAttribute("name", "n2");
    129  i2_2.setAttribute("name", "n2");
    130  i3_1.setAttribute("name", "n3");
    131  i3_2.setAttribute("name", "n3");
    132  i3_3.setAttribute("name", "n3");
    133 
    134  checkHasName("set using setAttribute");
    135 
    136  t1 = document.createElement("img");
    137  t1.name = "n1";
    138  t2 = document.createElement("img");
    139  t2.name = "n2";
    140  t3 = document.createElement("img");
    141  t3.name = "n2";
    142  t4 = document.createElement("img");
    143  t4.name = "n3";
    144  t5 = document.createElement("img");
    145  t5.name = "n3";
    146  t6 = document.createElement("img");
    147  t6.name = "n3";
    148 
    149  // Check that inserting elements before/after existing work
    150 
    151  function insertAfter(newChild, existing) {
    152    existing.parentNode.insertBefore(newChild, existing.nextSibling);
    153  }
    154  function insertBefore(newChild, existing) {
    155    existing.parentNode.insertBefore(newChild, existing);
    156  }
    157  function removeNode(child) {
    158    child.remove();
    159  }
    160 
    161  insertAfter(t1, i1_1);
    162  insertAfter(t2, i2_1);
    163  insertAfter(t3, i2_2);
    164  insertAfter(t4, i3_1);
    165  insertAfter(t5, i3_2);
    166  insertAfter(t6, i3_3);
    167 
    168  checkHasNameNoDocProp("inserted after");
    169  is(document.n1[0], i1_1, "i1_1 doc.name inserted after");
    170  is(document.n1[1], t1, "t1 doc.name inserted after");
    171  is(document.n1.length, 2, "doc.name1.length inserted after");
    172  is(document.n2[0], i2_1, "i2_1 doc.name inserted after");
    173  todo_is(document.n2[1], t2, "This is where t2 should show up. The elements in here should be in order-in-document rather than order-of-insertion");
    174  is(document.n2[1], i2_2, "i2_2 doc.name inserted after");
    175  is(document.n2[2], t2, "t2 doc.name inserted after");
    176  is(document.n2[3], t3, "t3 doc.name inserted after");
    177  is(document.n2.length, 4, "doc.name2.length inserted after");
    178  is(document.n3[0], i3_1, "i3_1 doc.name inserted after");
    179  is(document.n3[1], i3_2, "i3_3 doc.name inserted after");
    180  is(document.n3[2], i3_3, "i3_2 doc.name inserted after");
    181  is(document.n3[3], t4, "t4 doc.name inserted after");
    182  is(document.n3[4], t5, "t5 doc.name inserted after");
    183  is(document.n3[5], t6, "t6 doc.name inserted after");
    184  is(document.n3.length, 6, "doc.name3.length inserted after");
    185 
    186  insertBefore(t1, i1_1);
    187  insertBefore(t2, i2_1);
    188  insertBefore(t3, i2_2);
    189  insertBefore(t4, i3_1);
    190  insertBefore(t5, i3_2);
    191  insertBefore(t6, i3_3);
    192 
    193  checkHasNameNoDocProp("inserted before");
    194  is(document.n1[0], i1_1, "i1_1 doc.name inserted before");
    195  is(document.n1[1], t1, "t1 doc.name inserted before");
    196  is(document.n1.length, 2, "doc.name1.length inserted before");
    197  is(document.n2[0], i2_1, "i2_1 doc.name inserted before");
    198  is(document.n2[1], i2_2, "i2_2 doc.name inserted before");
    199  is(document.n2[2], t2, "t2 doc.name inserted before");
    200  is(document.n2[3], t3, "t3 doc.name inserted before");
    201  is(document.n2.length, 4, "doc.name2.length inserted before");
    202  is(document.n3[0], i3_1, "i3_1 doc.name inserted before");
    203  is(document.n3[1], i3_2, "i3_3 doc.name inserted before");
    204  is(document.n3[2], i3_3, "i3_2 doc.name inserted before");
    205  is(document.n3[3], t4, "t4 doc.name inserted before");
    206  is(document.n3[4], t5, "t5 doc.name inserted before");
    207  is(document.n3[5], t6, "t6 doc.name inserted before");
    208  is(document.n3.length, 6, "doc.name3.length inserted before");
    209 
    210  t1.removeAttribute("name");
    211  t2.removeAttribute("name");
    212  t3.removeAttribute("name");
    213  t4.removeAttribute("name");
    214  t5.removeAttribute("name");
    215  t6.removeAttribute("name");
    216 
    217  checkHasName("removed tx attribute");
    218 
    219  t1.setAttribute("name", "n1");
    220  t2.setAttribute("name", "n2");
    221  t3.setAttribute("name", "n2");
    222  t4.setAttribute("name", "n3");
    223  t5.setAttribute("name", "n3");
    224  t6.setAttribute("name", "n3");
    225 
    226  checkHasNameNoDocProp("inserted before");
    227  is(document.n1[0], i1_1, "i1_1 doc.name inserted before");
    228  is(document.n1[1], t1, "t1 doc.name inserted before");
    229  is(document.n1.length, 2, "doc.name1.length inserted before");
    230  is(document.n2[0], i2_1, "i2_1 doc.name inserted before");
    231  is(document.n2[1], i2_2, "i2_2 doc.name inserted before");
    232  is(document.n2[2], t2, "t2 doc.name inserted before");
    233  is(document.n2[3], t3, "t3 doc.name inserted before");
    234  is(document.n2.length, 4, "doc.name2.length inserted before");
    235  is(document.n3[0], i3_1, "i3_1 doc.name inserted before");
    236  is(document.n3[1], i3_2, "i3_3 doc.name inserted before");
    237  is(document.n3[2], i3_3, "i3_2 doc.name inserted before");
    238  is(document.n3[3], t4, "t4 doc.name inserted before");
    239  is(document.n3[4], t5, "t5 doc.name inserted before");
    240  is(document.n3[5], t6, "t6 doc.name inserted before");
    241  is(document.n3.length, 6, "doc.name3.length inserted before");
    242 
    243  removeNode(t1);
    244  removeNode(t2);
    245  removeNode(t3);
    246  removeNode(t4);
    247  removeNode(t5);
    248  removeNode(t6);
    249 
    250  checkHasName("removed temporaries");
    251 
    252  removeNode(i1_1);
    253  removeNode(i2_1);
    254  removeNode(i2_2);
    255  removeNode(i3_1);
    256  removeNode(i3_2);
    257  removeNode(i3_3);
    258 
    259  checkHasNameNoDocProp("removed node");
    260 
    261  SimpleTest.finish();
    262 }
    263 
    264 SimpleTest.waitForExplicitFinish();
    265 SimpleTest.executeSoon(test);
    266 
    267 </script>
    268 </pre>
    269 </body>
    270 </html>