Thu, 22 Jan 2015 13:21:57 +0100
Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6
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 **/
23 SimpleTest.waitForExplicitFinish();
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");
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.");
35 // Attach animation to container
36 var circle = getElement("circle");
37 circle.appendChild(anim);
39 // Check state after attaching
40 is(anim.getStartTime(), 2);
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);
47 // Rebind and check everything is re-resolved
48 circle.appendChild(anim);
49 is(anim.getStartTime(), 2);
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);
57 // Unbind
58 anim.parentNode.removeChild(anim);
59 is(anim.getStartTime(), 6);
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);
68 SimpleTest.finish();
69 }
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 }
80 function noStart(elem) {
81 var exceptionCaught = false;
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 }
93 return exceptionCaught;
94 }
96 window.addEventListener("load", main, false);
97 ]]>
98 </script>
99 </pre>
100 </body>
101 </html>