diff -r 000000000000 -r 6474c204b198 browser/devtools/styleinspector/test/browser_ruleview_override.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browser/devtools/styleinspector/test/browser_ruleview_override.js Wed Dec 31 06:09:35 2014 +0100
@@ -0,0 +1,146 @@
+/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+// Test the display of overridden declarations in the rule-view
+
+let test = asyncTest(function*() {
+ yield addTab("data:text/html;charset=utf-8,browser_ruleview_override.js");
+ let {toolbox, inspector, view} = yield openRuleView();
+
+ yield simpleOverride(inspector, view);
+ yield partialOverride(inspector, view);
+ yield importantOverride(inspector, view);
+ yield disableOverride(inspector, view);
+});
+
+function* createTestContent(inspector, style) {
+ let onMutated = inspector.once("markupmutation");
+ let styleNode = addStyle(content.document, style);
+ content.document.body.innerHTML = '
Styled Node
';
+ yield onMutated;
+ yield selectNode("#testid", inspector);
+ return styleNode;
+}
+
+function* simpleOverride(inspector, view) {
+ let styleNode = yield createTestContent(inspector, '' +
+ '#testid {' +
+ ' background-color: blue;' +
+ '} ' +
+ '.testclass {' +
+ ' background-color: green;' +
+ '}');
+
+ let elementStyle = view._elementStyle;
+
+ let idRule = elementStyle.rules[1];
+ let idProp = idRule.textProps[0];
+ is(idProp.name, "background-color", "First ID prop should be background-color");
+ ok(!idProp.overridden, "ID prop should not be overridden.");
+
+ let classRule = elementStyle.rules[2];
+ let classProp = classRule.textProps[0];
+ is(classProp.name, "background-color", "First class prop should be background-color");
+ ok(classProp.overridden, "Class property should be overridden.");
+
+ // Override background-color by changing the element style.
+ let elementRule = elementStyle.rules[0];
+ elementRule.createProperty("background-color", "purple", "");
+ yield elementRule._applyingModifications;
+
+ let elementProp = elementRule.textProps[0];
+ is(classProp.name, "background-color", "First element prop should now be background-color");
+ ok(!elementProp.overridden, "Element style property should not be overridden");
+ ok(idProp.overridden, "ID property should be overridden");
+ ok(classProp.overridden, "Class property should be overridden");
+
+ styleNode.remove();
+}
+
+function* partialOverride(inspector, view) {
+ let styleNode = yield createTestContent(inspector, '' +
+ // Margin shorthand property...
+ '.testclass {' +
+ ' margin: 2px;' +
+ '}' +
+ // ... will be partially overridden.
+ '#testid {' +
+ ' margin-left: 1px;' +
+ '}');
+
+ let elementStyle = view._elementStyle;
+
+ let classRule = elementStyle.rules[2];
+ let classProp = classRule.textProps[0];
+ ok(!classProp.overridden,
+ "Class prop shouldn't be overridden, some props are still being used.");
+
+ for (let computed of classProp.computed) {
+ if (computed.name.indexOf("margin-left") == 0) {
+ ok(computed.overridden, "margin-left props should be overridden.");
+ } else {
+ ok(!computed.overridden, "Non-margin-left props should not be overridden.");
+ }
+ }
+
+ styleNode.remove();
+}
+
+function* importantOverride(inspector, view) {
+ let styleNode = yield createTestContent(inspector, '' +
+ // Margin shorthand property...
+ '.testclass {' +
+ ' background-color: green !important;' +
+ '}' +
+ // ... will be partially overridden.
+ '#testid {' +
+ ' background-color: blue;' +
+ '}');
+
+ let elementStyle = view._elementStyle;
+
+ let idRule = elementStyle.rules[1];
+ let idProp = idRule.textProps[0];
+ ok(idProp.overridden, "Not-important rule should be overridden.");
+
+ let classRule = elementStyle.rules[2];
+ let classProp = classRule.textProps[0];
+ ok(!classProp.overridden, "Important rule should not be overridden.");
+
+ styleNode.remove();
+
+ let elementRule = elementStyle.rules[0];
+ let elementProp = elementRule.createProperty("background-color", "purple", "important");
+ yield elementRule._applyingModifications;
+
+ ok(classProp.overridden, "New important prop should override class property.");
+ ok(!elementProp.overridden, "New important prop should not be overriden.");
+}
+
+function* disableOverride(inspector, view) {
+ let styleNode = yield createTestContent(inspector, '' +
+ '#testid {' +
+ ' background-color: blue;' +
+ '}' +
+ '.testclass {' +
+ ' background-color: green;' +
+ '}');
+
+ let elementStyle = view._elementStyle;
+
+ let idRule = elementStyle.rules[1];
+ let idProp = idRule.textProps[0];
+
+ idProp.setEnabled(false);
+ yield idRule._applyingModifications;
+
+ let classRule = elementStyle.rules[2];
+ let classProp = classRule.textProps[0];
+ ok(!classProp.overridden, "Class prop should not be overridden after id prop was disabled.");
+
+ styleNode.remove();
+ yield inspector.once("inspector-updated");
+}