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    }