browser_rules_variables_02.js (8534B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 // Test for variables in rule view. 7 8 const TEST_URI = URL_ROOT + "doc_variables_2.html"; 9 10 add_task(async function () { 11 await addTab(TEST_URI); 12 const { inspector, view } = await openRuleView(); 13 14 await testBasic(inspector, view); 15 await testNestedCssFunctions(inspector, view); 16 await testBorderShorthandAndInheritance(inspector, view); 17 await testSingleLevelVariable(inspector, view); 18 await testDoubleLevelVariable(inspector, view); 19 await testTripleLevelVariable(inspector, view); 20 }); 21 22 async function testBasic(inspector, view) { 23 info( 24 "Test support for basic variable functionality for var() with 2 variables." + 25 "Format: var(--var1, var(--var2))" 26 ); 27 28 await selectNode("#a", inspector); 29 const unsetVar = getRuleViewProperty( 30 view, 31 "#a", 32 "font-size" 33 ).valueSpan.querySelector(".inspector-unmatched"); 34 const setVarParent = unsetVar.nextElementSibling; 35 const setVar = getVarFromParent(setVarParent); 36 is( 37 unsetVar.textContent, 38 "--var-not-defined", 39 "--var-not-defined is not set correctly" 40 ); 41 is( 42 unsetVar.dataset.variable, 43 "--var-not-defined is not set", 44 "--var-not-defined's dataset.variable is not set correctly" 45 ); 46 is( 47 setVarParent.textContent, 48 " var(--var-defined-font-size)", 49 "var(--var-defined-font-size) parsed incorrectly" 50 ); 51 is( 52 setVar.textContent, 53 "--var-defined-font-size", 54 "--var-defined-font-size is not set correctly" 55 ); 56 is( 57 setVar.dataset.variable, 58 "60px", 59 "--bg's dataset.variable is not set correctly" 60 ); 61 } 62 63 async function testNestedCssFunctions(inspector, view) { 64 info( 65 "Test support for variable functionality for a var() nested inside " + 66 "another CSS function. Format: rgb(0, 0, var(--var1, var(--var2)))" 67 ); 68 69 await selectNode("#b", inspector); 70 const unsetVarParent = getRuleViewProperty( 71 view, 72 "#b", 73 "color" 74 ).valueSpan.querySelector(".inspector-unmatched"); 75 const unsetVar = getVarFromParent(unsetVarParent); 76 const setVar = unsetVarParent.previousElementSibling; 77 is( 78 unsetVarParent.textContent, 79 " var(--var-defined-r-2)", 80 "var(--var-defined-r-2) not parsed correctly" 81 ); 82 is( 83 unsetVar.textContent, 84 "--var-defined-r-2", 85 "--var-defined-r-2 is not set correctly" 86 ); 87 is( 88 unsetVar.dataset.variable, 89 "0", 90 "--var-defined-r-2's dataset.variable is not set correctly" 91 ); 92 is( 93 setVar.textContent, 94 "--var-defined-r-1", 95 "--var-defined-r-1 is not set correctly" 96 ); 97 is( 98 setVar.dataset.variable, 99 "255", 100 "--var-defined-r-1's dataset.variable is not set correctly" 101 ); 102 } 103 104 async function testBorderShorthandAndInheritance(inspector, view) { 105 info( 106 "Test support for variable functionality for shorthands/CSS styles with spaces " + 107 'like "margin: w x y z". Also tests functionality for inherticance of CSS' + 108 " variables. Format: var(l, var(m)) var(x) rgb(var(r) var(g) var(b))" 109 ); 110 111 await selectNode("#c", inspector); 112 const unsetVarL = getRuleViewProperty( 113 view, 114 "#c", 115 "border" 116 ).valueSpan.querySelector(".inspector-unmatched"); 117 const setVarMParent = unsetVarL.nextElementSibling; 118 119 // var(x) is the next sibling of the parent of M 120 const setVarXParent = setVarMParent.parentNode.nextElementSibling; 121 122 // var(x) next sibling is the element that wraps the color 123 const colorParent = 124 setVarXParent.nextElementSibling.querySelector(".ruleview-color"); 125 // var(r) is the first childElement of the ruleview-color element 126 const setVarRParent = colorParent.firstElementChild; 127 // var(g) is the next sibling of var(r), 128 const setVarGParent = setVarRParent.nextElementSibling; 129 // and var(b) is the next sibling of var(g), 130 const setVarBParent = setVarGParent.nextElementSibling; 131 132 const setVarM = getVarFromParent(setVarMParent); 133 const setVarX = setVarXParent.firstElementChild; 134 const setVarR = setVarRParent.firstElementChild; 135 const setVarG = setVarGParent.firstElementChild; 136 const setVarB = setVarBParent.firstElementChild; 137 138 is( 139 unsetVarL.textContent, 140 "--var-undefined", 141 "--var-undefined is not set correctly" 142 ); 143 is( 144 unsetVarL.dataset.variable, 145 "--var-undefined is not set", 146 "--var-undefined's dataset.variable is not set correctly" 147 ); 148 149 is( 150 setVarM.textContent, 151 "--var-border-px", 152 "--var-border-px is not set correctly" 153 ); 154 is( 155 setVarM.dataset.variable, 156 "10px", 157 "--var-border-px's dataset.variable is not set correctly" 158 ); 159 160 is( 161 setVarX.textContent, 162 "--var-border-style", 163 "--var-border-style is not set correctly" 164 ); 165 is( 166 setVarX.dataset.variable, 167 "solid", 168 "var-border-style's dataset.variable is not set correctly" 169 ); 170 171 is( 172 setVarR.textContent, 173 "--var-border-r", 174 "--var-defined-r is not set correctly" 175 ); 176 is( 177 setVarR.dataset.variable, 178 "255", 179 "--var-defined-r's dataset.variable is not set correctly" 180 ); 181 182 is( 183 setVarG.textContent, 184 "--var-border-g", 185 "--var-defined-g is not set correctly" 186 ); 187 is( 188 setVarG.dataset.variable, 189 "0", 190 "--var-defined-g's dataset.variable is not set correctly" 191 ); 192 193 is( 194 setVarB.textContent, 195 "--var-border-b", 196 "--var-defined-b is not set correctly" 197 ); 198 is( 199 setVarB.dataset.variable, 200 "0", 201 "--var-defined-b's dataset.variable is not set correctly" 202 ); 203 } 204 205 async function testSingleLevelVariable(inspector, view) { 206 info( 207 "Test support for variable functionality of a single level of " + 208 "undefined variables. Format: var(x, constant)" 209 ); 210 211 await selectNode("#d", inspector); 212 const unsetVar = getRuleViewProperty( 213 view, 214 "#d", 215 "font-size" 216 ).valueSpan.querySelector(".inspector-unmatched"); 217 218 is( 219 unsetVar.textContent, 220 "--var-undefined", 221 "--var-undefined is not set correctly" 222 ); 223 is( 224 unsetVar.dataset.variable, 225 "--var-undefined is not set", 226 "--var-undefined's dataset.variable is not set correctly" 227 ); 228 } 229 230 async function testDoubleLevelVariable(inspector, view) { 231 info( 232 "Test support for variable functionality of double level of " + 233 "undefined variables. Format: var(x, var(y, constant))" 234 ); 235 236 await selectNode("#e", inspector); 237 const allUnsetVars = getRuleViewProperty( 238 view, 239 "#e", 240 "color" 241 ).valueSpan.querySelectorAll(".inspector-unmatched"); 242 243 is(allUnsetVars.length, 2, "The number of unset variables is mismatched."); 244 245 const unsetVar1 = allUnsetVars[0]; 246 const unsetVar2 = allUnsetVars[1]; 247 248 is( 249 unsetVar1.textContent, 250 "--var-undefined", 251 "--var-undefined is not set correctly" 252 ); 253 is( 254 unsetVar1.dataset.variable, 255 "--var-undefined is not set", 256 "--var-undefined's dataset.variable is not set correctly" 257 ); 258 259 is( 260 unsetVar2.textContent, 261 "--var-undefined-2", 262 "--var-undefined is not set correctly" 263 ); 264 is( 265 unsetVar2.dataset.variable, 266 "--var-undefined-2 is not set", 267 "--var-undefined-2's dataset.variable is not set correctly" 268 ); 269 } 270 271 async function testTripleLevelVariable(inspector, view) { 272 info( 273 "Test support for variable functionality of triple level of " + 274 "undefined variables. Format: var(x, var(y, var(z, constant)))" 275 ); 276 277 await selectNode("#f", inspector); 278 const allUnsetVars = getRuleViewProperty( 279 view, 280 "#f", 281 "border-style" 282 ).valueSpan.querySelectorAll(".inspector-unmatched"); 283 284 is(allUnsetVars.length, 3, "The number of unset variables is mismatched."); 285 286 const unsetVar1 = allUnsetVars[0]; 287 const unsetVar2 = allUnsetVars[1]; 288 const unsetVar3 = allUnsetVars[2]; 289 290 is( 291 unsetVar1.textContent, 292 "--var-undefined", 293 "--var-undefined is not set correctly" 294 ); 295 is( 296 unsetVar1.dataset.variable, 297 "--var-undefined is not set", 298 "--var-undefined's dataset.variable is not set correctly" 299 ); 300 301 is( 302 unsetVar2.textContent, 303 "--var-undefined-2", 304 "--var-undefined-2 is not set correctly" 305 ); 306 is( 307 unsetVar2.dataset.variable, 308 "--var-undefined-2 is not set", 309 "--var-defined-r-2's dataset.variable is not set correctly" 310 ); 311 312 is( 313 unsetVar3.textContent, 314 "--var-undefined-3", 315 "--var-undefined-3 is not set correctly" 316 ); 317 is( 318 unsetVar3.dataset.variable, 319 "--var-undefined-3 is not set", 320 "--var-defined-r-3's dataset.variable is not set correctly" 321 ); 322 } 323 324 function getVarFromParent(varParent) { 325 return varParent.firstElementChild.firstElementChild; 326 }