source: other-projects/nz-flag-design/trunk/design-2d/Original editor.method.ac/test/svgtransformlist_test.html@ 29468

Last change on this file since 29468 was 29468, checked in by sjs49, 9 years ago

Initial commit for editor.method.ac for flag design

  • Property svn:executable set to *
File size: 10.6 KB
Line 
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>
7 // Mock for browser.js
8 window.svgedit = {};
9 svgedit.browser = {};
10 svgedit.browser.supportsNativeTransformLists = function() { return false;}
11 </script>
12 <script type='text/javascript' src='../editor/src/svgtransformlist.js'></script>
13 <script type='text/javascript' src='qunit/qunit.js'></script>
14 <script type='text/javascript'>
15 $(function() {
16 // log function
17 QUnit.log = function(result, message) {
18 if (window.console && window.console.log) {
19 window.console.log(result +' :: '+ message);
20 }
21 };
22
23 var svgns = 'http://www.w3.org/2000/svg';
24 var svgroot = document.getElementById('svgroot');
25 var svgcontent, rect, circle;
26
27 var NEAR_ZERO = 5e-6; // 0.000005, Firefox fails at higher levels of precision.
28 function almostEquals(a, b, msg) {
29 msg = msg || (a + ' did not equal ' + b);
30 ok(Math.abs(a - b) < NEAR_ZERO, msg);
31 }
32
33 function checkOutOfBoundsException(obj, fn, arg1) {
34 var caughtException = false;
35 try {
36 obj[fn](arg1);
37 }
38 catch(e) {
39 if (e.code == 1) {
40 caughtException = true;
41 }
42 }
43 ok(caughtException, 'Caugh an INDEX_SIZE_ERR exception');
44 }
45
46 function setUp() {
47 svgcontent = svgroot.appendChild(document.createElementNS(svgns, 'svg'));
48 rect = svgcontent.appendChild(document.createElementNS(svgns, 'rect'));
49 rect.id = 'r';
50 circle = svgcontent.appendChild(document.createElementNS(svgns, 'circle'));
51 circle.id = 'c';
52 }
53
54 function tearDown() {
55 svgedit.transformlist.resetListMap();
56 while (svgroot.hasChildNodes()) {
57 svgroot.removeChild(svgroot.firstChild);
58 }
59 }
60
61 module('svgedit.svgtransformlist');
62
63 test('Test svgedit.transformlist package', function() {
64 expect(2);
65
66 ok(svgedit.transformlist);
67 ok(svgedit.transformlist.getTransformList);
68 });
69
70 test('Test svgedit.transformlist.getTransformList() function', function() {
71 expect(4);
72 setUp();
73
74 var rxform = svgedit.transformlist.getTransformList(rect);
75 var cxform = svgedit.transformlist.getTransformList(circle);
76
77 ok(rxform);
78 ok(cxform);
79 equals(typeof rxform, typeof {});
80 equals(typeof cxform, typeof {});
81
82 tearDown();
83 });
84
85 test('Test SVGTransformList.numberOfItems property', function() {
86 expect(2);
87 setUp();
88
89 var rxform = svgedit.transformlist.getTransformList(rect);
90
91 equals(typeof rxform.numberOfItems, typeof 0);
92 equals(rxform.numberOfItems, 0);
93
94 tearDown();
95 });
96
97 test('Test SVGTransformList.initialize()', function() {
98 expect(6);
99 setUp();
100
101 var rxform = svgedit.transformlist.getTransformList(rect);
102 var cxform = svgedit.transformlist.getTransformList(circle);
103
104 var t = svgcontent.createSVGTransform();
105 ok(t);
106 ok(rxform.initialize);
107 equals(typeof rxform.initialize, typeof function(){});
108 rxform.initialize(t);
109 equals(rxform.numberOfItems, 1);
110 equals(cxform.numberOfItems, 0);
111
112 // If a transform was already in a transform list, this should
113 // remove it from its old list and add it to this list.
114 cxform.initialize(t);
115 // This also fails in Firefox native.
116// equals(rxform.numberOfItems, 0, 'Did not remove transform from list before initializing another transformlist');
117 equals(cxform.numberOfItems, 1);
118
119 tearDown();
120 });
121
122 test('Test SVGTransformList.appendItem() and getItem()', function() {
123 expect(12);
124 setUp();
125
126 var rxform = svgedit.transformlist.getTransformList(rect);
127 var cxform = svgedit.transformlist.getTransformList(circle);
128
129 var t1 = svgcontent.createSVGTransform(),
130 t2 = svgcontent.createSVGTransform(),
131 t3 = svgcontent.createSVGTransform();
132
133 ok(rxform.appendItem);
134 ok(rxform.getItem);
135 equals(typeof rxform.appendItem, typeof function(){});
136 equals(typeof rxform.getItem, typeof function(){});
137
138 rxform.appendItem(t1);
139 rxform.appendItem(t2);
140 rxform.appendItem(t3);
141
142 equals(rxform.numberOfItems, 3);
143 var rxf = rxform.getItem(0);
144 equals(rxf, t1);
145 equals(rxform.getItem(1), t2);
146 equals(rxform.getItem(2), t3);
147
148 checkOutOfBoundsException(rxform, 'getItem', -1);
149 checkOutOfBoundsException(rxform, 'getItem', 3);
150
151 cxform.appendItem(t1);
152 // These also fail in Firefox native.
153// equals(rxform.numberOfItems, 2, 'Did not remove a transform from a list before appending it to a new transformlist');
154// equals(rxform.getItem(0), t2, 'Found the wrong transform in a transformlist');
155// equals(rxform.getItem(1), t3, 'Found the wrong transform in a transformlist');
156
157 equals(cxform.numberOfItems, 1);
158 equals(cxform.getItem(0), t1);
159
160 tearDown();
161 });
162
163 test('Test SVGTransformList.removeItem()', function() {
164 expect(7);
165 setUp();
166
167 var rxform = svgedit.transformlist.getTransformList(rect);
168
169 var t1 = svgcontent.createSVGTransform(),
170 t2 = svgcontent.createSVGTransform();
171 ok(rxform.removeItem);
172 equals(typeof rxform.removeItem, typeof function(){});
173 rxform.appendItem(t1);
174 rxform.appendItem(t2);
175
176 var removedTransform = rxform.removeItem(0);
177 equals(rxform.numberOfItems, 1);
178 equals(removedTransform, t1);
179 equals(rxform.getItem(0), t2);
180
181 checkOutOfBoundsException(rxform, 'removeItem', -1);
182 checkOutOfBoundsException(rxform, 'removeItem', 1);
183
184 tearDown();
185 });
186
187 test('Test SVGTransformList.replaceItem()', function() {
188 expect(8);
189 setUp();
190
191 var rxform = svgedit.transformlist.getTransformList(rect);
192 var cxform = svgedit.transformlist.getTransformList(circle);
193
194 ok(rxform.replaceItem);
195 equals(typeof rxform.replaceItem, typeof function(){});
196
197 var t1 = svgcontent.createSVGTransform(),
198 t2 = svgcontent.createSVGTransform(),
199 t3 = svgcontent.createSVGTransform();
200
201 rxform.appendItem(t1);
202 rxform.appendItem(t2);
203 cxform.appendItem(t3);
204
205 var newItem = rxform.replaceItem(t3, 0);
206 equals(rxform.numberOfItems, 2);
207 equals(newItem, t3);
208 equals(rxform.getItem(0), t3);
209 equals(rxform.getItem(1), t2);
210 // Fails in Firefox native
211// equals(cxform.numberOfItems, 0);
212
213 // test replaceItem within a list
214 rxform.appendItem(t1);
215 rxform.replaceItem(t1, 0);
216 // Fails in Firefox native
217// equals(rxform.numberOfItems, 2);
218 equals(rxform.getItem(0), t1);
219 equals(rxform.getItem(1), t2);
220
221 tearDown();
222 });
223
224 test('Test SVGTransformList.insertItemBefore()', function() {
225 expect(10);
226 setUp();
227
228 var rxform = svgedit.transformlist.getTransformList(rect);
229 var cxform = svgedit.transformlist.getTransformList(circle);
230
231 ok(rxform.insertItemBefore);
232 equals(typeof rxform.insertItemBefore, typeof function(){});
233
234 var t1 = svgcontent.createSVGTransform(),
235 t2 = svgcontent.createSVGTransform(),
236 t3 = svgcontent.createSVGTransform();
237
238 rxform.appendItem(t1);
239 rxform.appendItem(t2);
240 cxform.appendItem(t3);
241
242 var newItem = rxform.insertItemBefore(t3, 0);
243 equals(rxform.numberOfItems, 3);
244 equals(newItem, t3);
245 equals(rxform.getItem(0), t3);
246 equals(rxform.getItem(1), t1);
247 equals(rxform.getItem(2), t2);
248 // Fails in Firefox native
249// equals(cxform.numberOfItems, 0);
250
251 rxform.insertItemBefore(t2, 1);
252 // Fails in Firefox native (they make copies of the transforms)
253// equals(rxform.numberOfItems, 3);
254 equals(rxform.getItem(0), t3);
255 equals(rxform.getItem(1), t2);
256 equals(rxform.getItem(2), t1);
257 tearDown();
258 });
259
260 test('Test SVGTransformList.init() for translate(200,100)', function() {
261 expect(8);
262 setUp();
263 rect.setAttribute('transform', 'translate(200,100)');
264
265 var rxform = svgedit.transformlist.getTransformList(rect);
266 equals(1, rxform.numberOfItems);
267
268 var translate = rxform.getItem(0);
269 equals(translate.type, 2);
270
271 var m = translate.matrix;
272 equals(m.a, 1);
273 equals(m.b, 0);
274 equals(m.c, 0);
275 equals(m.d, 1);
276 equals(m.e, 200);
277 equals(m.f, 100);
278
279 tearDown();
280 });
281
282 test('Test SVGTransformList.init() for scale(4)', function() {
283 expect(8);
284 setUp();
285 rect.setAttribute('transform', 'scale(4)');
286
287 var rxform = svgedit.transformlist.getTransformList(rect);
288 equals(1, rxform.numberOfItems);
289
290 var scale = rxform.getItem(0);
291 equals(3, scale.type);
292
293 var m = scale.matrix;
294 equals(m.a, 4);
295 equals(m.b, 0);
296 equals(m.c, 0);
297 equals(m.d, 4);
298 equals(m.e, 0);
299 equals(m.f, 0);
300
301 tearDown();
302 });
303
304 test('Test SVGTransformList.init() for scale(4,3)', function() {
305 expect(8);
306 setUp();
307 rect.setAttribute('transform', 'scale(4,3)');
308
309 var rxform = svgedit.transformlist.getTransformList(rect);
310 equals(1, rxform.numberOfItems);
311
312 var scale = rxform.getItem(0);
313 equals(3, scale.type);
314
315 var m = scale.matrix;
316 equals(m.a, 4);
317 equals(m.b, 0);
318 equals(m.c, 0);
319 equals(m.d, 3);
320 equals(m.e, 0);
321 equals(m.f, 0);
322
323 tearDown();
324 });
325
326 test('Test SVGTransformList.init() for rotate(45)', function() {
327 expect(9);
328 setUp();
329 rect.setAttribute('transform', 'rotate(45)');
330
331 var rxform = svgedit.transformlist.getTransformList(rect);
332 equals(1, rxform.numberOfItems);
333
334 var rotate = rxform.getItem(0);
335 equals(4, rotate.type);
336 equals(45, rotate.angle);
337
338 var m = rotate.matrix;
339 almostEquals(m.a, 1/Math.sqrt(2));
340 almostEquals(m.b, 1/Math.sqrt(2));
341 almostEquals(m.c, -1/Math.sqrt(2));
342 almostEquals(m.d, 1/Math.sqrt(2));
343 equals(m.e, 0);
344 equals(m.f, 0);
345
346 tearDown();
347 });
348
349 test('Test SVGTransformList.init() for rotate(45, 100, 200)', function() {
350 expect(9);
351 setUp();
352 rect.setAttribute('transform', 'rotate(45, 100, 200)');
353
354 var rxform = svgedit.transformlist.getTransformList(rect);
355 equals(1, rxform.numberOfItems);
356
357 var rotate = rxform.getItem(0);
358 equals(4, rotate.type);
359 equals(45, rotate.angle);
360
361 var m = rotate.matrix;
362 almostEquals(m.a, 1/Math.sqrt(2));
363 almostEquals(m.b, 1/Math.sqrt(2));
364 almostEquals(m.c, -1/Math.sqrt(2));
365 almostEquals(m.d, 1/Math.sqrt(2));
366
367 var r = svgcontent.createSVGMatrix();
368 r.a = 1/Math.sqrt(2); r.b = 1/Math.sqrt(2);
369 r.c = -1/Math.sqrt(2); r.d = 1/Math.sqrt(2);
370
371 var t = svgcontent.createSVGMatrix();
372 t.e = -100; t.f = -200;
373
374 var t_ = svgcontent.createSVGMatrix();
375 t_.e = 100; t_.f = 200;
376
377 var result = t_.multiply(r).multiply(t);
378
379 almostEquals(m.e, result.e);
380 almostEquals(m.f, result.f);
381
382 tearDown();
383 });
384
385 test('Test SVGTransformList.init() for matrix(1, 2, 3, 4, 5, 6)', function() {
386 expect(8);
387 setUp();
388 rect.setAttribute('transform', 'matrix(1,2,3,4,5,6)');
389
390 var rxform = svgedit.transformlist.getTransformList(rect);
391 equals(1, rxform.numberOfItems);
392
393 var mt = rxform.getItem(0);
394 equals(1, mt.type);
395
396 var m = mt.matrix;
397 equals(m.a, 1);
398 equals(m.b, 2);
399 equals(m.c, 3);
400 equals(m.d, 4);
401 equals(m.e, 5);
402 equals(m.f, 6);
403
404 tearDown();
405 });
406
407 });
408 </script>
409</head>
410<body>
411 <h1 id='qunit-header'>Unit Tests for svgtransformlist.js</h1>
412 <h2 id='qunit-banner'></h2>
413 <h2 id='qunit-userAgent'></h2>
414 <ol id='qunit-tests'>
415 </ol>
416 <div id='svgroot' style='visibility:hidden'></div>
417</body>
418</html>
Note: See TracBrowser for help on using the repository browser.