dom/smil/test/test_smilContainerBinding.xhtml

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

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>

mercurial