<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Test for setCurrentTime 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" onload="this.pauseAnimations()" /> </div> <pre id="test"> <script class="testbody" type="text/javascript"> <![CDATA[ /** Test for basic setCurrentTime / getCurrentTime Behavior **/ /* Global Variables & Constants */ const PRECISION_LEVEL = 0.0000001; // Allow small level of floating-point error const gTimes = [0, 1.5, 0.2, 0.99, -400.5, 10000000, -1]; const gWaitTime = 20; var gSvg = document.getElementById("svg"); SimpleTest.waitForExplicitFinish(); SimpleTest.requestFlakyTimeout("untriaged"); function main() { ok(gSvg.animationsPaused(), "should be paused by <svg> load handler"); is(gSvg.getCurrentTime(), 0, "should be paused at 0 in <svg> load handler"); // Test that seeking takes effect immediately for (var i = 0; i < gTimes.length; i++) { gSvg.setCurrentTime(gTimes[i]); // We adopt the SVGT1.2 behavior of clamping negative times to 0 assertFloatsEqual(gSvg.getCurrentTime(), Math.max(gTimes[i], 0.0)); } // Test that seeking isn't messed up by timeouts // (using tail recursion to set up the chain of timeout function calls) var func = function() { checkTimesAfterIndex(0); } setTimeout(func, gWaitTime); } /* This method seeks to the time at gTimes[index], * and then sets up a timeout to... * - verify that the seek worked * - make a recursive call for the next index. */ function checkTimesAfterIndex(index) { if (index == gTimes.length) { // base case -- we're done! SimpleTest.finish(); return; } gSvg.setCurrentTime(gTimes[index]); var func = function() { assertFloatsEqual(gSvg.getCurrentTime(), Math.max(gTimes[index], 0.0)); checkTimesAfterIndex(index + 1); } setTimeout(func, gWaitTime); } function assertFloatsEqual(aVal, aExpected) { ok(Math.abs(aVal - aExpected) <= PRECISION_LEVEL, "getCurrentTime returned " + aVal + " after seeking to " + aExpected) } window.addEventListener("load", main, false); ]]> </script> </pre> </body> </html>