svnno****@sourc*****
svnno****@sourc*****
2011年 1月 30日 (日) 22:16:50 JST
Revision: 2345
http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=2345
Author: dhrname
Date: 2011-01-30 22:16:50 +0900 (Sun, 30 Jan 2011)
Log Message:
-----------
SVGMatrixにおいて、さまざまなメソッドのスペックを書いておいた
Modified Paths:
--------------
trunk/Spec/spec/SvgDomSpec.js
Modified: trunk/Spec/spec/SvgDomSpec.js
===================================================================
--- trunk/Spec/spec/SvgDomSpec.js 2011-01-30 12:05:05 UTC (rev 2344)
+++ trunk/Spec/spec/SvgDomSpec.js 2011-01-30 13:16:50 UTC (rev 2345)
@@ -352,7 +352,6 @@
expect(d.d).toEqual(1);
expect(d.e).toEqual(0);
expect(d.f).toEqual(0);
- console.log(d);
d = null;
}
si = t = null;
@@ -372,5 +371,189 @@
expect(s.inverse).toThrow();
t = null;
});
+ /*併進変換に関する境界条件を調べておく (limit value analysis about the 'translate')*/
+ it("should be this for the value, when it calls the 'translate' method", function() {
+ var t = [0, 0,
+ -1, 0,
+ 1, -1,
+ Number.MAX_VALUE, Number.MIN_VALUE];
+ for (var i=0;i<t.length;i+=2) {
+ var d = s.translate(t[i], t[i+1]);
+ expect(d.a).toEqual(1);
+ expect(d.b).toEqual(0);
+ expect(d.c).toEqual(0);
+ expect(d.d).toEqual(1);
+ expect(d.e).toEqual(t[i]);
+ expect(d.f).toEqual(t[i+1]);
+ expect(d).toNotBe(s);
+ }
+ });
+ /*伸縮変換に関する境界条件を調べておく (limit value analysis about the 'scale')*/
+ it("should be this for the value, when it calls the 'scale' method", function() {
+ var t = [0,
+ -1,
+ 1,
+ Number.MAX_VALUE,
+ Number.MIN_VALUE];
+ for (var i=0;i<t.length;i+=2) {
+ var d = s.scale(t[i]);
+ expect(d.a).toEqual(t[i]);
+ expect(d.b).toEqual(0);
+ expect(d.c).toEqual(0);
+ expect(d.d).toEqual(t[i]);
+ expect(d.e).toEqual(0);
+ expect(d.f).toEqual(0);
+ expect(d).toNotBe(s);
+ }
+ });
+ /*比率の違う伸縮変換に関する境界条件を調べておく (limit value analysis about the 'scaleNonUniform')*/
+ it("should be this for the value, when it calls the 'scaleNonUniform' method", function() {
+ var t = [0, 0,
+ -1, 0,
+ 1, -1,
+ Number.MAX_VALUE, Number.MIN_VALUE];
+ for (var i=0;i<t.length;i+=2) {
+ var d = s.scaleNonUniform(t[i], t[i+1]);
+ expect(d.a).toEqual(t[i]);
+ expect(d.b).toEqual(0);
+ expect(d.c).toEqual(0);
+ expect(d.d).toEqual(t[i+1]);
+ expect(d.e).toEqual(0);
+ expect(d.f).toEqual(0);
+ expect(d).toNotBe(s);
+ }
+ });
+ /*回転変換に関する境界条件を調べておく (limit value analysis about the 'rotate')*/
+ it("should be this for the value, when it calls the 'rotate' method", function() {
+ var t = [0,
+ -1,
+ 1,
+ Number.MAX_VALUE,
+ Number.MIN_VALUE];
+ for (var i=0;i<t.length;i+=2) {
+ var d = s.rotate(t[i]);
+ expect(d.a).toEqual(Math.cos(t[i] / 180 * Math.PI));
+ expect(d.b).toEqual(Math.sin(t[i] / 180 * Math.PI));
+ expect(d.c).toEqual(-Math.sin(t[i] / 180 * Math.PI));
+ expect(d.d).toEqual(Math.cos(t[i] / 180 * Math.PI));
+ expect(d.e).toEqual(0);
+ expect(d.f).toEqual(0);
+ expect(d).toNotBe(s);
+ }
+ });
+ /*座標指定による回転変換に関する境界条件を調べておく (limit value analysis about the 'rotateFromVector')*/
+ it("should be this for the value, when it calls the 'rotateFromVector'", function() {
+ /*IE8において、Number.MIN_VALUEを2で割ると0となるバグがある (There's a bug that Number.MIN_VALUE/2 is zero in IE8)*/
+ var t = [1, 1,
+ -1, -1,
+ 1, -1,
+ -1, 1,
+ Number.MAX_VALUE, Number.MIN_VALUE];
+ for (var i=0;i<t.length;i+=2) {
+ var d = s.rotateFromVector(t[i], t[i+1]);
+ expect(d.a).toEqual(Math.cos(Math.atan2(t[i+1], t[i])));
+ expect(d.b).toEqual(Math.sin(Math.atan2(t[i+1], t[i])));
+ expect(d.c).toEqual(-Math.sin(Math.atan2(t[i+1], t[i])));
+ expect(d.d).toEqual(Math.cos(Math.atan2(t[i+1], t[i])));
+ expect(d.e).toEqual(0);
+ expect(d.f).toEqual(0);
+ expect(d).toNotBe(s);
+ }
+ });
+ /*座標指定による回転変換に関して同値分割をして、無効同値クラスを調べておく (equivalence partitioning, the following is the invalid partion)*/
+ it("should throw an SVG Invalid Value Error, when it calls the 'rotateFromVector' method", function() {
+ var t = [0,
+ Number.NEGATIVE_INFINITY,
+ Number.POSITIVE_INFINITY,
+ Number.NaN,
+ undefined];
+ for (var i=0;i<t.length;++i) {
+ var f = function() {
+ var d = s.rotateFromVector(t[i], 1);
+ }
+ expect(f).toThrow();
+ f = function() {
+ var d = s.rotateFromVector(1, t[i]);
+ }
+ expect(f).toThrow();
+ }
+ t = f = null;
+ });
+ /*x軸によって向き合わせとなる変換に関する境界条件を調べておく (limit value analysis about the 'flipX')*/
+ it("should be this for the value, when it calls the 'flipX' method", function() {
+ var t = [0,
+ -1,
+ 1,
+ Number.MAX_VALUE,
+ Number.MIN_VALUE];
+ for (var i=0;i<t.length;++i) {
+ s.a = t[i];
+ s.d = t[i];
+ var d = s.flipX();
+ expect(d.a).toEqual(-t[i]);
+ expect(d.b).toEqual(0);
+ expect(d.c).toEqual(0);
+ expect(d.d).toEqual(t[i]);
+ expect(d.e).toEqual(0);
+ expect(d.f).toEqual(0);
+ expect(d).toNotBe(s);
+ }
+ });
+ /*y軸によって向き合わせとなる変換に関する境界条件を調べておく (limit value analysis about the 'flipY')*/
+ it("should be this for the value, when it calls the 'flipY' method", function() {
+ var t = [0,
+ -1,
+ 1,
+ Number.MAX_VALUE,
+ Number.MIN_VALUE];
+ for (var i=0;i<t.length;++i) {
+ s.a = t[i];
+ s.d = t[i];
+ var d = s.flipY();
+ expect(d.a).toEqual(t[i]);
+ expect(d.b).toEqual(0);
+ expect(d.c).toEqual(0);
+ expect(d.d).toEqual(-t[i]);
+ expect(d.e).toEqual(0);
+ expect(d.f).toEqual(0);
+ expect(d).toNotBe(s);
+ }
+ });
+ /*横の傾き変換に関する境界条件を調べておく (limit value analysis about the 'skewX')*/
+ it("should be this for the value, when it calls the 'skewX' method", function() {
+ var t = [0,
+ -1,
+ 1,
+ Number.MAX_VALUE,
+ Number.MIN_VALUE];
+ for (var i=0;i<t.length;i+=2) {
+ var d = s.skewX(t[i]);
+ expect(d.a).toEqual(1);
+ expect(d.b).toEqual(0);
+ expect(d.c).toEqual(Math.tan(t[i] / 180 * Math.PI));
+ expect(d.d).toEqual(1);
+ expect(d.e).toEqual(0);
+ expect(d.f).toEqual(0);
+ expect(d).toNotBe(s);
+ }
+ });
+ /*縦の傾き変換に関する境界条件を調べておく (limit value analysis about the 'skewY')*/
+ it("should be this for the value, when it calls the 'skewY' method", function() {
+ var t = [0,
+ -1,
+ 1,
+ Number.MAX_VALUE,
+ Number.MIN_VALUE];
+ for (var i=0;i<t.length;i+=2) {
+ var d = s.skewY(t[i]);
+ expect(d.a).toEqual(1);
+ expect(d.b).toEqual(Math.tan(t[i] / 180 * Math.PI));
+ expect(d.c).toEqual(0);
+ expect(d.d).toEqual(1);
+ expect(d.e).toEqual(0);
+ expect(d.f).toEqual(0);
+ expect(d).toNotBe(s);
+ }
+ });
});
});
\ No newline at end of file