def test_taking_king_not_allowed_pawn(self): a4_pawn = Pawn(ChessCoord('C', '4'), black, directions.go_south) b3_king = King(ChessCoord('B', '3'), white) pieces = [a4_pawn, b3_king] move_inspect_result = a4_pawn.inspect_move(pieces, ChessCoord('B', '3')) self.failUnless(move_inspect_result == MoveInspectResult(False, True, [], b3_king))
class PawnTests(unittest.TestCase): def setUp(self): black_chess_coord = ChessCoord('B', '7') white_chess_coord = ChessCoord('A', '2') black_colour = black white_colour = white north_direction = go_north south_direction = go_south self.black_pawn = Pawn(black_chess_coord, black_colour, south_direction) self.white_pawn = Pawn(white_chess_coord, white_colour, north_direction) def test_constructor_black(self): self.failUnless(self.black_pawn.letter is 'P') self.failUnless(self.black_pawn.colour is black) self.failUnless(self.black_pawn.move_directions == [go_south]) self.failUnless(self.black_pawn.chess_coord == ChessCoord('B', '7')) self.failUnless(self.black_pawn.grid_coord == GridCoord(1, 6)) def test_constructor_white(self): self.failUnless(self.white_pawn.letter is 'P') self.failUnless(self.white_pawn.colour is white) self.failUnless(self.white_pawn.move_directions == [go_north]) self.failUnless(self.white_pawn.chess_coord == ChessCoord('A', '2')) self.failUnless(self.white_pawn.grid_coord == GridCoord(0, 1)) def test_is_invalid_move_two_step_from_not_start(self): pieces = [] self.white_pawn.update_coord(ChessCoord('D', '3')) self.failIf(self.white_pawn.inspect_move(pieces, ChessCoord('D', '5')). is_valid_move) def test_is_invalid_move_two_step_from_start_wrong_direction(self): pieces = [] self.white_pawn.update_coord(ChessCoord('A', '7')) self.failIf(self.white_pawn.inspect_move(pieces, ChessCoord('A', '5')). is_valid_move) def test_update_coors_white(self): self.white_pawn.update_coord(ChessCoord('A', '3')) self.failUnless(self.white_pawn.grid_coord == GridCoord(0, 2)) def test_update_coors_black(self): self.black_pawn.update_coord(ChessCoord('C', '6')) self.failUnless(self.black_pawn.grid_coord == GridCoord(2, 5)) def test_is_valid_move_one_step_black(self): pieces = [] self.failUnless(self.black_pawn.inspect_move(pieces, ChessCoord('B', '6')). is_valid_move) def test_is_valid_move_one_step_white(self): pieces = [] self.failUnless(self.white_pawn.inspect_move(pieces, ChessCoord('A', '3')). is_valid_move) def test_is_invalid_move_backwards(self): pieces = [] self.black_pawn.update_coord(ChessCoord('B', '5')) self.failIf(self.white_pawn.inspect_move(pieces, ChessCoord('B', '4')). is_valid_move) def test_is_valid_move_two_step_from_start_white(self): pieces = [] self.black_pawn.update_coord(ChessCoord('A', '2')) self.failUnless(self.white_pawn.inspect_move(pieces, ChessCoord('A', '4')). is_valid_move) def test_is_valid_move_two_step_from_start_black(self): pieces = [] self.black_pawn.update_coord(ChessCoord('C', '7')) self.failUnless(self.black_pawn.inspect_move(pieces, ChessCoord('C', '5')). is_valid_move) def test_inspect_move_taking_enemy(self): pieces = [self.white_pawn, self.black_pawn] self.white_pawn.update_coord(ChessCoord('B', '6')) self.black_pawn.update_coord(ChessCoord('C', '7')) move_inspect_result = self.black_pawn.inspect_move(pieces, ChessCoord('B', '6')) self.failUnless(move_inspect_result == MoveInspectResult(True, False, [GridCoord(1, 5)], self.white_pawn)) def test_inspect_move_blocked_by_friendly_taking(self): pieces = [Pawn(ChessCoord('C', '6'), white, go_north), self.white_pawn] self.white_pawn.update_coord(ChessCoord('B', '5')) move_inspect_result = self.white_pawn.inspect_move(pieces, ChessCoord('C', '6')) self.failUnless(move_inspect_result == MoveInspectResult(False, True, [], pieces[0])) def test_inspect_move_blocked_by_enemy(self): pieces = [self.white_pawn, self.black_pawn] self.white_pawn.update_coord(ChessCoord('B', '2')) self.black_pawn.update_coord(ChessCoord('B', '3')) move_inspect_result = self.white_pawn.inspect_move(pieces, ChessCoord('B', '3')) self.failUnless(move_inspect_result == MoveInspectResult(False, True, [GridCoord(1, 2)], self.black_pawn)) def test_inspect_move_blocked_by_friendly(self): pieces = [Pawn(ChessCoord('D', '4'), black, go_south), self.black_pawn] self.black_pawn.update_coord(ChessCoord('D', '5')) move_inspect_result = self.black_pawn.inspect_move(pieces, ChessCoord('D', '4')) self.failUnless(move_inspect_result == MoveInspectResult(False, True, [GridCoord(3, 3)], pieces[0])) def test_inspect_move_two_steps_blocked_by_friendly(self): pieces = [Pawn(ChessCoord('C', '6'), black, go_south), self.black_pawn] self.black_pawn.update_coord(ChessCoord('C', '7')) move_inspect_result = self.black_pawn.inspect_move(pieces, ChessCoord('C', '5')) self.failUnless(move_inspect_result == MoveInspectResult(False, True, [], pieces[0])) def test_inspect_move_two_steps_blocked_by_enemy(self): pieces = [Pawn(ChessCoord('C', '6'), white, go_south), self.black_pawn] self.black_pawn.update_coord(ChessCoord('C', '7')) move_inspect_result = self.black_pawn.inspect_move(pieces, ChessCoord('C', '5')) self.failUnless(move_inspect_result == MoveInspectResult(False, True, [], pieces[0])) def test_en_passant_square_set(self): self.black_pawn.update_coord(ChessCoord('C', '7')) self.failIf(self.black_pawn.en_passant_square) self.black_pawn.update_coord(ChessCoord('C', '5')) self.failUnless(self.black_pawn.en_passant_square == GridCoord(2, 5)) def test_en_passant_can_be_taken(self): self.black_pawn.update_coord(ChessCoord('E', '7')) self.black_pawn.update_coord(ChessCoord('E', '5')) self.failUnless(self.black_pawn.en_passant_square == GridCoord(4, 5)) pieces = [self.black_pawn, self.white_pawn, Rook(ChessCoord('A', '1'), black)] self.white_pawn.update_coord(ChessCoord('F', '5')) move_inspect_result = self.white_pawn.inspect_move(pieces, ChessCoord('E', '6')) self.failUnless(move_inspect_result == MoveInspectResult(True, False, [GridCoord(4, 5)], self.black_pawn)) def test_en_passant_is_removed_when_pawn_is_moved_again(self): self.white_pawn.update_coord(ChessCoord('A', '2')) self.failIf(self.white_pawn.en_passant_square) self.white_pawn.update_coord(ChessCoord('A', '4')) self.failUnless(self.white_pawn.en_passant_square == GridCoord(0, 2)) self.white_pawn.update_coord(ChessCoord('A', '5')) self.failIf(self.white_pawn.en_passant_square) def test_black_pawn_not_allowed_to_take_pawn_across_board(self): all_pieces = copy.deepcopy(starting_pieces) g7_pawn = select_piece(ChessCoord('G', '7'), all_pieces) inspect_move_result = g7_pawn.inspect_move(all_pieces, ChessCoord('H', '2')) self.failIf(inspect_move_result.is_valid_move)