dom/smil/test/test_smilTiming.xhtml

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     1 <html xmlns="http://www.w3.org/1999/xhtml">
     2 <head>
     3   <title>Test for SMIL timing</title>
     4   <script type="text/javascript" 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" style="display: none">
    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 **/
    20 /* Global Variables */
    21 const svgns = "http://www.w3.org/2000/svg";
    22 var gSvg    = document.getElementById("svg");
    23 var gCircle = document.getElementById('circle');
    25 SimpleTest.waitForExplicitFinish();
    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");
    31   var testCases = Array();
    33   const secPerMin = 60;
    34   const secPerHour = secPerMin * 60;
    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.
    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'));
   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;;', 'none'));
   136   testCases.push(StartTimeTest('3;; ', 'none'));
   137   testCases.push(StartTimeTest(';3', 'none'));
   138   testCases.push(StartTimeTest(' ;3', 'none'));
   139   testCases.push(StartTimeTest('3;4', 3));
   140   testCases.push(StartTimeTest(' 3 ; 4 ', 3));
   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   });
   163   // Simple case
   164   testCases.push({
   165     'attr' : { 'begin': '3s' },
   166     'times': [ [ 0, -100 ],
   167                [ 4, 10 ] ]
   168   });
   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   });
   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   });
   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   });
   210   for (var i = 0; i < testCases.length; i++) {
   211     gSvg.setCurrentTime(0);
   212     var test = testCases[i];
   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();
   221     // Create animation elements
   222     var anim = createAnim(test.attr);
   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     }
   232     // Check start time
   233     if ('startTime' in test) {
   234       is(getStartTime(anim), test.startTime,
   235          "Got unexpected start time for " + params);
   236     }
   238     anim.parentNode.removeChild(anim);
   239   }
   241   SimpleTest.finish();
   242 }
   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 }
   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 }
   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 }
   281 function StartTimeTest(beginSpec, expectedStartTime) {
   282   return { 'attr'     : { 'begin': beginSpec },
   283            'startTime': expectedStartTime };
   284 }
   286 window.addEventListener("load", main, false);
   287 ]]>
   288 </script>
   289 </pre>
   290 </body>
   291 </html>

mercurial