Ejemplo n.º 1
0
 def setUp(self):
     self.ui = TerminalUi()
     self.board = Board()
     self.board_helper = BoardHelper(self.board.all_ships)
     self.missed_marker = consts.MISS_MARKER
     self.hit_marker = consts.HIT_MARKER
     self.sunk_marker = consts.SUNK_MARKER
Ejemplo n.º 2
0
 def test_ship_messages_displays_miss_if_no_ship_was_hit(self):
     ui = TerminalUi()
     shot_result = consts.MISS
     current_ship = False
     message = ui.ship_messages(shot_result, current_ship)
     correct_message = 'Miss!'
     self.assertEqual(message, correct_message)
Ejemplo n.º 3
0
 def test_ship_messages_displays_the_ship_that_was_sunk(self):
     ui = TerminalUi()
     shot_result = consts.SUNK
     current_ship = {
         'name': 'Aircraft Carrier',
         'size': 5,
         'hit_locations': [[0, 0]]
     }
     message = ui.ship_messages(shot_result, current_ship)
     correct_message = 'You sunk the Aircraft Carrier!'
     self.assertEqual(message, correct_message)
Ejemplo n.º 4
0
 def setUp(self):
     self.board = Board()
     self.validate = Validate()
     self.board_helper = BoardHelper(self.board.all_ships)
     self.human_board = Board()
     self.ui = TerminalUi()
     self.ai = Ai(self.validate)
Ejemplo n.º 5
0
    def test_ui_is_initialized_with_instructions(self):
        ui = TerminalUi()
        INSTRUCTIONS = (
            '\n' + 'Your shots will appear on the bottem board.' + '\n' +
            'The computers shots will appear on the upper board.' + '\n' +
            '\n' +
            'Mark your board by selecting a column & row. (A1, B1, etc)' +
            '\n' +
            'The game ends when you OR your opponent sink all five ships')

        self.assertEqual(ui.INSTRUCTIONS, INSTRUCTIONS)
