Skip to content

Commit a2bf927

Browse files
authored
Merge pull request web-platform-tests#17 from alancutter/keyframeProcessing
Upstream keyframe-effect-iterable-keyframes.html from Blink
2 parents 0015354 + 87d4846 commit a2bf927

File tree

1 file changed

+96
-0
lines changed

1 file changed

+96
-0
lines changed

web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument.html

+96
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
<script src="/resources/testharness.js"></script>
66
<script src="/resources/testharnessreport.js"></script>
77
<script src="../../testcommon.js"></script>
8+
<script src="../../resources/keyframe-utils.js"></script>
89
<body>
910
<div id="log"></div>
1011
<div id="target"></div>
@@ -79,6 +80,101 @@
7980
+ ' a keyframe sequence');
8081
});
8182

83+
// Test handling of custom iterable objects.
84+
85+
function createIterable(iterations) {
86+
return {
87+
[Symbol.iterator]() {
88+
var i = 0;
89+
return {
90+
next() {
91+
return iterations[i++];
92+
},
93+
};
94+
},
95+
};
96+
}
97+
98+
test(() => {
99+
var effect = new KeyframeEffect(null, createIterable([
100+
{done: false, value: {left: '100px'}},
101+
{done: false, value: {left: '300px'}},
102+
{done: false, value: {left: '200px'}},
103+
{done: true},
104+
]));
105+
assert_frame_lists_equal(effect.getKeyframes(), [
106+
{offset: null, computedOffset: 0, easing: 'linear', left: '100px'},
107+
{offset: null, computedOffset: 0.5, easing: 'linear', left: '300px'},
108+
{offset: null, computedOffset: 1, easing: 'linear', left: '200px'},
109+
]);
110+
}, 'Custom iterator with basic keyframes.');
111+
112+
test(() => {
113+
var keyframes = createIterable([
114+
{done: false, value: {left: '100px'}},
115+
{done: false, value: {left: '300px'}},
116+
{done: false, value: {left: '200px'}},
117+
{done: true},
118+
]);
119+
keyframes.easing = 'ease-in-out';
120+
keyframes.offset = '0.1';
121+
var effect = new KeyframeEffect(null, keyframes);
122+
assert_frame_lists_equal(effect.getKeyframes(), [
123+
{offset: null, computedOffset: 0, easing: 'linear', left: '100px'},
124+
{offset: null, computedOffset: 0.5, easing: 'linear', left: '300px'},
125+
{offset: null, computedOffset: 1, easing: 'linear', left: '200px'},
126+
]);
127+
}, 'easing and offset are ignored on iterable objects.');
128+
129+
test(() => {
130+
var effect = new KeyframeEffect(null, createIterable([
131+
{done: false, value: {left: '100px', top: '200px'}},
132+
{done: false, value: {left: '300px'}},
133+
{done: false, value: {left: '200px', top: '100px'}},
134+
{done: true},
135+
]));
136+
assert_frame_lists_equal(effect.getKeyframes(), [
137+
{offset: null, computedOffset: 0, easing: 'linear', left: '100px', top: '200px'},
138+
{offset: null, computedOffset: 0.5, easing: 'linear', left: '300px'},
139+
{offset: null, computedOffset: 1, easing: 'linear', left: '200px', top: '100px'},
140+
]);
141+
}, 'Custom iterator with multiple properties specified.');
142+
143+
test(() => {
144+
var effect = new KeyframeEffect(null, createIterable([
145+
{done: false, value: {left: '100px'}},
146+
{done: false, value: {left: '250px', offset: 0.75}},
147+
{done: false, value: {left: '200px'}},
148+
{done: true},
149+
]));
150+
assert_frame_lists_equal(effect.getKeyframes(), [
151+
{offset: null, computedOffset: 0, easing: 'linear', left: '100px'},
152+
{offset: 0.75, computedOffset: 0.75, easing: 'linear', left: '250px'},
153+
{offset: null, computedOffset: 1, easing: 'linear', left: '200px'},
154+
]);
155+
}, 'Custom iterator with offset specified.');
156+
157+
test(() => {
158+
assert_throws({name: 'TypeError'}, function() {
159+
new KeyframeEffect(null, createIterable([
160+
{done: false, value: {left: '100px'}},
161+
{done: false, value: 1234},
162+
{done: false, value: {left: '200px'}},
163+
{done: true},
164+
]));
165+
});
166+
}, 'Custom iterator with non object keyframe should throw.');
167+
168+
test(() => {
169+
var effect = new KeyframeEffect(null, createIterable([
170+
{done: false, value: {left: ['100px', '200px']}},
171+
{done: true},
172+
]));
173+
assert_frame_lists_equal(effect.getKeyframes(), [
174+
{offset: null, computedOffset: 1, easing: 'linear', left: '100px,200px'}
175+
]);
176+
}, 'Custom iterator with value list in keyframe should give bizarre string representation of list.');
177+
82178
// FIXME: Test that non-enumerable properties are not accessed
83179

84180
// FIXME: Test that properties are accessed in ascending order by Unicode

0 commit comments

Comments
 (0)