ctm-singular-sanity.html (1345B)
1 <html> 2 <head> 3 <script type="text/javascript"> 4 function assert(cond, msg) { 5 if (!cond) { 6 throw msg; 7 } 8 } 9 10 assert.equal = function(m1, m2, msg) { 11 assert( 12 m1.is2D && 13 m2.is2D && 14 m1.a === m2.a && 15 m1.b === m2.b && 16 m1.c === m2.c && 17 m1.d === m2.d && 18 m1.e === m2.e && 19 m1.f === m2.f, 20 msg 21 ); 22 }; 23 24 window.onload = function() { 25 try { 26 var ctx = document.getElementById("c1").getContext("2d"); 27 28 var singular = new DOMMatrix([0, 0, 0, 0, 0, 0]); 29 ctx.setTransform(singular); 30 assert.equal( 31 ctx.getTransform(), 32 singular, 33 "Expected setting transform to a singular matrix to work" 34 ); 35 var inv = ctx.getTransform().invertSelf(); 36 assert( 37 isNaN(inv.a) && isNaN(inv.b) && isNaN(inv.c) && isNaN(inv.d), 38 "Expected to get back matrix of NaN's from inverse transform" 39 ); 40 41 var m = new DOMMatrix([1, 2, 3, 4, 5, 6]); 42 ctx.setTransform(m); 43 ctx.setTransform(singular.invertSelf()); 44 assert.equal( 45 ctx.getTransform(), 46 m, 47 "Setting transform to an inverse singular matrix is a no-op" 48 ); 49 } catch (e) { 50 document.body.innerHTML = "FAIL: " + e.toString(); 51 return; 52 } 53 document.body.innerHTML = "Pass"; 54 }; 55 </script> 56 </head> 57 <body> 58 <div><canvas id="c1" width="300" height="300"></canvas></div> 59 </body> 60 </html>