diff options
Diffstat (limited to 'testing/web-platform/tests/css/css-sizing/animation/aspect-ratio-interpolation.html')
-rw-r--r-- | testing/web-platform/tests/css/css-sizing/animation/aspect-ratio-interpolation.html | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/testing/web-platform/tests/css/css-sizing/animation/aspect-ratio-interpolation.html b/testing/web-platform/tests/css/css-sizing/animation/aspect-ratio-interpolation.html new file mode 100644 index 0000000000..3628ff607c --- /dev/null +++ b/testing/web-platform/tests/css/css-sizing/animation/aspect-ratio-interpolation.html @@ -0,0 +1,130 @@ +<!DOCTYPE html> +<meta charset="UTF-8"> +<title>aspect-ratio interpolation</title> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio"> +<meta name="assert" content="aspect-ratio supports animation"> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/interpolation-testcommon.js"></script> + +<style> +.target { + font-size: 16px; + background-color: black; + width: 10px; + aspect-ratio: 0.5; +} +</style> + +<body> + <template id="target-template"> + <div class="container"> + <div class="target"></div> + </div> + </template> +</body> + +<script> +test_interpolation({ + property: 'aspect-ratio', + from: '0.5', + to: '2', +}, [ + {at: -0.5, expect: '0.25 / 1'}, + {at: 0, expect: '0.5 / 1'}, + {at: 0.5, expect: '1 / 1'}, + {at: 1, expect: '2 / 1'}, + {at: 1.5, expect: '4 / 1'} +]); + +test_interpolation({ + property: 'aspect-ratio', + from: '1 / 2', + to: '2 / 1', +}, [ + {at: -0.5, expect: '0.25 / 1'}, + {at: 0, expect: '0.5 / 1'}, + {at: 0.5, expect: '1 / 1'}, + {at: 1, expect: '2 / 1'}, + {at: 1.5, expect: '4 / 1'} +]); + +// Test neutral keyframe +test_interpolation({ + property: 'aspect-ratio', + from: '', + to: '2 / 1', +}, [ + {at: -0.5, expect: '0.25 / 1'}, + {at: 0, expect: '0.5 / 1'}, + {at: 0.5, expect: '1 / 1'}, + {at: 1, expect: '2 / 1'}, + {at: 1.5, expect: '4 / 1'} +]); + +test_interpolation({ + property: 'aspect-ratio', + from: 'auto 1 / 2', + to: 'auto 2 / 1', +}, [ + {at: -0.5, expect: 'auto 0.25 / 1'}, + {at: 0, expect: 'auto 0.5 / 1'}, + {at: 0.5, expect: 'auto 1 / 1'}, + {at: 1, expect: 'auto 2 / 1'}, + {at: 1.5, expect: 'auto 4 / 1'} +]); + +test_no_interpolation({ + property: 'aspect-ratio', + from: 'auto', + to: '2 / 1', +}); + +test_no_interpolation({ + property: 'aspect-ratio', + from: 'auto 1 / 1', + to: '2 / 1', +}); + +// If either number in the ratio is 0 or infinite, it represents a degenerate +// ratio and will not be interpolated: +// https://drafts.csswg.org/css-values-4/#combine-ratio +test_no_interpolation({ + property: 'aspect-ratio', + from: '1 / 0', + to: '1 / 1', +}); +test_no_interpolation({ + property: 'aspect-ratio', + from: '1 / 1', + to: '0 / 1', +}); + +// Addition of <ratio>s is not possible. +// https://drafts.csswg.org/css-values/#combine-ratio +// +// And if a value type does not define a specific procedure for addition or is +// defined as not additive, its addition operation is simply Vresult = Va. +// (The first value is Va, the second value is Vb, and the result is Vresult.) +// https://drafts.csswg.org/css-values-4/#not-additive, +// +// So in this test case: +// 1. The 1st keyframe: { aspectRatio: 0.5/1, composite: 'replace', offset: 0 } +// 2. The 2nd keyframe: { aspectRatio: 1/1, composite: 'add', offset: 1 } +// and the underlying value is 2/1. Based on the spec, the composited from_value +// is 0.5/1 (because we just replace it), and the composited to_value is 2/1 +// (because we use Va as the result value). +test_composition({ + property: 'aspect-ratio', + underlying: '2 / 1', + replaceFrom: '0.5 / 1', + addTo: '1 / 1', +}, [ + {at: 0, expect: '0.5 / 1'}, + {at: 0.5, expect: '1 / 1'}, + {at: 1, expect: '2 / 1'} +]); + +</script> +</body> |