Пример #1
0
def test_shouldnt_bomb_an_already_bombed_position():
    board, position = Board2D(4, 4), Position(0, 0)

    board.chart[position.x][position.y] = BoardPosition(PositionStatus.BOMBED)

    with pytest.raises(CannotBombPosition):
        bomb_position(board, position)
Пример #2
0
def test_should_return_true_when_position_is_bombed_on_board():
    board = Board2D(4, 4)

    board.chart[0][0] = BoardPosition(PositionStatus.BOMBED)

    assert cannot_occupy_board_in_the_positions(
        board,
        [Position(i, j) for i, j in itertools.product(range(4), range(4))])
Пример #3
0
def test_should_raise_exception_that_cannot_occupy_board_position():
    board = Board2D(4, 4)  # A new board completely free

    board.chart[1][1] = BoardPosition(
        PositionStatus.BOMBED)  # Occupy position (1,1)

    with pytest.raises(CannotOccupyPositions):
        occupy_board_positions_with_ship(board, [Position(1, 1)],
                                         Ship("destroyer", 3))
Пример #4
0
def test_should_raise_exception_when_cannot_occupy_all_positions_from_board():
    game_option: GameOption = {
        "ABC": AvailableShip(kind="abc", length=3, quantity=0),
        "DEF": AvailableShip(kind="def", length=4, quantity=99),
        "GHI": AvailableShip(kind="ghi", length=10, quantity=1),
    }
    player = Player("player_1", game_option=game_option)
    player.board.chart[0][1] = BoardPosition(PositionStatus.BOMBED)

    with pytest.raises(CannotOccupyPositions):
        place_ship(player, game_option["DEF"], Position(0, 0), ShipDirection.H)
Пример #5
0
def test_should_place_ship_vertically():
    board, ship, front_position = Board2D(4, 4), Ship("destroyer",
                                                      3), Position(0, 0)

    place_ship_on_board(ship, board, front_position, ShipDirection.V)

    expected_board_position = BoardPosition(PositionStatus.OCCUPIED, ship)

    assert board.chart[0][0] == expected_board_position
    assert board.chart[1][0] == expected_board_position
    assert board.chart[2][0] == expected_board_position
Пример #6
0
def test_should_create_a_2d_board_with_the_given_length_and_width(
        length: int, width: int):
    board = Board2D(length, width)

    assert board.length == length
    assert board.width == width

    expected_chart = [[BoardPosition() for _ in range(width)]
                      for _ in range(length)]

    assert board.chart == expected_chart
Пример #7
0
def test_should_bomb_and_destroy_an_occupied_position():
    board, position, ship = Board2D(4, 4), Position(0, 0), Ship("destroyer", 1)

    board.chart[position.x][position.y] = BoardPosition(
        PositionStatus.OCCUPIED, ship)

    outcome = bomb_position(board, position)

    assert ship.hits_taken == 1
    assert board.chart[0][0].status == PositionStatus.BOMBED
    assert outcome.has_hit_something
    assert outcome.has_destroyed_a_ship