109 lines
4 KiB
HTML
109 lines
4 KiB
HTML
<!DOCTYPE html>
|
|
<link rel="help" href="https://drafts.css-houdini.org/css-properties-values-api-1/#dependency-cycles-via-relative-units">
|
|
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1938927">
|
|
<meta name="assert" content="This test verifies reference cycles involving only unreigstered properties don't make used units invalid at compute time.">
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<style>
|
|
@property --registered-a {
|
|
syntax: "*";
|
|
inherits: false;
|
|
}
|
|
|
|
@property --registered-b {
|
|
syntax: "*";
|
|
inherits: false;
|
|
}
|
|
|
|
@property --registered-c {
|
|
syntax: "*";
|
|
inherits: false;
|
|
}
|
|
|
|
:root {
|
|
--font-size-em: 2em;
|
|
--line-height-lh: 2lh;
|
|
}
|
|
|
|
</style>
|
|
<div id="target" class="values"></div>
|
|
<div id="reference" class="values"></div>
|
|
<script>
|
|
function assert_target_matches_reference(prop) {
|
|
const target_style = getComputedStyle(target);
|
|
const target_prop = target_style.getPropertyValue(prop);
|
|
const reference_style = getComputedStyle(reference);
|
|
const reference_prop = reference_style.getPropertyValue(prop);
|
|
assert_equals(target_prop, reference_prop);
|
|
}
|
|
|
|
function set_for_target_and_reference(prop, value) {
|
|
target.style.setProperty(prop, value);
|
|
reference.style.setProperty(prop, value);
|
|
}
|
|
|
|
function set_cycle(value, prop_names) {
|
|
target.style.setProperty(`--${prop_names[0]}`, `${value} var(--${prop_names[0]})`);
|
|
for (let i = 1; i < prop_names.length; i++) {
|
|
target.style.setProperty(`--${prop_names[i]}`, `var(--${prop_names[i - 1]})`);
|
|
}
|
|
}
|
|
|
|
function do_test(run_test, desc) {
|
|
test(t => {
|
|
t.add_cleanup(() => {
|
|
target.style = '';
|
|
reference.style = '';
|
|
});
|
|
run_test();
|
|
}, desc);
|
|
}
|
|
|
|
do_test(() => {
|
|
set_for_target_and_reference('font-size', 'var(--font-size-em)');
|
|
set_cycle('1em', ['a']);
|
|
assert_target_matches_reference('font-size');
|
|
}, "Unregistered property in a simple cycle using em should not make font-size invalid at compute time");
|
|
|
|
do_test(() => {
|
|
set_for_target_and_reference('font-size', 'var(--font-size-em)');
|
|
set_cycle('1em', ['a', 'b', 'c']);
|
|
assert_target_matches_reference('font-size');
|
|
}, "Unregistered property in a multi-property cycle using em should not make font-size invalid at compute time");
|
|
|
|
do_test(() => {
|
|
set_for_target_and_reference('line-height', 'var(--line-height-lh)');
|
|
set_cycle('1lh', ['a']);
|
|
assert_target_matches_reference('line-height');
|
|
}, "Unregistered property in a simple cycle using lh should not make line-height invalid at compute time");
|
|
|
|
do_test(() => {
|
|
set_for_target_and_reference('line-height', 'var(--line-height-lh)');
|
|
set_cycle('1lh', ['a', 'b', 'c']);
|
|
assert_target_matches_reference('line-height');
|
|
}, "Unregistered property in a multi-property cycle using lh should not make line-height invalid at compute time");
|
|
|
|
do_test(() => {
|
|
set_for_target_and_reference('font-size', 'var(--font-size-em)');
|
|
set_cycle('1em', ['registered-a']);
|
|
assert_target_matches_reference('font-size');
|
|
}, "Registered universal property in a simple cycle using em should not make font-size invalid at compute time");
|
|
|
|
do_test(() => {
|
|
set_for_target_and_reference('font-size', 'var(--font-size-em)');
|
|
set_cycle('1em', ['registered-a', 'registered-b', 'registered-c']);
|
|
assert_target_matches_reference('font-size');
|
|
}, "Registered universal property in a multi-property cycle using em should not make font-size invalid at compute time");
|
|
|
|
do_test(() => {
|
|
set_for_target_and_reference('line-height', 'var(--line-height-lh)');
|
|
set_cycle('1lh', ['registered-a']);
|
|
assert_target_matches_reference('line-height');
|
|
}, "Registered universal property in a simple cycle using lh should not make line-height invalid at compute time");
|
|
|
|
do_test(() => {
|
|
set_for_target_and_reference('line-height', 'var(--line-height-lh)');
|
|
set_cycle('1lh', ['registered-a', 'registered-b', 'registered-c']);
|
|
assert_target_matches_reference('line-height');
|
|
}, "Registered universal property in a multi-property cycle using lh should not make line-height invalid at compute time");
|
|
</script>
|