tor-browser

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

test_bug534804.html (2821B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <!--
      4 https://bugzilla.mozilla.org/show_bug.cgi?id=534804
      5 -->
      6 <head>
      7  <title>Test for Bug 534804</title>
      8  <script src="/tests/SimpleTest/SimpleTest.js"></script>
      9  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
     10  <style type="text/css" id="styleone">  </style>
     11  <style type="text/css" id="styletwo">  </style>
     12 </head>
     13 <body>
     14 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=534804">Mozilla Bug 534804</a>
     15 <p id="display"></p>
     16 <pre id="test">
     17 <script type="application/javascript">
     18 
     19 /** Test for Bug 534804 */
     20 
     21 var styleone = document.getElementById("styleone");
     22 var styletwo = document.getElementById("styletwo");
     23 var display = document.getElementById("display");
     24 
     25 run1();
     26 styletwo.firstChild.data = "#e > span:nth-child(2n+1) { color: green }";
     27 run1();
     28 styletwo.firstChild.data = "#e > span:first-child { color: green }";
     29 run1();
     30 styletwo.firstChild.data = "#e > span:nth-last-child(2n+1) { color: green }";
     31 run1();
     32 styletwo.firstChild.data = "#e > span:last-child { color: green }";
     33 run1();
     34 
     35 function run1()
     36 {
     37  function identity(bool)      { return bool; }
     38  function inverse(bool)       { return !bool; }
     39  function always_false(bool)  { return false; }
     40  run2("#e:empty + span", identity, always_false);
     41  run2("#e:empty ~ span", identity, identity);
     42  run2("#e:not(:empty) + span", inverse, always_false);
     43  run2("#e:not(:empty) ~ span", inverse, inverse);
     44 }
     45 
     46 function run2(sel, next_sibling_rule, later_sibling_rule)
     47 {
     48  styleone.firstChild.data = sel + " { text-decoration: underline }";
     49 
     50  // Rebuild the subtree every time.
     51  var span1 = document.createElement("span");
     52  span1.id = "e";
     53  var span2 = document.createElement("span");
     54  var span3 = document.createElement("span");
     55  display.appendChild(span1);
     56  display.appendChild(span2);
     57  display.appendChild(span3);
     58 
     59  function td(e) { return getComputedStyle(e, "").textDecorationLine; }
     60 
     61  function check(desc, isempty) {
     62    is(td(span2), next_sibling_rule(isempty) ? "underline" : "none",
     63       "match of next sibling in state " + desc);
     64    is(td(span3), later_sibling_rule(isempty) ? "underline" : "none",
     65       "match of next sibling in state " + desc);
     66  }
     67 
     68  check("initially empty", true);
     69  var kid = document.createElement("span");
     70  span1.appendChild(kid);
     71  check("after append", false);
     72  span1.removeChild(kid);
     73  check("after remove", true);
     74  span1.appendChild(document.createTextNode(""));
     75  span1.appendChild(document.createComment("a comment"));
     76  span1.appendChild(document.createTextNode(""));
     77  check("after append of insignificant children", true);
     78  span1.insertBefore(kid, span1.childNodes[1]);
     79  check("after insert", false);
     80 
     81  display.removeChild(span1);
     82  display.removeChild(span2);
     83  display.removeChild(span3);
     84 }
     85 
     86 </script>
     87 </pre>
     88 </body>
     89 </html>