Skip to content

Commit 728fd8e

Browse files
committed
add reset and tests
1 parent 0f5ea67 commit 728fd8e

File tree

5 files changed

+93
-6
lines changed

5 files changed

+93
-6
lines changed

org-code-javabuilder/validation/src/main/java/org/code/validation/support/NeighborhoodTracker.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import org.code.validation.Position;
1919

2020
public class NeighborhoodTracker {
21-
private final Map<String, PainterTracker> painterTrackers;
21+
private Map<String, PainterTracker> painterTrackers;
2222
private String[][] neighborhoodState;
2323
private boolean isInitialized;
2424

@@ -83,6 +83,11 @@ public void trackEvent(ClientMessage message) {
8383
}
8484
}
8585

86+
public void reset() {
87+
this.painterTrackers = new HashMap<>();
88+
this.isInitialized = false;
89+
}
90+
8691
private void initializeGrid() {
8792
World world = (World) JavabuilderContext.getInstance().get(World.class);
8893
final int gridSize = world.getGrid().getSize();

org-code-javabuilder/validation/src/main/java/org/code/validation/support/SystemOutTracker.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,15 @@ public void trackEvent(ClientMessage message) {
2020
if (message.getType() != ClientMessageType.SYSTEM_OUT) {
2121
return;
2222
}
23-
this.messages.add(message.getValue());
23+
String value = message.getValue();
24+
// Ignore new lines as those are indications of a println vs a print.
25+
// For validation we don't care which is used.
26+
if (!value.equals("\n")) {
27+
this.messages.add(message.getValue());
28+
}
29+
}
30+
31+
public void reset() {
32+
this.messages = new ArrayList<>();
2433
}
2534
}

