1<html xmlns="http://www.w3.org/1999/xhtml">
2<head>
3<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css"/>
4<script src="../../fast/js/resources/js-test-pre.js"></script>
5</head>
6<body>
7<div id="description"></div>
8<div id="console"></div>
9
10<script>
11
12description("This test exercises the SVGMatrix interface");
13
14debug("");
15debug("SVGMatrix constructors");
16
17var svgroot = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
18var m = null;
19m = svgroot.createSVGMatrix();
20if (m)
21 testPassed("default constructor");
22else
23 testFailed("default constructor");
24
25debug("");
26debug("Test attributes on default matrix");
27shouldBe('m.a', '1');
28shouldBe('m.b', '0');
29shouldBe('m.c', '0');
30shouldBe('m.d', '1');
31shouldBe('m.e', '0');
32shouldBe('m.f', '0');
33
34debug("");
35debug("Test attributes on translate() and accumulation");
36var m2 = m.translate(50,0);
37m2 = m2.translate(50,50);
38shouldBe('m2.a', '1');
39shouldBe('m2.b', '0');
40shouldBe('m2.c', '0');
41shouldBe('m2.d', '1');
42shouldBe('m2.e', '100');
43shouldBe('m2.f', '50');
44
45debug("");
46debug("Test immutability of translate()");
47shouldBe('parseFloat(m.a)', '1');
48shouldBe('parseFloat(m.b)', '0');
49shouldBe('parseFloat(m.c)', '0');
50shouldBe('parseFloat(m.d)', '1');
51shouldBe('parseFloat(m.e)', '0');
52shouldBe('parseFloat(m.f)', '0');
53
54debug("");
55debug("Test attributes on scale()");
56var m3 = m2.scale(5);
57shouldBe('m3.a', '5');
58shouldBe('m3.b', '0');
59shouldBe('m3.c', '0');
60shouldBe('m3.d', '5');
61shouldBe('m3.e', '100');
62shouldBe('m3.f', '50');
63
64debug("");
65debug("Test immutability of scale()");
66shouldBe('parseFloat(m2.a)', '1');
67shouldBe('parseFloat(m2.b)', '0');
68shouldBe('parseFloat(m2.c)', '0');
69shouldBe('parseFloat(m2.d)', '1');
70shouldBe('parseFloat(m2.e)', '100');
71shouldBe('parseFloat(m2.f)', '50');
72
73debug("");
74debug("Test attributes on scaleNonUniform()");
75var m4 = m3.scaleNonUniform(2,1);
76shouldBe('m4.a', '10');
77shouldBe('m4.b', '0');
78shouldBe('m4.c', '0');
79shouldBe('m4.d', '5');
80shouldBe('m4.e', '100');
81shouldBe('m4.f', '50');
82
83debug("");
84debug("Test immutability of scaleNonUniform()");
85shouldBe('parseFloat(m3.a)', '5');
86shouldBe('parseFloat(m3.b)', '0');
87shouldBe('parseFloat(m3.c)', '0');
88shouldBe('parseFloat(m3.d)', '5');
89shouldBe('parseFloat(m3.e)', '100');
90shouldBe('parseFloat(m3.f)', '50');
91
92debug("");
93debug("Test rotate()");
94m = svgroot.createSVGMatrix();
95m2 = m.rotate(10);
96shouldBe('parseFloat(m2.a.toPrecision(6))', '0.984808');
97shouldBe('parseFloat(m2.b.toPrecision(6))', '0.173648');
98shouldBe('parseFloat(m2.c.toPrecision(6))', '-0.173648');
99shouldBe('parseFloat(m2.d.toPrecision(6))', '0.984808');
100shouldBe('m.e', '0');
101shouldBe('m.f', '0');
102
103debug("");
104debug("Test immutability of rotate()");
105shouldBe('parseFloat(m.a)', '1');
106shouldBe('parseFloat(m.b)', '0');
107shouldBe('parseFloat(m.c)', '0');
108shouldBe('parseFloat(m.d)', '1');
109shouldBe('parseFloat(m.e)', '0');
110shouldBe('parseFloat(m.f)', '0');
111
112// TODO: write tests for rotateFromVector() and immutability
113
114debug("");
115debug("Test flipX()");
116m4 = m3.flipX();
117shouldBe('m4.a', '-5');
118shouldBe('m4.b', '0');
119shouldBe('m4.c', '0');
120shouldBe('m4.d', '5');
121shouldBe('m4.e', '100');
122shouldBe('m4.f', '50');
123
124debug("");
125debug("Test immutability of flipX()");
126shouldBe('parseFloat(m3.a)', '5');
127shouldBe('parseFloat(m3.b)', '0');
128shouldBe('parseFloat(m3.c)', '0');
129shouldBe('parseFloat(m3.d)', '5');
130shouldBe('parseFloat(m3.e)', '100');
131shouldBe('parseFloat(m3.f)', '50');
132
133debug("");
134debug("Test flipY()");
135m4 = m3.flipY();
136shouldBe('m4.a', '5');
137shouldBe('m4.b', '0');
138shouldBe('m4.c', '0');
139shouldBe('m4.d', '-5');
140shouldBe('m4.e', '100');
141shouldBe('m4.f', '50');
142
143debug("");
144debug("Test immutability of flipY()");
145shouldBe('parseFloat(m3.a)', '5');
146shouldBe('parseFloat(m3.b)', '0');
147shouldBe('parseFloat(m3.c)', '0');
148shouldBe('parseFloat(m3.d)', '5');
149shouldBe('parseFloat(m3.e)', '100');
150shouldBe('parseFloat(m3.f)', '50');
151
152debug("");
153debug("Test skewX()");
154m = svgroot.createSVGMatrix();
155m2 = m.skewX(30);
156shouldBe('m2.a', '1');
157shouldBe('m2.b', '0');
158shouldBe('parseFloat(m2.c.toPrecision(6))', '0.577350');
159shouldBe('m2.d', '1');
160shouldBe('m2.e', '0');
161shouldBe('m2.f', '0');
162
163debug("");
164debug("Test immutability of skewX()");
165shouldBe('parseFloat(m.a)', '1');
166shouldBe('parseFloat(m.b)', '0');
167shouldBe('parseFloat(m.c)', '0');
168shouldBe('parseFloat(m.d)', '1');
169shouldBe('parseFloat(m.e)', '0');
170shouldBe('parseFloat(m.f)', '0');
171
172debug("");
173debug("Test skewY()");
174m = svgroot.createSVGMatrix();
175m2 = m.skewY(30);
176shouldBe('m2.a', '1');
177shouldBe('parseFloat(m2.b.toPrecision(6))', '0.577350');
178shouldBe('m2.c', '0');
179shouldBe('m2.d', '1');
180shouldBe('m2.e', '0');
181shouldBe('m2.f', '0');
182
183debug("");
184debug("Test immutability of skewY()");
185shouldBe('parseFloat(m.a)', '1');
186shouldBe('parseFloat(m.b)', '0');
187shouldBe('parseFloat(m.c)', '0');
188shouldBe('parseFloat(m.d)', '1');
189shouldBe('parseFloat(m.e)', '0');
190shouldBe('parseFloat(m.f)', '0');
191
192debug("");
193debug("Test multiply");
194var tx = svgroot.createSVGMatrix();
195var sx = svgroot.createSVGMatrix();
196tx = tx.translate(100,0);
197sx = sx.scaleNonUniform(2,1);
198m = tx.multiply(sx);
199shouldBe('m.a', '2');
200shouldBe('m.b', '0');
201shouldBe('m.c', '0');
202shouldBe('m.d', '1');
203shouldBe('m.e', '100');
204shouldBe('m.f', '0');
205
206debug("")
207debug("Test immutability of multiply");
208shouldBe('tx.a', '1');
209shouldBe('tx.b', '0');
210shouldBe('tx.c', '0');
211shouldBe('tx.d', '1');
212shouldBe('tx.e', '100');
213shouldBe('tx.f', '0');
214shouldBe('sx.a', '2');
215shouldBe('sx.b', '0');
216shouldBe('sx.c', '0');
217shouldBe('sx.d', '1');
218shouldBe('sx.e', '0');
219shouldBe('sx.f', '0');
220
221debug("");
222debug("Test multiply with missing argument");
223m = null;
224try {
225 m = tx.multiply();
226} catch(e) {}
227shouldBe('m', 'null');
228
229debug("");
230debug("Test inverse");
231m = svgroot.createSVGMatrix();
232m = m.translate(10,20);
233m = m.scale(2);
234m2 = m.inverse();
235
236shouldBe('parseFloat(m2.a)', '0.5');
237shouldBe('parseFloat(m2.b)', '0');
238shouldBe('parseFloat(m2.c)', '0');
239shouldBe('parseFloat(m2.d)', '0.5');
240shouldBe('parseFloat(m2.e)', '-5');
241shouldBe('parseFloat(m2.f)', '-10');
242
243debug("");
244debug("Test immutability of inverse");
245shouldBe('parseFloat(m.a)', '2');
246shouldBe('parseFloat(m.b)', '0');
247shouldBe('parseFloat(m.c)', '0');
248shouldBe('parseFloat(m.d)', '2');
249shouldBe('parseFloat(m.e)', '10');
250shouldBe('parseFloat(m.f)', '20');
251
252debug("");
253debug("Test throwing exception from inverse");
254m = new WebKitCSSMatrix("matrix(0, 0, 0, 0, 0, 0)"); // not invertible
255shouldThrow('m.inverse()');
256
257debug("");
258successfullyParsed = true;
259
260</script>
261<script src="../../fast/js/resources/js-test-post.js"></script>
262
263<script>
264</script>
265
266</body>
267</html>