summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/css/motion/animation/offset-path-interpolation-005.html
blob: 11234bf31a325fd43b8c2d32f9e503ff8770c62d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>offset-distance interpolation</title>
    <link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
    <link rel="help" href="https://drafts.fxtf.org/motion-1/#offset-distance-property">
    <meta name="assert" content="offset-distance supports animation.">
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <script src="/css/support/interpolation-testcommon.js"></script>
  </head>
  <style>
    .parent {
      offset-path: ray(30deg closest-side);
    }
    .target {
      offset-path: ray(10deg closest-side);
    }
  </style>
  <body>
    <script>
      'use strict';

      test_no_interpolation({
        property: 'offset-path',
        from: "path('M 0 0 L 100 100 M 100 200 L 200 200 Z L 200 100 Z')",
        to: "ray(0deg closest-side)",
      });

      test_no_interpolation({
        property: 'offset-path',
        from: "ray(0deg closest-corner)",
        to: "none",
      });

      // Neutral keyframes use the inline style.
      test_interpolation({
        property: 'offset-path',
        from: neutralKeyframe,
        to: 'ray(20deg closest-side)',
      }, [
        {at: -0.3, expect: 'ray(7deg closest-side)'},
        {at: 0, expect: 'ray(10deg closest-side)'},
        {at: 0.3, expect: 'ray(13deg closest-side)'},
        {at: 0.6, expect: 'ray(16deg closest-side)'},
        {at: 1, expect: 'ray(20deg closest-side)'},
        {at: 1.5, expect: 'ray(25deg closest-side)'},
      ]);

      // No interpolation to a ray from the initial value 'none'.
      test_no_interpolation({
        property: 'offset-path',
        from: 'initial',
        to: 'ray(20deg closest-side)',
      });

      // 'inherit' keyframes use the parent style.
      test_interpolation({
        property: 'offset-path',
        from: 'inherit',
        to: 'ray(20deg closest-side)',
      }, [
        {at: -0.3, expect: 'ray(33deg closest-side)'},
        {at: 0, expect: 'ray(30deg closest-side)'},
        {at: 0.3, expect: 'ray(27deg closest-side)'},
        {at: 0.6, expect: 'ray(24deg closest-side)'},
        {at: 1, expect: 'ray(20deg closest-side)'},
        {at: 1.5, expect: 'ray(15deg closest-side)'},
      ]);

      // No interpolation to a ray from the initial value 'none'.
      test_no_interpolation({
        property: 'offset-path',
        from: 'unset',
        to: 'ray(20deg closest-side)',
      });

      // No interpolation to a ray from the initial value 'none'.
      test_no_interpolation({
        property: 'offset-path',
        from: 'none',
        to: 'ray(20deg closest-side)',
      });

      // Interpolation between rays.
      test_interpolation({
        property: 'offset-path',
        from: 'ray(10deg sides contain)',
        to: 'ray(50deg sides contain)'
      }, [
        {at: -1, expect: 'ray(-30deg sides contain)'},
        {at: 0, expect: 'ray(10deg sides contain)'},
        {at: 0.125, expect: 'ray(15deg sides contain)'},
        {at: 0.875, expect: 'ray(45deg sides contain)'},
        {at: 1, expect: 'ray(50deg sides contain)'},
        {at: 2, expect: 'ray(90deg sides contain)'},
      ]);

      test_interpolation({
        property: 'offset-path',
        from: 'ray(-10deg farthest-corner)',
        to: 'ray(-50deg farthest-corner)'
      }, [
        {at: -1, expect: 'ray(30deg farthest-corner)'},
        {at: 0, expect: 'ray(-10deg farthest-corner)'},
        {at: 0.125, expect: 'ray(-15deg farthest-corner)'},
        {at: 0.875, expect: 'ray(-45deg farthest-corner)'},
        {at: 1, expect: 'ray(-50deg farthest-corner)'},
        {at: 2, expect: 'ray(-90deg farthest-corner)'},
      ]);

      test_interpolation({
        property: 'offset-path',
        from: 'ray(-10deg farthest-corner at 0% 0px)',
        to: 'ray(-50deg farthest-corner at 100% 100px)'
      }, [
        {at: -1, expect: 'ray(30deg farthest-corner at -100% -100px)'},
        {at: 0, expect: 'ray(-10deg farthest-corner at 0% 0px)'},
        {at: 0.125, expect: 'ray(-15deg farthest-corner at 12.5% 12.5px)'},
        {at: 0.875, expect: 'ray(-45deg farthest-corner at 87.5% 87.5px)'},
        {at: 1, expect: 'ray(-50deg farthest-corner at 100% 100px)'},
        {at: 2, expect: 'ray(-90deg farthest-corner at 200% 200px)'},
      ]);

      test_interpolation({
        property: 'offset-path',
        from: 'ray(-10deg farthest-corner)',
        to: 'ray(-50deg farthest-corner at 100% 100%)'
      }, [
        // TODO: Test intermediate values as well, once the expected behavior
        // is clear in the spec. Right now it's a bit unclear whether or how to
        // interpolate to/from the initial 'auto' value.
        {at: 1, expect: 'ray(-50deg farthest-corner at 100% 100%)'},
      ]);

      // No interpolation between different sizes and/or different containment and/or coord-boxes.
      test_no_interpolation({
        property: 'offset-path',
        from: 'ray(200deg farthest-side)',
        to: 'ray(300deg sides)'
      });
      test_no_interpolation({
        property: 'offset-path',
        from: 'ray(200deg sides contain)',
        to: 'ray(300deg sides)'
      });
      test_no_interpolation({
        property: 'offset-path',
        from: 'ray(200deg farthest-side contain)',
        to: 'ray(300deg sides)'
      });
      test_no_interpolation({
        property: 'offset-path',
        from: 'ray(-10deg farthest-corner) content-box',
        to: 'ray(-50deg farthest-corner at 100% 100%) padding-box'
      });
    </script>
  </body>
</html>