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

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. import static org.assertj.core.api.Assertions.*;
  2. import org.junit.jupiter.api.BeforeEach;
  3. import org.junit.jupiter.api.Test;
  4. import org.junit.jupiter.params.ParameterizedTest;
  5. import org.junit.jupiter.params.provider.Arguments;
  6. import org.junit.jupiter.params.provider.MethodSource;
  7. import java.io.ByteArrayInputStream;
  8. import java.util.*;
  9. import java.util.stream.Stream;
  10. public class PlayerTest {
  11. private Player p;
  12. @BeforeEach
  13. void setup() {
  14. p = new Player("Rot",0, 40, 39);
  15. }
  16. @Test
  17. void testDice() {
  18. int calculatedResult = p.rollDice();
  19. assertThat(calculatedResult).describedAs("Dice result").isBetween(1,6);
  20. }
  21. @Test
  22. void checkStartPositionOfFigures() {
  23. int expectedResult = -1;
  24. Iterator<Figure> it = p.figures.iterator();
  25. int calculatedResult = it.next().position;
  26. while(it.hasNext()) {
  27. calculatedResult = it.next().position;
  28. if(expectedResult != calculatedResult) {
  29. calculatedResult = 1;
  30. break;
  31. }
  32. }
  33. assertThat(calculatedResult).describedAs("Starting postion of Figures").isEqualTo(expectedResult);
  34. }
  35. @ParameterizedTest
  36. @MethodSource("GameWinTestData")
  37. void checkGameWin(String testname, ArrayList<Figure> figures, Collection<Integer> positions, boolean expectedResult) {
  38. Iterator<Figure> it = figures.iterator();
  39. Iterator<Integer> it2 = positions.iterator();
  40. while(it.hasNext()) {
  41. it.next().setPosition(it2.next());
  42. }
  43. boolean calculatedResult = p.checkGameWin(figures);
  44. assertThat(calculatedResult).describedAs(testname).isEqualTo(expectedResult);
  45. }
  46. @ParameterizedTest
  47. @MethodSource("BaseTestData")
  48. void checkFigureInBase(String testname, ArrayList<Figure> figures, Collection<Integer> positions, int expectedResult) {
  49. Iterator<Figure> it = figures.iterator();
  50. Iterator<Integer> it2 = positions.iterator();
  51. while(it.hasNext()) {
  52. it.next().setPosition(it2.next());
  53. }
  54. int calculatedResult = p.checkFigureInBase(figures);
  55. assertThat(calculatedResult).describedAs(testname).isEqualTo(expectedResult);
  56. }
  57. static Stream<Arguments> GameWinTestData() {
  58. return Stream.of(
  59. Arguments.of("No Figures in House",
  60. new ArrayList<>(
  61. Arrays.asList(
  62. new Figure(),
  63. new Figure(),
  64. new Figure(),
  65. new Figure())
  66. ), Arrays.asList(-1, -1, -1, -1),
  67. false),
  68. Arguments.of("One Figure in House",
  69. new ArrayList<>(
  70. Arrays.asList(
  71. new Figure(),
  72. new Figure(),
  73. new Figure(),
  74. new Figure())
  75. ), Arrays.asList(40, -1, -1, -1),
  76. false),
  77. Arguments.of("Two Figures in House",
  78. new ArrayList<>(
  79. Arrays.asList(
  80. new Figure(),
  81. new Figure(),
  82. new Figure(),
  83. new Figure())
  84. ), Arrays.asList(40, 41, -1, -1),
  85. false),
  86. Arguments.of("Three Figures in House",
  87. new ArrayList<>(
  88. Arrays.asList(
  89. new Figure(),
  90. new Figure(),
  91. new Figure(),
  92. new Figure())
  93. ), Arrays.asList(40, 41, 42, -1),
  94. false),
  95. Arguments.of("Four Figures in House",
  96. new ArrayList<>(
  97. Arrays.asList(
  98. new Figure(),
  99. new Figure(),
  100. new Figure(),
  101. new Figure())
  102. ), Arrays.asList(40, 41, 42, 43),
  103. true)
  104. );
  105. }
  106. static Stream<Arguments> BaseTestData() {
  107. return Stream.of(
  108. Arguments.of("Four Figures in Base",
  109. new ArrayList<>(
  110. Arrays.asList(
  111. new Figure(),
  112. new Figure(),
  113. new Figure(),
  114. new Figure())
  115. ), Arrays.asList(-1, -1, -1, -1),
  116. 4),
  117. Arguments.of("Three Figures in Base",
  118. new ArrayList<>(
  119. Arrays.asList(
  120. new Figure(),
  121. new Figure(),
  122. new Figure(),
  123. new Figure())
  124. ), Arrays.asList(40, -1, -1, -1),
  125. 3),
  126. Arguments.of("Two Figures in Base",
  127. new ArrayList<>(
  128. Arrays.asList(
  129. new Figure(),
  130. new Figure(),
  131. new Figure(),
  132. new Figure())
  133. ), Arrays.asList(40, 41, -1, -1),
  134. 2),
  135. Arguments.of("One Figure in Base",
  136. new ArrayList<>(
  137. Arrays.asList(
  138. new Figure(),
  139. new Figure(),
  140. new Figure(),
  141. new Figure())
  142. ), Arrays.asList(40, 41, 42, -1),
  143. 1),
  144. Arguments.of("No Figures in Base",
  145. new ArrayList<>(
  146. Arrays.asList(
  147. new Figure(),
  148. new Figure(),
  149. new Figure(),
  150. new Figure())
  151. ), Arrays.asList(40, 41, 42, 43),
  152. 0)
  153. );
  154. }
  155. @ParameterizedTest
  156. @MethodSource("checkChooseMethodData")
  157. void checkChoose(String testName, String input,ArrayList<Integer> usableFiugres, int expectedResult) {
  158. System.setIn(new ByteArrayInputStream(input.getBytes()));
  159. int calculatedResult = p.choose(usableFiugres);
  160. assertThat(calculatedResult).describedAs(testName).isEqualTo(expectedResult);
  161. }
  162. static Stream<Arguments> checkChooseMethodData() {
  163. return Stream.of(
  164. Arguments.of("Figure 1 choosen", "1\n", new ArrayList<>(Arrays.asList(0,1,2,3)), 0),
  165. Arguments.of("Figure 2 choosen", "2\n", new ArrayList<>(Arrays.asList(0,1,2,3)), 1),
  166. Arguments.of("Figure 3 choosen", "3\n", new ArrayList<>(Arrays.asList(0,1,2,3)),2),
  167. Arguments.of("Figure 4 choosen", "4\n", new ArrayList<>(Arrays.asList(0,1,2,3)),3),
  168. Arguments.of("Index out of bounds choosen", "16\n",new ArrayList<>(Arrays.asList(0,1,2,3)), -1),
  169. Arguments.of("Index out of bounds choosen", "-2\n",new ArrayList<>(Arrays.asList(0,1,2,3)), -1),
  170. Arguments.of("Input a letter or char", "g\n",new ArrayList<>(Arrays.asList(0,1,2,3)), -1),
  171. Arguments.of("Input a empty string", "\n",new ArrayList<>(Arrays.asList(0,1,2,3)), -1),
  172. Arguments.of("Input a special character", "&\n",new ArrayList<>(Arrays.asList(0,1,2,3)), -1),
  173. Arguments.of("Only one Figure available", "1\n", new ArrayList<>(List.of(0)), 0),
  174. Arguments.of("Figure not available", "4\n", new ArrayList<>(Arrays.asList(1,2)),-1)
  175. );
  176. }
  177. }