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)
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))])
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))
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)
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
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
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