You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
190 lines
8.2 KiB
190 lines
8.2 KiB
import static org.assertj.core.api.Assertions.*;
|
|
|
|
import org.junit.jupiter.api.BeforeEach;
|
|
import org.junit.jupiter.api.Test;
|
|
import org.junit.jupiter.params.ParameterizedTest;
|
|
import org.junit.jupiter.params.provider.Arguments;
|
|
import org.junit.jupiter.params.provider.MethodSource;
|
|
|
|
import java.io.ByteArrayInputStream;
|
|
import java.util.*;
|
|
import java.util.stream.Stream;
|
|
|
|
public class PlayerTest {
|
|
|
|
private Player p;
|
|
|
|
@BeforeEach
|
|
void setup() {
|
|
p = new Player("Rot",0, 40, 39);
|
|
}
|
|
|
|
@Test
|
|
void testDice() {
|
|
int calculatedResult = p.rollDice();
|
|
assertThat(calculatedResult).describedAs("Dice result").isBetween(1,6);
|
|
}
|
|
|
|
@Test
|
|
void checkStartPositionOfFigures() {
|
|
int expectedResult = -1;
|
|
Iterator<Figure> it = p.figures.iterator();
|
|
int calculatedResult = it.next().position;
|
|
while(it.hasNext()) {
|
|
calculatedResult = it.next().position;
|
|
if(expectedResult != calculatedResult) {
|
|
calculatedResult = 1;
|
|
break;
|
|
}
|
|
}
|
|
assertThat(calculatedResult).describedAs("Starting postion of Figures").isEqualTo(expectedResult);
|
|
}
|
|
|
|
@ParameterizedTest
|
|
@MethodSource("GameWinTestData")
|
|
void checkGameWin(String testname, ArrayList<Figure> figures, Collection<Integer> positions, boolean expectedResult) {
|
|
Iterator<Figure> it = figures.iterator();
|
|
Iterator<Integer> it2 = positions.iterator();
|
|
while(it.hasNext()) {
|
|
it.next().setPosition(it2.next());
|
|
}
|
|
boolean calculatedResult = p.checkGameWin(figures);
|
|
assertThat(calculatedResult).describedAs(testname).isEqualTo(expectedResult);
|
|
}
|
|
|
|
@ParameterizedTest
|
|
@MethodSource("BaseTestData")
|
|
void checkFigureInBase(String testname, ArrayList<Figure> figures, Collection<Integer> positions, int expectedResult) {
|
|
Iterator<Figure> it = figures.iterator();
|
|
Iterator<Integer> it2 = positions.iterator();
|
|
while(it.hasNext()) {
|
|
it.next().setPosition(it2.next());
|
|
}
|
|
int calculatedResult = p.checkFigureInBase(figures);
|
|
assertThat(calculatedResult).describedAs(testname).isEqualTo(expectedResult);
|
|
}
|
|
|
|
static Stream<Arguments> GameWinTestData() {
|
|
return Stream.of(
|
|
Arguments.of("No Figures in House",
|
|
new ArrayList<>(
|
|
Arrays.asList(
|
|
new Figure(),
|
|
new Figure(),
|
|
new Figure(),
|
|
new Figure())
|
|
), Arrays.asList(-1, -1, -1, -1),
|
|
false),
|
|
Arguments.of("One Figure in House",
|
|
new ArrayList<>(
|
|
Arrays.asList(
|
|
new Figure(),
|
|
new Figure(),
|
|
new Figure(),
|
|
new Figure())
|
|
), Arrays.asList(40, -1, -1, -1),
|
|
false),
|
|
Arguments.of("Two Figures in House",
|
|
new ArrayList<>(
|
|
Arrays.asList(
|
|
new Figure(),
|
|
new Figure(),
|
|
new Figure(),
|
|
new Figure())
|
|
), Arrays.asList(40, 41, -1, -1),
|
|
false),
|
|
Arguments.of("Three Figures in House",
|
|
new ArrayList<>(
|
|
Arrays.asList(
|
|
new Figure(),
|
|
new Figure(),
|
|
new Figure(),
|
|
new Figure())
|
|
), Arrays.asList(40, 41, 42, -1),
|
|
false),
|
|
Arguments.of("Four Figures in House",
|
|
new ArrayList<>(
|
|
Arrays.asList(
|
|
new Figure(),
|
|
new Figure(),
|
|
new Figure(),
|
|
new Figure())
|
|
), Arrays.asList(40, 41, 42, 43),
|
|
true)
|
|
);
|
|
}
|
|
|
|
static Stream<Arguments> BaseTestData() {
|
|
return Stream.of(
|
|
Arguments.of("Four Figures in Base",
|
|
new ArrayList<>(
|
|
Arrays.asList(
|
|
new Figure(),
|
|
new Figure(),
|
|
new Figure(),
|
|
new Figure())
|
|
), Arrays.asList(-1, -1, -1, -1),
|
|
4),
|
|
Arguments.of("Three Figures in Base",
|
|
new ArrayList<>(
|
|
Arrays.asList(
|
|
new Figure(),
|
|
new Figure(),
|
|
new Figure(),
|
|
new Figure())
|
|
), Arrays.asList(40, -1, -1, -1),
|
|
3),
|
|
Arguments.of("Two Figures in Base",
|
|
new ArrayList<>(
|
|
Arrays.asList(
|
|
new Figure(),
|
|
new Figure(),
|
|
new Figure(),
|
|
new Figure())
|
|
), Arrays.asList(40, 41, -1, -1),
|
|
2),
|
|
Arguments.of("One Figure in Base",
|
|
new ArrayList<>(
|
|
Arrays.asList(
|
|
new Figure(),
|
|
new Figure(),
|
|
new Figure(),
|
|
new Figure())
|
|
), Arrays.asList(40, 41, 42, -1),
|
|
1),
|
|
Arguments.of("No Figures in Base",
|
|
new ArrayList<>(
|
|
Arrays.asList(
|
|
new Figure(),
|
|
new Figure(),
|
|
new Figure(),
|
|
new Figure())
|
|
), Arrays.asList(40, 41, 42, 43),
|
|
0)
|
|
);
|
|
}
|
|
|
|
@ParameterizedTest
|
|
@MethodSource("checkChooseMethodData")
|
|
void checkChoose(String testName, String input,ArrayList<Integer> usableFiugres, int expectedResult) {
|
|
System.setIn(new ByteArrayInputStream(input.getBytes()));
|
|
int calculatedResult = p.choose(usableFiugres);
|
|
assertThat(calculatedResult).describedAs(testName).isEqualTo(expectedResult);
|
|
}
|
|
|
|
static Stream<Arguments> checkChooseMethodData() {
|
|
return Stream.of(
|
|
Arguments.of("Figure 1 choosen", "1\n", new ArrayList<>(Arrays.asList(0,1,2,3)), 0),
|
|
Arguments.of("Figure 2 choosen", "2\n", new ArrayList<>(Arrays.asList(0,1,2,3)), 1),
|
|
Arguments.of("Figure 3 choosen", "3\n", new ArrayList<>(Arrays.asList(0,1,2,3)),2),
|
|
Arguments.of("Figure 4 choosen", "4\n", new ArrayList<>(Arrays.asList(0,1,2,3)),3),
|
|
Arguments.of("Index out of bounds choosen", "16\n",new ArrayList<>(Arrays.asList(0,1,2,3)), -1),
|
|
Arguments.of("Index out of bounds choosen", "-2\n",new ArrayList<>(Arrays.asList(0,1,2,3)), -1),
|
|
Arguments.of("Input a letter or char", "g\n",new ArrayList<>(Arrays.asList(0,1,2,3)), -1),
|
|
Arguments.of("Input a empty string", "\n",new ArrayList<>(Arrays.asList(0,1,2,3)), -1),
|
|
Arguments.of("Input a special character", "&\n",new ArrayList<>(Arrays.asList(0,1,2,3)), -1),
|
|
Arguments.of("Only one Figure available", "1\n", new ArrayList<>(List.of(0)), 0),
|
|
Arguments.of("Figure not available", "4\n", new ArrayList<>(Arrays.asList(1,2)),-1)
|
|
);
|
|
}
|
|
}
|