From 1039b68c0a13a4998268af28b43a8367d58a7324 Mon Sep 17 00:00:00 2001 From: Jeff Schiller Date: Mon, 8 Nov 2010 16:26:58 +0000 Subject: [PATCH] More tests for SVGTransformList git-svn-id: http://svg-edit.googlecode.com/svn/trunk@1857 eee81c28-f429-11dd-99c0-75d572ba1ddd --- editor/svgtransformlist.js | 7 +- test/svgtransformlist_test.html | 132 ++++++++++++++++++++++++++++++++ 2 files changed, 137 insertions(+), 2 deletions(-) diff --git a/editor/svgtransformlist.js b/editor/svgtransformlist.js index 13d0192c..69d19bb5 100644 --- a/editor/svgtransformlist.js +++ b/editor/svgtransformlist.js @@ -121,9 +121,12 @@ svgedit.transformlist.SVGTransformList = function(elem) { var fname = 'set' + name.charAt(0).toUpperCase() + name.slice(1); var values = name=='matrix'?[mtx]:val_arr; - if(name == 'scale' && values.length == 1) { + if (name == 'scale' && values.length == 1) { values.push(values[0]); - } else if(name == 'translate' && values.length == 1) { + } else if (name == 'translate' && values.length == 1) { + values.push(0); + } else if (name == 'rotate' && values.length == 1) { + values.push(0); values.push(0); } xform[fname].apply(xform, values); diff --git a/test/svgtransformlist_test.html b/test/svgtransformlist_test.html index 8751f401..3696f294 100644 --- a/test/svgtransformlist_test.html +++ b/test/svgtransformlist_test.html @@ -23,6 +23,12 @@ var svgns = 'http://www.w3.org/2000/svg'; var svgroot = document.getElementById('svgroot'); var svgcontent, rect, circle; + + var NEAR_ZERO = 1e-7; + function almostEquals(a, b, msg) { + msg = msg || (a + ' did not equal ' + b); + ok(Math.abs(a - b) < NEAR_ZERO, msg); + } function setUp() { svgcontent = svgroot.appendChild(document.createElementNS(svgns, 'svg')); @@ -231,6 +237,132 @@ tearDown(); }); + test('Test SVGTransformList.init() for translate(200,100)', function() { + expect(8); + setUp(); + rect.setAttribute('transform', 'translate(200,100)'); + + var rxform = svgedit.transformlist.getTransformList(rect); + equals(1, rxform.numberOfItems); + + var translate = rxform.getItem(0); + equals(2, translate.type); + + var m = translate.matrix; + equals(m.a, 1); + equals(m.b, 0); + equals(m.c, 0); + equals(m.d, 1); + equals(m.e, 200); + equals(m.f, 100); + + tearDown(); + }); + + test('Test SVGTransformList.init() for scale(4)', function() { + expect(8); + setUp(); + rect.setAttribute('transform', 'scale(4)'); + + var rxform = svgedit.transformlist.getTransformList(rect); + equals(1, rxform.numberOfItems); + + var scale = rxform.getItem(0); + equals(3, scale.type); + + var m = scale.matrix; + equals(m.a, 4); + equals(m.b, 0); + equals(m.c, 0); + equals(m.d, 4); + equals(m.e, 0); + equals(m.f, 0); + + tearDown(); + }); + + test('Test SVGTransformList.init() for scale(4,3)', function() { + expect(8); + setUp(); + rect.setAttribute('transform', 'scale(4,3)'); + + var rxform = svgedit.transformlist.getTransformList(rect); + equals(1, rxform.numberOfItems); + + var scale = rxform.getItem(0); + equals(3, scale.type); + + var m = scale.matrix; + equals(m.a, 4); + equals(m.b, 0); + equals(m.c, 0); + equals(m.d, 3); + equals(m.e, 0); + equals(m.f, 0); + + tearDown(); + }); + + test('Test SVGTransformList.init() for rotate(45)', function() { + expect(9); + setUp(); + rect.setAttribute('transform', 'rotate(45)'); + + var rxform = svgedit.transformlist.getTransformList(rect); + equals(1, rxform.numberOfItems); + + var rotate = rxform.getItem(0); + equals(4, rotate.type); + equals(45, rotate.angle); + + var m = rotate.matrix; + almostEquals(m.a, 1/Math.sqrt(2)); + almostEquals(m.b, 1/Math.sqrt(2)); + almostEquals(m.c, -1/Math.sqrt(2)); + almostEquals(m.d, 1/Math.sqrt(2)); + equals(m.e, 0); + equals(m.f, 0); + + tearDown(); + }); + + test('Test SVGTransformList.init() for rotate(45, 100, 200)', function() { + expect(9); + setUp(); + rect.setAttribute('transform', 'rotate(45, 100, 200)'); + + var rxform = svgedit.transformlist.getTransformList(rect); + equals(1, rxform.numberOfItems); + + var rotate = rxform.getItem(0); + equals(4, rotate.type); + equals(45, rotate.angle); + + var m = rotate.matrix; + almostEquals(m.a, 1/Math.sqrt(2)); + almostEquals(m.b, 1/Math.sqrt(2)); + almostEquals(m.c, -1/Math.sqrt(2)); + almostEquals(m.d, 1/Math.sqrt(2)); + // TODO(codedread): calculation + + var r = svgcontent.createSVGMatrix(); + r.a = 1/Math.sqrt(2); r.b = 1/Math.sqrt(2); + r.c = -1/Math.sqrt(2); r.d = 1/Math.sqrt(2); + + var t = svgcontent.createSVGMatrix(); + t.e = -100; t.f = -200; + + var t_ = svgcontent.createSVGMatrix(); + t_.e = 100; t_.f = 200; + + var result = t_.multiply(r).multiply(t); + + almostEquals(m.e, result.e); + almostEquals(m.f, result.f); + + tearDown(); + }); + });