1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/layout/reftests/canvas/ctm-sanity.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,83 @@ 1.4 +<html> 1.5 +<head> 1.6 + <script type="text/javascript"> 1.7 + 1.8 +function assert(cond, msg) { if (!cond) { throw msg; } } 1.9 + 1.10 +function isSameTM(m1, m2) { 1.11 + // XXX this is probably the ugliest possible way to write this function, 1.12 + // but it's intended to be lowest-common-denominator 1.13 + if (!(m1.length === 6 && m1.length === m2.length)) { 1.14 + return false; 1.15 + } 1.16 + for (var i = 0; i < m1.length; ++i) { 1.17 + if (m1[i] !== m2[i]) { 1.18 + return false; 1.19 + } 1.20 + } 1.21 + return true; 1.22 +} 1.23 + 1.24 +window.onload = function() { 1.25 + var IM = [ 1, 0, 0, 1, 0, 0 ]; 1.26 + 1.27 + try { 1.28 + var ctx = document.getElementById("c1").getContext("2d"); 1.29 + 1.30 + assert(isSameTM(IM, ctx.mozCurrentTransform), 1.31 + "currentTransform is identity by default"); 1.32 + assert(isSameTM(IM, ctx.mozCurrentTransformInverse), 1.33 + "currentTransformInverse is identity by default"); 1.34 + 1.35 + var m = [ 1, 2, 3, 4, 5, 6 ]; 1.36 + ctx.mozCurrentTransform = m; 1.37 + assert(isSameTM(m, ctx.mozCurrentTransform), 1.38 + "currentTransform successfully set"); 1.39 + var badVals = [ -1, 1.40 + "string", 1.41 + { obj: true }, 1.42 + [ "array of string" ], 1.43 + [ -1 ], 1.44 + [ "string", 1, 2, 3, 4, 5 ], 1.45 + [ { obj: true }, 1, 2, 3, 4, 5 ], 1.46 + ]; 1.47 + for (var i = 0; i < badVals.length; ++i) { 1.48 + var error = false; 1.49 + try { ctx.mozCurrentTransform = badVals[i]; } 1.50 + catch(e) { error = true; } 1.51 + assert(error && isSameTM(m, ctx.mozCurrentTransform), 1.52 + "Expected |currentTransform = "+ badVals[i] +"| to throw exception and not change .currentTransform"); 1.53 + 1.54 + error = false; 1.55 + try { ctx.mozCurrentTransformInverse = badVals[i]; } 1.56 + catch(e) { error = true; } 1.57 + assert(error && isSameTM(m, ctx.mozCurrentTransform), 1.58 + "Expected |currentTransformInverse = "+ badVals[i] +"| to throw exception and not change .currentTransform"); 1.59 + } 1.60 + ctx.mozCurrentTransform = IM; 1.61 + 1.62 + var noopVals = [ [ Number.NaN, 1, 2, 3, 4, 5 ], 1.63 + [ Infinity, 1, 2, 3, 4, 5 ], 1.64 + ]; 1.65 + for (var i = 0; i < noopVals.length; ++i) { 1.66 + ctx.mozCurrentTransform = noopVals[i]; 1.67 + assert(isSameTM(ctx.mozCurrentTransform, IM), 1.68 + "Illegal float values result in no-ops (sigh)"); 1.69 + } 1.70 + ctx.mozCurrentTransform = IM; 1.71 + 1.72 + ctx.setTransform(m[0], m[1], m[2], m[3], m[4], m[5]); 1.73 + assert(isSameTM(ctx.mozCurrentTransform, m), 1.74 + "setTransform() updates currentTransform"); 1.75 + } catch (e) { 1.76 + document.body.innerHTML = "FAIL: "+ e.toString(); 1.77 + return; 1.78 + } 1.79 + document.body.innerHTML = "Pass"; 1.80 +} 1.81 + </script> 1.82 +</head> 1.83 +<body> 1.84 + <div><canvas id="c1" width="300" height="300"></canvas></div> 1.85 +</body> 1.86 +</html>