browser_rules_mark_overridden_layers.js (4990B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 // Tests that the rule view marks overridden rules correctly when using layers 7 8 const HTML = ` 9 <style type='text/css'> 10 @layer A, B; 11 12 h1 { 13 background-color: red; 14 color: tomato !important; 15 } 16 17 @layer A { 18 h1 { 19 background-color: green; 20 color: darkseagreen !important; 21 color: lime !important; 22 color: forestgreen; 23 } 24 25 h4 { 26 color: red !important; 27 } 28 } 29 @layer B { 30 h1 { 31 background-color: cyan; 32 color: blue !important; 33 } 34 } 35 36 @layer { 37 h2 { 38 color: red !important; 39 } 40 } 41 @layer { 42 h2 { 43 color: blue !important; 44 } 45 } 46 47 @layer { 48 @layer A { 49 h3 { 50 color: red !important; 51 } 52 } 53 54 @layer A { 55 h3 { 56 color: lime !important; 57 } 58 } 59 } 60 61 @layer { 62 @layer A { 63 h3 { 64 color: blue !important; 65 } 66 } 67 } 68 </style> 69 <h1>Hello</h1> 70 <h2>world</h2> 71 <h3>!</h3> 72 <h4 style="color: blue !important">style attr</h4> 73 `; 74 75 add_task(async function () { 76 await addTab( 77 `https://example.com/document-builder.sjs?html=${encodeURIComponent(HTML)}` 78 ); 79 const { inspector, view } = await openRuleView(); 80 await selectNode("h1", inspector); 81 82 info("Check background-color properties"); 83 is( 84 await getComputedStyleProperty("h1", null, "background-color"), 85 "rgb(255, 0, 0)", 86 "The h1 element has a red background-color, as the value in the layer-less rule wins" 87 ); 88 ok( 89 !isPropertyOverridden(view, 1, { "background-color": "red" }), 90 "background-color value in layer-less rule is not overridden" 91 ); 92 ok( 93 isPropertyOverridden(view, 2, { "background-color": "cyan" }), 94 "background-color value in layer B rule is overridden" 95 ); 96 ok( 97 isPropertyOverridden(view, 3, { "background-color": "green" }), 98 "background-color value in layer A rule is overridden" 99 ); 100 101 info("Check (!important) color properties"); 102 is( 103 await getComputedStyleProperty("h1", null, "color"), 104 "rgb(0, 255, 0)", 105 "The h1 element has a lime color, as the last important value in the first declared layer wins" 106 ); 107 ok( 108 isPropertyOverridden(view, 1, { color: "tomato" }), 109 "important color value in layer-less rule is overridden" 110 ); 111 ok( 112 isPropertyOverridden(view, 2, { color: "blue" }), 113 "important color value in layer B rule is overridden" 114 ); 115 ok( 116 isPropertyOverridden(view, 3, { color: "darkseagreen" }), 117 "first important color value in layer A rule is overridden" 118 ); 119 ok( 120 !isPropertyOverridden(view, 3, { color: "lime" }), 121 "important color value in layer A rule is not overridden" 122 ); 123 ok( 124 isPropertyOverridden(view, 3, { color: "forestgreen" }), 125 "last, non-important color value in layer A rule is overridden" 126 ); 127 128 info("Check (!important) color properties on nameless layers"); 129 await selectNode("h2", inspector); 130 is( 131 await getComputedStyleProperty("h2", null, "color"), 132 "rgb(255, 0, 0)", 133 "The h2 element has a blue color, as important value in the first nameless layer wins" 134 ); 135 ok( 136 isPropertyOverridden(view, 1, { color: "blue" }), 137 "important color value in second layer-less rule is overridden" 138 ); 139 ok( 140 !isPropertyOverridden(view, 2, { color: "red" }), 141 "important color value in first layer-less rule is not overridden" 142 ); 143 144 info("Check (!important) color properties on nested layer in nameless layer"); 145 await selectNode("h3", inspector); 146 is( 147 await getComputedStyleProperty("h3", null, "color"), 148 "rgb(0, 255, 0)", 149 "The h3 element has a lime color, as important value in the last rule of the first declared nameless layer wins" 150 ); 151 ok( 152 isPropertyOverridden(view, 1, { color: "blue" }), 153 "important color value in second layer-less rule is overridden" 154 ); 155 ok( 156 !isPropertyOverridden(view, 2, { color: "lime" }), 157 "important color value in second rule of layer-less rule is not overridden" 158 ); 159 ok( 160 isPropertyOverridden(view, 3, { color: "red" }), 161 "important color value in first rule of layer-less rule is overridden" 162 ); 163 164 info("Check (!important) color properties on element style and layer"); 165 await selectNode("h4", inspector); 166 is( 167 await getComputedStyleProperty("h4", null, "color"), 168 "rgb(0, 0, 255)", 169 "The h4 element has a blue color, as important value in element rule wins" 170 ); 171 ok( 172 !isPropertyOverridden(view, 0, { color: "blue" }), 173 "important color value in element rule is not overridden" 174 ); 175 ok( 176 isPropertyOverridden(view, 1, { color: "red" }), 177 "important color value in layer is overridden" 178 ); 179 }); 180 181 function isPropertyOverridden(view, ruleIndex, property) { 182 return getTextProperty( 183 view, 184 ruleIndex, 185 property 186 ).editor.element.classList.contains("ruleview-overridden"); 187 }