示例#1
0
  @Test
  public void should_remove_once_a_ball() {
    whiteHasSquare();

    pylos.apply(new Remove("a4"));

    assertThat(pylos.getBallPosition("a4")).hasValueSatisfying(BallPosition::isEmpty);
  }
示例#2
0
  @Test
  public void should_not_put_a_ball_on_an_occupied_place() {
    pylos.apply(new Put("a1"));

    Throwable throwable = catchThrowable(() -> pylos.apply(new Put("a1")));

    assertThat(throwable)
        .isInstanceOf(IllegalArgumentException.class)
        .hasMessageStartingWith("put a1 is not applicable");
  }
示例#3
0
  @Test
  public void should_not_move_ball_to_same_level() {
    pylos.apply(new Put("a4"));
    pylos.apply(new Put("c2"));

    Throwable throwable = catchThrowable(() -> pylos.apply(new Move("a4", "d1")));

    assertThat(throwable)
        .isInstanceOf(IllegalArgumentException.class)
        .hasMessageStartingWith("move a4 -> d1 is not applicable");
  }
示例#4
0
  @Test
  public void should_put_a_ball_on_the_second_level() {
    pylos.apply(new Put("a1"));
    pylos.apply(new Put("a2"));
    pylos.apply(new Put("b1"));
    pylos.apply(new Put("b2"));

    pylos.apply(new Put("e1"));

    assertThat(pylos.getBallPosition("e1")).hasValueSatisfying(BallPosition::isNotEmpty);
  }
示例#5
0
  @Test
  public void should_not_put_ball_after_square_and_remove() {
    whiteHasSquare();
    pylos.apply(new Remove("a4"));

    Throwable throwable = catchThrowable(() -> pylos.apply(new Put("a4")));

    assertThat(throwable)
        .isInstanceOf(IllegalArgumentException.class)
        .hasMessageStartingWith("put a4 is not applicable");
  }
示例#6
0
  @Test
  public void should_not_move_a_ball_if_it_doesn_t_belongs_to_current_color() {
    pylos.apply(new Put("d4"));
    pylos.apply(new Put("a1"));
    pylos.apply(new Put("a2"));
    pylos.apply(new Put("b1"));
    pylos.apply(new Put("b2"));

    Throwable throwable = catchThrowable(() -> pylos.apply(new Move("d4", "e1")));

    assertThat(throwable)
        .isInstanceOf(IllegalArgumentException.class)
        .hasMessageStartingWith("move d4 -> e1 is not applicable");
  }
示例#7
0
  @Test
  public void should_not_pass_if_there_is_no_square_nor_line() {
    Throwable throwable = catchThrowable(() -> pylos.apply(Command.pass));

    assertThat(throwable)
        .isInstanceOf(IllegalArgumentException.class)
        .hasMessageStartingWith("pass is not applicable");
  }
示例#8
0
  @Test
  public void should_pass() {
    whiteHasSquare();

    pylos.apply(Command.pass);

    assertThat(currentColor()).hasValue(BLACK);
  }
示例#9
0
  @Test
  public void should_not_put_a_ball_on_an_invalid_level() {
    Throwable throwable = catchThrowable(() -> pylos.apply(new Put("e0")));

    assertThat(throwable)
        .isInstanceOf(IllegalArgumentException.class)
        .hasMessageStartingWith("put e0 is not applicable");
  }
示例#10
0
  @Test
  public void should_not_put_a_ball_with_invalid_coordinates() {
    Throwable throwable = catchThrowable(() -> pylos.apply(new Put("a6")));

    assertThat(throwable)
        .isInstanceOf(IllegalArgumentException.class)
        .hasMessageStartingWith("put a6 is not applicable");
  }
示例#11
0
  @Test
  public void should_not_remove_ball_if_there_is_no_square_nor_line() {
    Throwable throwable = catchThrowable(() -> pylos.apply(new Remove("a4")));

    assertThat(throwable)
        .isInstanceOf(IllegalArgumentException.class)
        .hasMessageStartingWith("remove a4 is not applicable");
  }
示例#12
0
  @Test
  public void should_not_put_ball_if_user_makes_a_square() {
    whiteHasSquare();

    Throwable throwable = catchThrowable(() -> pylos.apply(new Put("c1")));

    assertThat(throwable)
        .isInstanceOf(IllegalArgumentException.class)
        .hasMessageStartingWith("put c1 is not applicable");
  }
示例#13
0
  @Test
  public void should_not_remove_ball_that_is_not_belongs_to_himself() {
    whiteHasSquare();

    Throwable throwable = catchThrowable(() -> pylos.apply(new Remove("d2")));

    assertThat(throwable)
        .isInstanceOf(IllegalArgumentException.class)
        .hasMessageStartingWith("remove d2 is not applicable");
  }
示例#14
0
 private void whiteHasSquare() {
   // WHITE
   pylos.apply(new Put("a4"));
   // BLACK
   pylos.apply(new Put("c2"));
   // WHITE
   pylos.apply(new Put("b4"));
   // BLACK
   pylos.apply(new Put("d1"));
   // WHITE
   pylos.apply(new Put("b3"));
   // BLACK
   pylos.apply(new Put("d2"));
   // WHITE
   pylos.apply(new Put("a3"));
 }
示例#15
0
  @Test
  public void should_put_a_ball_on_the_third_level() {
    whiteHasSquare();
    pylos.apply(Command.pass);
    pylos.apply(new Put("e3"));
    pylos.apply(new Put("c4"));
    pylos.apply(new Put("c3"));
    pylos.apply(new Put("b2"));
    pylos.apply(new Put("a2"));
    pylos.apply(new Put("f3"));
    pylos.apply(new Put("f2"));
    pylos.apply(new Put("e2"));

    pylos.apply(new Put("h2"));

    assertThat(pylos.getBallPosition("h2")).hasValueSatisfying(BallPosition::isNotEmpty);
  }
示例#16
0
  @Test
  public void should_not_move_ball_that_doesn_t_exists() {
    Throwable throwable = catchThrowable(() -> pylos.apply(new Move("a1", "e1")));

    assertThat(throwable).isNotNull();
  }
示例#17
0
  @Test
  public void should_put_a_ball_with_valid_coordinates() {
    pylos.apply(new Put("a1"));

    assertThat(pylos.getBallPosition("a1")).hasValueSatisfying(BallPosition::isNotEmpty);
  }
示例#18
0
 private Optional<Color> currentColor() {
   pylos.apply(new Put("c1"));
   return pylos.getBallPosition("c1").flatMap(BallPosition::getColor);
 }