tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_smilCrossContainer.xhtml (4477B)


      1 <?xml version="1.0" encoding="UTF-8" ?>
      2 <html xmlns="http://www.w3.org/1999/xhtml">
      3 <head>
      4  <title>Test for moving animations between time containers</title>
      5  <script 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="svga" 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="circlea"/>
     14 </svg>
     15 <svg id="svgb" xmlns="http://www.w3.org/2000/svg" width="120px" height="120px"
     16     onload="this.pauseAnimations()">
     17  <circle cx="-20" cy="20" r="15" fill="blue" id="circleb">
     18    <set attributeName="cy" to="120" begin="4s" dur="1s" id="syncb"/>
     19  </circle>
     20 </svg>
     21 </div>
     22 <pre id="test">
     23 <script class="testbody" type="text/javascript">
     24 <![CDATA[
     25 /** Test for moving animations between time containers */
     26 
     27 SimpleTest.waitForExplicitFinish();
     28 
     29 function main() {
     30  var svga = getElement("svga");
     31  ok(svga.animationsPaused(), "should be paused by <svg> load handler");
     32  is(svga.getCurrentTime(), 0, "should be paused at 0 in <svg> load handler");
     33  svga.setCurrentTime(1);
     34 
     35  var svgb = getElement("svgb");
     36  ok(svgb.animationsPaused(), "should be paused by <svg> load handler");
     37  is(svgb.getCurrentTime(), 0, "should be paused at 0 in <svg> load handler");
     38  svgb.setCurrentTime(1);
     39 
     40  // Create animation and check initial state
     41  var anim = createAnim();
     42  ok(noStart(anim), "Animation has start time before attaching to document");
     43 
     44  // Attach animation to first container
     45  var circlea = getElement("circlea");
     46  var circleb = getElement("circleb");
     47  circlea.appendChild(anim);
     48 
     49  // Check state after attaching
     50  is(anim.getStartTime(), 2,
     51    "Unexpected start time after attaching animation to target");
     52  is(circlea.cx.animVal.value, -20,
     53    "Unexpected animated value for yet-to-start animation");
     54  is(circleb.cx.animVal.value, -20,
     55    "Unexpected animated value for unanimated target");
     56 
     57  // Move animation from first container to second
     58  circleb.appendChild(anim);
     59 
     60  // Advance first container and check animation has no effect
     61  svga.setCurrentTime(2);
     62  is(anim.getStartTime(), 2,
     63    "Unexpected start time after moving animation");
     64  is(circlea.cx.animVal.value, -20,
     65    "Unexpected animated value for non-longer-animated target");
     66  is(circleb.cx.animVal.value, -20,
     67    "Unexpected animated value for now yet-to-start animation");
     68 
     69  // Advance second container and check the animation only affects it
     70  svgb.setCurrentTime(2);
     71  is(anim.getStartTime(), 2, "Start time changed after time container seek");
     72  is(circlea.cx.animVal.value, -20,
     73    "Unanimated target changed after seek on other container");
     74  is(circleb.cx.animVal.value, 100, "Animated target not animated after seek");
     75 
     76  // Remove animation so that it belongs to no container and check that
     77  // advancing the second container to the next milestone doesn't cause a crash
     78  // (when the animation controller goes to run the next milestone sample).
     79  anim.remove();
     80  svgb.setCurrentTime(3);
     81 
     82  // Do likewise with syncbase relationships
     83 
     84  // Create the syncbase relationship
     85  anim.setAttribute('begin', 'syncb.begin');
     86 
     87  // Attach to second time container (where t=3s)
     88  circleb.appendChild(anim);
     89  is(anim.getStartTime(), 4,
     90    "Unexpected start time for cross-time container syncbase dependency");
     91 
     92  // Move to first time container (where t=1s).
     93  // Because we're dealing with different time containers and both are paused,
     94  // future times are effectively unresolved.
     95  circlea.appendChild(anim);
     96  ok(noStart(anim), "Unexpected start time for paused time container");
     97 
     98  SimpleTest.finish();
     99 }
    100 
    101 function createAnim() {
    102  const svgns="http://www.w3.org/2000/svg";
    103  var anim = document.createElementNS(svgns,'set');
    104  anim.setAttribute('attributeName','cx');
    105  anim.setAttribute('to','100');
    106  anim.setAttribute('begin','2s');
    107  anim.setAttribute('dur','1s');
    108  return anim;
    109 }
    110 
    111 function noStart(elem) {
    112  var exceptionCaught = false;
    113 
    114  try {
    115    elem.getStartTime();
    116  } catch(e) {
    117    exceptionCaught = true;
    118    is (e.name, "InvalidStateError",
    119        "Unexpected exception from getStartTime.");
    120    is (e.code, DOMException.INVALID_STATE_ERR,
    121        "Unexpected exception code from getStartTime");
    122  }
    123 
    124  return exceptionCaught;
    125 }
    126 
    127 window.addEventListener("load", main);
    128 ]]>
    129 </script>
    130 </pre>
    131 </body>
    132 </html>