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>