|
1 <?xml version="1.0" encoding="UTF-8" ?> |
|
2 <html xmlns="http://www.w3.org/1999/xhtml"> |
|
3 <head> |
|
4 <title>Test for adding and removing animations from a time container</title> |
|
5 <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> |
|
6 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> |
|
7 </head> |
|
8 <body> |
|
9 <p id="display"></p> |
|
10 <div id="content" style="display: none"> |
|
11 <svg id="svg" xmlns="http://www.w3.org/2000/svg" width="120px" height="120px" |
|
12 onload="this.pauseAnimations()"> |
|
13 <circle cx="-20" cy="20" r="15" fill="blue" id="circle"> |
|
14 <set attributeName="cy" to="120" begin="0s; 2s" dur="1s" id="b"/> |
|
15 </circle> |
|
16 </svg> |
|
17 </div> |
|
18 <pre id="test"> |
|
19 <script class="testbody" type="text/javascript"> |
|
20 <![CDATA[ |
|
21 /** Test for adding and removing animations from a time container **/ |
|
22 |
|
23 SimpleTest.waitForExplicitFinish(); |
|
24 |
|
25 function main() { |
|
26 var svg = getElement("svg"); |
|
27 ok(svg.animationsPaused(), "should be paused by <svg> load handler"); |
|
28 is(svg.getCurrentTime(), 0, "should be paused at 0 in <svg> load handler"); |
|
29 |
|
30 // Create animation and check initial state |
|
31 var anim = createAnim(); |
|
32 anim.setAttribute('begin','b.begin+2s; 6s'); |
|
33 ok(noStart(anim), "Animation has start time before attaching to document."); |
|
34 |
|
35 // Attach animation to container |
|
36 var circle = getElement("circle"); |
|
37 circle.appendChild(anim); |
|
38 |
|
39 // Check state after attaching |
|
40 is(anim.getStartTime(), 2); |
|
41 |
|
42 // Unbind from tree -- the syncbase instance time(s) should become unresolved |
|
43 // but the offset time should remain |
|
44 anim.parentNode.removeChild(anim); |
|
45 is(anim.getStartTime(), 6); |
|
46 |
|
47 // Rebind and check everything is re-resolved |
|
48 circle.appendChild(anim); |
|
49 is(anim.getStartTime(), 2); |
|
50 |
|
51 // Advance document time to t=1s |
|
52 // Now the current interval for b is 2s-3s but the current interval for anim |
|
53 // is still 2s-2.5s based on b's previous interval |
|
54 svg.setCurrentTime(1); |
|
55 is(anim.getStartTime(), 2); |
|
56 |
|
57 // Unbind |
|
58 anim.parentNode.removeChild(anim); |
|
59 is(anim.getStartTime(), 6); |
|
60 |
|
61 // Rebind |
|
62 // At this point only the current interval will be re-added to anim (this is |
|
63 // for consistency since old intervals may or may not have been filtered). |
|
64 // Therefore the start time should be 4s instead of 2s. |
|
65 circle.appendChild(anim); |
|
66 is(anim.getStartTime(), 4); |
|
67 |
|
68 SimpleTest.finish(); |
|
69 } |
|
70 |
|
71 function createAnim() { |
|
72 const svgns="http://www.w3.org/2000/svg"; |
|
73 var anim = document.createElementNS(svgns,'set'); |
|
74 anim.setAttribute('attributeName','cx'); |
|
75 anim.setAttribute('to','100'); |
|
76 anim.setAttribute('dur','0.5s'); |
|
77 return anim; |
|
78 } |
|
79 |
|
80 function noStart(elem) { |
|
81 var exceptionCaught = false; |
|
82 |
|
83 try { |
|
84 elem.getStartTime(); |
|
85 } catch(e) { |
|
86 exceptionCaught = true; |
|
87 is (e.name, "InvalidStateError", |
|
88 "Unexpected exception from getStartTime."); |
|
89 is (e.code, DOMException.INVALID_STATE_ERR, |
|
90 "Unexpected exception code from getStartTime."); |
|
91 } |
|
92 |
|
93 return exceptionCaught; |
|
94 } |
|
95 |
|
96 window.addEventListener("load", main, false); |
|
97 ]]> |
|
98 </script> |
|
99 </pre> |
|
100 </body> |
|
101 </html> |