Ejemplo n.º 6
0
class TestFormat(TestCase):
    def setUp(self):
        self.ui = TerminalUi()
        self.board = Board()
        self.board_helper = BoardHelper(self.board.all_ships)
        self.missed_marker = consts.MISS_MARKER
        self.hit_marker = consts.HIT_MARKER
        self.sunk_marker = consts.SUNK_MARKER

    def test_less_then_board_len_add_row_numbers_returns_correctly_formatted_row(
            self):
        current_row = 0
        total_rows = 10
        row_number = ' 1 '

        formatted_row_number = self.ui._add_row_number(current_row, total_rows)
        self.assertEqual(formatted_row_number, row_number)

    def test_add_row_numbers_returns_correctly_formats_dbl_digit_rows(self):
        current_row = 9
        total_rows = 10
        row_number = '10 '

        formatted_row_number = self.ui._add_row_number(current_row, total_rows)
        self.assertEqual(formatted_row_number, row_number)

    def test_add_shot_marker_returns_M_when_a_ship_is_missed(self):
        missed_marker = self.missed_marker
        row = 1
        column = 0
        board_with_hit_and_miss = self.board_helper.generate_board_with_hit_and_miss(
        )
        board = MagicMock(state=board_with_hit_and_miss,
                          all_ships=self.board.all_ships)
        formated_marker = self.ui._add_shot_marker(board, row, column)

        self.assertEqual(formated_marker, missed_marker)

    def test_add_shot_marker_returns_H_when_a_ship_is_hit(self):
        hit_marker = self.hit_marker
        row = 0
        column = 0
        board_with_hit_and_miss = self.board_helper.generate_board_with_hit_and_miss(
        )
        board = MagicMock(state=board_with_hit_and_miss,
                          all_ships=self.board.all_ships)
        formated_marker = self.ui._add_shot_marker(board, row, column)

        self.assertEqual(formated_marker, hit_marker)

    def test_add_shot_marker_returns_brakets_when_a_spot_is_empty(self):
        sunk_marker = self.sunk_marker
        row = 0
        column = 0
        board_with_a_sunken_ship = self.board_helper.generate_board_with_a_sunken_ship(
        )
        board = MagicMock(state=board_with_a_sunken_ship,
                          all_ships=self.board.all_ships)
        formated_marker = self.ui._add_shot_marker(board, row, column)

        self.assertEqual(formated_marker, sunk_marker)

    def test_board_is_formatted_correctly_with_ships_before_moves(self):
        board_with_hidden_ships = """
    A  B  C  D  E  F  G  H  I  J
 1 [ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
 2 [ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
 3 [ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
 4 [ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
 5 [ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
 6 [ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
 7 [ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
 8 [ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
 9 [ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
10 [ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
"""
        board_with_ships = self.board_helper.generate_board_with_ships()
        board = MagicMock(state=board_with_ships,
                          all_ships=self.board.all_ships)
        formatted_board = self.ui.game_board(board)
        self.assertEqual(formatted_board, board_with_hidden_ships)

    def test_board_is_formatted_correctly_with_a_sunken_ship(self):
        S = self.sunk_marker
        occupied_board = """
    A  B  C  D  E  F  G  H  I  J
 1 %s%s%s%s%s[ ][ ][ ][ ][ ]
 2 [ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
 3 [ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
 4 [ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
 5 [ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
 6 [ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
 7 [ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
 8 [ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
 9 [ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
10 [ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
""" % (S, S, S, S, S)
        board_with_sunken_ship = self.board_helper.generate_board_with_a_sunken_ship(
        )
        board = MagicMock(state=board_with_sunken_ship,
                          all_ships=self.board.all_ships)
        formatted_board = self.ui.game_board(board)

        self.assertEqual(formatted_board, occupied_board)

    def test_board_is_formatted_correctly_with_an_shots_taken(self):
        M = self.missed_marker
        H = self.hit_marker
        occupied_board = """
    A  B  C  D  E  F  G  H  I  J
 1 %s[ ][ ][ ][ ][ ][ ][ ][ ][ ]
 2 %s[ ][ ][ ][ ][ ][ ][ ][ ][ ]
 3 [ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
 4 [ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
 5 [ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
 6 [ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
 7 [ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
 8 [ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
 9 [ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
10 [ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
""" % (H, M)
        board_with_hit_and_miss = self.board_helper.generate_board_with_hit_and_miss(
        )
        board = MagicMock(state=board_with_hit_and_miss,
                          all_ships=self.board.all_ships)
        formatted_board = self.ui.game_board(board)

        self.assertEqual(formatted_board, occupied_board)
Ejemplo n.º 7
0
    def test_ui_is_initialized_with_a_winning_msg_for_humans(self):
        ui = TerminalUi()
        HUMAN_WIN_MSG = 'Congratulations, you\'ve has sunk all the computers ships! Game Over!'

        self.assertEqual(ui.HUMAN_WIN_MSG, HUMAN_WIN_MSG)
Ejemplo n.º 8
0
    def test_ui_is_initialized_with_a_winning_msg_for_the_computer(self):
        ui = TerminalUi()
        COMP_WIN_MSG = 'The Computer has sunk all the ships! Game Over!'

        self.assertEqual(ui.COMP_WIN_MSG, COMP_WIN_MSG)
Ejemplo n.º 9
0
 def correct_response(self):
     ui = TerminalUi()
     answer = ui.get_input("Enter hello: ")
     if answer == 'hello':
         return 'it works'
Ejemplo n.º 10
0
 def test_terminal_displays_string_passed_to_it(self):
     ui = TerminalUi()
     with mock.patch('sys.stdout', new=StringIO()) as fake_stdout:
         ui.display('Welcome to Battleship')
     self.assertEqual(fake_stdout.getvalue(), 'Welcome to Battleship\n')