summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/css/css-sizing/animation/aspect-ratio-interpolation.html
diff options
context:
space:
mode:
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.html130
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>