tor-browser

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

test_smilSyncbaseTarget.xhtml (5702B)


      1 <?xml version="1.0" encoding="UTF-8" ?>
      2 <html xmlns="http://www.w3.org/1999/xhtml">
      3 <head>
      4  <title>Test for syncbase targetting</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="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="cx" to="0" begin="2s" dur="1s" id="a"/>
     15    <set attributeName="cx" to="0" begin="2s" dur="1s" xml:id="b"/>
     16    <set attributeName="cx" to="0" begin="2s" dur="1s" id="あ"/>
     17    <set attributeName="cx" to="0" begin="2s" dur="1s" id="a.b"/>
     18    <set attributeName="cx" to="0" begin="2s" dur="1s" id="a-b"/>
     19    <set attributeName="cx" to="0" begin="2s" dur="1s" id="a:b"/>
     20    <set attributeName="cx" to="0" begin="2s" dur="1s" id="-a"/>
     21    <set attributeName="cx" to="0" begin="2s" dur="1s" id="0"/>
     22  </circle>
     23 </svg>
     24 </div>
     25 <pre id="test">
     26 <script class="testbody" type="text/javascript">
     27 <![CDATA[
     28 /** Test for syncbase targetting behavior  */
     29 
     30 SimpleTest.waitForExplicitFinish();
     31 
     32 function main() {
     33  var svg = getElement("svg");
     34  ok(svg.animationsPaused(), "should be paused by <svg> load handler");
     35  is(svg.getCurrentTime(), 0, "should be paused at 0 in <svg> load handler");
     36 
     37  testSpecs();
     38  testChangeId();
     39  testRemoveTimebase();
     40 
     41  SimpleTest.finish();
     42 }
     43 
     44 function testSpecs() {
     45  var anim = createAnim();
     46 
     47  // Sanity check--initial state
     48  ok(noStart(anim), "Unexpected initial value for indefinite start time.");
     49 
     50  var specs = [ [ 'a.begin', 2 ],
     51                [ 'b.begin', 'todo' ], // xml:id support, bug 275196
     52                [ 'あ.begin', 2 ],   // unicode id
     53                [ ' a.begin ', 2 ],  // whitespace
     54                [ 'a\\.b.begin', 2 ], // escaping
     55                [ 'a\\-b.begin', 2 ], // escaping
     56                [ 'a:b.begin', 2 ],
     57                // Invalid
     58                [ '-a.begin', 'notok' ], // invalid XML ID
     59                [ '\\-a.begin', 'notok' ], // invalid XML ID
     60                [ '0.begin', 'notok' ], // invalid XML ID
     61                [ '\xB7.begin', 'notok' ], // invalid XML ID
     62                [ '\x7B.begin', 'notok' ], // invalid XML ID
     63                [ '.begin', 'notok' ],
     64                [ '  .end  ', 'notok' ],
     65                [ 'a.begin-5a', 'notok' ],
     66                // Offsets
     67                [ ' a.begin + 1min', 2 + 60 ],
     68                [ ' a.begin-0.5s', 1.5 ],
     69              ];
     70  for (var i = 0; i < specs.length; i++) {
     71    var spec = specs[i][0];
     72    var expected = specs[i][1];
     73    anim.setAttribute('begin', spec);
     74    try {
     75      if (typeof(expected) == 'number') {
     76        is(anim.getStartTime(), expected,
     77           "Unexpected start time with spec: " + spec);
     78      } else if (expected == 'todo') {
     79        todo_is(anim.getStartTime(), 2,"Unexpected success with spec: " + spec);
     80      } else {
     81        anim.getStartTime();
     82        ok(false, "Unexpected success with spec: " + spec);
     83      }
     84    } catch(e) {
     85      if (e.name == "InvalidStateError" &&
     86          e.code == DOMException.INVALID_STATE_ERR) {
     87        if (typeof(expected) == 'number')
     88          ok(false, "Failed with spec: " + spec);
     89        else if (expected == 'todo')
     90          todo(false, "Yet to implement: " + spec);
     91        else
     92          ok(true);
     93      } else {
     94        ok(false, "Unexpected exception: " + e + "(with spec: " + spec + ")");
     95      }
     96    }
     97  }
     98 
     99  anim.remove();
    100 }
    101 
    102 function testChangeId() {
    103  var anim = createAnim();
    104 
    105  anim.setAttribute('begin', 'a.begin');
    106  is(anim.getStartTime(), 2, "Unexpected start time.");
    107 
    108  var a = getElement('a');
    109  a.setAttribute('id', 'a1');
    110  ok(noStart(anim), "Unexpected return value after changing target ID.");
    111 
    112  a.setAttribute('id', 'a');
    113  is(anim.getStartTime(), 2,
    114     "Unexpected start time after resetting target ID.");
    115 
    116  anim.remove();
    117 }
    118 
    119 function testRemoveTimebase() {
    120  var anim = createAnim();
    121  anim.setAttribute('begin', 'a.begin');
    122  ok(!noStart(anim), "Unexpected start time before removing timebase.");
    123 
    124  var circle = getElement('circle');
    125  var a = getElement('a');
    126  // Sanity check
    127  is(a, circle.firstElementChild, "Unexpected document structure");
    128 
    129  // Remove timebase
    130  a.remove();
    131  ok(noStart(anim), "Unexpected start time after removing timebase.");
    132 
    133  // Reinsert timebase
    134  circle.insertBefore(a, circle.firstElementChild);
    135  ok(!noStart(anim), "Unexpected start time after re-inserting timebase.");
    136 
    137  // Remove dependent element
    138  anim.remove();
    139  ok(noStart(anim), "Unexpected start time after removing dependent.");
    140 
    141  // Create a new dependent
    142  var anim2 = createAnim();
    143  anim2.setAttribute('begin', 'a.begin');
    144  is(anim2.getStartTime(), 2,
    145     "Unexpected start time after adding new dependent.");
    146 }
    147 
    148 function createAnim() {
    149  const svgns="http://www.w3.org/2000/svg";
    150  var anim = document.createElementNS(svgns,'animate');
    151  anim.setAttribute('attributeName','cx');
    152  anim.setAttribute('from','0');
    153  anim.setAttribute('to','100');
    154  anim.setAttribute('begin','indefinite');
    155  anim.setAttribute('dur','1s');
    156  return getElement('circle').appendChild(anim);
    157 }
    158 
    159 function noStart(elem) {
    160  var exceptionCaught = false;
    161 
    162  try {
    163    elem.getStartTime();
    164  } catch(e) {
    165    exceptionCaught = true;
    166    is (e.name, "InvalidStateError",
    167        "Unexpected exception from getStartTime.");
    168    is (e.code, DOMException.INVALID_STATE_ERR,
    169        "Unexpected exception code from getStartTime.");
    170  }
    171 
    172  return exceptionCaught;
    173 }
    174 
    175 window.addEventListener("load", main);
    176 ]]>
    177 </script>
    178 </pre>
    179 </body>
    180 </html>