master
1package ca.mokhan.test;
2
3import Q9.*;
4import java.io.*;
5import java.text.*;
6import java.util.*;
7import junit.framework.Test;
8import junit.framework.TestCase;
9import junit.framework.TestSuite;
10
11public class MovingRobotTest extends TestCase {
12 private MovingRobot subject;
13
14 public MovingRobotTest(String testName) {
15 super(testName);
16 this.subject = new MovingRobot(0, 0);
17 }
18
19 public static Test suite() {
20 return new TestSuite(MovingRobotTest.class);
21 }
22
23 public void test_generateNextMove() {
24 for (int i = 0; i < 100; i++) {
25 int move = subject.generateNextMove();
26 assertTrue(move > 0);
27 assertTrue(move < 9);
28 }
29 }
30
31 public void test_validateNextMove_whenAtZeroZero() {
32 this.subject = new MovingRobot(0, 0);
33 assertFalse(subject.validateNextMove(Robot.NORTH));
34 assertFalse(subject.validateNextMove(Robot.NORTH_EAST));
35 assertTrue(subject.validateNextMove(Robot.EAST));
36 assertTrue(subject.validateNextMove(Robot.SOUTH_EAST));
37 assertTrue(subject.validateNextMove(Robot.SOUTH));
38 assertFalse(subject.validateNextMove(Robot.SOUTH_WEST));
39 assertFalse(subject.validateNextMove(Robot.WEST));
40 assertFalse(subject.validateNextMove(Robot.NORTH_WEST));
41 }
42
43 public void test_validateNextMove_whenAtZeroOne() {
44 this.subject = new MovingRobot(0, 1);
45
46 assertTrue(subject.validateNextMove(Robot.NORTH));
47 assertTrue(subject.validateNextMove(Robot.NORTH_EAST));
48 assertTrue(subject.validateNextMove(Robot.EAST));
49 assertTrue(subject.validateNextMove(Robot.SOUTH_EAST));
50 assertTrue(subject.validateNextMove(Robot.SOUTH));
51 assertFalse(subject.validateNextMove(Robot.SOUTH_WEST));
52 assertFalse(subject.validateNextMove(Robot.WEST));
53 assertFalse(subject.validateNextMove(Robot.NORTH_WEST));
54 }
55
56 public void test_validateNextMove_whenAtNineZero() {
57 this.subject = new MovingRobot(9, 0);
58
59 assertFalse(subject.validateNextMove(Robot.NORTH));
60 assertFalse(subject.validateNextMove(Robot.NORTH_EAST));
61 assertFalse(subject.validateNextMove(Robot.EAST));
62 assertFalse(subject.validateNextMove(Robot.SOUTH_EAST));
63 assertTrue(subject.validateNextMove(Robot.SOUTH));
64 assertTrue(subject.validateNextMove(Robot.SOUTH_WEST));
65 assertTrue(subject.validateNextMove(Robot.WEST));
66 assertFalse(subject.validateNextMove(Robot.NORTH_WEST));
67 }
68
69 public void test_validateNextMove_whenAtNineNine() {
70 this.subject = new MovingRobot(9, 9);
71 assertTrue(subject.validateNextMove(Robot.NORTH));
72 assertFalse(subject.validateNextMove(Robot.NORTH_EAST));
73 assertFalse(subject.validateNextMove(Robot.EAST));
74 assertFalse(subject.validateNextMove(Robot.SOUTH_EAST));
75 assertFalse(subject.validateNextMove(Robot.SOUTH));
76 assertFalse(subject.validateNextMove(Robot.SOUTH_WEST));
77 assertTrue(subject.validateNextMove(Robot.WEST));
78 assertTrue(subject.validateNextMove(Robot.NORTH_WEST));
79 }
80
81 public void test_validateNextMove_whenAtZeroNine() {
82 this.subject = new MovingRobot(0, 9);
83 assertTrue(subject.validateNextMove(Robot.NORTH));
84 assertTrue(subject.validateNextMove(Robot.NORTH_EAST));
85 assertTrue(subject.validateNextMove(Robot.EAST));
86 assertFalse(subject.validateNextMove(Robot.SOUTH_EAST));
87 assertFalse(subject.validateNextMove(Robot.SOUTH));
88 assertFalse(subject.validateNextMove(Robot.SOUTH_WEST));
89 assertFalse(subject.validateNextMove(Robot.WEST));
90 assertFalse(subject.validateNextMove(Robot.NORTH_WEST));
91 }
92
93 public void test_move_whenAtZeroZero() {
94 subject = new MovingRobot(0, 0);
95
96 for (int i = 0; i < 9; i++) {
97 subject.move(Robot.EAST);
98 assertEquals(i + 1, subject.getX());
99 assertEquals(0, subject.getY());
100 }
101
102 for (int i = 0; i < 9; i++) {
103 subject.move(Robot.SOUTH);
104 assertEquals(9, subject.getX());
105 assertEquals(i + 1, subject.getY());
106 }
107
108 for (int i = 9; i > 0; i--) {
109 subject.move(Robot.WEST);
110 assertEquals(i - 1, subject.getX());
111 assertEquals(9, subject.getY());
112 }
113
114 for (int i = 9; i > 0; i--) {
115 subject.move(Robot.NORTH);
116 assertEquals(0, subject.getX());
117 assertEquals(i - 1, subject.getY());
118 }
119
120 subject.move(Robot.NORTH);
121 assertEquals(0, subject.getX());
122 assertEquals(0, subject.getY());
123
124 subject.move(Robot.NORTH_WEST);
125 assertEquals(0, subject.getX());
126 assertEquals(0, subject.getY());
127
128 subject.move(Robot.WEST);
129 assertEquals(0, subject.getX());
130 assertEquals(0, subject.getY());
131
132 subject.move(Robot.SOUTH_WEST);
133 assertEquals(0, subject.getX());
134 assertEquals(0, subject.getY());
135 }
136
137 public void test_move_Should_move_in_circle() {
138 this.subject = new MovingRobot(5, 5);
139
140 subject.move(Robot.NORTH);
141 assertEquals(5, subject.getX());
142 assertEquals(4, subject.getY());
143
144 subject.move(Robot.NORTH_EAST);
145 assertEquals(6, subject.getX());
146 assertEquals(3, subject.getY());
147
148 subject.move(Robot.EAST);
149 assertEquals(7, subject.getX());
150 assertEquals(3, subject.getY());
151
152 subject.move(Robot.SOUTH_EAST);
153 assertEquals(8, subject.getX());
154 assertEquals(4, subject.getY());
155
156 subject.move(Robot.SOUTH);
157 assertEquals(8, subject.getX());
158 assertEquals(5, subject.getY());
159
160 subject.move(Robot.SOUTH_WEST);
161 assertEquals(7, subject.getX());
162 assertEquals(6, subject.getY());
163
164 subject.move(Robot.WEST);
165 assertEquals(6, subject.getX());
166 assertEquals(6, subject.getY());
167
168 subject.move(Robot.NORTH_WEST);
169 assertEquals(5, subject.getX());
170 assertEquals(5, subject.getY());
171 }
172
173 public void test_printMoves() {
174 subject = new MovingRobot(0, 0);
175
176 subject.move(Robot.EAST);
177 assertEquals(String.format("%d", Robot.EAST), subject.printMoves());
178
179 subject.move(Robot.EAST);
180 assertEquals(String.format("%d,%d", Robot.EAST, Robot.EAST), subject.printMoves());
181 }
182}