PageRenderTime 54ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/flare.tests/src/flare/tests/AnimationTests.as

http://github.com/prefuse/Flare
ActionScript | 231 lines | 203 code | 28 blank | 0 comment | 15 complexity | c71ec97b0cfda6dc4d96233923719796 MD5 | raw file
  1. package flare.tests
  2. {
  3. import flare.animate.Scheduler;
  4. import flare.animate.Tween;
  5. import flare.animate.interpolate.ArrayInterpolator;
  6. import flare.animate.interpolate.ColorInterpolator;
  7. import flare.animate.interpolate.DateInterpolator;
  8. import flare.animate.interpolate.MatrixInterpolator;
  9. import flare.animate.interpolate.NumberInterpolator;
  10. import flare.animate.interpolate.PointInterpolator;
  11. import flare.animate.interpolate.RectangleInterpolator;
  12. import flare.util.Arrays;
  13. import flare.util.Colors;
  14. import flash.geom.Matrix;
  15. import flash.geom.Point;
  16. import flash.geom.Rectangle;
  17. import unitest.TestCase;
  18. public class AnimationTests extends TestCase
  19. {
  20. public function AnimationTests() {
  21. addTest("testNumberInterp");
  22. addTest("testDateInterp");
  23. addTest("testColorInterp");
  24. addTest("testArrayInterp");
  25. addTest("testPointInterp");
  26. addTest("testRectangleInterp");
  27. addTest("testMatrixInterp");
  28. addTest("testIdCancel");
  29. }
  30. public function testNumberInterp():void {
  31. var o:Object = {};
  32. var ni:NumberInterpolator = new NumberInterpolator(o, "v", 0, 1);
  33. for (var f:Number=0; f<=1.0; f+=0.1) {
  34. ni.interpolate(f);
  35. assertEquals(f, o.v);
  36. }
  37. }
  38. public function testColorInterp():void {
  39. var s:uint = 0x00ff0000;
  40. var t:uint = 0x000000ff;
  41. var o:Object = {v:s};
  42. var ci:ColorInterpolator = new ColorInterpolator(o, "v", s, t);
  43. for (var f:Number=0; f<=1.0; f+=0.1) {
  44. ci.interpolate(f);
  45. assertEquals(Colors.interpolate(s,t,f), o.v);
  46. }
  47. s = 0xff00ff00;
  48. t = 0x00ff0000;
  49. ci.reset(o, "v", s, t);
  50. for (f=0; f<=1.0; f+=0.1) {
  51. ci.interpolate(f);
  52. assertEquals(Colors.interpolate(s,t,f), o.v);
  53. }
  54. }
  55. public function testDateInterp():void {
  56. var t0:Number = 0;
  57. var t1:Number = 10000000;
  58. var s:Date = new Date(t0);
  59. var t:Date = new Date(t1);
  60. var o:Object = {};
  61. var di:DateInterpolator = new DateInterpolator(o, "v", s, t);
  62. for (var f:Number=0; f<=1.0; f+=0.1) {
  63. di.interpolate(f);
  64. assertTrue(Math.abs(f*t1 - o.v.time) < 2);
  65. }
  66. assertNotEquals(s, o.v);
  67. assertNotEquals(t, o.v);
  68. di.reset(o, "v", s, o.v);
  69. for (f=0; f<=1.0; f+=0.1) {
  70. di.interpolate(f);
  71. assertTrue(Math.abs(f*t1 - o.v.time) < 2);
  72. }
  73. assertNotEquals(s, o.v);
  74. assertNotEquals(t, o.v);
  75. }
  76. public function testArrayInterp():void {
  77. var s:Array = [0, 0, 0, 0, 0];
  78. var t:Array = [1, 1, 1, 1, 1];
  79. var o:Object = {v:Arrays.copy(s)};
  80. var ai:ArrayInterpolator = new ArrayInterpolator(o, "v", s, t);
  81. for (var f:Number=0; f<=1.0; f+=0.1) {
  82. ai.interpolate(f);
  83. for (var i:int=0; i<s.length; ++i)
  84. assertTrue(Math.abs(f - o.v[i]) < 0.000001);
  85. }
  86. assertNotEquals(s, o.v);
  87. assertNotEquals(t, o.v);
  88. ai.reset(o, "v", s, t);
  89. for (f=0; f<=1.0; f+=0.1) {
  90. ai.interpolate(f);
  91. for (i=0; i<s.length; ++i)
  92. assertTrue(Math.abs(f - o.v[i]) < 0.000001);
  93. }
  94. assertNotEquals(s, o.v);
  95. assertNotEquals(t, o.v);
  96. }
  97. public function testPointInterp():void {
  98. var s:Point = new Point(0, 0);
  99. var t:Point = new Point(1, 1);
  100. var o:Object = {v:s};
  101. var pi:PointInterpolator = new PointInterpolator(o, "v", o.v, t);
  102. for (var f:Number=0; f<=1.0; f+=0.1) {
  103. pi.interpolate(f);
  104. assertTrue(Math.abs(f - o.v.x) < 0.000001);
  105. assertTrue(Math.abs(f - o.v.y) < 0.000001);
  106. }
  107. assertNotEquals(s, o.v);
  108. assertNotEquals(t, o.v);
  109. pi.reset(o, "v", s, o.v);
  110. for (f=0; f<=1.0; f+=0.1) {
  111. pi.interpolate(f);
  112. assertTrue(Math.abs(f - o.v.x) < 0.000001);
  113. assertTrue(Math.abs(f - o.v.y) < 0.000001);
  114. }
  115. assertNotEquals(s, o.v);
  116. assertNotEquals(t, o.v);
  117. }
  118. public function testRectangleInterp():void {
  119. var s:Rectangle = new Rectangle(0, 0, 0, 0);
  120. var t:Rectangle = new Rectangle(1, 1, 1, 1);
  121. var o:Object = {v:s};
  122. var ri:RectangleInterpolator = new RectangleInterpolator(o, "v", o.v, t);
  123. for (var f:Number=0; f<=1.0; f+=0.1) {
  124. ri.interpolate(f);
  125. assertTrue(Math.abs(f - o.v.x) < 0.000001);
  126. assertTrue(Math.abs(f - o.v.y) < 0.000001);
  127. assertTrue(Math.abs(f - o.v.width) < 0.000001);
  128. assertTrue(Math.abs(f - o.v.height) < 0.000001);
  129. }
  130. assertNotEquals(s, o.v);
  131. assertNotEquals(t, o.v);
  132. ri.reset(o, "v", s, o.v);
  133. for (f=0; f<=1.0; f+=0.1) {
  134. ri.interpolate(f);
  135. assertTrue(Math.abs(f - o.v.x) < 0.000001);
  136. assertTrue(Math.abs(f - o.v.y) < 0.000001);
  137. assertTrue(Math.abs(f - o.v.width) < 0.000001);
  138. assertTrue(Math.abs(f - o.v.height) < 0.000001);
  139. }
  140. assertNotEquals(s, o.v);
  141. assertNotEquals(t, o.v);
  142. }
  143. public function testMatrixInterp():void {
  144. var s:Matrix = new Matrix(0, 0, 0, 0, 0, 0);
  145. var t:Matrix = new Matrix(1, 1, 1, 1, 1, 1);
  146. var o:Object = {v:s};
  147. var mi:MatrixInterpolator = new MatrixInterpolator(o, "v", o.v, t);
  148. for (var f:Number=0; f<=1.0; f+=0.1) {
  149. mi.interpolate(f);
  150. assertTrue(Math.abs(f - o.v.a) < 0.000001);
  151. assertTrue(Math.abs(f - o.v.b) < 0.000001);
  152. assertTrue(Math.abs(f - o.v.c) < 0.000001);
  153. assertTrue(Math.abs(f - o.v.d) < 0.000001);
  154. assertTrue(Math.abs(f - o.v.tx) < 0.000001);
  155. assertTrue(Math.abs(f - o.v.ty) < 0.000001);
  156. }
  157. assertNotEquals(s, o.v);
  158. assertNotEquals(t, o.v);
  159. mi.reset(o, "v", s, o.v);
  160. for (f=0; f<=1.0; f+=0.1) {
  161. mi.interpolate(f);
  162. assertTrue(Math.abs(f - o.v.a) < 0.000001);
  163. assertTrue(Math.abs(f - o.v.b) < 0.000001);
  164. assertTrue(Math.abs(f - o.v.c) < 0.000001);
  165. assertTrue(Math.abs(f - o.v.d) < 0.000001);
  166. assertTrue(Math.abs(f - o.v.tx) < 0.000001);
  167. assertTrue(Math.abs(f - o.v.ty) < 0.000001);
  168. }
  169. assertNotEquals(s, o.v);
  170. assertNotEquals(t, o.v);
  171. }
  172. public function testIdCancel():void {
  173. var o:Object = {a:1, b:2};
  174. var t0:Tween = new Tween(o, 1, {a:0});
  175. var t1:Tween = new Tween(o, 1, {a:2}); t1.id = "tween";
  176. var t2:Tween = new Tween(o, 1, {a:3}); t2.id = "tween";
  177. try {
  178. t1.id = "change";
  179. t1.id = "tween";
  180. assertEquals("tween", t1.id);
  181. } catch (err:Error) {
  182. fail("id change for non-running tween caused exception.");
  183. }
  184. t0.play();
  185. try {
  186. t0.id = "change";
  187. fail("Allowed id change for running transition");
  188. } catch (e:Error) { }
  189. t1.play();
  190. try {
  191. t1.id = "change";
  192. fail("Allowed id change for running transition");
  193. } catch (e:Error) { }
  194. t2.play();
  195. assertTrue(t0.running);
  196. assertTrue(Scheduler.instance.remove(t0));
  197. assertFalse(t1.running);
  198. assertFalse(Scheduler.instance.remove(t1));
  199. assertTrue(t2.running);
  200. assertTrue(Scheduler.instance.remove(t2));
  201. }
  202. } // end of class AnimationTests
  203. }