001 package sysModel.env.tests;
002
003 import controller.IScrollAdapter;
004 import junit.framework.TestCase;
005 import model.ILambda;
006 import sysModel.ICmdFactory;
007 import sysModel.ISecurityAdapter;
008 import sysModel.fish.AFish;
009 import sysModel.env.AEnvFactory;
010 import sysModel.env.AGlobalEnv;
011 import sysModel.env.ASquareEnv;
012 import sysModel.parser.Lexer;
013
014 import java.awt.*;
015 import java.awt.geom.Point2D;
016 import java.io.PrintWriter;
017
018 /**
019 * Test cases for ASquareEnv.Direction.
020 *
021 * @author Mathias Ricken
022 */
023 public class Test_ASquareEnv_Direction extends TestCase {
024 private ICmdFactory _cmdFactory;
025 private ISecurityAdapter _sm;
026 private ASquareEnv _env;
027
028 private static final ILambda _notify = new ILambda() {
029 public Object apply(Object param) {
030 return "notifyCmd";
031 }
032 };
033 private static final ILambda _delete = new ILambda() {
034 public Object apply(Object param) {
035 return "deleteCmd";
036 }
037 };
038 private static final ILambda _add = new ILambda() {
039 public Object apply(Object param) {
040 return "addCmd";
041 }
042 };
043
044 public void setUp() throws Exception {
045 super.setUp();
046 _cmdFactory = new ICmdFactory() {
047 public ILambda makeNotifyCmd(ILambda lambda) {
048 return _notify;
049 }
050
051 public ILambda makeDeleteCmd(AGlobalEnv.ALocalEnv env) {
052 return _delete;
053 }
054
055 public ILambda makeAddCmd(AFish fish) {
056 return _add;
057 }
058 };
059 _sm = new ISecurityAdapter() {
060 public void setProtected(boolean _protected) {
061 }
062 public ThreadGroup getFishThreadGroup() {
063 return null;
064 }
065 public ClassLoader getClassLoader() {
066 return null;
067 }
068 public void handleException(Throwable t) {
069 }
070 };
071
072 _env = new ASquareEnv(_cmdFactory, _sm) {
073 protected void addFishToInternalData(ALocalEnv localEnv, AFish fish) {
074 }
075
076 protected ASquareEnv.ASquareLocalEnvironment makeLocalEnv(ASquareEnv.Location loc,
077 ASquareEnv.Direction dir) {
078 return null;
079 }
080
081 protected AGlobalEnv parseEnvironment(Lexer l) {
082 return null;
083 }
084
085 public AEnvFactory makeEnvFactory() {
086 return null;
087 }
088
089 protected void printHeader(PrintWriter pw) {
090 }
091
092 public Dimension getDisplaySize() {
093 return null;
094 }
095
096 public void returnHome(IScrollAdapter sa) {
097 }
098
099 public Point2D.Double getViewPosition(Point2D.Double pos) {
100 return null;
101 }
102
103 public Point2D.Double getPanDelta(Point2D.Double delta) {
104 return null;
105 }
106
107 protected void removeFishFromInternalData(ALocalEnv localEnv) {
108 }
109 };
110 }
111
112 /**
113 * Test getters and ctors.
114 */
115 public void testGetSet() {
116 ASquareEnv.Direction d = _env.makeDirection();
117 assertEquals(0.0, d.getDeltaX(), 0.01);
118 assertEquals(-1.0, d.getDeltaY(), 0.01);
119
120 d = _env.makeDirection(-0.5, 0.5);
121 assertEquals(-0.5, d.getDeltaX(), 0.01);
122 assertEquals(0.5, d.getDeltaY(), 0.01);
123
124 ASquareEnv.Direction d2 = _env.makeDirection(d);
125 assertEquals(-0.5, d2.getDeltaX(), 0.01);
126 assertEquals(0.5, d2.getDeltaY(), 0.01);
127 }
128
129 /**
130 * Test turning.
131 */
132 public void testTurn() {
133 ASquareEnv.Direction d = _env.makeDirection();
134 d.turnRight();
135 assertEquals(1.0, d.getDeltaX(), 0.01);
136 assertEquals(0.0, d.getDeltaY(), 0.01);
137
138 d.turnRight(Math.PI / 2);
139 assertEquals(0.0, d.getDeltaX(), 0.01);
140 assertEquals(1.0, d.getDeltaY(), 0.01);
141
142 d.turnLeft(-Math.PI);
143 assertEquals(0.0, d.getDeltaX(), 0.01);
144 assertEquals(-1.0, d.getDeltaY(), 0.01);
145
146 d.turnLeft();
147 assertEquals(-1.0, d.getDeltaX(), 0.01);
148 assertEquals(0.0, d.getDeltaY(), 0.01);
149 }
150
151 /**
152 * Test reverse.
153 */
154 public void testReverse() {
155 ASquareEnv.Direction d = _env.makeDirection(1, -1);
156 d.reverseDirection();
157 assertEquals(-1.0, d.getDeltaX(), 0.01);
158 assertEquals(1.0, d.getDeltaY(), 0.01);
159 d.reverseDirection();
160 assertEquals(1.0, d.getDeltaX(), 0.01);
161 assertEquals(-1.0, d.getDeltaY(), 0.01);
162 }
163
164 /**
165 * Test same.
166 */
167 public void testSame() {
168 ASquareEnv.Direction d = _env.makeDirection(1, -1);
169 ASquareEnv.Direction d1 = _env.makeDirection(1, -1);
170 ASquareEnv.Direction d2 = _env.makeDirection(1, 2);
171 assertEquals(true, d.same(d1));
172 assertEquals(false, d.same(d2));
173 assertEquals(true, d1.same(d));
174 assertEquals(false, d2.same(d));
175 assertEquals(false, d2.same(d1));
176 assertEquals(false, d1.same(d2));
177 }
178
179 /**
180 * Test angle.
181 */
182 public void testAngle() {
183 ASquareEnv.Direction d = _env.makeDirection();
184 assertEquals(0.0 / 180 * Math.PI, d.getAngle(), 0.01);
185 d.turnRight();
186 assertEquals(90.0 / 180 * Math.PI, d.getAngle(), 0.01);
187
188 d.turnRight(Math.PI / 2);
189 assertEquals(180.0 / 180 * Math.PI, d.getAngle(), 0.01);
190
191 d.turnLeft(-Math.PI);
192 assertEquals(0.0 / 180 * Math.PI, d.getAngle(), 0.01);
193
194 d.turnLeft();
195 assertEquals(270.0 / 180 * Math.PI, d.getAngle(), 0.01);
196 }
197
198 }