001 package sysModel.fish.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.env.*;
009 import sysModel.fish.*;
010 import sysModel.parser.Lexer;
011
012 import java.awt.*;
013 import java.io.PrintWriter;
014
015 /**
016 * Test cases for AFish.
017 *
018 * @author Mathias Ricken
019 */
020 public class Test_Fish extends TestCase {
021 private IBlockedCommand _dummyB;
022 private IOpenCommand _dummyO;
023
024 private class TestFish extends AFish {
025 protected void move() {
026 // dummy
027 }
028
029 public void paint(Graphics2D g, Component comp) {
030 // dummy
031 }
032
033 public void age() {
034 super.age();
035 }
036
037 public TestFish(Color c) {
038 super(c, new IFishDisplay() {
039 public void draw(Graphics2D g, Component comp, Color fishColor) {
040 }
041 });
042 }
043 }
044
045 private ICmdFactory _cmdFactory;
046 private ISecurityAdapter _sm;
047 private TestFish _fish;
048 private TestGlobalEnv _env;
049 private AGlobalEnv.ALocalEnv _localEnv;
050
051 private static final ILambda _notify = new ILambda() {
052 public Object apply(Object param) {
053 return "notifyCmd";
054 }
055 };
056 private static final ILambda _delete = new ILambda() {
057 public Object apply(Object param) {
058 return "deleteCmd";
059 }
060 };
061 private static final ILambda _add = new ILambda() {
062 public Object apply(Object param) {
063 return "addCmd";
064 }
065 };
066
067 private final class TestGlobalEnv extends AGlobalEnv {
068 public TestGlobalEnv(ICmdFactory cmdFactory, ISecurityAdapter sm) {
069 super(cmdFactory, sm);
070 }
071
072 protected ILambda editFish(AGlobalEnv.ALocalEnv localEnv, IFishFactory fishFactory, int button) {
073 return null;
074 }
075
076 protected void addFishToInternalData(AGlobalEnv.ALocalEnv localEnv, AFish fish) {
077 }
078
079 protected void removeFishFromInternalData(AGlobalEnv.ALocalEnv localEnv) {
080 }
081
082 protected AGlobalEnv parseEnvironment(Lexer l) {
083 return null;
084 }
085
086 protected void parseFish(Lexer l) {
087 }
088
089 public AGlobalEnv.ALocalEnv makeLocalEnv(Point.Double p) {
090 return new AGlobalEnv.ALocalEnv() {
091 void checkFish(AFish fish) {
092 if (fish != _fish) {
093 throw new IllegalArgumentException("Wrong fish!");
094 }
095 }
096
097 public Object tryMoveFwd(AFish fish, IBlockedCommand blockedCmd, IOpenCommand openCmd) {
098 checkFish(fish);
099 throw new RuntimeException("tryMoveFwd called");
100 }
101
102 public Object tryBreedFwd(AFish fish, IBlockedCommand blockedCmd, IOpenCommand openCmd) {
103 checkFish(fish);
104 throw new RuntimeException("tryBreedFwd called");
105 }
106
107 public void drawFish(AFish fish, Graphics2D g, Component comp) {
108 checkFish(fish);
109 throw new RuntimeException("drawFish called");
110 }
111
112 public void turnRight(AFish fish, double radians) {
113 checkFish(fish);
114 throw new RuntimeException("turnRight called, radians=" + radians);
115 }
116
117 public void removeFish(AFish fish) {
118 checkFish(fish);
119 throw new RuntimeException("removeFish called");
120 }
121
122 public Object execute(AGlobalEnv.ILocalEnvVisitor visitor, Object param) {
123 throw new RuntimeException("execute called");
124 }
125
126 public void setState(ILocalEnvState state) {
127 }
128
129 protected ILambda makeMoveLambda(AGlobalEnv.ALocalEnv le) {
130 return null;
131 }
132
133 protected AGlobalEnv.ALocalEnv makeMoveFwdLocalEnv() {
134 return null;
135 }
136 };
137 }
138
139 public AEnvFactory makeEnvFactory() {
140 return null;
141 }
142
143 protected void printHeader(PrintWriter pw) {
144 }
145
146 public Dimension getDisplaySize() {
147 return null;
148 }
149
150 public void returnHome(IScrollAdapter sa) {
151 }
152
153 public Point.Double getViewPosition(Point.Double pos) {
154 return null;
155 }
156
157 public Point.Double getPanDelta(Point.Double delta) {
158 return null;
159 }
160
161 public ILambda getToolTipText(Point.Double p) {
162 return null;
163 }
164 }
165
166 public void setUp() throws Exception {
167 super.setUp();
168 _fish = new TestFish(Color.RED);
169
170 _cmdFactory = new ICmdFactory() {
171 public ILambda makeNotifyCmd(ILambda lambda) {
172 return _notify;
173 }
174
175 public ILambda makeDeleteCmd(AGlobalEnv.ALocalEnv env) {
176 return _delete;
177 }
178
179 public ILambda makeAddCmd(AFish fish) {
180 return _add;
181 }
182 };
183 _sm = new ISecurityAdapter() {
184 public void setProtected(boolean _protected) {
185 }
186 public ThreadGroup getFishThreadGroup() {
187 return null;
188 }
189 public ClassLoader getClassLoader() {
190 return null;
191 }
192 public void handleException(Throwable t) {
193 }
194 };
195
196 _env = new TestGlobalEnv(_cmdFactory, _sm);
197
198 _localEnv = _env.makeLocalEnv(new Point.Double(0, 0));
199 _dummyB = new IBlockedCommand() {
200 public Object apply(Object param) {
201 return null;
202 }
203 };
204 _dummyO = new IOpenCommand() {
205 public Object apply(Object param) {
206 return null;
207 }
208 };
209 _fish.setLocalEnvironment(_localEnv);
210 }
211
212 /**
213 * Test fish to local environment delegation for tryMoveFwd.
214 */
215 public void testTryMoveFwd() {
216 try {
217 _fish.tryMoveFwd(_dummyB, _dummyO);
218 fail("Error in delegation.");
219 }
220 catch (RuntimeException e) {
221 if (!"tryMoveFwd called".equals(e.getMessage())) {
222 fail("Wrong method called.");
223 }
224 }
225 }
226
227 /**
228 * Test fish to local environment delegation for tryBreedFwd.
229 */
230 public void testTryBreedFwd() {
231 try {
232 _fish.tryBreedFwd(_dummyB, _dummyO);
233 fail("Error in delegation.");
234 }
235 catch (RuntimeException e) {
236 if (!"tryBreedFwd called".equals(e.getMessage())) {
237 fail("Wrong method called.");
238 }
239 }
240 }
241
242 /**
243 * Test fish to local environment delegation for draw.
244 */
245 public void testDraw() {
246 try {
247 _fish.draw(null, null);
248 fail("Error in delegation.");
249 }
250 catch (RuntimeException e) {
251 if (!"drawFish called".equals(e.getMessage())) {
252 fail("Wrong method called.");
253 }
254 }
255 }
256
257 /**
258 * Test fish to local environment delegation for turnRight.
259 */
260 public void testTurnRight() {
261 try {
262 _fish.turnRight(3);
263 fail("Error in delegation.");
264 }
265 catch (RuntimeException e) {
266 if (!"turnRight called, radians=3.0".equals(e.getMessage())) {
267 fail("Wrong method called. " + e);
268 }
269 }
270 }
271
272 /**
273 * Test fish to local environment delegation for turnLeft.
274 */
275 public void testTurnLeft() {
276 try {
277 _fish.turnLeft(4.5);
278 fail("Error in delegation.");
279 }
280 catch (RuntimeException e) {
281 if (!"turnRight called, radians=-4.5".equals(e.getMessage())) {
282 fail("Wrong method called. " + e);
283 }
284 }
285 }
286
287 /**
288 * Test fish to local environment delegation for age.
289 */
290 public void testDie() {
291 _fish.setProbOfDying(2);
292 try {
293 _fish.die();
294 fail("Error in delegation.");
295 }
296 catch (RuntimeException e) {
297 if (!"removeFish called".equals(e.getMessage())) {
298 fail("Wrong method called.");
299 }
300 }
301 }
302 }