<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Test for getStartTime Behavior </title> <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> </head> <body> <p id="display"></p> <div id="content" style="display: none"> <svg id="svg" xmlns="http://www.w3.org/2000/svg" width="120px" height="120px" onload="this.pauseAnimations()"> <circle cx="20" cy="20" r="15" fill="blue"> <animate attributeName="cx" attributeType="XML" from="20" to="100" begin="indefinite" dur="1s" id="anim"/> </circle> </svg> </div> <pre id="test"> <script class="testbody" type="text/javascript"> <![CDATA[ /** Test for getStartTime Behavior **/ SimpleTest.waitForExplicitFinish(); function main() { var svg = document.getElementById("svg"); ok(svg.animationsPaused(), "should be paused by <svg> load handler"); is(svg.getCurrentTime(), 0, "should be paused at 0 in <svg> load handler"); var anim = document.getElementById("anim"); // indefinite var exceptionCaught = false; try { anim.getStartTime(); } catch(e) { exceptionCaught = true; is(e.name, "InvalidStateError", "Unexpected exception from getStartTime."); is(e.code, DOMException.INVALID_STATE_ERR, "Unexpected exception code from getStartTime."); } ok(exceptionCaught, "No exception thrown for indefinite start time."); // 1s anim.setAttribute("begin", "1s"); is(anim.getStartTime(), 1, "Unexpected start time with begin=1s"); // We have to be careful here when choosing a negative time that we choose // a time that will create an interval that reaches past t=0 as SMIL has // special rules for throwing away intervals that end before t=0 anim.setAttribute("begin", "-0.5s"); is(anim.getStartTime(), -0.5, "Unexpected start time with begin=-0.5s"); // Once the animation has begun, the begin time is fixed so we need to end the // element (or advance the timeline) to override the previous start time anim.endElement(); // However, now we have an end instance, and the SMIL model dictates that if // we have end instances and no end event conditions and all end instances are // before our next begin, there's no valid interval. To overcome this we add // an indefinite end. anim.setAttribute("end", "indefinite"); // Now test over the lifetime of the animation when there are multiple // intervals anim.setAttribute("begin", "1s; 3s"); is(anim.getStartTime(), 1, "Unexpected start time before first interval"); svg.setCurrentTime(1); is(anim.getStartTime(), 1, "Unexpected start time at start of first interval"); svg.setCurrentTime(1.5); is(anim.getStartTime(), 1, "Unexpected start time during first interval"); svg.setCurrentTime(2); is(anim.getStartTime(), 3, "Unexpected start time after first interval"); svg.setCurrentTime(3); is(anim.getStartTime(), 3, "Unexpected start time during second interval"); svg.setCurrentTime(4); exceptionCaught = false; try { anim.getStartTime(); } catch(e) { exceptionCaught = true; is(e.name, "InvalidStateError", "Unexpected exception from getStartTime."); is(e.code, DOMException.INVALID_STATE_ERR, "Unexpected exception code from getStartTime."); } ok(exceptionCaught, "No exception thrown for in postactive state."); SimpleTest.finish(); } window.addEventListener("load", main, false); ]]> </script> </pre> </body> </html>