non-computed-unit-cycles.html (4092B)
1 <!DOCTYPE html> 2 <link rel="help" href="https://drafts.css-houdini.org/css-properties-values-api-1/#dependency-cycles-via-relative-units"> 3 <link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1938927"> 4 <meta name="assert" content="This test verifies reference cycles involving only unreigstered properties don't make used units invalid at compute time."> 5 <script src="/resources/testharness.js"></script> 6 <script src="/resources/testharnessreport.js"></script> 7 <style> 8 @property --registered-a { 9 syntax: "*"; 10 inherits: false; 11 } 12 13 @property --registered-b { 14 syntax: "*"; 15 inherits: false; 16 } 17 18 @property --registered-c { 19 syntax: "*"; 20 inherits: false; 21 } 22 23 :root { 24 --font-size-em: 2em; 25 --line-height-lh: 2lh; 26 } 27 28 </style> 29 <div id="target" class="values"></div> 30 <div id="reference" class="values"></div> 31 <script> 32 function assert_target_matches_reference(prop) { 33 const target_style = getComputedStyle(target); 34 const target_prop = target_style.getPropertyValue(prop); 35 const reference_style = getComputedStyle(reference); 36 const reference_prop = reference_style.getPropertyValue(prop); 37 assert_equals(target_prop, reference_prop); 38 } 39 40 function set_for_target_and_reference(prop, value) { 41 target.style.setProperty(prop, value); 42 reference.style.setProperty(prop, value); 43 } 44 45 function set_cycle(value, prop_names) { 46 target.style.setProperty(`--${prop_names[0]}`, `${value} var(--${prop_names[0]})`); 47 for (let i = 1; i < prop_names.length; i++) { 48 target.style.setProperty(`--${prop_names[i]}`, `var(--${prop_names[i - 1]})`); 49 } 50 } 51 52 function do_test(run_test, desc) { 53 test(t => { 54 t.add_cleanup(() => { 55 target.style = ''; 56 reference.style = ''; 57 }); 58 run_test(); 59 }, desc); 60 } 61 62 do_test(() => { 63 set_for_target_and_reference('font-size', 'var(--font-size-em)'); 64 set_cycle('1em', ['a']); 65 assert_target_matches_reference('font-size'); 66 }, "Unregistered property in a simple cycle using em should not make font-size invalid at compute time"); 67 68 do_test(() => { 69 set_for_target_and_reference('font-size', 'var(--font-size-em)'); 70 set_cycle('1em', ['a', 'b', 'c']); 71 assert_target_matches_reference('font-size'); 72 }, "Unregistered property in a multi-property cycle using em should not make font-size invalid at compute time"); 73 74 do_test(() => { 75 set_for_target_and_reference('line-height', 'var(--line-height-lh)'); 76 set_cycle('1lh', ['a']); 77 assert_target_matches_reference('line-height'); 78 }, "Unregistered property in a simple cycle using lh should not make line-height invalid at compute time"); 79 80 do_test(() => { 81 set_for_target_and_reference('line-height', 'var(--line-height-lh)'); 82 set_cycle('1lh', ['a', 'b', 'c']); 83 assert_target_matches_reference('line-height'); 84 }, "Unregistered property in a multi-property cycle using lh should not make line-height invalid at compute time"); 85 86 do_test(() => { 87 set_for_target_and_reference('font-size', 'var(--font-size-em)'); 88 set_cycle('1em', ['registered-a']); 89 assert_target_matches_reference('font-size'); 90 }, "Registered universal property in a simple cycle using em should not make font-size invalid at compute time"); 91 92 do_test(() => { 93 set_for_target_and_reference('font-size', 'var(--font-size-em)'); 94 set_cycle('1em', ['registered-a', 'registered-b', 'registered-c']); 95 assert_target_matches_reference('font-size'); 96 }, "Registered universal property in a multi-property cycle using em should not make font-size invalid at compute time"); 97 98 do_test(() => { 99 set_for_target_and_reference('line-height', 'var(--line-height-lh)'); 100 set_cycle('1lh', ['registered-a']); 101 assert_target_matches_reference('line-height'); 102 }, "Registered universal property in a simple cycle using lh should not make line-height invalid at compute time"); 103 104 do_test(() => { 105 set_for_target_and_reference('line-height', 'var(--line-height-lh)'); 106 set_cycle('1lh', ['registered-a', 'registered-b', 'registered-c']); 107 assert_target_matches_reference('line-height'); 108 }, "Registered universal property in a multi-property cycle using lh should not make line-height invalid at compute time"); 109 </script>