local-if-substitution.html (6712B)
1 <!DOCTYPE html> 2 <title>Custom Functions: Local substitution of var() in if()</title> 3 <link rel="help" href="https://drafts.csswg.org/css-mixins-1/#locally-substitute-a-var"> 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 <script src="resources/utils.js"></script> 7 8 <div id=target data-x="var(--x)" data-f="--f()"></div> 9 <div id=main></div> 10 11 <!-- To pass, a test must produce matching computed values for --actual and 12 --expected on #target. --> 13 14 <template data-name="var() in if() condition's custom property value substitutes locally"> 15 <style> 16 @function --f() { 17 --x: 3px; 18 result: if(style(--x: 3px): PASS; else: FAIL;); 19 } 20 #target { 21 --x: 1px; 22 --actual: --f(); 23 --expected: PASS; 24 } 25 </style> 26 </template> 27 28 <template data-name="var() in if() condition's specified value substitutes locally"> 29 <style> 30 @function --f() { 31 --x: 3px; 32 result: if(style(--y: var(--x)): PASS; else: FAIL;); 33 } 34 #target { 35 --x: 1px; 36 --y: 3px; 37 --actual: --f(); 38 --expected: PASS; 39 } 40 </style> 41 </template> 42 43 <template data-name="var() in if() declaration value substitutes locally"> 44 <style> 45 @function --f() { 46 --x: PASS; 47 result: if(style(--true): var(--x); else: FAIL;); 48 } 49 #target { 50 --true: true; 51 --x: FAIL; 52 --actual: --f(); 53 --expected: PASS; 54 } 55 </style> 56 </template> 57 58 <template data-name="var() in if() condition's custom property value substitutes locally, argument"> 59 <style> 60 @function --f(--x) { 61 result: if(style(--x: 3px): PASS; else: FAIL;); 62 } 63 #target { 64 --x: 1px; 65 --actual: --f(3px); 66 --expected: PASS; 67 } 68 </style> 69 </template> 70 71 <template data-name="var() in if() condition's specified value substitutes locally, argument"> 72 <style> 73 @function --f(--x) { 74 result: if(style(--y: var(--x)): PASS; else: FAIL;); 75 } 76 #target { 77 --x: 1px; 78 --y: 3px; 79 --actual: --f(3px); 80 --expected: PASS; 81 } 82 </style> 83 </template> 84 85 <template data-name="var() in if() declaration value substitutes locally, argument"> 86 <style> 87 @function --f(--x) { 88 result: if(style(--true): var(--x); else: FAIL;); 89 } 90 #target { 91 --true: true; 92 --x: FAIL; 93 --actual: --f(PASS); 94 --expected: PASS; 95 } 96 </style> 97 </template> 98 99 <template data-name="dashed function in if() declaration value"> 100 <style> 101 @function --f() { 102 result: if(style(--true): --g(); else: FAIL;); 103 } 104 @function --g() { 105 result: PASS; 106 } 107 #target { 108 --true: true; 109 --actual: --f(); 110 --expected: PASS; 111 } 112 </style> 113 </template> 114 115 <template data-name="dashed function with argument in if() declaration value"> 116 <style> 117 @function --f(--x) { 118 --true: true; 119 result: if(style(--true): --g(var(--x)); else: FAIL;); 120 } 121 @function --g(--x) { 122 result: var(--x, FAIL); 123 } 124 #target { 125 --actual: --f(PASS); 126 --expected: PASS; 127 } 128 </style> 129 </template> 130 131 <template data-name="if() cycle through local"> 132 <style> 133 @function --f() { 134 --x: if(style(--true): var(--x); else: FAIL;); 135 result: var(--x, PASS); 136 } 137 #target { 138 --true: true; 139 --x: FAIL; 140 --actual: --f(); 141 --expected: PASS; 142 } 143 </style> 144 </template> 145 146 <template data-name="if() cycle in condition custom property through local"> 147 <style> 148 @function --f() { 149 --x: if(style(--x): FAIL1; else: FAIL2;); 150 result: var(--x, PASS); 151 } 152 #target { 153 --x: 1px; 154 --actual: --f(); 155 --expected: PASS; 156 } 157 </style> 158 </template> 159 160 <template data-name="if() cycle in condition specified value through local"> 161 <style> 162 @function --f() { 163 --x: if(style(--y: var(--x)): FAIL1; else: FAIL2;); 164 result: var(--x, PASS); 165 } 166 #target { 167 --y: 1px; 168 --x: 1px; 169 --actual: --f(); 170 --expected: PASS; 171 } 172 </style> 173 </template> 174 175 <template data-name="if() cycle through function"> 176 <style> 177 @function --f() { 178 --local: --g(); 179 result: var(--local); 180 } 181 @function --g() { 182 result: if(style(--true): --f()); 183 } 184 #target { 185 --true: true; 186 --local: FAIL; 187 --tmp: --f(); 188 --actual: var(--tmp, PASS); 189 --expected: PASS; 190 } 191 </style> 192 </template> 193 194 <template data-name="if() no cycle in overridden local"> 195 <style> 196 @function --f() { 197 --x: 3px; 198 result: if(style(--x): PASS; else: FAIL); 199 } 200 #target { 201 --x: var(--x); 202 --actual: --f(); 203 --expected: PASS; 204 } 205 </style> 206 </template> 207 208 <template data-name="if() no cycle in overridden argument"> 209 <style> 210 @function --f(--x) { 211 result: if(style(--x): PASS; else: FAIL); 212 } 213 #target { 214 --x: var(--x); 215 --actual: --f(3px); 216 --expected: PASS; 217 } 218 </style> 219 </template> 220 221 <template data-name="CSS-wide keywords are interpreted locally (initial)"> 222 <style> 223 @function --f(--c: green) { 224 result: if(style(--c: initial): PASS; else: FAIL); 225 } 226 @function --g() { 227 --c: red; 228 result: --f(); 229 } 230 #target { 231 --actual: --g(); 232 --expected: PASS; 233 } 234 </style> 235 </template> 236 237 <template data-name="CSS-wide keywords are interpreted locally (inherit)"> 238 <style> 239 @function --f(--c: red) { 240 --c: green; 241 result: if(style(--c: inherit): PASS; else: FAIL); 242 } 243 @function --g() { 244 --c: green; 245 result: --f(); 246 } 247 #target { 248 --actual: --g(); 249 --expected: PASS; 250 } 251 </style> 252 </template> 253 254 <template data-name="CSS-wide keywords are interpreted locally (guaranteed-invalid, initial)"> 255 <style> 256 @function --f() { 257 result: if(style(--c: initial): PASS; else: FAIL); 258 } 259 #target { 260 --actual: --f(); 261 --expected: PASS; 262 } 263 </style> 264 </template> 265 266 <template data-name="CSS-wide keywords are interpreted locally (guaranteed-invalid, unset)"> 267 <style> 268 @function --f() { 269 result: if(style(--c: unset): PASS; else: FAIL); 270 } 271 #target { 272 --actual: --f(); 273 --expected: PASS; 274 } 275 </style> 276 </template> 277 278 <template data-name="CSS-wide keywords are interpreted locally (revert)"> 279 <style> 280 @function --f() { 281 result: if(style(--c: revert): FAIL; else: PASS); 282 } 283 #target { 284 --actual: --f(); 285 --expected: PASS; 286 } 287 </style> 288 </template> 289 290 <template data-name="CSS-wide keywords are interpreted locally (revert-layer)"> 291 <style> 292 @function --f() { 293 result: if(style(--c: revert-layer): FAIL; else: PASS); 294 } 295 #target { 296 --actual: --f(); 297 --expected: PASS; 298 } 299 </style> 300 </template> 301 302 <script> 303 test_all_templates(); 304 </script>