undefined reference to 'JSC::B3::BasicBlock::fallThrough() const
[WebKit-https.git] / LayoutTests / http / wpt / web-animations / resources / effect-tests.js
1 // Common utility methods for testing animation effects
2
3 // Tests the |property| member of |animation's| target effect's computed timing
4 // at the various points indicated by |values|.
5 //
6 // |values| has the format:
7 //
8 //   {
9 //     before, // value to test during before phase
10 //     activeBoundary, // value to test at the very beginning of the active
11 //                     // phase when playing forwards, or the very end of
12 //                     // the active phase when playing backwards.
13 //                     // This should be undefined if the active duration of
14 //                     // the effect is zero.
15 //     after,  // value to test during the after phase or undefined if the
16 //             // active duration is infinite
17 //   }
18 //
19 function assert_computed_timing_for_each_phase(animation, property, values) {
20   // Some computed timing properties (e.g. 'progress') require floating-point
21   // comparison, whilst exact equality suffices for others.
22   const assert_property_equals =
23       (property === 'progress') ? assert_times_equal : assert_equals;
24
25   const effect = animation.effect;
26   const timing = effect.getComputedTiming();
27
28   // The following calculations are based on the definitions here:
29   // https://w3c.github.io/web-animations/#animation-effect-phases-and-states
30   const beforeActive = Math.max(Math.min(timing.delay, timing.endTime), 0);
31   const activeAfter =
32     Math.max(Math.min(timing.delay + timing.activeDuration, timing.endTime), 0);
33   const direction = animation.playbackRate < 0 ? 'backwards' : 'forwards';
34
35   // Before phase
36   if (direction === 'forwards') {
37     animation.currentTime = beforeActive - 1;
38   } else {
39     animation.currentTime = beforeActive;
40   }
41   assert_property_equals(effect.getComputedTiming()[property], values.before,
42                          `Value of ${property} in the before phase`);
43
44   // Active phase
45   if (effect.getComputedTiming().activeDuration > 0) {
46     if (direction === 'forwards') {
47       animation.currentTime = beforeActive;
48     } else {
49       animation.currentTime = activeAfter;
50     }
51     assert_property_equals(effect.getComputedTiming()[property], values.activeBoundary,
52                            `Value of ${property} at the boundary of the active phase`);
53   } else {
54     assert_equals(values.activeBoundary, undefined,
55                   'Test specifies a value to check during the active phase but'
56                   + ' the animation has a zero duration');
57   }
58
59   // After phase
60   if (effect.getComputedTiming().activeDuration !== Infinity) {
61     if (direction === 'forwards') {
62       animation.currentTime = activeAfter;
63     } else {
64       animation.currentTime = activeAfter + 1;
65     }
66     assert_property_equals(effect.getComputedTiming()[property], values.after,
67                            `Value of ${property} in the after phase`);
68   } else {
69     assert_equals(values.after, undefined,
70                   'Test specifies a value to check during the after phase but'
71                   + ' the animation has an infinite duration');
72   }
73 }