tor-browser

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

test_transformParsing.html (3228B)


      1 <!doctype html>
      2 <html>
      3 <!--
      4 https://bugzilla.mozilla.org/show_bug.cgi?id=946529
      5 -->
      6 <head>
      7  <meta charset="utf-8">
      8  <title>Test transform parsing</title>
      9  <script src="/tests/SimpleTest/SimpleTest.js"></script>
     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=946529">Mozilla Bug 946529</a>
     14 <p id="display"></p>
     15 <div id="content" style="display: none">
     16  <svg width="100%" height="1" id="svg">
     17    <g id="g"/>
     18  </svg>
     19 </div>
     20 <pre id="test">
     21 <script class="testbody" type="text/javascript">
     22 
     23 // Test cases
     24 checkParseOk("", [ ]);
     25 checkParseOk("matrix(-.7235 .6903 .6903 .7235 -2050 1.14e4)",
     26  [ { type: "matrix", a: -0.7235, b: 0.6903, c: 0.6903,
     27                      d: 0.7235,  e: -2050,  f: 11400 } ]);
     28 checkParseOk("matrix(0e0 1e0 1e1 1e-1 1E+2 -.1e1)",
     29  [ { type: "matrix", a: 0,   b: 1,   c: 10,
     30                      d: 0.1, e: 100, f: -1 } ]);
     31 checkParseOk("matrix(-0e-0 1e+0 0e-5 1e-10 12.3e+4 .12e2)",
     32  [ { type: "matrix", a: 0,   b: 1,   c: 0,
     33                      d: 0.0000000001, e: 123000, f: 12 } ]);
     34 
     35 // Fail cases
     36 checkParseFail("matrix(1e+ 0 0 0 0 0)");
     37 checkParseFail("matrix(e2 0 0 0 0 0)");
     38 checkParseFail("matrix(1 e2 0 0 0 0 0)");
     39 checkParseFail("matrix(1e 2 0 0 0 0 0)");
     40 checkParseFail("matrix(1e+-2 0 0 0 0 0)");
     41 checkParseFail("matrix(1e 0 0 0 0 0)");
     42 checkParseFail("matrix(1e1.1 0 0 0 0 0)");
     43 checkParseFail("scale(2) matrix(1e1.1 0 0 0 0 0)");
     44 
     45 function checkParseOk(spec, expected) {
     46  var g = document.getElementById("g");
     47 
     48  // Clear previous value
     49  g.removeAttribute("transform");
     50 
     51  g.setAttribute("transform", spec);
     52 
     53  // Check length
     54  var transformList = g.transform.baseVal;
     55  is(transformList.numberOfItems, expected.length, spec + " - length");
     56  if (transformList.numberOfItems != expected.length)
     57    return;
     58 
     59  // Check each item
     60  for (var i = 0; i < transformList.numberOfItems; i++) {
     61    checkTransform(transformList.getItem(i), expected[i], spec, i);
     62  }
     63 }
     64 
     65 function checkTransform(transform, expected, spec, index) {
     66  var typeMapping = {
     67    "unknown": SVGTransform.SVG_TRANSFORM_UNKNOWN,
     68    "matrix": SVGTransform.SVG_TRANSFORM_MATRIX,
     69    "translate": SVGTransform.SVG_TRANSFORM_TRANSLATE,
     70    "scale": SVGTransform.SVG_TRANSFORM_SCALE,
     71    "rotate": SVGTransform.SVG_TRANSFORM_ROTATE,
     72    "skewx": SVGTransform.SVG_TRANSFORM_SKEWX,
     73    "skewy": SVGTransform.SVG_TRANSFORM_SKEWY,
     74  };
     75  var name = "Item " + index + " of '" + spec + "'";
     76 
     77  // Compare type
     78  if (typeof expected.type != "undefined") {
     79    is(transform.type, typeMapping[expected.type], name + " - transform type");
     80  }
     81 
     82  // Compare angle
     83  if (typeof expected.angle != "undefined") {
     84    is(transform.angle, expected.angle, name + " - angle");
     85  }
     86 
     87  // Compare matrix values (roughly)
     88  ["a", "b", "c", "d", "e", "f"].forEach(function(item) {
     89    var actual = transform.matrix[item];
     90    var msg = name + " - matrix:" + item;
     91    const tolerance = 1 / 65535;
     92    ok(Math.abs(actual - expected[item]) < tolerance,
     93       msg + " - got " + actual + ", expected " + expected[item]);
     94  });
     95 }
     96 
     97 function checkParseFail(spec) {
     98  checkParseOk(spec, []);
     99 }
    100 </script>
    101 </pre>
    102 </body>
    103 </html>