2c718a2c77ac4c9d25ddaf4a0185252d8330f125
[WebKit-https.git] / LayoutTests / animations / keyframes-dynamic.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><!-- webkit-test-runner [ enableWebAnimationsCSSIntegration=true ] -->
2
3 <html lang="en">
4 <head>
5   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
6   <title>Dynamic Keyframes test</title>
7   <style type="text/css" media="screen">
8     .box {
9         position: absolute;
10         left: 0;
11         top: 100px;
12         height: 100px;
13         width: 100px;
14         background-color: blue;
15         -webkit-animation-duration: 1s;
16         -webkit-animation-timing-function: linear;
17     }
18     #box2 { top: 210px; }
19     #box3 { top: 320px; }
20     </style>
21     <script src="resources/animation-test-helpers.js" type="text/javascript" charset="utf-8"></script>
22     <script type="text/javascript" charset="utf-8">
23     
24     const expectedValues = [
25       // [animation-name, time, element-id, property, expected-value, tolerance]
26       ["anim1", 0.3, "box1", "left", 100, 1],
27       ["anim1", 0.7, "box1", "left", 200, 1],
28       ["anim2", 0.3, "box2", "left", 100, 1],
29       ["anim2", 0.7, "box2", "left", 200, 1],
30       ["anim3", 0.3, "box3", "left", 0, 0],
31       ["anim3", 0.7, "box3", "left", 0, 0],
32     ];
33
34     function addKeyframes() {
35         var style = document.createElement('style');
36         document.head.appendChild(style);
37         var keyframes =
38             "{\n" +
39             "    from { left: 50px; }\n" +
40             "    20%  { left: 100px; }\n" +
41             "    40%  { left: 100px; }\n" +
42             "    60%  { left: 200px; }\n" +
43             "    80%  { left: 200px; }\n" +
44             "    to   { left: 300px; }\n" +
45             "}";
46         var box1Keyframes = "@-webkit-keyframes anim1 " + keyframes;
47         var box2Keyframes = "@-webkit-keyframes anim2 " + keyframes;
48         var box3Keyframes = "@-webkit-keyframes anim3 " + keyframes;
49
50         style.sheet.insertRule(box1Keyframes, 0);
51         var box2Index = style.sheet.insertRule(box2Keyframes, 0);
52         var box3Index = style.sheet.insertRule(box3Keyframes, 0);
53         
54         var box1 = document.getElementById("box1");
55         var box2 = document.getElementById("box2");
56         var box3 = document.getElementById("box3");
57
58         box1.style.webkitAnimationName = 'anim1';
59         box2.style.webkitAnimationName = 'anim2';
60         box3.style.webkitAnimationName = 'anim3';
61
62         box2.addEventListener('webkitAnimationStart',
63             function() { style.sheet.removeRule(box2Index); }, true);
64
65         style.sheet.removeRule(box3Index);
66
67         runAnimationTest(expectedValues);
68     }
69     
70     window.addEventListener('DOMContentLoaded', addKeyframes, false);
71     
72   </script>
73 </head>
74 <body>
75 This test performs an animation of the left property. It should stop for 100ms at 100px and 200px
76 We test for those values 50ms after it has stopped at each position. The animations for the three
77 boxes are inserted by JavaScript. The first box's keyframes remain in the stylesheet. The second
78 box's keyframes are removed after its animation starts (but it should animate). The third box's
79 keyframes are removed before its animation starts, and it should not animate.
80 <div class="box" id="box1">
81 </div>
82 <div class="box" id="box2">
83 </div>
84 <div class="box" id="box3">
85 </div>
86 <div id="result">
87 </div>
88 </body>
89 </html>