tor-browser

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

test_checked.html (11022B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <!--
      4 https://bugzilla.mozilla.org/show_bug.cgi?id=418756
      5 -->
      6 <head>
      7  <title>Test for Bug 418756</title>
      8  <script src="/tests/SimpleTest/SimpleTest.js"></script>
      9  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
     10 </head>
     11 <body>
     12 Mozilla bug
     13 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=418756">418756</a>
     14 <p id="display"></p>
     15 <div id="content">
     16  <form id="f1">
     17  </form>
     18  <form id="f2">
     19  </form>
     20 </div>
     21 <pre id="test">
     22 <script class="testbody" type="text/javascript">
     23 
     24 /** Test for Bug 418756 */
     25 var group1;
     26 var group2;
     27 var group3;
     28 
     29 function bounce(node) {
     30  let n = node.nextSibling;
     31  let p = node.parentNode;
     32  p.removeChild(node);
     33  p.insertBefore(node, n);
     34 }
     35 
     36 var createdNodes = [];
     37 
     38 function cleanup() {
     39  for (let node of createdNodes) {
     40    if (node.parentNode) {
     41      node.remove();
     42    }
     43  }
     44 
     45  createdNodes = [];
     46 }
     47 
     48 var typeMapper = {
     49 'c': 'checkbox',
     50 'r': 'radio'
     51 };
     52 
     53 var id = 0;
     54 
     55 // type can be 'c' for 'checkbox' and 'r' for 'radio'
     56 function createNode(type, name, checked) {
     57  let node = document.createElement("input");
     58  node.setAttribute("type",  typeMapper[type]);
     59  if (checked) {
     60    node.setAttribute("checked", "checked");
     61  }
     62  node.setAttribute("id", type + (++id));
     63  node.setAttribute("name", name);
     64  createdNodes.push(node);
     65  return node;
     66 }
     67 
     68 var types = ['c', 'r'];
     69 
     70 // First make sure that setting .checked makes .defaultChecked changes no
     71 // longer affect .checked.
     72 for (let type of types) {
     73  let n = createNode(type, '', false);
     74  is(n.defaultChecked, false, "Bogus defaultChecked on " + typeMapper[type]);
     75  is(n.checked, false, "Bogus checked on " + typeMapper[type]);
     76  n.defaultChecked = true;
     77  is(n.defaultChecked, true, "Bogus defaultChecked on " + typeMapper[type] +
     78                             "after mutation");
     79  is(n.checked, true, "Bogus checked on " + typeMapper[type] +
     80                      "after mutation");
     81  n.checked = false;
     82  is(n.defaultChecked, true, "Bogus defaultChecked on " + typeMapper[type] +
     83                             "after second mutation");
     84  is(n.checked, false, "Bogus checked on " + typeMapper[type] +
     85                       "after second mutation");
     86  n.defaultChecked = false;
     87  is(n.defaultChecked, false, "Bogus defaultChecked on " + typeMapper[type] +
     88                              "after third mutation");
     89  is(n.checked, false, "Bogus checked on " + typeMapper[type] +
     90                       "after third mutation");
     91  n.defaultChecked = true;
     92  is(n.defaultChecked, true, "Bogus defaultChecked on " + typeMapper[type] +
     93                             "after fourth mutation");
     94  is(n.checked, false, "Bogus checked on " + typeMapper[type] +
     95                       "after fourth mutation");
     96 }
     97 
     98 cleanup();
     99 
    100 // Now check that bouncing a control that's the only one of its kind has no
    101 // effect
    102 for (let type of types) {
    103  let n = createNode(type, 'test1', true);
    104  $("f1").appendChild(n);
    105  n.checked = false;
    106  n.defaultChecked = false;
    107  bounce(n);
    108  n.defaultChecked = true;
    109  is(n.checked, false, "We set .checked on this " + typeMapper[type]);
    110 }
    111 
    112 cleanup();
    113 
    114 // Now check that playing with a single radio in a group affects all
    115 // other radios in the group (but not radios not in that group)
    116 group1 = [ createNode('r', 'g1', false),
    117           createNode('r', 'g1', false),
    118           createNode('r', 'g1', false) ];
    119 group2 = [ createNode('r', 'g2', false),
    120           createNode('r', 'g2', false),
    121           createNode('r', 'g2', false) ];
    122 group3 = [ createNode('r', 'g1', false),
    123           createNode('r', 'g1', false),
    124           createNode('r', 'g1', false) ];
    125 for (let g of group1) {
    126  $("f1").appendChild(g);
    127 }
    128 for (let g of group2) {
    129  $("f1").appendChild(g);
    130 }
    131 for (let g of group3) {
    132  $("f2").appendChild(g);
    133 }
    134 
    135 for (let n of [1, 2, 3]) {
    136  for (let g of window["group"+n]) {
    137    is(g.defaultChecked, false,
    138       "group" + n + "[" + window["group"+n].indexOf(g) +
    139       "] defaultChecked wrong pass 1");
    140    is(g.checked, false,
    141       "group" + n + "[" + window["group"+n].indexOf(g) +
    142       "] checkedhecked wrong pass 1");
    143  }
    144 }
    145 
    146 group1[1].defaultChecked = true;
    147 for (let n of [1, 2, 3]) {
    148  for (let g of window["group"+n]) {
    149    is(g.defaultChecked, n == 1 && group1.indexOf(g) == 1,
    150       "group" + n + "[" + window["group"+n].indexOf(g) +
    151       "] defaultChecked wrong pass 2");
    152    is(g.checked, n == 1 && group1.indexOf(g) == 1,
    153       "group" + n + "[" + window["group"+n].indexOf(g) +
    154       "] checked wrong pass 2");
    155  }
    156 }
    157 
    158 group1[0].defaultChecked = true;
    159 for (let n of [1, 2, 3]) {
    160  for (let g of window["group"+n]) {
    161    is(g.defaultChecked, n == 1 && (group1.indexOf(g) == 1 ||
    162                                    group1.indexOf(g) == 0),
    163       "group" + n + "[" + window["group"+n].indexOf(g) +
    164       "] defaultChecked wrong pass 3");
    165    is(g.checked, n == 1 && group1.indexOf(g) == 0,
    166       "group" + n + "[" + window["group"+n].indexOf(g) +
    167       "] checked wrong pass 3");
    168  }
    169 }
    170 
    171 group1[2].defaultChecked = true;
    172 for (let n of [1, 2, 3]) {
    173  for (let g of window["group"+n]) {
    174    is(g.defaultChecked, n == 1,
    175       "group" + n + "[" + window["group"+n].indexOf(g) +
    176       "] defaultChecked wrong pass 4");
    177    is(g.checked, n == 1 && group1.indexOf(g) == 2,
    178       "group" + n + "[" + window["group"+n].indexOf(g) +
    179       "] checked wrong pass 4");
    180  }
    181 }
    182 
    183 var next = group1[1].nextSibling;
    184 var p = group1[1].parentNode;
    185 p.removeChild(group1[1]);
    186 group1[1].defaultChecked = false;
    187 group1[1].defaultChecked = true;
    188 p.insertBefore(group1[1], next);
    189 for (let n of [1, 2, 3]) {
    190  for (let g of window["group"+n]) {
    191    is(g.defaultChecked, n == 1,
    192       "group" + n + "[" + window["group"+n].indexOf(g) +
    193       "] defaultChecked wrong pass 5");
    194    is(g.checked, n == 1 && group1.indexOf(g) == 1,
    195       "group" + n + "[" + window["group"+n].indexOf(g) +
    196       "] checked wrong pass 5");
    197  }
    198 }
    199 
    200 for (let g of group1) {
    201  g.defaultChecked = false;
    202 }
    203 for (let n of [1, 2, 3]) {
    204  for (let g of window["group"+n]) {
    205    is(g.defaultChecked, false,
    206       "group" + n + "[" + window["group"+n].indexOf(g) +
    207       "] defaultChecked wrong pass 6");
    208    is(g.checked, false,
    209       "group" + n + "[" + window["group"+n].indexOf(g) +
    210       "] checkedhecked wrong pass 6");
    211  }
    212 }
    213 
    214 group1[1].checked = true;
    215 for (let n of [1, 2, 3]) {
    216  for (let g of window["group"+n]) {
    217    is(g.defaultChecked, false,
    218       "group" + n + "[" + window["group"+n].indexOf(g) +
    219       "] defaultChecked wrong pass 7");
    220    is(g.checked, n == 1 && group1.indexOf(g) == 1,
    221       "group" + n + "[" + window["group"+n].indexOf(g) +
    222       "] checked wrong pass 7");
    223  }
    224 }
    225 
    226 group1[0].defaultChecked = true;
    227 for (let n of [1, 2, 3]) {
    228  for (let g of window["group"+n]) {
    229    is(g.defaultChecked, n == 1 && group1.indexOf(g) == 0,
    230       "group" + n + "[" + window["group"+n].indexOf(g) +
    231       "] defaultChecked wrong pass 8");
    232    is(g.checked, n == 1 && group1.indexOf(g) == 1,
    233       "group" + n + "[" + window["group"+n].indexOf(g) +
    234       "] checked wrong pass 8");
    235  }
    236 }
    237 
    238 group1[2].defaultChecked = true;
    239 for (let n of [1, 2, 3]) {
    240  for (let g of window["group"+n]) {
    241    is(g.defaultChecked, n == 1 && (group1.indexOf(g) == 0 ||
    242                                    group1.indexOf(g) == 2),
    243       "group" + n + "[" + window["group"+n].indexOf(g) +
    244       "] defaultChecked wrong pass 9");
    245    is(g.checked, n == 1 && group1.indexOf(g) == 1,
    246       "group" + n + "[" + window["group"+n].indexOf(g) +
    247       "] checked wrong pass 9");
    248  }
    249 }
    250 group1[1].remove();
    251 for (let n of [1, 2, 3]) {
    252  for (let g of window["group"+n]) {
    253    is(g.defaultChecked, n == 1 && (group1.indexOf(g) == 0 ||
    254                                    group1.indexOf(g) == 2),
    255       "group" + n + "[" + window["group"+n].indexOf(g) +
    256       "] defaultChecked wrong pass 10");
    257    is(g.checked, n == 1 && group1.indexOf(g) == 1,
    258       "group" + n + "[" + window["group"+n].indexOf(g) +
    259       "] checked wrong pass 10");
    260  }
    261 }
    262 
    263 group1[2].checked = true;
    264 for (let n of [1, 2, 3]) {
    265  for (let g of window["group"+n]) {
    266    is(g.defaultChecked, n == 1 && (group1.indexOf(g) == 0 ||
    267                                    group1.indexOf(g) == 2),
    268       "group" + n + "[" + window["group"+n].indexOf(g) +
    269       "] defaultChecked wrong pass 11");
    270    is(g.checked, n == 1 && (group1.indexOf(g) == 1 ||
    271                             group1.indexOf(g) == 2),
    272       "group" + n + "[" + window["group"+n].indexOf(g) +
    273       "] checked wrong pass 11");
    274  }
    275 }
    276 
    277 group1[0].checked = true;
    278 for (let n of [1, 2, 3]) {
    279  for (let g of window["group"+n]) {
    280    is(g.defaultChecked, n == 1 && (group1.indexOf(g) == 0 ||
    281                                    group1.indexOf(g) == 2),
    282       "group" + n + "[" + window["group"+n].indexOf(g) +
    283       "] defaultChecked wrong pass 12");
    284    is(g.checked, n == 1 && (group1.indexOf(g) == 1 ||
    285                             group1.indexOf(g) == 0),
    286       "group" + n + "[" + window["group"+n].indexOf(g) +
    287       "] checked wrong pass 12");
    288  }
    289 }
    290 
    291 next = group2[1].nextSibling;
    292 p = group2[1].parentNode;
    293 p.removeChild(group2[1]);
    294 p.insertBefore(group2[1], next);
    295 group2[0].checked = true;
    296 for (let n of [1, 2, 3]) {
    297  for (let g of window["group"+n]) {
    298    is(g.defaultChecked, n == 1 && (group1.indexOf(g) == 0 ||
    299                                    group1.indexOf(g) == 2),
    300       "group" + n + "[" + window["group"+n].indexOf(g) +
    301       "] defaultChecked wrong pass 13");
    302    is(g.checked, (n == 1 && (group1.indexOf(g) == 1 ||
    303                              group1.indexOf(g) == 0)) ||
    304                  (n == 2 && group2.indexOf(g) == 0), 
    305       "group" + n + "[" + window["group"+n].indexOf(g) +
    306       "] checked wrong pass 13");
    307  }
    308 }
    309 
    310 p.insertBefore(group2[1], next);
    311 for (let n of [1, 2, 3]) {
    312  for (let g of window["group"+n]) {
    313    is(g.defaultChecked, n == 1 && (group1.indexOf(g) == 0 ||
    314                                    group1.indexOf(g) == 2),
    315       "group" + n + "[" + window["group"+n].indexOf(g) +
    316       "] defaultChecked wrong pass 14");
    317    is(g.checked, (n == 1 && (group1.indexOf(g) == 1 ||
    318                              group1.indexOf(g) == 0)) ||
    319                  (n == 2 && group2.indexOf(g) == 0), 
    320       "group" + n + "[" + window["group"+n].indexOf(g) +
    321       "] checked wrong pass 14");
    322  }
    323 }
    324 
    325 group2[1].defaultChecked = true;
    326 for (let n of [1, 2, 3]) {
    327  for (let g of window["group"+n]) {
    328    is(g.defaultChecked, (n == 1 && (group1.indexOf(g) == 0 ||
    329                                     group1.indexOf(g) == 2)) ||
    330                         (n == 2 && group2.indexOf(g) == 1),
    331       "group" + n + "[" + window["group"+n].indexOf(g) +
    332       "] defaultChecked wrong pass 15");
    333    is(g.checked, (n == 1 && (group1.indexOf(g) == 1 ||
    334                              group1.indexOf(g) == 0)) ||
    335                  (n == 2 && group2.indexOf(g) == 0),
    336       "group" + n + "[" + window["group"+n].indexOf(g) +
    337       "] checked wrong pass 15");
    338  }
    339 }
    340 
    341 cleanup();
    342 
    343 </script>
    344 </pre>
    345 </body>
    346 </html>