tor-browser

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

test_smilTiming.xhtml (9903B)


      1 <html xmlns="http://www.w3.org/1999/xhtml">
      2 <head>
      3  <title>Test for SMIL timing</title>
      4  <script src="/tests/SimpleTest/SimpleTest.js"></script>
      5  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
      6 </head>
      7 <body>
      8 <p id="display"></p>
      9 <div id="content">
     10 <svg id="svg" xmlns="http://www.w3.org/2000/svg" width="120px" height="120px"
     11     onload="this.pauseAnimations()">
     12  <circle cx="-100" cy="20" r="15" fill="blue" id="circle"/>
     13 </svg>
     14 </div>
     15 <pre id="test">
     16 <script class="testbody" type="text/javascript">
     17 <![CDATA[
     18 /** Test for SMIL timing */
     19 
     20 /* Global Variables */
     21 const svgns = "http://www.w3.org/2000/svg";
     22 var gSvg    = document.getElementById("svg");
     23 var gCircle = document.getElementById('circle');
     24 
     25 SimpleTest.waitForExplicitFinish();
     26 
     27 function main() {
     28  ok(gSvg.animationsPaused(), "should be paused by <svg> load handler");
     29  is(gSvg.getCurrentTime(), 0, "should be paused at 0 in <svg> load handler");
     30 
     31  var testCases = Array();
     32 
     33  const secPerMin = 60;
     34  const secPerHour = secPerMin * 60;
     35 
     36  // In the following tests that compare start times, getStartTime will round
     37  // the start time to three decimal places since we expect our implementation
     38  // to be millisecond accurate.
     39 
     40  // Offset syntax
     41  // -- Basic tests, sign and whitespace
     42  testCases.push(StartTimeTest('3s', 3));
     43  testCases.push(StartTimeTest('0s', 0));
     44  testCases.push(StartTimeTest('+2s', 2));
     45  testCases.push(StartTimeTest('-1s\t\r', -1));
     46  testCases.push(StartTimeTest('- 1s', -1));
     47  testCases.push(StartTimeTest('  -1s', -1));
     48  testCases.push(StartTimeTest(' - 1s', -1));
     49  testCases.push(StartTimeTest(' \t\n\r-1s', -1));
     50  testCases.push(StartTimeTest('+\n5s', 5));
     51  testCases.push(StartTimeTest('-\n5s', -5));
     52  testCases.push(StartTimeTest('\t 5s', 5));
     53  // -- These tests are from SMILANIM 3.6.7
     54  testCases.push(StartTimeTest('02:30:03', 2*secPerHour + 30*secPerMin + 3));
     55  testCases.push(StartTimeTest('50:00:10.25', 50*secPerHour + 10.25));
     56  testCases.push(StartTimeTest('02:33', 2*secPerMin + 33));
     57  testCases.push(StartTimeTest('00:10.5', 10.5));
     58  testCases.push(StartTimeTest('3.2h', 3.2*secPerHour));
     59  testCases.push(StartTimeTest('45min', 45*secPerMin));
     60  testCases.push(StartTimeTest('30s', 30));
     61  testCases.push(StartTimeTest('5ms', 0.005));
     62  testCases.push(StartTimeTest('12.467', 12.467));
     63  testCases.push(StartTimeTest('00.5s', 0.5));
     64  testCases.push(StartTimeTest('00:00.005', 0.005));
     65  // -- Additional tests
     66  testCases.push(StartTimeTest('61:59:59', 61*secPerHour + 59*secPerMin + 59));
     67  testCases.push(StartTimeTest('02:59.999999999999999999999', 3*secPerMin));
     68  testCases.push(StartTimeTest('1234:23:45',
     69                               1234*secPerHour + 23*secPerMin + 45));
     70  testCases.push(StartTimeTest('61min', 61*secPerMin));
     71  testCases.push(StartTimeTest('0:30:03', 30*secPerMin + 3));
     72  // -- Fractional precision
     73  testCases.push(StartTimeTest('25.4567', 25.457));
     74  testCases.push(StartTimeTest('0.123456789', 0.123));
     75  testCases.push(StartTimeTest('0.00000000000000000000001', 0));
     76  testCases.push(StartTimeTest('-0.00000000000000000000001', 0));
     77  testCases.push(StartTimeTest('0.0009', 0.001));
     78  testCases.push(StartTimeTest('0.99999999999999999999999999999999999999', 1));
     79  testCases.push(StartTimeTest('23.4567ms', 0.023));
     80  testCases.push(StartTimeTest('23.7ms', 0.024));
     81  // -- Test errors
     82  testCases.push(StartTimeTest(' + +3s', 'none'));
     83  testCases.push(StartTimeTest(' +-3s', 'none'));
     84  testCases.push(StartTimeTest('1:12:12:12', 'none'));
     85  testCases.push(StartTimeTest('4:50:60', 'none'));
     86  testCases.push(StartTimeTest('4:60:0', 'none'));
     87  testCases.push(StartTimeTest('4:60', 'none'));
     88  testCases.push(StartTimeTest('4:-1:00', 'none'));
     89  testCases.push(StartTimeTest('4 5m', 'none'));
     90  testCases.push(StartTimeTest('4 5ms', 'none'));
     91  testCases.push(StartTimeTest('02:3:03', 'none'));
     92  testCases.push(StartTimeTest('45.7 s', 'none'));
     93  testCases.push(StartTimeTest(' 3 h ', 'none'));
     94  testCases.push(StartTimeTest('2:33 ', 'none'));
     95  testCases.push(StartTimeTest('02:33 2', 'none'));
     96  testCases.push(StartTimeTest('\u000B 02:33', 'none'));
     97  testCases.push(StartTimeTest('h', 'none'));
     98  testCases.push(StartTimeTest('23.s', 'none'));
     99  testCases.push(StartTimeTest('23.', 'none'));
    100  testCases.push(StartTimeTest('23.54.2s', 'none'));
    101  testCases.push(StartTimeTest('23sec', 'none'));
    102  testCases.push(StartTimeTest('five', 'none'));
    103  testCases.push(StartTimeTest('', 'none'));
    104  testCases.push(StartTimeTest('02:33s', 'none'));
    105  testCases.push(StartTimeTest('02:33 s', 'none'));
    106  testCases.push(StartTimeTest('2.54e6', 'none'));
    107  testCases.push(StartTimeTest('02.5:33', 'none'));
    108  testCases.push(StartTimeTest('2:-45:33', 'none'));
    109  testCases.push(StartTimeTest('2:4.5:33', 'none'));
    110  testCases.push(StartTimeTest('45m', 'none'));
    111  testCases.push(StartTimeTest(':20:30', 'none'));
    112  testCases.push(StartTimeTest('1.5:30', 'none'));
    113  testCases.push(StartTimeTest('15:-30', 'none'));
    114  testCases.push(StartTimeTest('::30', 'none'));
    115  testCases.push(StartTimeTest('15:30s', 'none'));
    116  testCases.push(StartTimeTest('2:1.:30', 'none'));
    117  testCases.push(StartTimeTest('2:.1:30', 'none'));
    118  testCases.push(StartTimeTest('2.0:15:30', 'none'));
    119  testCases.push(StartTimeTest('2.:15:30', 'none'));
    120  testCases.push(StartTimeTest('.2:15:30', 'none'));
    121  testCases.push(StartTimeTest('70:15', 'none'));
    122  testCases.push(StartTimeTest('media', 'none'));
    123  testCases.push(StartTimeTest('5mi', 'none'));
    124  testCases.push(StartTimeTest('5hours', 'none'));
    125  testCases.push(StartTimeTest('h05:30', 'none'));
    126  testCases.push(StartTimeTest('05:40\x9A', 'none'));
    127  testCases.push(StartTimeTest('05:40\u30D5', 'none'));
    128  testCases.push(StartTimeTest('05:40β', 'none'));
    129 
    130  // List syntax
    131  testCases.push(StartTimeTest('3', 3));
    132  testCases.push(StartTimeTest('3;', 3));
    133  testCases.push(StartTimeTest('3; ', 3));
    134  testCases.push(StartTimeTest('3 ; ', 3));
    135  testCases.push(StartTimeTest('3;;', 3));
    136  testCases.push(StartTimeTest('3;; ', 3));
    137  testCases.push(StartTimeTest(';3', 3));
    138  testCases.push(StartTimeTest(' ;3', 3));
    139  testCases.push(StartTimeTest('3;4', 3));
    140  testCases.push(StartTimeTest(' 3 ; 4 ', 3));
    141 
    142  // List syntax on end times
    143  testCases.push({
    144    'attr' : { 'begin': '0s',
    145               'end': '1s; 2s' },
    146    'times': [ [ 0, 0 ],
    147               [ 1, -100 ] ]
    148  });
    149  testCases.push({
    150    'attr' : { 'begin': '0s',
    151               'end': '1s; 2s; ' },
    152    'times': [ [ 0, 0 ],
    153               [ 1, -100 ] ]
    154  });
    155  testCases.push({
    156    'attr' : { 'begin': '0s',
    157               'end': '3s; 2s' },
    158    'times': [ [ 0, 0 ],
    159               [ 1, 10 ],
    160               [ 2, -100 ] ]
    161  });
    162 
    163  // Simple case
    164  testCases.push({
    165    'attr' : { 'begin': '3s' },
    166    'times': [ [ 0, -100 ],
    167               [ 4, 10 ] ]
    168  });
    169 
    170  // Multiple begins
    171  testCases.push({
    172    'attr' : { 'begin': '2s; 6s',
    173               'dur': '2s' },
    174    'times': [ [ 0, -100 ],
    175               [ 3, 50 ],
    176               [ 4, -100 ],
    177               [ 7, 50 ],
    178               [ 8, -100 ] ]
    179  });
    180 
    181  // Negative begins
    182  testCases.push({
    183    'attr' : { 'begin': '-3s; 1s ; 4s',
    184               'dur': '2s ',
    185               'fill': 'freeze' },
    186    'times': [ [ 0, -100 ],
    187               [ 0.5, -100 ],
    188               [ 1, 0 ],
    189               [ 2, 50 ],
    190               [ 3, 100 ],
    191               [ 5, 50 ] ]
    192  });
    193 
    194  // Sorting
    195  testCases.push({
    196    'attr' : { 'begin': '-3s; 110s; 1s; 4s; -5s; -10s',
    197               'end': '111s; -5s; -15s; 6s; -5s; 1.2s',
    198               'dur': '2s ',
    199               'fill': 'freeze' },
    200    'times': [ [ 0, -100 ],
    201               [ 1, 0 ],
    202               [ 2, 10 ],
    203               [ 4, 0 ],
    204               [ 5, 50 ],
    205               [ 109, 100 ],
    206               [ 110, 0 ],
    207               [ 112, 50 ] ]
    208  });
    209 
    210  for (var i = 0; i < testCases.length; i++) {
    211    gSvg.setCurrentTime(0);
    212    var test = testCases[i];
    213 
    214    // Generate string version of params for output messages
    215    var params = "";
    216    for (var name in test.attr) {
    217      params += name + '="' + test.attr[name] + '" ';
    218    }
    219    params = params.trim();
    220 
    221    // Create animation elements
    222    var anim = createAnim(test.attr);
    223 
    224    // Run samples
    225    if ('times' in test) {
    226      for (var j = 0; j < test.times.length; j++) {
    227        var curSample = test.times[j];
    228        checkSample(curSample[0], curSample[1], params);
    229      }
    230    }
    231 
    232    // Check start time
    233    if ('startTime' in test) {
    234      is(getStartTime(anim), test.startTime,
    235         "Got unexpected start time for " + params);
    236    }
    237 
    238    anim.remove();
    239  }
    240 
    241  SimpleTest.finish();
    242 }
    243 
    244 function createAnim(attr) {
    245  var anim = document.createElementNS(svgns,'animate');
    246  anim.setAttribute('attributeName','cx');
    247  anim.setAttribute('from','0');
    248  anim.setAttribute('to','100');
    249  anim.setAttribute('dur','10s');
    250  anim.setAttribute('begin','indefinite');
    251  for (name in attr) {
    252    anim.setAttribute(name, attr[name]);
    253  }
    254  return gCircle.appendChild(anim);
    255 }
    256 
    257 function checkSample(time, expectedValue, params) {
    258  gSvg.setCurrentTime(time);
    259  var msg = "Unexpected sample value for " + params +
    260    " at t=" + time + ": ";
    261  is(gCircle.cx.animVal.value, expectedValue);
    262 }
    263 
    264 function getStartTime(anim) {
    265  var startTime;
    266  try {
    267    startTime = anim.getStartTime();
    268    // We round start times to 3 decimal places to make comparisons simpler
    269    startTime = parseFloat(startTime.toFixed(3));
    270  } catch(e) {
    271    if (e.name == "InvalidStateError" &&
    272        e.code == DOMException.INVALID_STATE_ERR) {
    273      startTime = 'none';
    274    } else {
    275      ok(false, "Unexpected exception: " + e);
    276    }
    277  }
    278  return startTime;
    279 }
    280 
    281 function StartTimeTest(beginSpec, expectedStartTime) {
    282  return { 'attr'     : { 'begin': beginSpec },
    283           'startTime': expectedStartTime };
    284 }
    285 
    286 window.addEventListener("load", main);
    287 ]]>
    288 </script>
    289 </pre>
    290 </body>
    291 </html>