def inspect_move(self, pieces, move): grid_move = bps.chess_coord_to_grid_coord(move) move_direction = get_direction(self.grid_coord, grid_move) if is_diagonal_move(move_direction): return self.inspect_taking_move(pieces, grid_move, move_direction) move_inspect_result = Piece.inspect_move(self, pieces, move) ok_num_of_steps = self.ok_number_steps(move_inspect_result.squares) move_inspect_result.is_valid_move = ok_num_of_steps and move_inspect_result.is_valid_move if move_inspect_result.possible_piece: move_inspect_result.is_valid_move = False move_inspect_result.was_blocked = True move_inspect_result.will_put_self_in_check = \ self.check_for_putting_self_in_check(pieces, move, move_inspect_result) move_inspect_result.is_valid_move = move_inspect_result.is_valid_move and \ not move_inspect_result.will_put_self_in_check return move_inspect_result
class PieceTests(unittest.TestCase): def setUp(self): self.directions = [go_west, go_east, go_north, go_north_east] self.black_piece = Piece(ChessCoord('H', '6'), black, 'P', 'P', self.directions) self.other_piece_B4 = Piece(ChessCoord('B', '4'), white, 'P', 'P', self.directions) self.other_piece_C6 = Piece(ChessCoord('C', '6'), black, 'P', 'P', self.directions) self.other_piece_G3 = Piece(ChessCoord('G', '3'), white, 'P', 'P', self.directions) self.other_piece_D7 = Piece(ChessCoord('D', '7'), white, 'P', 'P', self.directions) self.some_pieces = [ Piece(ChessCoord('A', '1'), black, 'P', 'P', self.directions), self.other_piece_B4, self.other_piece_C6, self.other_piece_G3, self.other_piece_D7 ] def test_constructor(self): self.failUnless(self.black_piece.letter is 'P') self.failUnless(self.black_piece.colour is black) self.failUnless(self.black_piece.move_directions == self.directions) self.failUnless(self.black_piece.chess_coord == ChessCoord('H', '6')) self.failUnless(self.black_piece.grid_coord == GridCoord(7, 5)) def test_is_valid_move_returns_move_result_no_pieces(self): move_inspect_result = self.black_piece.inspect_move([], ChessCoord('F', '6')) self.failUnless(move_inspect_result == MoveInspectResult(True, False, [ GridCoord(6, 5), GridCoord(5, 5)], None)) def test_is_valid_move_returns_move_result_with_pieces(self): move_inspect_result = self.black_piece.inspect_move(self.some_pieces, ChessCoord('F', '6')) self.failUnless(move_inspect_result == MoveInspectResult(True, False, [ GridCoord(6, 5), GridCoord(5, 5)], None)) def test_is_invalid_move_returns_move_result_with_own_blocking_piece_end_square(self): self.black_piece.update_coord(ChessCoord('A', '4')) move_inspect_result = self.black_piece.inspect_move(self.some_pieces, ChessCoord('C', '6')) self.failUnless(move_inspect_result == MoveInspectResult(False, True, [], self.other_piece_B4)) def test_is_valid_move_returns_move_result_with_enemy_piece_end_square(self): self.black_piece.update_coord(ChessCoord('G', '1')) move_inspect_result = self.black_piece.inspect_move(self.some_pieces, ChessCoord('G', '3')) self.failUnless(move_inspect_result == MoveInspectResult(True, False, [GridCoord(6, 1), GridCoord(6, 2)], self.other_piece_G3) ) def test_is_invalid_move_result_with_enemy_piece_blocking(self): self.black_piece.update_coord(ChessCoord('B', '5')) move_inspect_result = self.black_piece.inspect_move(self.some_pieces, ChessCoord('E', '8')) self.failUnless(move_inspect_result == MoveInspectResult(False, True, [], self.other_piece_C6) ) def test_is_invalid_move_result_with_friendly_piece_blocking(self): self.black_piece.update_coord(ChessCoord('D', '4')) move_inspect_result = self.black_piece.inspect_move(self.some_pieces, ChessCoord('A', '4')) self.failUnless(move_inspect_result == MoveInspectResult(False, True, [GridCoord(2, 3)], self.other_piece_B4) )
def inspect_move(self, pieces, move): castling_move_result = self.get_castling_move_result(pieces, move) if castling_move_result.was_castling_attempt: return castling_move_result else: return Piece.inspect_move(self, pieces, move)