gecko/dom/smil/test/test_smilSetCurrentTime.xhtml
Ehsan Akhgari 20474e5ba7 Bug 649012 - Fail mochitest-plains which use flaky timeouts (setTimeout(x) for x > 0); r=ted
We are white-listing the existing set of tests that use setTimeout
like this.  Hopefully these tests will be investigated and fixed
in the future, so that we can narrow down the white-list.

This check is only turned on for mochitest-plain for now.
2014-12-11 13:34:40 -05:00

77 lines
2.3 KiB
HTML

<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>