OLD | NEW |
| (Empty) |
1 <html> | |
2 <head> | |
3 <script src="../../../http/tests/inspector/inspector-test.js"></script> | |
4 <script src="../../../http/tests/inspector/elements-test.js"></script> | |
5 <style> | |
6 #pseudo::after { | |
7 pseudo-property: "12"; | |
8 color: red; | |
9 } | |
10 | |
11 #pseudo::after { | |
12 border: 1px solid black; | |
13 } | |
14 | |
15 #pseudo::before { | |
16 color: blue; | |
17 } | |
18 </style> | |
19 <script> | |
20 | |
21 function test() | |
22 { | |
23 function flattenRuleRanges(rule) | |
24 { | |
25 var ranges = []; | |
26 var medias = rule.media || []; | |
27 for (var i = 0; i < medias.length; ++i) { | |
28 var media = medias[i]; | |
29 if (!media.range) | |
30 continue; | |
31 ranges.push({ | |
32 range: media.range, | |
33 name: "media #" + i | |
34 }); | |
35 } | |
36 for (var i = 0; i < rule.selectors.length; ++i) { | |
37 var selector = rule.selectors[i]; | |
38 if (!selector.range) | |
39 continue; | |
40 ranges.push({ | |
41 range: selector.range, | |
42 name: "selector #" + i | |
43 }); | |
44 } | |
45 if (rule.style.range) { | |
46 ranges.push({ | |
47 range: rule.style.range, | |
48 name: "style range" | |
49 }); | |
50 } | |
51 var properties = rule.style.allProperties; | |
52 for (var i = 0; i < properties.length; ++i) { | |
53 var property = properties[i]; | |
54 if (!property.range) | |
55 continue; | |
56 ranges.push({ | |
57 range: property.range, | |
58 name: "property >>" + property.text + "<<" | |
59 }); | |
60 } | |
61 return ranges; | |
62 } | |
63 | |
64 function compareRuleRanges(lazyRule, originalRule) | |
65 { | |
66 if (lazyRule.selectorText !== originalRule.selectorText) { | |
67 InspectorTest.addResult("Error: rule selectors are not equal: " + la
zyRule.selectorText + " != " + originalRule.selectorText); | |
68 return false; | |
69 } | |
70 var flattenLazy = flattenRuleRanges(lazyRule); | |
71 var flattenOriginal = flattenRuleRanges(originalRule); | |
72 if (flattenLazy.length !== flattenOriginal.length) { | |
73 InspectorTest.addResult("Error: rule range amount is not equal: " +
flattenLazy.length + " != " + flattenOriginal.length); | |
74 return false | |
75 } | |
76 for (var i = 0; i < flattenLazy.length; ++i) { | |
77 var lazyRange = flattenLazy[i]; | |
78 var originalRange = flattenOriginal[i]; | |
79 if (lazyRange.name !== originalRange.name) { | |
80 InspectorTest.addResult("Error: rule names are not equal: " + la
zyRange.name + " != " + originalRange.name); | |
81 return false; | |
82 } | |
83 if (!lazyRange.range.equal(originalRange.range)) { | |
84 InspectorTest.addResult("Error: ranges '" + lazyRange.name + "'
are not equal: " + lazyRange.range.toString() + " != " + originalRange.range.toS
tring()); | |
85 return false; | |
86 } | |
87 } | |
88 InspectorTest.addResult(flattenLazy.length + " rule ranges are equal."); | |
89 return true; | |
90 } | |
91 | |
92 function validateRuleRanges(selector, rules, callback) | |
93 { | |
94 InspectorTest.selectNodeAndWaitForStyles("other", onOtherSelected); | |
95 | |
96 function onOtherSelected() | |
97 { | |
98 InspectorTest.selectNodeAndWaitForStyles(selector, onContainerSelect
ed); | |
99 } | |
100 | |
101 function onContainerSelected() | |
102 { | |
103 var fetchedRules = getMatchedRules(); | |
104 if (fetchedRules.length !== rules.length) { | |
105 InspectorTest.addResult(String.sprintf("Error: rules sizes are n
ot equal! Expected: %d, actual: %d", fetchedRules.length, rules.length)); | |
106 InspectorTest.completeTest(); | |
107 return; | |
108 } | |
109 for (var i = 0; i < fetchedRules.length; ++i) { | |
110 if (!compareRuleRanges(rules[i], fetchedRules[i])) { | |
111 InspectorTest.completeTest(); | |
112 return; | |
113 } | |
114 } | |
115 callback(); | |
116 } | |
117 } | |
118 | |
119 function getMatchedRules() | |
120 { | |
121 var rules = []; | |
122 for (var block of WebInspector.panels.elements.sidebarPanes.styles._sect
ionBlocks) { | |
123 for (var section of block.sections) { | |
124 var rule = section.rule(); | |
125 if (rule) | |
126 rules.push(rule); | |
127 } | |
128 } | |
129 return rules; | |
130 } | |
131 | |
132 InspectorTest.runTestSuite([ | |
133 function selectInitialNode(next) | |
134 { | |
135 InspectorTest.selectNodeAndWaitForStyles("container", next); | |
136 }, | |
137 | |
138 function testInsertProperty(next) | |
139 { | |
140 InspectorTest.dumpSelectedElementStyles(true, false, true); | |
141 var treeItem = InspectorTest.getMatchedStylePropertyTreeItem("color"
); | |
142 var treeElement = treeItem.section().addNewBlankProperty(1); | |
143 InspectorTest.waitForStyleApplied(onPropertyInserted); | |
144 treeElement.applyStyleText("PROPERTY: INSERTED;", true); | |
145 | |
146 function onPropertyInserted() | |
147 { | |
148 InspectorTest.addResult("\n\n#### AFTER PROPERTY INSERTION ####\
n\n"); | |
149 InspectorTest.dumpSelectedElementStyles(true, false, true); | |
150 var rules = getMatchedRules(); | |
151 validateRuleRanges("container", rules, next); | |
152 } | |
153 }, | |
154 | |
155 function testEditSelector(next) | |
156 { | |
157 var section = WebInspector.panels.elements.sidebarPanes.styles._sect
ionBlocks[0].sections[3]; | |
158 section.startEditingSelector(); | |
159 section._selectorElement.textContent = ".should-change, .INSERTED-OT
HER-SELECTOR"; | |
160 InspectorTest.waitForSelectorCommitted(onSelectorEdited); | |
161 section._selectorElement.dispatchEvent(InspectorTest.createKeyEvent(
"Enter")); | |
162 | |
163 function onSelectorEdited() | |
164 { | |
165 InspectorTest.addResult("\n\n#### AFTER SELECTOR EDIT ####\n\n")
; | |
166 InspectorTest.dumpSelectedElementStyles(true, false, true); | |
167 var rules = getMatchedRules(); | |
168 validateRuleRanges("container", rules, next); | |
169 } | |
170 }, | |
171 | |
172 function testDisableProperty(next) | |
173 { | |
174 var treeItem = InspectorTest.getMatchedStylePropertyTreeItem("border
"); | |
175 InspectorTest.waitForStyleApplied(onPropertyDisabled); | |
176 treeItem._toggleEnabled({ target: { checked: false }, consume: funct
ion() { } }); | |
177 | |
178 function onPropertyDisabled() | |
179 { | |
180 InspectorTest.addResult("\n\n#### AFTER PROPERTY DISABLED ####\n
\n"); | |
181 InspectorTest.dumpSelectedElementStyles(true, false, true); | |
182 var rules = getMatchedRules(); | |
183 validateRuleRanges("container", rules, next); | |
184 } | |
185 }, | |
186 | |
187 function selectNodeWithPseudoElements(next) | |
188 { | |
189 InspectorTest.selectNodeAndWaitForStyles("pseudo", next); | |
190 }, | |
191 | |
192 function testPseudoSectionPropertyEdit(next) | |
193 { | |
194 var treeItem = InspectorTest.getMatchedStylePropertyTreeItem("pseudo
-property"); | |
195 var treeElement = treeItem.section().addNewBlankProperty(1); | |
196 InspectorTest.waitForStyleApplied(onPropertyInserted); | |
197 treeElement.applyStyleText("PROPERTY: INSERTED;", true); | |
198 | |
199 function onPropertyInserted() | |
200 { | |
201 InspectorTest.addResult("\n\n#### AFTER PROPERTY INSERTED ####\n
\n"); | |
202 InspectorTest.dumpSelectedElementStyles(true, false, true); | |
203 var rules = getMatchedRules(); | |
204 validateRuleRanges("pseudo", rules, next); | |
205 } | |
206 }, | |
207 ]); | |
208 } | |
209 </script> | |
210 <link rel="stylesheet" href="resources/styles-update-links-2.css"></link> | |
211 <link rel="stylesheet" href="resources/styles-update-links.css"></link> | |
212 </head> | |
213 | |
214 <body onload="runTest()"> | |
215 <p> | |
216 Tests that removal of property following its disabling works. | |
217 </p> | |
218 | |
219 <div id="container" class="left-intact should-change"> | |
220 Red text here. | |
221 </div> | |
222 | |
223 <div id="other"></div> | |
224 | |
225 <section id="pseudo"></div> | |
226 | |
227 </body> | |
228 </html> | |
OLD | NEW |