OLD | NEW |
| (Empty) |
1 <!DOCTYPE html> | |
2 <meta charset='utf-8'> | |
3 <title>Test that KeyframeEffect can take iterable objects as keyframes</title> | |
4 <link rel='help' href='https://w3c.github.io/web-animations/#processing-a-keyfra
mes-argument'> | |
5 <script src="../resources/testharness.js"></script> | |
6 <script src="../resources/testharnessreport.js"></script> | |
7 <body></body> | |
8 <script> | |
9 function assertAnimationEffect({keyframes, expect}) { | |
10 var effect = new KeyframeEffect(null, keyframes); | |
11 var frames = effect.getKeyframes(); | |
12 for (let i = 0; i < expect.length; i++) { | |
13 assert_equals(frames[i].computedOffset, expect[i].at); | |
14 for (var property in expect[i].is) | |
15 assert_equals(frames[i][property], expect[i].is[property], | |
16 `${property} is ${expect[i].is[property]} at ${expect[i].at}`); | |
17 } | |
18 return frames; | |
19 } | |
20 | |
21 function createIterable(iterations) { | |
22 return { | |
23 [Symbol.iterator]() { | |
24 var i = 0; | |
25 return {next: () => iterations[i++]}; | |
26 }, | |
27 }; | |
28 } | |
29 | |
30 test(() => { | |
31 assertAnimationEffect({ | |
32 keyframes: createIterable([ | |
33 {done: false, value: {left: '100px'}}, | |
34 {done: false, value: {left: '300px'}}, | |
35 {done: false, value: {left: '200px'}}, | |
36 {done: true}, | |
37 ]), | |
38 expect: [ | |
39 {at: 0, is: {left: '100px'}}, | |
40 {at: 0.5, is: {left: '300px'}}, | |
41 {at: 1, is: {left: '200px'}}, | |
42 ], | |
43 }); | |
44 }, 'Custom iterator with basic keyframes.'); | |
45 | |
46 test(() => { | |
47 var keyframes = createIterable([ | |
48 {done: false, value: {left: '100px'}}, | |
49 {done: false, value: {left: '300px'}}, | |
50 {done: false, value: {left: '200px'}}, | |
51 {done: true}, | |
52 ]); | |
53 keyframes.easing = 'ease-in-out'; | |
54 keyframes.offset = '0.1'; | |
55 let frames = assertAnimationEffect({ | |
56 keyframes, | |
57 expect: [ | |
58 {at: 0, is: {left: '100px'}}, | |
59 {at: 0.5, is: {left: '300px'}}, | |
60 {at: 1, is: {left: '200px'}}, | |
61 ], | |
62 }); | |
63 assert_equals(frames[0].easing, 'linear'); | |
64 assert_equals(frames[0].offset, null); | |
65 }, 'easing and offset are ignored on iterable objects.'); | |
66 | |
67 test(() => { | |
68 assertAnimationEffect({ | |
69 keyframes: createIterable([ | |
70 {done: false, value: {left: '100px', top: '200px'}}, | |
71 {done: false, value: {left: '300px'}}, | |
72 {done: false, value: {left: '200px', top: '100px'}}, | |
73 {done: true}, | |
74 ]), | |
75 expect: [ | |
76 {at: 0, is: {left: '100px', top: '200px'}}, | |
77 {at: 0.5, is: {left: '300px'}}, | |
78 {at: 1, is: {left: '200px', top: '100px'}}, | |
79 ], | |
80 }); | |
81 }, 'Custom iterator with multiple properties specified.'); | |
82 | |
83 test(() => { | |
84 assertAnimationEffect({ | |
85 keyframes: createIterable([ | |
86 {done: false, value: {left: '100px'}}, | |
87 {done: false, value: {left: '250px', offset: 0.75}}, | |
88 {done: false, value: {left: '200px'}}, | |
89 {done: true}, | |
90 ]), | |
91 expect: [ | |
92 {at: 0, is: {left: '100px'}}, | |
93 {at: 0.75, is: {left: '250px'}}, | |
94 {at: 1, is: {left: '200px'}}, | |
95 ], | |
96 }); | |
97 }, 'Custom iterator with offset specified.'); | |
98 | |
99 test(() => { | |
100 assert_throws({name: 'TypeError'}, () => { | |
101 assertAnimationEffect({ | |
102 keyframes: createIterable([ | |
103 {done: false, value: {left: '100px'}}, | |
104 {done: false, value: 1234}, | |
105 {done: false, value: {left: '200px'}}, | |
106 {done: true}, | |
107 ]), | |
108 expect: [], | |
109 }); | |
110 }); | |
111 }, 'Custom iterator with non object keyframe should throw.'); | |
112 | |
113 test(() => { | |
114 assertAnimationEffect({ | |
115 keyframes: createIterable([ | |
116 {done: false, value: {left: ['100px', '200px']}}, | |
117 {done: true}, | |
118 ]), | |
119 expect: [{at: 1, is: {left: "100px,200px"}}], | |
120 }); | |
121 }, 'Custom iterator with value list in keyframe should give bizarre string repre
sentation of list.'); | |
122 </script> | |
OLD | NEW |