dom/smil/test/test_smilRestart.xhtml
author Mike Hommey <mh+mozilla@glandium.org>
Fri, 02 Jun 2017 15:07:58 +0900
changeset 410640 f360dd9d411e7ba61531bed2c32a0981cc6c418a
parent 374655 7b434711753b98a87603453caaa0945791ffe12b
child 528458 ba6f655fd68963530c866d0d4a48c3db3d307777
permissions -rw-r--r--
Bug 1369622 - Restore static asserts for lack of arguments on some macros. r=froydnj Bug 1368932 removed MOZ_STATIC_ASSERT_VALID_ARG_COUNT because it didn't actually work for large numbers of arguments. But it was kind of useful for macros that expand to something broken when they are given no variadic argument at all. Now that we have a macro that doesn't require tricks to count empty arguments lists, however, we can use straightforward static_asserts instead of a generic macro, which has the side effect of providing more context in the error message.

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>Test for SMIL Restart 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()">
  <!-- These 3 circles only differ in their animation's "restart" value -->
  <circle cx="20" cy="20" r="15" fill="blue">
    <animate attributeName="cx" from="20" to="100" begin="1s" dur="4s"
             restart="always" id="always" attributeType="XML"/>
  </circle>
  <circle cx="20" cy="60" r="15" fill="blue">
    <animate attributeName="cx" from="20" to="100" begin="1s" dur="4s"
             restart="whenNotActive" id="whenNotActive" attributeType="XML"/>
  </circle>
  <circle cx="20" cy="100" r="15" fill="blue">
    <animate attributeName="cx" from="20" to="100" begin="1s" dur="4s"
             restart="never" id="never" attributeType="XML"/>
  </circle>
</svg>
</div>
<pre id="test">
<script class="testbody" type="text/javascript">
<![CDATA[
/** Test for SMIL Restart Behavior  **/

/* Global Variables */
var svg = document.getElementById("svg");
var always = document.getElementById("always");
var whenNotActive = document.getElementById("whenNotActive");
var never = document.getElementById("never");

SimpleTest.waitForExplicitFinish();

function tryRestart(elem, state, expected) {
  var restartTime = svg.getCurrentTime();
  elem.beginElement();
  var restart = false;
  try {
    restart = (elem.getStartTime() === restartTime);
  } catch (e) {
    if (e.name != "InvalidStateError" ||
        e.code != DOMException.INVALID_STATE_ERR)
      throw e;
    restart = false;
  }
  if (expected) {
    var msg = elem.id + " can't restart in " + state + " state";
    ok(restart, msg);
  } else {
    var msg = elem.id + " can restart in " + state + " state";
    ok(!restart, msg);
  }
}

function main() {
  ok(svg.animationsPaused(), "should be paused by <svg> load handler");
  is(svg.getCurrentTime(), 0, "should be paused at 0 in <svg> load handler");

  // At first everything should be starting at 1s
  is(always.getStartTime(), 1);
  is(whenNotActive.getStartTime(), 1);
  is(never.getStartTime(), 1);

  // Now try to restart everything early, should be allowed by all
  tryRestart(always, "waiting", true);
  tryRestart(whenNotActive, "waiting", true);
  tryRestart(never, "waiting", true);

  // Now skip to half-way
  var newTime = always.getStartTime() + 0.5 * always.getSimpleDuration();
  svg.setCurrentTime(newTime);

  // Only 'always' should be able to be restarted
  tryRestart(always, "active", true);
  tryRestart(whenNotActive, "active", false);
  tryRestart(never, "active", false);

  // Now skip to the end 
  newTime = always.getStartTime() + always.getSimpleDuration() + 1;
  svg.setCurrentTime(newTime);

  // All animations have finished, so 'always' and 'whenNotActive' should be
  // able to be restarted
  tryRestart(always, "postactive", true);
  tryRestart(whenNotActive, "postactive", true);
  tryRestart(never, "postactive", false);

  SimpleTest.finish();
}

window.addEventListener("load", main);
]]>
</script>
</pre>
</body>
</html>