[Web Animations] Update WPT tests and move them to imported/w3c/web-platform-tests
[WebKit-https.git] / LayoutTests / imported / w3c / web-platform-tests / web-animations / interfaces / KeyframeEffect / processing-a-keyframes-argument-002.html
1 <!DOCTYPE html>
2 <meta charset=utf-8>
3 <title>Processing a keyframes argument (easing)</title>
4 <link rel="help" href="https://drafts.csswg.org/web-animations/#processing-a-keyframes-argument">
5 <script src="/resources/testharness.js"></script>
6 <script src="/resources/testharnessreport.js"></script>
7 <script src="../../testcommon.js"></script>
8 <script src="../../resources/easing-tests.js"></script>
9 <body>
10 <div id="log"></div>
11 <div id="target"></div>
12 <script>
13 'use strict';
14
15 test(() => {
16   for (const [easing, expected] of gEasingParsingTests) {
17     const effect = new KeyframeEffect(target, {
18       left: ['10px', '20px'],
19       easing: easing
20     });
21     assert_equals(effect.getKeyframes()[0].easing, expected,
22                   `resulting easing for '${easing}'`);
23   }
24 }, 'easing values are parsed correctly when set on a property-indexed'
25    + ' keyframe');
26
27 test(() => {
28   for (const [easing, expected] of gEasingParsingTests) {
29     const effect = new KeyframeEffect(target, [
30       { offset: 0, left: '10px', easing: easing },
31       { offset: 1, left: '20px' }
32     ]);
33     assert_equals(effect.getKeyframes()[0].easing, expected,
34                   `resulting easing for '${easing}'`);
35   }
36 }, 'easing values are parsed correctly when using a keyframe sequence');
37
38 test(() => {
39   for (const invalidEasing of gInvalidEasings) {
40     assert_throws(new TypeError, () => {
41       new KeyframeEffect(target, { easing: invalidEasing });
42     }, `TypeError is thrown for easing '${invalidEasing}'`);
43   }
44 }, 'Invalid easing values are correctly rejected when set on a property-'
45    + 'indexed keyframe');
46
47 test(() => {
48   for (const invalidEasing of gInvalidEasings) {
49     assert_throws(new TypeError, () => {
50       new KeyframeEffect(target, [{ easing: invalidEasing }]);
51     }, `TypeError is thrown for easing '${invalidEasing}'`);
52   }
53 }, 'Invalid easing values are correctly rejected when using a keyframe'
54    + ' sequence');
55
56 test(() => {
57   let propAccessCount = 0;
58   const keyframe = {};
59   const addProp = prop => {
60     Object.defineProperty(keyframe, prop, {
61       get: () => { propAccessCount++; },
62       enumerable: true
63     });
64   }
65   addProp('height');
66   addProp('width');
67   keyframe.easing = 'easy-peasy';
68
69   assert_throws({ name: 'TypeError' }, () => {
70     new KeyframeEffect(target, keyframe);
71   });
72   assert_equals(propAccessCount, 2,
73     'All properties were read before throwing the easing error');
74 }, 'Errors from invalid easings on a property-indexed keyframe are thrown after reading all properties');
75
76 test(() => {
77   let propAccessCount = 0;
78
79   const addProp = (keyframe, prop) => {
80     Object.defineProperty(keyframe, prop, {
81       get: () => { propAccessCount++; },
82       enumerable: true
83     });
84   }
85
86   const kf1 = {};
87   addProp(kf1, 'height');
88   addProp(kf1, 'width');
89   kf1.easing = 'easy-peasy';
90
91   const kf2 = {};
92   addProp(kf2, 'height');
93   addProp(kf2, 'width');
94
95   assert_throws({ name: 'TypeError' }, () => {
96     new KeyframeEffect(target, [ kf1, kf2 ]);
97   });
98   assert_equals(propAccessCount, 4,
99     'All properties were read before throwing the easing error');
100 }, 'Errors from invalid easings on a keyframe sequence are thrown after reading all properties');
101
102 </script>