3 <script src="../../../http/tests/inspector/inspector-test.js"></script>
4 <script src="../../../http/tests/inspector/elements-test.js"></script>
9 function flattenRuleRanges(rule)
12 var medias = rule.media || [];
13 for (var i = 0; i < medias.length; ++i) {
14 var media = medias[i];
22 for (var i = 0; i < rule.selectors.length; ++i) {
23 var selector = rule.selectors[i];
27 range: selector.range,
28 name: "selector #" + i
31 if (rule.style.range) {
33 range: rule.style.range,
37 var properties = rule.style.allProperties;
38 for (var i = 0; i < properties.length; ++i) {
39 var property = properties[i];
43 range: property.range,
44 name: "property >>" + property.text + "<<"
50 function compareRuleRanges(lazyRule, originalRule)
52 if (lazyRule.selectorText !== originalRule.selectorText) {
53 InspectorTest.addResult("Error: rule selectors are not equal: " + lazyRule.selectorText + " != " + originalRule.selectorText);
56 var flattenLazy = flattenRuleRanges(lazyRule);
57 var flattenOriginal = flattenRuleRanges(originalRule);
58 if (flattenLazy.length !== flattenOriginal.length) {
59 InspectorTest.addResult("Error: rule range amount is not equal: " + flattenLazy.length + " != " + flattenOriginal.length);
62 for (var i = 0; i < flattenLazy.length; ++i) {
63 var lazyRange = flattenLazy[i];
64 var originalRange = flattenOriginal[i];
65 if (lazyRange.name !== originalRange.name) {
66 InspectorTest.addResult("Error: rule names are not equal: " + lazyRange.name + " != " + originalRange.name);
69 if (!lazyRange.range.equal(originalRange.range)) {
70 InspectorTest.addResult("Error: ranges '" + lazyRange.name + "' are not equal: " + lazyRange.range.toString() + " != " + originalRange.range.toString());
74 InspectorTest.addResult(flattenLazy.length + " rule ranges are equal.");
78 function validateRuleRanges(selector, rules, callback)
80 InspectorTest.selectNodeAndWaitForStyles("other", onOtherSelected);
82 function onOtherSelected()
84 InspectorTest.selectNodeAndWaitForStyles(selector, onContainerSelected);
87 function onContainerSelected()
89 var fetchedRules = getMatchedRules();
90 if (fetchedRules.length !== rules.length) {
91 InspectorTest.addResult(String.sprintf("Error: rules sizes are not equal! Expected: %d, actual: %d", fetchedRules.length, rules.length));
92 InspectorTest.completeTest();
95 for (var i = 0; i < fetchedRules.length; ++i) {
96 if (!compareRuleRanges(rules[i], fetchedRules[i])) {
97 InspectorTest.completeTest();
105 function getMatchedRules()
108 for (var pseudoId in WebInspector.panels.elements.sidebarPanes.styles.sections) {
109 var matchedStyleSections = WebInspector.panels.elements.sidebarPanes.styles.sections[pseudoId];
110 for (var i = 0; i < matchedStyleSections.length; ++i) {
111 var section = matchedStyleSections[i];
112 if (section.computedStyle)
114 var rule = section.rule;
122 InspectorTest.runTestSuite([
123 function selectInitialNode(next)
125 InspectorTest.selectNodeAndWaitForStyles("container", next);
128 function testInsertProperty(next)
130 InspectorTest.dumpSelectedElementStyles(true, false, true);
131 var treeItem = InspectorTest.getMatchedStylePropertyTreeItem("color");
132 var treeElement = treeItem.section().addNewBlankProperty(1);
133 InspectorTest.waitForStyleApplied(onPropertyInserted);
134 treeElement.applyStyleText("PROPERTY: INSERTED;", true, true);
136 function onPropertyInserted()
138 InspectorTest.addResult("\n\n#### AFTER PROPERTY INSERTION ####\n\n");
139 InspectorTest.dumpSelectedElementStyles(true, false, true);
140 var rules = getMatchedRules();
141 validateRuleRanges("container", rules, next);
145 function testEditSelector(next)
147 var section = WebInspector.panels.elements.sidebarPanes.styles.sections[0][4];
148 section.startEditingSelector();
149 section._selectorElement.textContent = ".should-change, .INSERTED-OTHER-SELECTOR";
150 InspectorTest.waitForSelectorCommitted(onSelectorEdited);
151 section._selectorElement.dispatchEvent(InspectorTest.createKeyEvent("Enter"));
153 function onSelectorEdited()
155 InspectorTest.addResult("\n\n#### AFTER SELECTOR EDIT ####\n\n");
156 InspectorTest.dumpSelectedElementStyles(true, false, true);
157 var rules = getMatchedRules();
158 validateRuleRanges("container", rules, next);
162 function testDisableProperty(next)
164 var treeItem = InspectorTest.getMatchedStylePropertyTreeItem("border");
165 InspectorTest.waitForStyleApplied(onPropertyDisabled);
166 treeItem.toggleEnabled({ target: { checked: false }, consume: function() { } });
168 function onPropertyDisabled()
170 InspectorTest.addResult("\n\n#### AFTER PROPERTY DISABLED ####\n\n");
171 InspectorTest.dumpSelectedElementStyles(true, false, true);
172 var rules = getMatchedRules();
173 validateRuleRanges("container", rules, next);
177 function selectNodeWithPseudoElements(next)
179 InspectorTest.selectNodeAndWaitForStyles("pseudo", next);
182 function testPseudoSectionPropertyEdit(next)
184 var treeItem = InspectorTest.getMatchedStylePropertyTreeItem("pseudo-property");
185 var treeElement = treeItem.section().addNewBlankProperty(1);
186 InspectorTest.waitForStyleApplied(onPropertyInserted);
187 treeElement.applyStyleText("PROPERTY: INSERTED;", true, true);
189 function onPropertyInserted()
191 InspectorTest.addResult("\n\n#### AFTER PROPERTY INSERTED ####\n\n");
192 InspectorTest.dumpSelectedElementStyles(true, false, true);
193 var rules = getMatchedRules();
194 validateRuleRanges("pseudo", rules, next);
200 <link rel="stylesheet" href="resources/styles-update-links-2.css"></link>
201 <link rel="stylesheet" href="resources/styles-update-links.css"></link>
204 pseudo-property: "12";
209 border: 1px solid black;
218 <body onload="runTest()">
220 Tests that removal of property following its disabling works.
223 <div id="container" class="left-intact should-change">
227 <div id="other"></div>
229 <section id="pseudo"></div>