/* 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"; // Checking properties orders and overrides in the rule-view. const TEST_URI = "
Styled Node
"; add_task(function* () { yield addTab("data:text/html;charset=utf-8," + encodeURIComponent(TEST_URI)); let {inspector, view} = yield openRuleView(); yield selectNode("#testid", inspector); let elementStyle = view._elementStyle; let elementRule = elementStyle.rules[1]; info("Checking rules insertion order and checking the applied style"); let firstProp = yield addProperty(view, 1, "background-color", "green"); let secondProp = yield addProperty(view, 1, "background-color", "blue"); is(elementRule.textProps[0], firstProp, "Rules should be in addition order."); is(elementRule.textProps[1], secondProp, "Rules should be in addition order."); // rgb(0, 0, 255) = blue is((yield getValue("#testid", "background-color")), "rgb(0, 0, 255)", "Second property should have been used."); info("Removing the second property and checking the applied style again"); yield removeProperty(view, secondProp); // rgb(0, 128, 0) = green is((yield getValue("#testid", "background-color")), "rgb(0, 128, 0)", "After deleting second property, first should be used."); info("Creating a new second property and checking that the insertion order " + "is still the same"); secondProp = yield addProperty(view, 1, "background-color", "blue"); is((yield getValue("#testid", "background-color")), "rgb(0, 0, 255)", "New property should be used."); is(elementRule.textProps[0], firstProp, "Rules shouldn't have switched places."); is(elementRule.textProps[1], secondProp, "Rules shouldn't have switched places."); info("Disabling the second property and checking the applied style"); yield togglePropStatus(view, secondProp); is((yield getValue("#testid", "background-color")), "rgb(0, 128, 0)", "After disabling second property, first value should be used"); info("Disabling the first property too and checking the applied style"); yield togglePropStatus(view, firstProp); is((yield getValue("#testid", "background-color")), "transparent", "After disabling both properties, value should be empty."); info("Re-enabling the second propertyt and checking the applied style"); yield togglePropStatus(view, secondProp); is((yield getValue("#testid", "background-color")), "rgb(0, 0, 255)", "Value should be set correctly after re-enabling"); info("Re-enabling the first property and checking the insertion order " + "is still respected"); yield togglePropStatus(view, firstProp); is((yield getValue("#testid", "background-color")), "rgb(0, 0, 255)", "Re-enabling an earlier property shouldn't make it override " + "a later property."); is(elementRule.textProps[0], firstProp, "Rules shouldn't have switched places."); is(elementRule.textProps[1], secondProp, "Rules shouldn't have switched places."); info("Modifying the first property and checking the applied style"); yield setProperty(view, firstProp, "purple"); is((yield getValue("#testid", "background-color")), "rgb(0, 0, 255)", "Modifying an earlier property shouldn't override a later property."); }); function* getValue(selector, propName) { let value = yield getComputedStyleProperty(selector, null, propName); return value; }