tor-browser

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

test_smilAnimateMotionInvalidValues.xhtml (5597B)


      1 <html xmlns="http://www.w3.org/1999/xhtml">
      2 <!--
      3 https://bugzilla.mozilla.org/show_bug.cgi?id=436418
      4 -->
      5 <head>
      6  <title>Test for animateMotion acceptance of invalid values</title>
      7  <script src="/tests/SimpleTest/SimpleTest.js"></script>
      8  <script type="text/javascript" src="smilTestUtils.js" />
      9  <script type="text/javascript" src="smilAnimateMotionValueLists.js" />
     10  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
     11 </head>
     12 <body>
     13 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=436418">Mozilla Bug 436418</a>
     14 <p id="display"></p>
     15 <div id="content" style="visibility: hidden">
     16 <svg xmlns="http://www.w3.org/2000/svg" id="svg"
     17     width="200px" height="200px"
     18     onload="this.pauseAnimations()">
     19  <rect id="rect" x="20" y="20" width="200" height="200"/>
     20 </svg>
     21 </div>
     22 <pre id="test">
     23 <script class="testbody" type="text/javascript">
     24 <![CDATA[
     25 
     26 // Constant strings (& string-arrays)
     27 const SVGNS = "http://www.w3.org/2000/svg";
     28 const XLINKNS = "http://www.w3.org/1999/xlink";
     29 
     30 // Constant objects
     31 const gSvg = document.getElementById("svg");
     32 const gRect = document.getElementById("rect");
     33 const gUnAnimatedCTM = gRect.getCTM();
     34 
     35 SimpleTest.waitForExplicitFinish();
     36 
     37 function createAnim()
     38 {
     39  var anim = document.createElementNS(SVGNS, "animateMotion");
     40  anim.setAttribute("dur", "2s");
     41  return gRect.appendChild(anim);
     42 }
     43 
     44 function removeElem(aElem)
     45 {
     46  aElem.remove();
     47 }
     48 
     49 function testAttr(aAttrName, aAttrValueArray, aIsValid)
     50 {
     51  var componentsToCheck;
     52 
     53  for (var i in aAttrValueArray) {
     54    var curVal = aAttrValueArray[i];
     55    var anim = createAnim();
     56    anim.setAttribute(aAttrName, curVal);
     57    if (aAttrName == "rotate") {
     58      // Apply a diagonal translation (so rotate='auto' will have an effect)
     59      // and just test the rotation matrix components
     60      anim.setAttribute("values", "0 0; 50 50");
     61      componentsToCheck = CTMUtil.CTM_COMPONENTS_ROTATE;
     62    } else {
     63      // Apply a supplementary rotation to make sure that we don't apply it if
     64      // our value is rejected.
     65      anim.setAttribute("rotate", Math.PI/4);
     66      componentsToCheck = CTMUtil.CTM_COMPONENTS_ALL;
     67      if (aAttrName == "keyPoints") {
     68        // Add three times so we can test a greater range of values for
     69        // keyPoints
     70        anim.setAttribute("values", "0 0; 25 25; 50 50");
     71        anim.setAttribute("keyTimes", "0; 0.5; 1");
     72        anim.setAttribute("calcMode", "discrete");
     73      }
     74    }
     75 
     76    var curCTM = gRect.getCTM();
     77    if (aIsValid) {
     78      var errMsg = "CTM should have changed when applying animateMotion " +
     79        "with '" + aAttrName + "' set to valid value '" + curVal + "'";
     80      CTMUtil.assertCTMNotEqual(curCTM, gUnAnimatedCTM, componentsToCheck,
     81                                errMsg, false);
     82    } else {
     83      var errMsg = "CTM should not have changed when applying animateMotion " +
     84        "with '" + aAttrName + "' set to invalid value '" + curVal + "'";
     85      CTMUtil.assertCTMEqual(curCTM, gUnAnimatedCTM, componentsToCheck,
     86                             errMsg, false);
     87    }
     88    removeElem(anim);
     89  }
     90 }
     91 
     92 function createPath(aPathDescription)
     93 {
     94  var path = document.createElementNS(SVGNS, "path");
     95  path.setAttribute("d", aPathDescription);
     96  path.setAttribute("id", "thePath");
     97  return gSvg.appendChild(path);
     98 }
     99 
    100 function createMpath(aAnimElement)
    101 {
    102  var mpath = document.createElementNS(SVGNS, "mpath");
    103  mpath.setAttributeNS(XLINKNS, "href", "#thePath");
    104  return aAnimElement.appendChild(mpath);
    105 }
    106 
    107 function testMpathElem(aPathValueArray, aIsValid)
    108 {
    109  for (var i in aPathValueArray) {
    110    var curVal = aPathValueArray[i];
    111    var anim = createAnim();
    112    var mpath = createMpath(anim);
    113    var path = createPath(curVal);
    114 
    115    // Apply a supplementary rotation to make sure that we don't apply it if
    116    // our value is rejected.
    117    anim.setAttribute("rotate", Math.PI/4);
    118    componentsToCheck = CTMUtil.CTM_COMPONENTS_ALL;
    119 
    120    if (aIsValid) {
    121      var errMsg = "CTM should have changed when applying animateMotion " +
    122        "with mpath linking to a path with valid value '" + curVal + "'";
    123 
    124      CTMUtil.assertCTMNotEqual(gRect.getCTM(), gUnAnimatedCTM,
    125                                componentsToCheck, errMsg, false);
    126    } else {
    127      var errMsg = "CTM should not have changed when applying animateMotion " +
    128        "with mpath linking to a path with invalid value '" + curVal + "'";
    129      CTMUtil.assertCTMEqual(gRect.getCTM(), gUnAnimatedCTM,
    130                             componentsToCheck, errMsg, false);
    131    }
    132    removeElem(anim);
    133    removeElem(path);
    134    removeElem(mpath);
    135 } 
    136 }
    137 
    138 // Main Function
    139 function main()
    140 {
    141  // Start out with document paused
    142  var svg = SMILUtil.getSVGRoot();
    143  ok(svg.animationsPaused(), "should be paused by <svg> load handler");
    144  is(svg.getCurrentTime(), 0, "should be paused at 0 in <svg> load handler");
    145 
    146  testAttr("values", gValidValues, true);
    147  testAttr("values", gInvalidValues, false);
    148 
    149  testAttr("rotate", gValidRotate, true);
    150  testAttr("rotate", gInvalidRotate, false);
    151 
    152  testAttr("to", gValidToBy, true);
    153  testAttr("to", gInvalidToBy, false);
    154 
    155  testAttr("by", gValidToBy, true);
    156  testAttr("by", gInvalidToBy, false);
    157 
    158  testAttr("path", gValidPath, true);
    159  testAttr("path", gInvalidPath, false);
    160  testAttr("path", gValidPathWithErrors, true);
    161 
    162  testAttr("keyPoints", gValidKeyPoints, true);
    163  testAttr("keyPoints", gInvalidKeyPoints, false);
    164 
    165  testMpathElem(gValidPath, true);
    166  testMpathElem(gInvalidPath, false);
    167 
    168  SimpleTest.finish();
    169 }
    170 
    171 window.addEventListener("load", main);
    172 ]]>
    173 </script>
    174 </pre>
    175 </body>
    176 </html>