1 | <!DOCTYPE html>
|
---|
2 | <html>
|
---|
3 | <head>
|
---|
4 | <link rel='stylesheet' href='qunit/qunit.css' type='text/css'/>
|
---|
5 | <script src='../editor/lib/jquery.js'></script>
|
---|
6 | <script type='text/javascript' src='../editor/src/math.js'></script>
|
---|
7 | <script type='text/javascript' src='qunit/qunit.js'></script>
|
---|
8 | <script type='text/javascript'>
|
---|
9 | $(function() {
|
---|
10 | // log function
|
---|
11 | QUnit.log = function(result, message) {
|
---|
12 | if (window.console && window.console.log) {
|
---|
13 | window.console.log(result +' :: '+ message);
|
---|
14 | }
|
---|
15 | };
|
---|
16 |
|
---|
17 | var svgns = 'http://www.w3.org/2000/svg';
|
---|
18 | var svg = document.createElementNS(svgns, 'svg');
|
---|
19 |
|
---|
20 | module('svgedit.math');
|
---|
21 |
|
---|
22 | test('Test svgedit.math package', function() {
|
---|
23 | expect(7);
|
---|
24 |
|
---|
25 | ok(svgedit.math);
|
---|
26 | ok(svgedit.math.transformPoint);
|
---|
27 | ok(svgedit.math.isIdentity);
|
---|
28 | ok(svgedit.math.matrixMultiply);
|
---|
29 | equals(typeof svgedit.math.transformPoint, typeof function(){});
|
---|
30 | equals(typeof svgedit.math.isIdentity, typeof function(){});
|
---|
31 | equals(typeof svgedit.math.matrixMultiply, typeof function(){});
|
---|
32 | });
|
---|
33 |
|
---|
34 | test('Test svgedit.math.transformPoint() function', function() {
|
---|
35 | expect(6);
|
---|
36 | var transformPoint = svgedit.math.transformPoint;
|
---|
37 |
|
---|
38 | var m = svg.createSVGMatrix();
|
---|
39 | m.a = 1; m.b = 0;
|
---|
40 | m.c = 0; m.d = 1;
|
---|
41 | m.e = 0; m.f = 0;
|
---|
42 | var pt = transformPoint(100, 200, m);
|
---|
43 | equals(pt.x, 100);
|
---|
44 | equals(pt.y, 200);
|
---|
45 |
|
---|
46 | m.e = 300; m.f = 400;
|
---|
47 | pt = transformPoint(100, 200, m);
|
---|
48 | equals(pt.x, 400);
|
---|
49 | equals(pt.y, 600);
|
---|
50 |
|
---|
51 | m.a = 0.5; m.b = 0.75;
|
---|
52 | m.c = 1.25; m.d = 2;
|
---|
53 | pt = transformPoint(100, 200, m);
|
---|
54 | equals(pt.x, 100 * m.a + 200 * m.c + m.e);
|
---|
55 | equals(pt.y, 100 * m.b + 200 * m.d + m.f);
|
---|
56 | });
|
---|
57 |
|
---|
58 | test('Test svgedit.math.isIdentity() function', function() {
|
---|
59 | expect(2);
|
---|
60 |
|
---|
61 | ok(svgedit.math.isIdentity(svg.createSVGMatrix()));
|
---|
62 |
|
---|
63 | var m = svg.createSVGMatrix();
|
---|
64 | m.a = 1; m.b = 0;
|
---|
65 | m.c = 0; m.d = 1;
|
---|
66 | m.e = 0; m.f = 0;
|
---|
67 | ok(svgedit.math.isIdentity(m));
|
---|
68 | });
|
---|
69 |
|
---|
70 | test('Test svgedit.math.matrixMultiply() function', function() {
|
---|
71 | expect(5);
|
---|
72 | var mult = svgedit.math.matrixMultiply;
|
---|
73 | var isIdentity = svgedit.math.isIdentity;
|
---|
74 |
|
---|
75 | // translate there and back
|
---|
76 | var tr_1 = svg.createSVGMatrix().translate(100,50),
|
---|
77 | tr_2 = svg.createSVGMatrix().translate(-90,0),
|
---|
78 | tr_3 = svg.createSVGMatrix().translate(-10,-50),
|
---|
79 | I = mult(tr_1,tr_2,tr_3);
|
---|
80 | ok(isIdentity(I), 'Expected identity matrix when translating there and back');
|
---|
81 |
|
---|
82 | // rotate there and back
|
---|
83 | // TODO: currently Mozilla fails this when rotating back at -50 and then -40 degrees
|
---|
84 | // (b and c are *almost* zero, but not zero)
|
---|
85 | var rot_there = svg.createSVGMatrix().rotate(90),
|
---|
86 | rot_back = svg.createSVGMatrix().rotate(-90); // TODO: set this to -50
|
---|
87 | rot_back_more = svg.createSVGMatrix().rotate(0); // TODO: set this to -40
|
---|
88 | I = mult(rot_there, rot_back, rot_back_more);
|
---|
89 | ok(isIdentity(I), 'Expected identity matrix when rotating there and back');
|
---|
90 |
|
---|
91 | // scale up and down
|
---|
92 | var scale_up = svg.createSVGMatrix().scale(4),
|
---|
93 | scale_down = svg.createSVGMatrix().scaleNonUniform(0.25,1);
|
---|
94 | scale_down_more = svg.createSVGMatrix().scaleNonUniform(1,0.25);
|
---|
95 | I = mult(scale_up, scale_down, scale_down_more);
|
---|
96 | ok(isIdentity(I), 'Expected identity matrix when scaling up and down');
|
---|
97 |
|
---|
98 | // test multiplication with its inverse
|
---|
99 | I = mult(rot_there, rot_there.inverse());
|
---|
100 | ok(isIdentity(I), 'Expected identity matrix when multiplying a matrix by its inverse');
|
---|
101 | I = mult(rot_there.inverse(), rot_there);
|
---|
102 | ok(isIdentity(I), 'Expected identity matrix when multiplying a matrix by its inverse');
|
---|
103 | });
|
---|
104 | });
|
---|
105 | </script>
|
---|
106 | </head>
|
---|
107 | <body>
|
---|
108 | <h1 id='qunit-header'>Unit Tests for math.js</h1>
|
---|
109 | <h2 id='qunit-banner'></h2>
|
---|
110 | <h2 id='qunit-userAgent'></h2>
|
---|
111 | <ol id='qunit-tests'>
|
---|
112 | </ol>
|
---|
113 | </body>
|
---|
114 | </html>
|
---|