layout/inspector/tests/chrome/test_bug708874.xul

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 <?xml version="1.0"?>
     2 <?xml-stylesheet type="text/css" href="chrome://global/skin"?>
     3 <?xml-stylesheet type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"?>
     4 <?xml-stylesheet type="text/css" href="test_bug708874.css"?>
     5 <!--
     6 https://bugzilla.mozilla.org/show_bug.cgi?id=708874
     7 -->
     8 <window title="Mozilla Bug 708874"
     9         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
    10         onload="RunTests();">
    11   <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
    12   <script type="application/javascript">
    13   <![CDATA[
    15 /** Test for Bug 708874 - API for locking pseudo-class state of an element **/
    17 var DOMUtils = Components.classes["@mozilla.org/inspector/dom-utils;1"]
    18                .getService(Components.interfaces.inIDOMUtils);
    19 var DOMWindowUtils = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
    20                      .getInterface(Components.interfaces.nsIDOMWindowUtils);
    22 var defaultColor = "rgb(0, 0, 0)";
    23 var disabledColor = "rgb(40, 0, 0)";
    25 function RunTests() {
    26   testLockEnabled();
    27   testLockDisabled();
    28   testVisited();
    29   testMultiple();
    30   testInvalid();
    31   testNotElement();
    32 }
    34 function testLockEnabled() {
    35   var button = document.getElementById("test-button");
    37   /* starting state is enabled */
    38   button.removeAttribute("disabled");
    40   is(DOMUtils.hasPseudoClassLock(button, ":disabled"), false,
    41      "doesn't have lock at start");
    43   is(window.getComputedStyle(button).color, defaultColor,
    44      "color is default color before locking on");
    46   is(button.mozMatchesSelector(":disabled"), false,
    47      "doesn't match selector at start");
    49   /* lock */
    50   DOMUtils.addPseudoClassLock(button, ":disabled");
    52   is(DOMUtils.hasPseudoClassLock(button, ":disabled"), true,
    53      "hasPseudoClassLock is true after locking");
    55   is(window.getComputedStyle(button).color, disabledColor,
    56      ":disabled style applied after adding lock");
    58   is(button.mozMatchesSelector(":disabled"), true,
    59      "matches selector after adding lock");
    61   /* change state to disabled */
    62   button.setAttribute("disabled", "disabled");
    64   is(window.getComputedStyle(button).color, disabledColor,
    65      ":disabled style still applied after really disabling");
    67   is(button.mozMatchesSelector(":disabled"), true,
    68     "matches selector after adding lock");
    70   /* remove lock */
    71   DOMUtils.removePseudoClassLock(button, ":disabled");
    73   is(DOMUtils.hasPseudoClassLock(button, ":disabled"), false,
    74      "hasPseudoClassLock is false after removing on lock");
    76   is(window.getComputedStyle(button).color, disabledColor,
    77      ":disabled style still applied after removing lock");
    79   is(button.mozMatchesSelector(":disabled"), true,
    80      "matches selector after removing lock");
    82   /* change state to enabled */
    83   button.removeAttribute("disabled");
    85   is(window.getComputedStyle(button).color, defaultColor,
    86      "back to default style after un-disabling");
    88   is(button.mozMatchesSelector(":disabled"), false,
    89     "doesn't match selector after enabling");
    90 }
    93 function testLockDisabled() {
    94   var button = document.getElementById("test-button");
    96   /* starting state is disabled */
    97   button.setAttribute("disabled", "disabled");
    99   is(DOMUtils.hasPseudoClassLock(button, ":disabled"), false,
   100      "doesn't have lock at start");
   102   is(window.getComputedStyle(button).color, disabledColor,
   103      "color is :disabled color before locking");
   105   is(button.mozMatchesSelector(":disabled"), true,
   106     "matches selector before locking");
   108   /* lock */
   109   DOMUtils.addPseudoClassLock(button, ":disabled");
   111   is(DOMUtils.hasPseudoClassLock(button, ":disabled"), true,
   112      "hasPseudoClassLock is true after locking");
   114   is(window.getComputedStyle(button).color, disabledColor,
   115      ":disabled style still applied after adding on lock");
   117   is(button.mozMatchesSelector(":disabled"), true,
   118    "matches selector after locking");
   120   /* change state to enabled */
   121   button.removeAttribute("disabled");
   123   is(window.getComputedStyle(button).color, disabledColor,
   124      ":disabled style applied after enabling");
   126   is(button.mozMatchesSelector(":disabled"), true,
   127    "matches selector after enabling with lock on");
   129   /* remove lock */
   130   DOMUtils.removePseudoClassLock(button, ":disabled");
   132   is(DOMUtils.hasPseudoClassLock(button, ":disabled"), false,
   133      "hasPseudoClassLock is false after removing on lock");
   135   is(window.getComputedStyle(button).color, defaultColor,
   136      "default style applied after removing lock");
   138   is(button.mozMatchesSelector(":disabled"), false,
   139      "doesn't match selector after unlocking");
   141   /* change state to disabled */
   142   button.setAttribute("disabled", "disabled");
   144   is(window.getComputedStyle(button).color, disabledColor,
   145      ":disabled style applied after disabling after unlocking");
   147   is(button.mozMatchesSelector(":disabled"), true,
   148     "matches selector again after disabling");
   149 }
   151 function testVisited() {
   152   var link = document.getElementById("test-link");
   153   var visitedColor = "rgb(20, 0, 0)";
   154   var unvisitedColor = "rgb(30, 0, 0)";
   156   /* lock visited */
   157   DOMUtils.addPseudoClassLock(link, ":visited");
   159   is(DOMUtils.hasPseudoClassLock(link, ":visited"), true,
   160      "hasPseudoClassLock is true after adding lock");
   162   var color = DOMWindowUtils.getVisitedDependentComputedStyle(link,
   163                 null, "color");
   164   is(color, visitedColor, "color is :visited color after locking");
   166   /* lock unvisited */
   167   DOMUtils.addPseudoClassLock(link, ":link");
   169   is(DOMUtils.hasPseudoClassLock(link, ":link"), true,
   170      "hasPseudoClassLock is true after adding :link lock");
   172   is(DOMUtils.hasPseudoClassLock(link, ":visited"), false,
   173      "hasPseudoClassLock is false for :visited after adding :link lock");
   175   var color = DOMWindowUtils.getVisitedDependentComputedStyle(link,
   176                  null, "color");
   177   is(color, unvisitedColor, "color is :link color after locking :link");
   179   /* lock visited back on */
   180   DOMUtils.addPseudoClassLock(link, ":visited");
   182   is(DOMUtils.hasPseudoClassLock(link, ":visited"), true,
   183     "hasPseudoClassLock is true after adding :visited lock");
   185   is(DOMUtils.hasPseudoClassLock(link, ":link"), false,
   186     "hasPseudoClassLock is false for :link after adding :visited lock");
   188   var color = DOMWindowUtils.getVisitedDependentComputedStyle(link,
   189                null, "color");
   190   is(color, visitedColor, "color is :visited color after locking back on");
   191 }
   193 function testMultiple() {
   194   var div = document.getElementById("test-div");
   196   var styles = {
   197     ":hover": {
   198       property: "color",
   199       value: "rgb(10, 0, 0)",
   200       defaultValue: "rgb(0, 0, 0)"
   201     },
   202     ":active": {
   203       property: "font-family",
   204       value: "Arial",
   205       defaultValue: "serif"
   206     },
   207     ":focus": {
   208       property: "font-weight",
   209       value: "800",
   210       defaultValue: "400"
   211     }
   212   };
   214   for (var pseudo in styles) {
   215     DOMUtils.addPseudoClassLock(div, pseudo);
   216   }
   218   for (var pseudo in styles) {
   219     is(DOMUtils.hasPseudoClassLock(div, pseudo), true,
   220        "hasPseudoClassLock is true after locking");
   222     var style = styles[pseudo];
   223     is(window.getComputedStyle(div).getPropertyValue(style.property),
   224        style.value, "style for pseudo-class is applied after locking");
   226     is(div.mozMatchesSelector(pseudo), true,
   227        "matches selector after locking");
   228   }
   230   DOMUtils.clearPseudoClassLocks(div);
   232   for (var pseudo in styles) {
   233     is(DOMUtils.hasPseudoClassLock(div, pseudo), false,
   234        "hasPseudoClassLock is false after clearing");
   236     is(window.getComputedStyle(div).getPropertyValue(style.property),
   237        style.defaultValue, "style is back to default after clearing");
   239     is(div.mozMatchesSelector(pseudo), false,
   240       "doesn't match selector after unlocking");
   241   }
   242 }
   244 function testInvalid() {
   245   var div = document.getElementById("test-div");
   246   var pseudos = ["not a valid pseudo-class", ":moz-any-link", ":first-child"];
   248   for (var i = 0; i < pseudos.length; i++) {
   249     var pseudo = pseudos[i];
   251     // basically make sure these don't crash the browser.
   252     DOMUtils.addPseudoClassLock(div, pseudo);
   254     is(DOMUtils.hasPseudoClassLock(div, pseudo), false);
   256     DOMUtils.removePseudoClassLock(div, pseudo);
   257   }
   258 }
   260 function testNotElement() {
   261   var values = [null, undefined, {}];
   262   try {
   263     for each (value in values); {
   264       DOMUtils.hasPseudoClassLock(value, ":hover");
   265       DOMUtils.addPseudoClassLock(value, ":hover");
   266       DOMUtils.removePseudoClassLock(value, ":hover");
   267       DOMUtils.clearPseudoClassLocks(value);
   268     }
   269   } catch(e) {
   270     // just make sure we don't crash on non-elements
   271   }
   272 }
   273   ]]>
   274   </script>
   276   <body xmlns="http://www.w3.org/1999/xhtml">
   277     <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=708874"
   278        target="_blank">Mozilla Bug 708874</a>
   280     <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=708874">
   281       Mozilla Bug 708874 - API for locking pseudo-class state of an element
   282     </a>
   284     <a id="test-link" href="http://notavisitedwebsite.com">
   285       test link
   286     </a>
   288     <div id="test-div">
   289       test div
   290     </div>
   292     <button id="test-button">
   293       test button
   294     </button>
   295   </body>
   297 </window>

mercurial