test_bug534804.html 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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 type="application/javascript" 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. /** Test for Bug 534804 **/
  19. var styleone = document.getElementById("styleone");
  20. var styletwo = document.getElementById("styletwo");
  21. var display = document.getElementById("display");
  22. run1();
  23. styletwo.firstChild.data = "#e > span:nth-child(2n+1) { color: green }";
  24. run1();
  25. styletwo.firstChild.data = "#e > span:first-child { color: green }";
  26. run1();
  27. styletwo.firstChild.data = "#e > span:nth-last-child(2n+1) { color: green }";
  28. run1();
  29. styletwo.firstChild.data = "#e > span:last-child { color: green }";
  30. run1();
  31. function run1()
  32. {
  33. function identity(bool) { return bool; }
  34. function inverse(bool) { return !bool; }
  35. function always_false(bool) { return false; }
  36. run2("#e:empty + span", identity, always_false);
  37. run2("#e:empty ~ span", identity, identity);
  38. run2("#e:not(:empty) + span", inverse, always_false);
  39. run2("#e:not(:empty) ~ span", inverse, inverse);
  40. }
  41. function run2(sel, next_sibling_rule, later_sibling_rule)
  42. {
  43. styleone.firstChild.data = sel + " { text-decoration: underline }";
  44. // Rebuild the subtree every time.
  45. var span1 = document.createElement("span");
  46. span1.id = "e";
  47. var span2 = document.createElement("span");
  48. var span3 = document.createElement("span");
  49. display.appendChild(span1);
  50. display.appendChild(span2);
  51. display.appendChild(span3);
  52. function td(e) { return getComputedStyle(e, "").textDecoration; }
  53. function check(desc, isempty) {
  54. is(td(span2), next_sibling_rule(isempty) ? "underline" : "none",
  55. "match of next sibling in state " + desc);
  56. is(td(span3), later_sibling_rule(isempty) ? "underline" : "none",
  57. "match of next sibling in state " + desc);
  58. }
  59. check("initially empty", true);
  60. var kid = document.createElement("span");
  61. span1.appendChild(kid);
  62. check("after append", false);
  63. span1.removeChild(kid);
  64. check("after remove", true);
  65. span1.appendChild(document.createTextNode(""));
  66. span1.appendChild(document.createComment("a comment"));
  67. span1.appendChild(document.createTextNode(""));
  68. check("after append of insignificant children", true);
  69. span1.insertBefore(kid, span1.childNodes[1]);
  70. check("after insert", false);
  71. display.removeChild(span1);
  72. display.removeChild(span2);
  73. display.removeChild(span3);
  74. }
  75. </script>
  76. </pre>
  77. </body>
  78. </html>