dom/smil/test/test_smilBackwardsSeeking.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 backwards seeking behavior </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" />
    11 </div>
    12 <pre id="test">
    13 <script class="testbody" type="text/javascript">
    14 <![CDATA[
    15 /** Test for backwards seeking behavior  **/
    17 var gSvg = document.getElementById("svg");
    19 SimpleTest.waitForExplicitFinish();
    21 function main()
    22 {
    23   // Pause our document, so that the setCurrentTime calls are the only
    24   // thing affecting document time
    25   gSvg.pauseAnimations();
    27   // We define a series of scenarios, sample times, and expected return values
    28   // from getStartTime.
    29   //
    30   // Each scenario is basically a variation on the following arrangement:
    31   //
    32   // <svg>
    33   //   <set ... dur="1s" begin="<A-BEGIN>"/>
    34   //   <set ... dur="1s" begin="<B-BEGIN>"/>
    35   // </svg>
    36   //
    37   // Each test then consists of the following:
    38   //    animA: attributes to be applied to a
    39   //    animB: attributes to be applied to b
    40   //    times: a series of triples which consist of:
    41   //             <sample time, a's expected start time, b's expected start time>
    42   //           * The sample time is the time passed to setCurrentTime and so is
    43   //             in seconds.
    44   //           * The expected start times are compared with the return value of
    45   //             getStartTime. To check for an unresolved start time where
    46   //             getStartTime would normally throw an exception use
    47   //             'unresolved'.
    48   //           * We also allow the special notation to indicate a call to
    49   //             beginElement
    50   //             <'beginElementAt', id of animation element, offset>
    51   //
    52   // In the diagrams below '^' means the time before the seek and '*' is the
    53   // seek time.
    54   var testCases = Array();
    56   // 0: Simple case
    57   //
    58   //   A:     +-------
    59   //   B:     +-------       begin: a.begin
    60   //        *            ^
    61   testCases[0] = {
    62     'animA': {'begin':'1s', 'id':'a'},
    63     'animB': {'begin':'a.begin'},
    64     'times': [ [0, 1, 1],
    65                [1, 1, 1],
    66                [2, 'unresolved', 'unresolved'],
    67                [0, 1, 1],
    68                [1.5, 1, 1],
    69                [1, 1, 1],
    70                [2, 'unresolved', 'unresolved'] ]
    71   };
    73   // 1: Restored times should be live
    74   //
    75   // When we restore times they should be live. So we have the following
    76   // scenario.
    77   //
    78   //   A:     +-------
    79   //   B:     +-------       begin: a.begin
    80   //       *            ^
    81   //
    82   // Then we call beginElement at an earlier time which should give us the
    83   // following.
    84   //
    85   //   A:   +-------
    86   //   B:   +-------
    87   //       *            ^
    88   //
    89   //  If the times are not live however we'll end up with this
    90   //
    91   //   A:   +-------
    92   //   B:   +-+-------
    93   //       *            ^
    94   testCases[1] = {
    95     'animA': {'begin':'1s', 'id':'a', 'restart':'whenNotActive'},
    96     'animB': {'begin':'a.begin', 'restart':'always'},
    97     'times': [ [0, 1, 1],
    98                [2, 'unresolved', 'unresolved'],
    99                [0.25, 1, 1],
   100                ['beginElementAt', 'a', 0.25], // = start time of 0.5
   101                [0.25, 0.5, 0.5],
   102                [1, 0.5, 0.5],
   103                [1.5, 'unresolved', 'unresolved'] ]
   104   };
   106   // 2: Multiple intervals A
   107   //
   108   //   A:  +-  +-
   109   //   B:          +-  +-   begin: a.begin+4s
   110   //             *    ^
   111   testCases[2] = {
   112     'animA': {'begin':'1s; 3s', 'id':'a'},
   113     'animB': {'begin':'a.begin+4s'},
   114     'times': [ [0, 1, 5],
   115                [3, 3, 5],
   116                [6.5, 'unresolved', 7],
   117                [4, 'unresolved', 5],
   118                [6, 'unresolved', 7],
   119                [2, 3, 5],
   120                ['beginElementAt', 'a', 0],
   121                [2, 2, 5],
   122                [5, 'unresolved', 5],
   123                [6, 'unresolved', 6],
   124                [7, 'unresolved', 7],
   125                [8, 'unresolved', 'unresolved'] ]
   126   };
   128   for (var i = 0; i < testCases.length; i++) {
   129     gSvg.setCurrentTime(0);
   130     var test = testCases[i];
   132     // Create animation elements
   133     var animA = createAnim(test.animA);
   134     var animB = createAnim(test.animB);
   136     // Run samples
   137     for (var j = 0; j < test.times.length; j++) {
   138       var times = test.times[j];
   139       if (times[0] == 'beginElementAt') {
   140         var anim = getElement(times[1]);
   141         anim.beginElementAt(times[2]);
   142       } else {
   143         gSvg.setCurrentTime(times[0]);
   144         checkStartTime(animA, times[1], times[0], i, 'a');
   145         checkStartTime(animB, times[2], times[0], i, 'b');
   146       }
   147     }
   149     // Tidy up
   150     animA.parentNode.removeChild(animA);
   151     animB.parentNode.removeChild(animB);
   152   }
   154   SimpleTest.finish();
   155 }
   157 function createAnim(attr)
   158 {
   159   const svgns = "http://www.w3.org/2000/svg";
   160   var anim = document.createElementNS(svgns, 'set');
   161   anim.setAttribute('attributeName','x');
   162   anim.setAttribute('to','10');
   163   anim.setAttribute('dur','1s');
   164   for (name in attr) {
   165     anim.setAttribute(name, attr[name]);
   166   }
   167   return gSvg.appendChild(anim);
   168 }
   170 function checkStartTime(anim, expectedStartTime, sampleTime, caseNum, id)
   171 {
   172   var startTime = 'unresolved';
   173   try {
   174     startTime = anim.getStartTime();
   175   } catch (e) {
   176     if (e.name != "InvalidStateError" ||
   177         e.code != DOMException.INVALID_STATE_ERR)
   178       throw e;
   179   }
   181   var msg = "Test case " + caseNum + ", t=" + sampleTime + " animation '" +
   182     id + "': Unexpected getStartTime:";
   183   is(startTime, expectedStartTime, msg);
   184 }
   186 window.addEventListener("load", main, false);
   187 ]]>
   188 </script>
   189 </pre>
   190 </body>
   191 </html>

mercurial