Skip to content

Commit 85419ee

Browse files
committed
Add unit tests
1 parent 3ac4c37 commit 85419ee

File tree

7 files changed

+179
-18
lines changed

7 files changed

+179
-18
lines changed

app/build.gradle

+3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ android {
1717
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
1818
}
1919
}
20+
testOptions {
21+
unitTests.returnDefaultValues = true
22+
}
2023
}
2124

2225
dependencies {

app/src/main/java/com/andlvovsky/lines/analyzer/BoardAnalyzer.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@ private BoardAnalyzer() {
2323
}
2424

2525
public static boolean isValidMove(Board board, Move move) {
26-
return !(move.iFrom() == move.iTo() && move.jFrom() == move.jTo()) &&
26+
return isInBoard(new Coordinates(move.iFrom(), move.jFrom())) &&
27+
isInBoard(new Coordinates(move.iTo(), move.jTo())) &&
28+
!(move.iFrom() == move.iTo() && move.jFrom() == move.jTo()) &&
2729
!board.isEmpty(move.iFrom(), move.jFrom()) &&
2830
board.isEmpty(move.iTo(), move.jTo()) &&
2931
BoardGraphAlgorithms.doesPathExist(board, move);

app/src/main/java/com/andlvovsky/lines/controller/LinesGameController.java

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public enum LinesGameController {
1717

1818
public void startGame() {
1919
game.start();
20+
chosenCells.clear();
2021
}
2122

2223
public void chooseCell(int i, int j) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
package com.andlvovsky.lines.BoardAnalyzer;
2+
3+
import com.andlvovsky.lines.analyzer.BoardAnalyzer;
4+
import com.andlvovsky.lines.board.Board;
5+
import com.andlvovsky.lines.game.Move;
6+
import com.andlvovsky.lines.meta.Colors;
7+
import com.andlvovsky.lines.testutil.BoardParser;
8+
9+
import org.junit.Test;
10+
11+
import static com.andlvovsky.lines.analyzer.BoardAnalyzer.isValidMove;
12+
import static org.junit.Assert.assertEquals;
13+
import static org.junit.Assert.assertFalse;
14+
import static org.junit.Assert.assertTrue;
15+
16+
public class BoardAnalyzerTest {
17+
private String nonColorBoardRepresentation =
18+
"o...oooo." +
19+
"...o.oo.." +
20+
"..o...o.." +
21+
"oo.....o." +
22+
"...o...o." +
23+
"..o..o..." +
24+
"ooo..o..." +
25+
"..o...o.." +
26+
"o.o..o...";
27+
private Board nonColorBoard = BoardParser.fromString(nonColorBoardRepresentation);
28+
29+
@Test
30+
public void recognizeValidMoves() {
31+
assertTrue(isValidMove(nonColorBoard, new Move(0, 0, 0, 1)));
32+
assertTrue(isValidMove(nonColorBoard, new Move(0, 0, 2, 0)));
33+
assertTrue(isValidMove(nonColorBoard, new Move(6, 1, 8, 8)));
34+
assertTrue(isValidMove(nonColorBoard, new Move(8, 5, 0, 8)));
35+
assertTrue(isValidMove(nonColorBoard, new Move(4, 3, 3, 5)));
36+
}
37+
38+
@Test
39+
public void recognizeInvalidMovesWhenNoPath() {
40+
assertFalse(isValidMove(nonColorBoard, new Move(0, 0, 3, 4)));
41+
assertFalse(isValidMove(nonColorBoard, new Move(8, 0, 4, 5)));
42+
assertFalse(isValidMove(nonColorBoard, new Move(0, 0, 7, 0)));
43+
}
44+
45+
@Test
46+
public void recognizeInvalidMovesOtherCases() {
47+
assertFalse(isValidMove(nonColorBoard, new Move(0, 0, 0, 4)));
48+
assertFalse(isValidMove(nonColorBoard, new Move(0, 1, 0, 4)));
49+
assertFalse(isValidMove(nonColorBoard, new Move(0, 1, 1, 1)));
50+
assertFalse(isValidMove(nonColorBoard, new Move(0, 1, -5, 1)));
51+
assertFalse(isValidMove(nonColorBoard, new Move(10, 1, 5, 1)));
52+
}
53+
54+
@Test
55+
public void removeBallsHorizontal() {
56+
Board board = new Board();
57+
for (int i = 0; i < 6; i++)
58+
board.addBall(i + 1, 2, Colors.BALLS.get(0));
59+
BoardAnalyzer.removeBallsAndCalculateAddingScore(board);
60+
assertEquals(81, BoardAnalyzer.countEmptyCells(board));
61+
}
62+
63+
@Test
64+
public void removeBallsVertical() {
65+
Board board = new Board();
66+
for (int i = 0; i < 5; i++)
67+
board.addBall(1, i + 2, Colors.BALLS.get(0));
68+
BoardAnalyzer.removeBallsAndCalculateAddingScore(board);
69+
assertEquals(81, BoardAnalyzer.countEmptyCells(board));
70+
}
71+
72+
@Test
73+
public void removeBallsMainDiagonal() {
74+
Board board = new Board();
75+
for (int i = 0; i < 6; i++)
76+
board.addBall(i + 1, i + 2, Colors.BALLS.get(0));
77+
BoardAnalyzer.removeBallsAndCalculateAddingScore(board);
78+
assertEquals(81, BoardAnalyzer.countEmptyCells(board));
79+
}
80+
81+
@Test
82+
public void removeBallsAntiDiagonal() {
83+
Board board = new Board();
84+
for (int i = 0; i < 5; i++)
85+
board.addBall(i + 1, 7 - i, Colors.BALLS.get(0));
86+
BoardAnalyzer.removeBallsAndCalculateAddingScore(board);
87+
assertEquals(81, BoardAnalyzer.countEmptyCells(board));
88+
}
89+
90+
@Test
91+
public void notRemoveBallsSmallSequence() {
92+
Board board = new Board();
93+
for (int i = 0; i < 4; i++)
94+
board.addBall(i + 2, 2, Colors.BALLS.get(0));
95+
BoardAnalyzer.removeBallsAndCalculateAddingScore(board);
96+
assertEquals(77, BoardAnalyzer.countEmptyCells(board));
97+
}
98+
99+
@Test
100+
public void notRemoveBallsNotSequence() {
101+
Board board = new Board();
102+
board.addBall(0, 0, Colors.BALLS.get(0));
103+
board.addBall(4, 5, Colors.BALLS.get(0));
104+
board.addBall(8, 3, Colors.BALLS.get(0));
105+
board.addBall(2, 2, Colors.BALLS.get(0));
106+
board.addBall(7, 1, Colors.BALLS.get(0));
107+
BoardAnalyzer.removeBallsAndCalculateAddingScore(board);
108+
assertEquals(76, BoardAnalyzer.countEmptyCells(board));
109+
}
110+
}

app/src/test/java/com/andlvovsky/lines/ExampleUnitTest.java

-17
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.andlvovsky.lines.controller;
2+
3+
import com.andlvovsky.lines.board.Board;
4+
import com.andlvovsky.lines.game.LinesGame;
5+
import com.andlvovsky.lines.meta.Colors;
6+
7+
import org.junit.Before;
8+
import org.junit.Test;
9+
10+
import java.lang.reflect.Field;
11+
12+
import static org.junit.Assert.assertEquals;
13+
14+
public class LinesGameControllerTest {
15+
private LinesGameController controller = LinesGameController.INSTANCE;
16+
private LinesGame game = LinesGame.INSTANCE;
17+
18+
@Before
19+
public void setBalls() throws IllegalAccessException, NoSuchFieldException {
20+
controller.startGame();
21+
Field boardField = LinesGame.class.getDeclaredField("board");
22+
boardField.setAccessible(true);
23+
Board board = (Board)boardField.get(game);
24+
for (int i = 0; i < 9; i++)
25+
for(int j = 0; j < 9; j++)
26+
board.clearCell(i, j);
27+
board.addBall(1, 1, Colors.BALLS.get(0));
28+
board.addBall(5, 7, Colors.BALLS.get(0));
29+
}
30+
31+
@Test
32+
public void returnZeroAsNumberOfChosenCellsAfterStart() {
33+
assertEquals(0, controller.getChosenCells().size());
34+
}
35+
36+
@Test
37+
public void returnOneAsNumberOfChosenCellsAfterChoosingCell() {
38+
controller.chooseCell(1, 1);
39+
assertEquals(1, controller.getChosenCells().size());
40+
}
41+
42+
@Test
43+
public void returnZeroAsNumberOfChosenCellsAfterChoosingTwoCell() {
44+
controller.chooseCell(1, 1);
45+
controller.chooseCell(4, 2);
46+
assertEquals(0, controller.getChosenCells().size());
47+
}
48+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.andlvovsky.lines.testutil;
2+
3+
import com.andlvovsky.lines.board.Board;
4+
import com.andlvovsky.lines.meta.Colors;
5+
6+
public class BoardParser {
7+
public static Board fromString(String bs) {
8+
Board board = new Board();
9+
for (int i = 0; i < bs.length(); i++)
10+
if (bs.charAt(i) == 'o')
11+
board.addBall(i / 9, i % 9, Colors.BALLS.get(0));
12+
return board;
13+
}
14+
}

0 commit comments

Comments
 (0)