tor-browser

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

test_smilTimingZeroIntervals.xhtml (8239B)


      1 <html xmlns="http://www.w3.org/1999/xhtml">
      2 <head>
      3  <title>Test for SMIL timing with zero-duration intervals</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 with zero-duration intervals */
     19 
     20 /* Global Variables */
     21 const svgns="http://www.w3.org/2000/svg";
     22 var svg = document.getElementById("svg");
     23 var circle = document.getElementById('circle');
     24 
     25 SimpleTest.waitForExplicitFinish();
     26 
     27 function createAnim() {
     28  var anim = document.createElementNS(svgns,'animate');
     29  anim.setAttribute('attributeName','cx');
     30  anim.setAttribute('from','0');
     31  anim.setAttribute('to','100');
     32  anim.setAttribute('dur','10s');
     33  anim.setAttribute('begin','indefinite');
     34  return circle.appendChild(anim);
     35 }
     36 
     37 function removeAnim(anim) {
     38  anim.remove();
     39 }
     40 
     41 function main() {
     42  ok(svg.animationsPaused(), "should be paused by <svg> load handler");
     43  is(svg.getCurrentTime(), 0, "should be paused at 0 in <svg> load handler");
     44 
     45  var tests =
     46    [ testZeroDurationIntervalsA,
     47      testZeroDurationIntervalsB,
     48      testZeroDurationIntervalsC,
     49      testZeroDurationIntervalsD,
     50      testZeroDurationIntervalsE,
     51      testZeroDurationIntervalsF,
     52      testZeroDurationIntervalsG,
     53      testZeroDurationIntervalsH,
     54      testZeroDurationIntervalsI,
     55      testZeroDurationIntervalsJ,
     56      testZeroDurationIntervalsK,
     57      testZeroDurationIntervalsL,
     58      testZeroDurationIntervalsM,
     59      testZeroDurationIntervalsN,
     60      testZeroDurationIntervalsO
     61    ];
     62  for (var i = 0; i < tests.length; i++) {
     63    var anim = createAnim();
     64    svg.setCurrentTime(0);
     65    tests[i](anim);
     66    removeAnim(anim);
     67  }
     68  SimpleTest.finish();
     69 }
     70 
     71 function checkSample(time, expectedValue) {
     72  svg.setCurrentTime(time);
     73  is(circle.cx.animVal.value, expectedValue);
     74 }
     75 
     76 function testZeroDurationIntervalsA(anim) {
     77  // The zero-duration interval should play, followed by a second interval
     78  // starting at the same point. There is no end for the interval
     79  // at 4s so it should not play.
     80  anim.setAttribute('begin', '1s ;4s');
     81  anim.setAttribute('end', '1s; 2s');
     82  anim.setAttribute('dur', '2s ');
     83  anim.setAttribute('fill', 'freeze');
     84  checkSample(0,-100);
     85  checkSample(1,0);
     86  checkSample(1.1,5);
     87  checkSample(2,50);
     88  checkSample(3,50);
     89  checkSample(4,50);
     90  checkSample(5,50);
     91  checkSample(6,50);
     92 }
     93 
     94 function testZeroDurationIntervalsB(anim) {
     95  // This interval should however actually restart as there is a valid end-point
     96  anim.setAttribute('begin', '1s ;4s');
     97  anim.setAttribute('end', '1.1s; indefinite');
     98  anim.setAttribute('dur', '2s ');
     99  anim.setAttribute('fill', 'freeze');
    100  checkSample(0,-100);
    101  checkSample(1,0);
    102  checkSample(1.1,5);
    103  checkSample(2,5);
    104  checkSample(4,0);
    105  checkSample(5,50);
    106 }
    107 
    108 function testZeroDurationIntervalsC(anim) {
    109  // -0.5s has already been used as the endpoint of one interval so don't use it
    110  // a second time
    111  anim.setAttribute('begin', '-2s; -0.5s');
    112  anim.setAttribute('end', '-0.5s; 1s');
    113  anim.setAttribute('dur', '2s');
    114  anim.setAttribute('fill', 'freeze');
    115  checkSample(0,25);
    116  checkSample(1.5,75);
    117 }
    118 
    119 function testZeroDurationIntervalsD(anim) {
    120  // Two end points that could make a zero-length interval
    121  anim.setAttribute('begin', '-2s; -0.5s');
    122  anim.setAttribute('end', '-0.5s; -0.5s; 1s');
    123  anim.setAttribute('dur', '2s');
    124  anim.setAttribute('fill', 'freeze');
    125  checkSample(0,25);
    126  checkSample(1.5,75);
    127 }
    128 
    129 function testZeroDurationIntervalsE(anim) {
    130  // Should give us 1s-1s, 1s-5s
    131  anim.setAttribute('begin', '1s');
    132  anim.setAttribute('end', '1s; 5s');
    133  anim.setAttribute('fill', 'freeze');
    134  is(anim.getStartTime(),1);
    135  checkSample(0,-100);
    136  checkSample(1,0);
    137  checkSample(6,40);
    138 }
    139 
    140 function testZeroDurationIntervalsF(anim) {
    141  // Should give us 1s-1s
    142  anim.setAttribute('begin', '1s');
    143  anim.setAttribute('end', '1s');
    144  anim.setAttribute('fill', 'freeze');
    145  is(anim.getStartTime(),1);
    146  checkSample(0,-100);
    147  checkSample(1,0);
    148  checkSample(2,0);
    149  try {
    150    anim.getStartTime();
    151    ok(false, "Failed to throw exception when there's no current interval.");
    152  } catch (e) { }
    153 }
    154 
    155 function testZeroDurationIntervalsG(anim) {
    156  // Test a non-zero interval after a zero interval
    157  // Should give us 1-2s, 3-3s, 3-4s
    158  anim.setAttribute('begin', '1s; 3s');
    159  anim.setAttribute('end', '3s; 5s');
    160  anim.setAttribute('dur', '1s');
    161  anim.setAttribute('fill', 'freeze');
    162  checkSample(0,-100);
    163  checkSample(1,0);
    164  checkSample(2,100);
    165  checkSample(3,0);
    166  checkSample(5,100);
    167 }
    168 
    169 function testZeroDurationIntervalsH(anim) {
    170  // Test multiple non-adjacent zero-intervals
    171  // Should give us 1-1s, 1-2s, 3-3s, 3-4s
    172  anim.setAttribute('begin', '1s; 3s');
    173  anim.setAttribute('end', '1s; 3s; 5s');
    174  anim.setAttribute('dur', '1s');
    175  anim.setAttribute('fill', 'freeze');
    176  checkSample(0,-100);
    177  checkSample(1,0);
    178  checkSample(2,100);
    179  checkSample(3,0);
    180  checkSample(5,100);
    181 }
    182 
    183 function testZeroDurationIntervalsI(anim) {
    184  // Test skipping values that are the same
    185  // Should give us 1-1s, 1-2s
    186  anim.setAttribute('begin', '1s; 1s');
    187  anim.setAttribute('end', '1s; 1s; 2s');
    188  anim.setAttribute('fill', 'freeze');
    189  is(anim.getStartTime(),1);
    190  checkSample(0,-100);
    191  checkSample(1,0);
    192  checkSample(2,10);
    193  checkSample(3,10);
    194 }
    195 
    196 function testZeroDurationIntervalsJ(anim) {
    197  // Should give us 0-0.5s, 1-1s, 1-3s
    198  anim.setAttribute('begin', '0s; 1s; 1s');
    199  anim.setAttribute('end', '1s; 3s');
    200  anim.setAttribute('dur', '0.5s');
    201  anim.setAttribute('fill', 'freeze');
    202  is(anim.getStartTime(),0);
    203  checkSample(0,0);
    204  checkSample(0.6,100);
    205  checkSample(1,0);
    206  checkSample(2,100);
    207 }
    208 
    209 function testZeroDurationIntervalsK(anim) {
    210  // Should give us -0.5-1s
    211  anim.setAttribute('begin', '-0.5s');
    212  anim.setAttribute('end', '-0.5s; 1s');
    213  anim.setAttribute('fill', 'freeze');
    214  is(anim.getStartTime(),-0.5);
    215  checkSample(0,5);
    216  checkSample(1,15);
    217  checkSample(2,15);
    218 }
    219 
    220 function testZeroDurationIntervalsL(anim) {
    221  // Test that multiple end values are ignored
    222  // Should give us 1-1s, 1-3s
    223  anim.setAttribute('begin', '1s');
    224  anim.setAttribute('end', '1s; 1s; 1s; 3s');
    225  anim.setAttribute('fill', 'freeze');
    226  is(anim.getStartTime(),1);
    227  checkSample(0,-100);
    228  checkSample(1,0);
    229  checkSample(2,10);
    230  checkSample(4,20);
    231 }
    232 
    233 function testZeroDurationIntervalsM(anim) {
    234  // Test 0-duration interval at start
    235  anim.setAttribute('begin', '0s');
    236  anim.setAttribute('end', '0s');
    237  anim.setAttribute('fill', 'freeze');
    238  try {
    239    anim.getStartTime();
    240    ok(false, "Failed to throw exception when there's no current interval.");
    241  } catch (e) { }
    242  checkSample(0,0);
    243  checkSample(1,0);
    244 }
    245 
    246 function testZeroDurationIntervalsN(anim) {
    247  // Test 0-active-duration interval at start (different code path to above)
    248  anim.setAttribute('begin', '0s');
    249  anim.setAttribute('repeatDur', '0s');
    250  anim.setAttribute('fill', 'freeze');
    251  try {
    252    anim.getStartTime();
    253    ok(false, "Failed to throw exception when there's no current interval.");
    254  } catch (e) { }
    255  checkSample(0,0);
    256  checkSample(1,0);
    257 }
    258 
    259 function testZeroDurationIntervalsO(anim) {
    260  // Make a zero-duration interval by constraining the active duration
    261  // We should not loop infinitely but should look for the next begin time after
    262  // that (in this case that is 2s, which would otherwise have been skipped
    263  // because restart=whenNotActive)
    264  // Should give us 1-1s, 2-2s
    265  anim.setAttribute('begin', '1s; 2s');
    266  anim.setAttribute('repeatDur', '0s');
    267  anim.setAttribute('restart', 'whenNotActive');
    268  anim.setAttribute('fill', 'freeze');
    269  is(anim.getStartTime(),1);
    270  checkSample(0,-100);
    271  checkSample(1,0);
    272  checkSample(1.5,0);
    273  checkSample(3,0);
    274  try {
    275    anim.getStartTime();
    276    ok(false, "Failed to throw exception when there's no current interval.");
    277  } catch (e) { }
    278 }
    279 
    280 window.addEventListener("load", main);
    281 ]]>
    282 </script>
    283 </pre>
    284 </body>
    285 </html>