/test/as3geometry/geom2D/intersection/IntersectionOfTwoLinesVertexTest.as

https://github.com/GunioRobot/as3geometry
ActionScript | 135 lines | 112 code | 22 blank | 1 comment | 0 complexity | 6a11a5618f4789a93d20b9c4fb3eda0e MD5 | raw file
  1. package as3geometry.geom2D.intersection
  2. {
  3. import as3geometry.AS3GeometryContext;
  4. import as3geometry.geom2D.Line;
  5. import as3geometry.geom2D.LineType;
  6. import as3geometry.geom2D.line.ImmutableLine;
  7. import as3geometry.geom2D.line.IntersectionOfTwoLinesVertex;
  8. import as3geometry.geom2D.vertices.ImmutableVertex;
  9. import asunit.asserts.assertEquals;
  10. import asunit.asserts.assertTrue;
  11. import flash.display.Sprite;
  12. public class IntersectionOfTwoLinesVertexTest
  13. {
  14. [Inject]
  15. public var root:Sprite;
  16. private var context:AS3GeometryContext;
  17. private var a:Line;
  18. private var b:Line;
  19. private var vertex:IntersectionOfTwoLinesVertex;
  20. [Before]
  21. public function before():void
  22. {
  23. context = new AS3GeometryContext(root);
  24. }
  25. [After]
  26. public function tearDown():void
  27. {
  28. context = null;
  29. a = null; b = null; vertex = null;
  30. }
  31. [Test]
  32. public function verticalAndHorizontal():void
  33. {
  34. a = new ImmutableLine(new ImmutableVertex(0,5), new ImmutableVertex(10,5));
  35. b = new ImmutableLine(new ImmutableVertex(5,0), new ImmutableVertex(5,10));
  36. resolve(5,5);
  37. }
  38. [Test]
  39. public function verticalAndHorizontal_WithHorizonalOffset():void
  40. {
  41. a = new ImmutableLine(new ImmutableVertex(3,5), new ImmutableVertex(13,5));
  42. b = new ImmutableLine(new ImmutableVertex(5,0), new ImmutableVertex(5,10));
  43. resolve(5,5);
  44. }
  45. [Test]
  46. public function verticalAndHorizontal_WithVerticalOffset():void
  47. {
  48. a = new ImmutableLine(new ImmutableVertex(0,5), new ImmutableVertex(10,5));
  49. b = new ImmutableLine(new ImmutableVertex(5,3), new ImmutableVertex(5,13));
  50. resolve(5,5);
  51. }
  52. [Test]
  53. public function diagonals():void
  54. {
  55. a = new ImmutableLine(new ImmutableVertex(0,0), new ImmutableVertex(10,10)); b = new ImmutableLine(new ImmutableVertex(10,0), new ImmutableVertex(0,10));
  56. resolve(5,5);
  57. }
  58. [Test]
  59. public function diagonals_WithOffset():void
  60. {
  61. a = new ImmutableLine(new ImmutableVertex(3,3), new ImmutableVertex(10,10));
  62. b = new ImmutableLine(new ImmutableVertex(10,0), new ImmutableVertex(0,10));
  63. resolve(5,5);
  64. }
  65. [Test]
  66. public function parallel():void
  67. {
  68. a = new ImmutableLine(new ImmutableVertex(0,0), new ImmutableVertex(0,10));
  69. b = new ImmutableLine(new ImmutableVertex(10,0), new ImmutableVertex(10,10));
  70. resolveNoIntersection();
  71. }
  72. [Test]
  73. public function sectionsDontIntersect():void
  74. {
  75. a = new ImmutableLine(new ImmutableVertex(0,5), new ImmutableVertex(5,5), LineType.SEGMENT);
  76. b = new ImmutableLine(new ImmutableVertex(10,0), new ImmutableVertex(10,10), LineType.SEGMENT);
  77. resolveNoIntersection();
  78. }
  79. [Test]
  80. public function sectionsDontIntersect_JustOneIsSegment():void
  81. {
  82. a = new ImmutableLine(new ImmutableVertex(0,5), new ImmutableVertex(5,5), LineType.SEGMENT);
  83. b = new ImmutableLine(new ImmutableVertex(10,0), new ImmutableVertex(10,10));
  84. resolveNoIntersection();
  85. }
  86. [Test]
  87. public function raysDontIntersect():void
  88. {
  89. a = new ImmutableLine(new ImmutableVertex(5,5), new ImmutableVertex(0,5), LineType.RAY);
  90. b = new ImmutableLine(new ImmutableVertex(10,0), new ImmutableVertex(10,10));
  91. resolveNoIntersection();
  92. }
  93. [Test]
  94. public function raysDoIntersect_CounterpartToTestRaysDontIntersect():void
  95. {
  96. a = new ImmutableLine(new ImmutableVertex(0,5), new ImmutableVertex(5,5), LineType.RAY);
  97. b = new ImmutableLine(new ImmutableVertex(10,0), new ImmutableVertex(10,10));
  98. resolve(10, 5);
  99. }
  100. // Private Methods for performing equality tests (since they're always the same form!
  101. private function resolve(x:Number, y:Number):void
  102. {
  103. vertex = new IntersectionOfTwoLinesVertex(context, a, b);
  104. assertEquals(x, vertex.x); assertEquals(y, vertex.y);
  105. }
  106. private function resolveNoIntersection():void
  107. {
  108. vertex = new IntersectionOfTwoLinesVertex(context, a, b);
  109. assertTrue(isNaN(vertex.x));
  110. assertTrue(isNaN(vertex.y));
  111. }
  112. }
  113. }