org-code-javabuilder/validation/src/main/java/org/code/validation/support/ValidationProtocol.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ public void invokeMainMethod() {
3838
if (this.mainMethod == null) {
3939
throw new ValidationRuntimeException(ExceptionKey.NO_MAIN_METHOD_VALIDATION);
4040
}
41+
this.neighborhoodTracker.reset();
42+
this.systemOutTracker.reset();
4143
try {
4244
this.mainMethod.invoke(null, new Object[] {null});
4345
} catch (IllegalAccessException e) {

org-code-javabuilder/validation/src/test/java/org/code/validation/support/NeighborhoodTrackerTest.java

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public void testInitializeMessageCreatesNewPainterTracker() {
4747

4848
@Test
4949
public void testUpdatesPainterTrackerWithPainterMessages() {
50-
final String id = "id";
50+
final String id = "id1";
5151
// Initialize
5252
unitUnderTest.trackEvent(createInitEvent(id, Direction.EAST, 5, 10, 20));
5353

@@ -66,7 +66,7 @@ public void testUpdatesPainterTrackerWithPainterMessages() {
6666

6767
final PainterLog painterLog = unitUnderTest.getNeighborhoodLog().getPainterLogs()[0];
6868

69-
assertEquals(ID, painterLog.getPainterId());
69+
assertEquals(id, painterLog.getPainterId());
7070
assertEquals(4, painterLog.getEndingPosition().getX());
7171
assertEquals(10, painterLog.getEndingPosition().getY());
7272
assertEquals(21, painterLog.getEndingPaintCount());
@@ -132,7 +132,7 @@ public void testSelectsCorrectPainterTrackerById() {
132132

133133
@Test
134134
public void testUpdatesPainterLogWithNonAnimatedMoves() {
135-
final String id = "id";
135+
final String id = "id1";
136136
// Initialize
137137
unitUnderTest.trackEvent(createInitEvent(id, Direction.EAST, 5, 10, 20));
138138

@@ -144,11 +144,38 @@ public void testUpdatesPainterLogWithNonAnimatedMoves() {
144144

145145
final PainterLog painterLog = unitUnderTest.getNeighborhoodLog().getPainterLogs()[0];
146146

147-
assertEquals(ID, painterLog.getPainterId());
147+
assertEquals(id, painterLog.getPainterId());
148148
assertTrue(painterLog.didActionOnce(NeighborhoodActionType.IS_ON_BUCKET));
149149
assertFalse(painterLog.didActionAtLeast(NeighborhoodActionType.CAN_MOVE, 1));
150150
}
151151

152+
@Test
153+
public void resetsSuccessfully() {
154+
final String id = "id1";
155+
// Initialize
156+
unitUnderTest.trackEvent(createInitEvent(id, Direction.EAST, 5, 10, 20));
157+
// create paint event
158+
final HashMap<String, String> paintDetails = new HashMap<>();
159+
paintDetails.put(COLOR, "orange");
160+
paintDetails.put(ID, id);
161+
unitUnderTest.trackEvent(
162+
new NeighborhoodSignalMessage(NeighborhoodSignalKey.PAINT, paintDetails));
163+
unitUnderTest.reset();
164+
// re-initialize
165+
unitUnderTest.trackEvent(createInitEvent(id, Direction.EAST, 5, 10, 20));
166+
// create move event
167+
final HashMap<String, String> moveDetails = new HashMap<>();
168+
moveDetails.put(DIRECTION, Direction.WEST.getDirectionString());
169+
moveDetails.put(ID, id);
170+
unitUnderTest.trackEvent(
171+
new NeighborhoodSignalMessage(NeighborhoodSignalKey.MOVE, moveDetails));
172+
173+
final PainterLog painterLog = unitUnderTest.getNeighborhoodLog().getPainterLogs()[0];
174+
175+
assertEquals(false, painterLog.didActionOnce(NeighborhoodActionType.PAINT));
176+
assertEquals(true, painterLog.didActionOnce(NeighborhoodActionType.MOVE));
177+
}
178+
152179
private NeighborhoodSignalMessage createInitEvent(
153180
String id, Direction direction, int x, int y, int paint) {
154181
final HashMap<String, String> details = new HashMap<>();
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package org.code.validation.support;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
5+
import java.util.List;
6+
import org.code.protocol.ClientMessageType;
7+
import org.code.validation.ClientMessageHelper;
8+
import org.junit.jupiter.api.Test;
9+
10+
public class SystemOutTrackerTest {
11+
private SystemOutTracker unitUnderTest;
12+
13+
@Test
14+
public void tracksAllNonNewlineMessages() {
15+
unitUnderTest = new SystemOutTracker();
16+
// should be tracked
17+
unitUnderTest.trackEvent(new ClientMessageHelper(ClientMessageType.SYSTEM_OUT, "hello"));
18+
// should be ignored
19+
unitUnderTest.trackEvent(new ClientMessageHelper(ClientMessageType.SYSTEM_OUT, "\n"));
20+
// should be tracked
21+
unitUnderTest.trackEvent(new ClientMessageHelper(ClientMessageType.SYSTEM_OUT, "hello world"));
22+
23+
List<String> messages = unitUnderTest.getSystemOutMessages();
24+
assertEquals(2, messages.size());
25+
assertEquals("hello world", messages.get(1));
26+
}
27+
28+
@Test
29+
public void resetsSuccessfully() {
30+
unitUnderTest = new SystemOutTracker();
31+
unitUnderTest.trackEvent(new ClientMessageHelper(ClientMessageType.SYSTEM_OUT, "hello"));
32+
// should reset message list
33+
unitUnderTest.reset();
34+
unitUnderTest.trackEvent(
35+
new ClientMessageHelper(ClientMessageType.SYSTEM_OUT, "a new message"));
36+
unitUnderTest.trackEvent(new ClientMessageHelper(ClientMessageType.SYSTEM_OUT, "hello world"));
37+
unitUnderTest.trackEvent(
38+
new ClientMessageHelper(ClientMessageType.SYSTEM_OUT, "a third message"));
39+
40+
List<String> messages = unitUnderTest.getSystemOutMessages();
41+
assertEquals(3, messages.size());
42+
assertEquals("a new message", messages.get(0));
43+
}
44+
}

0 commit comments

Comments
 (0)