def test_makes_suggested_move(self, mocked): """Should make move suggested by api.""" g = GameState() g.board = { 'a': {'1': 'R', '2': 'P', '3': ' ', '4': ' ', '5': ' ', '6': ' ', '7': 'p', '8': 'r'}, # noqa 'b': {'1': 'N', '2': 'P', '3': ' ', '4': ' ', '5': ' ', '6': ' ', '7': 'p', '8': 'n'}, # noqa 'c': {'1': 'B', '2': 'P', '3': ' ', '4': ' ', '5': 'p', '6': ' ', '7': ' ', '8': 'b'}, # noqa 'd': {'1': 'Q', '2': 'P', '3': ' ', '4': ' ', '5': ' ', '6': ' ', '7': 'p', '8': 'q'}, # noqa 'e': {'1': 'K', '2': ' ', '3': ' ', '4': 'P', '5': ' ', '6': ' ', '7': 'p', '8': 'k'}, # noqa 'f': {'1': 'B', '2': 'P', '3': 'N', '4': ' ', '5': ' ', '6': ' ', '7': 'p', '8': 'b'}, # noqa 'g': {'1': ' ', '2': 'P', '3': ' ', '4': ' ', '5': ' ', '6': ' ', '7': 'p', '8': 'n'}, # noqa 'h': {'1': 'R', '2': 'P', '3': ' ', '4': ' ', '5': ' ', '6': ' ', '7': 'p', '8': 'r'}, # noqa } g.take_turn() expected = """ --------------------------------- 8 | r | n | b | q | k | b | n | r | |-------------------------------| 7 | p | p | | p | p | p | p | p | |-------------------------------| 6 | | | | | | | | | |-------------------------------| 5 | | | p | | | | | | |-------------------------------| 4 | P | | | | P | | | | |-------------------------------| 3 | | | | | | N | | | |-------------------------------| 2 | | P | P | P | | P | P | P | |-------------------------------| 1 | R | N | B | Q | K | B | | R | --------------------------------- a b c d e f g h """.strip('\n') # the outer newlines are only there to make this code readable self.assertEqual(g.board_text, expected)
def test_correctly_display(self): """ Should return a correct fen-formatted description of the current game state. """ g = GameState() g.board = { 'a': {'1': 'R', '2': 'P', '3': ' ', '4': ' ', '5': ' ', '6': ' ', '7': 'p', '8': 'r'}, # noqa 'b': {'1': 'N', '2': 'P', '3': ' ', '4': ' ', '5': ' ', '6': ' ', '7': 'p', '8': 'n'}, # noqa 'c': {'1': 'B', '2': 'P', '3': ' ', '4': ' ', '5': 'p', '6': ' ', '7': ' ', '8': 'b'}, # noqa 'd': {'1': 'Q', '2': 'P', '3': ' ', '4': ' ', '5': ' ', '6': ' ', '7': 'p', '8': 'q'}, # noqa 'e': {'1': 'K', '2': ' ', '3': ' ', '4': 'P', '5': ' ', '6': ' ', '7': 'p', '8': 'k'}, # noqa 'f': {'1': 'B', '2': 'P', '3': 'N', '4': ' ', '5': ' ', '6': ' ', '7': 'p', '8': 'b'}, # noqa 'g': {'1': ' ', '2': 'P', '3': ' ', '4': ' ', '5': ' ', '6': ' ', '7': 'p', '8': 'n'}, # noqa 'h': {'1': 'R', '2': 'P', '3': ' ', '4': ' ', '5': ' ', '6': ' ', '7': 'p', '8': 'r'}, # noqa } g.player = 'b' g.castle_white_king = True g.castle_white_queen = True g.castle_black_king = True g.castle_black_queen = True g.en_passant = None g.halfmove_clock = 1 g.fullmove_number = 2 exp = 'rnbqkbnr/pp1ppppp/8/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R b KQkq - 1 2' self.assertEqual(g.fen, exp)
def test_correctly_handles_capturing(self): """ When one piece lands on another, the other should be removed from the board, and moving piece should replace it. """ g = GameState() g.board = { 'a': {'1': 'R', '2': 'P', '3': ' ', '4': ' ', '5': ' ', '6': ' ', '7': 'p', '8': 'r'}, # noqa 'b': {'1': 'N', '2': 'P', '3': ' ', '4': ' ', '5': ' ', '6': ' ', '7': 'p', '8': 'n'}, # noqa 'c': {'1': 'B', '2': 'P', '3': ' ', '4': ' ', '5': 'p', '6': ' ', '7': ' ', '8': 'b'}, # noqa 'd': {'1': 'Q', '2': 'P', '3': ' ', '4': ' ', '5': 'p', '6': ' ', '7': ' ', '8': 'q'}, # noqa 'e': {'1': 'K', '2': ' ', '3': ' ', '4': 'P', '5': ' ', '6': ' ', '7': 'p', '8': 'k'}, # noqa 'f': {'1': 'B', '2': 'P', '3': 'N', '4': ' ', '5': ' ', '6': ' ', '7': 'p', '8': 'b'}, # noqa 'g': {'1': ' ', '2': 'P', '3': ' ', '4': ' ', '5': ' ', '6': ' ', '7': 'p', '8': 'n'}, # noqa 'h': {'1': 'R', '2': 'P', '3': ' ', '4': ' ', '5': ' ', '6': ' ', '7': 'p', '8': 'r'}, # noqa } g._make_move('e4d5') expected = """ --------------------------------- 8 | r | n | b | q | k | b | n | r | |-------------------------------| 7 | p | p | | | p | p | p | p | |-------------------------------| 6 | | | | | | | | | |-------------------------------| 5 | | | p | P | | | | | |-------------------------------| 4 | | | | | | | | | |-------------------------------| 3 | | | | | | N | | | |-------------------------------| 2 | P | P | P | P | | P | P | P | |-------------------------------| 1 | R | N | B | Q | K | B | | R | --------------------------------- a b c d e f g h """.strip('\n') # the outer newlines are only there to make this code readable self.assertEqual(g.board_text, expected)
def test_make_basic_move(self): """ Should be able to handle moving a piece from one square to another. """ g = GameState() g.board = { 'a': {'1': 'R', '2': 'P', '3': ' ', '4': ' ', '5': ' ', '6': ' ', '7': 'p', '8': 'r'}, # noqa 'b': {'1': 'N', '2': 'P', '3': ' ', '4': ' ', '5': ' ', '6': ' ', '7': 'p', '8': 'n'}, # noqa 'c': {'1': 'B', '2': 'P', '3': ' ', '4': ' ', '5': 'p', '6': ' ', '7': ' ', '8': 'b'}, # noqa 'd': {'1': 'Q', '2': 'P', '3': ' ', '4': ' ', '5': ' ', '6': ' ', '7': 'p', '8': 'q'}, # noqa 'e': {'1': 'K', '2': ' ', '3': ' ', '4': 'P', '5': ' ', '6': ' ', '7': 'p', '8': 'k'}, # noqa 'f': {'1': 'B', '2': 'P', '3': 'N', '4': ' ', '5': ' ', '6': ' ', '7': 'p', '8': 'b'}, # noqa 'g': {'1': ' ', '2': 'P', '3': ' ', '4': ' ', '5': ' ', '6': ' ', '7': 'p', '8': 'n'}, # noqa 'h': {'1': 'R', '2': 'P', '3': ' ', '4': ' ', '5': ' ', '6': ' ', '7': 'p', '8': 'r'}, # noqa } g._make_move('a2a4') expected = """ --------------------------------- 8 | r | n | b | q | k | b | n | r | |-------------------------------| 7 | p | p | | p | p | p | p | p | |-------------------------------| 6 | | | | | | | | | |-------------------------------| 5 | | | p | | | | | | |-------------------------------| 4 | P | | | | P | | | | |-------------------------------| 3 | | | | | | N | | | |-------------------------------| 2 | | P | P | P | | P | P | P | |-------------------------------| 1 | R | N | B | Q | K | B | | R | --------------------------------- a b c d e f g h """.strip('\n') # the outer newlines are only there to make this code readable self.assertEqual(g.board_text, expected)
def test_correctly_display(self): """ Should correctly display the board based on the state of the GameState object. """ g = GameState() g.board = { 'a': {'1': 'R', '2': 'P', '3': ' ', '4': ' ', '5': ' ', '6': ' ', '7': 'p', '8': 'r'}, # noqa 'b': {'1': 'N', '2': 'P', '3': ' ', '4': ' ', '5': ' ', '6': ' ', '7': 'p', '8': 'n'}, # noqa 'c': {'1': 'B', '2': 'P', '3': ' ', '4': ' ', '5': 'p', '6': ' ', '7': ' ', '8': 'b'}, # noqa 'd': {'1': 'Q', '2': 'P', '3': ' ', '4': ' ', '5': ' ', '6': ' ', '7': 'p', '8': 'q'}, # noqa 'e': {'1': 'K', '2': ' ', '3': ' ', '4': 'P', '5': ' ', '6': ' ', '7': 'p', '8': 'k'}, # noqa 'f': {'1': 'B', '2': 'P', '3': 'N', '4': ' ', '5': ' ', '6': ' ', '7': 'p', '8': 'b'}, # noqa 'g': {'1': ' ', '2': 'P', '3': ' ', '4': ' ', '5': ' ', '6': ' ', '7': 'p', '8': 'n'}, # noqa 'h': {'1': 'R', '2': 'P', '3': ' ', '4': ' ', '5': ' ', '6': ' ', '7': 'p', '8': 'r'}, # noqa } expected = """ --------------------------------- 8 | r | n | b | q | k | b | n | r | |-------------------------------| 7 | p | p | | p | p | p | p | p | |-------------------------------| 6 | | | | | | | | | |-------------------------------| 5 | | | p | | | | | | |-------------------------------| 4 | | | | | P | | | | |-------------------------------| 3 | | | | | | N | | | |-------------------------------| 2 | P | P | P | P | | P | P | P | |-------------------------------| 1 | R | N | B | Q | K | B | | R | --------------------------------- a b c d e f g h """.strip('\n') # the outer newlines are only there to make this code readable self.assertEqual(g.board_text, expected)