browser/devtools/styleinspector/test/browser_ruleview_override.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
     2 /* Any copyright is dedicated to the Public Domain.
     3  http://creativecommons.org/publicdomain/zero/1.0/ */
     5 "use strict";
     7 // Test the display of overridden declarations in the rule-view
     9 let test = asyncTest(function*() {
    10   yield addTab("data:text/html;charset=utf-8,browser_ruleview_override.js");
    11   let {toolbox, inspector, view} = yield openRuleView();
    13   yield simpleOverride(inspector, view);
    14   yield partialOverride(inspector, view);
    15   yield importantOverride(inspector, view);
    16   yield disableOverride(inspector, view);
    17 });
    19 function* createTestContent(inspector, style) {
    20   let onMutated = inspector.once("markupmutation");
    21   let styleNode = addStyle(content.document, style);
    22   content.document.body.innerHTML = '<div id="testid" class="testclass">Styled Node</div>';
    23   yield onMutated;
    24   yield selectNode("#testid", inspector);
    25   return styleNode;
    26 }
    28 function* simpleOverride(inspector, view) {
    29   let styleNode = yield createTestContent(inspector, '' +
    30     '#testid {' +
    31     '  background-color: blue;' +
    32     '} ' +
    33     '.testclass {' +
    34     '  background-color: green;' +
    35     '}');
    37   let elementStyle = view._elementStyle;
    39   let idRule = elementStyle.rules[1];
    40   let idProp = idRule.textProps[0];
    41   is(idProp.name, "background-color", "First ID prop should be background-color");
    42   ok(!idProp.overridden, "ID prop should not be overridden.");
    44   let classRule = elementStyle.rules[2];
    45   let classProp = classRule.textProps[0];
    46   is(classProp.name, "background-color", "First class prop should be background-color");
    47   ok(classProp.overridden, "Class property should be overridden.");
    49   // Override background-color by changing the element style.
    50   let elementRule = elementStyle.rules[0];
    51   elementRule.createProperty("background-color", "purple", "");
    52   yield elementRule._applyingModifications;
    54   let elementProp = elementRule.textProps[0];
    55   is(classProp.name, "background-color", "First element prop should now be background-color");
    56   ok(!elementProp.overridden, "Element style property should not be overridden");
    57   ok(idProp.overridden, "ID property should be overridden");
    58   ok(classProp.overridden, "Class property should be overridden");
    60   styleNode.remove();
    61 }
    63 function* partialOverride(inspector, view) {
    64   let styleNode = yield createTestContent(inspector, '' +
    65     // Margin shorthand property...
    66     '.testclass {' +
    67     '  margin: 2px;' +
    68     '}' +
    69     // ... will be partially overridden.
    70     '#testid {' +
    71     '  margin-left: 1px;' +
    72     '}');
    74   let elementStyle = view._elementStyle;
    76   let classRule = elementStyle.rules[2];
    77   let classProp = classRule.textProps[0];
    78   ok(!classProp.overridden,
    79     "Class prop shouldn't be overridden, some props are still being used.");
    81   for (let computed of classProp.computed) {
    82     if (computed.name.indexOf("margin-left") == 0) {
    83       ok(computed.overridden, "margin-left props should be overridden.");
    84     } else {
    85       ok(!computed.overridden, "Non-margin-left props should not be overridden.");
    86     }
    87   }
    89   styleNode.remove();
    90 }
    92 function* importantOverride(inspector, view) {
    93   let styleNode = yield createTestContent(inspector, '' +
    94     // Margin shorthand property...
    95     '.testclass {' +
    96     '  background-color: green !important;' +
    97     '}' +
    98     // ... will be partially overridden.
    99     '#testid {' +
   100     '  background-color: blue;' +
   101     '}');
   103   let elementStyle = view._elementStyle;
   105   let idRule = elementStyle.rules[1];
   106   let idProp = idRule.textProps[0];
   107   ok(idProp.overridden, "Not-important rule should be overridden.");
   109   let classRule = elementStyle.rules[2];
   110   let classProp = classRule.textProps[0];
   111   ok(!classProp.overridden, "Important rule should not be overridden.");
   113   styleNode.remove();
   115   let elementRule = elementStyle.rules[0];
   116   let elementProp = elementRule.createProperty("background-color", "purple", "important");
   117   yield elementRule._applyingModifications;
   119   ok(classProp.overridden, "New important prop should override class property.");
   120   ok(!elementProp.overridden, "New important prop should not be overriden.");
   121 }
   123 function* disableOverride(inspector, view) {
   124   let styleNode = yield createTestContent(inspector, '' +
   125     '#testid {' +
   126     '  background-color: blue;' +
   127     '}' +
   128     '.testclass {' +
   129     '  background-color: green;' +
   130     '}');
   132   let elementStyle = view._elementStyle;
   134   let idRule = elementStyle.rules[1];
   135   let idProp = idRule.textProps[0];
   137   idProp.setEnabled(false);
   138   yield idRule._applyingModifications;
   140   let classRule = elementStyle.rules[2];
   141   let classProp = classRule.textProps[0];
   142   ok(!classProp.overridden, "Class prop should not be overridden after id prop was disabled.");
   144   styleNode.remove();
   145   yield inspector.once("inspector-updated");
   146 }

mercurial