def test_taking_king_not_allowed_knight(self):
        c5_knight = Knight(ChessCoord('C', '5'), black)
        b3_king = King(ChessCoord('B', '3'), white)
        pieces = [c5_knight , b3_king]
        move_inspect_result = c5_knight.inspect_move(pieces, ChessCoord('B', '3'))

        self.failUnless(move_inspect_result ==
                        MoveInspectResult(False, True,
                                          [], b3_king))
示例#2
0
class KnightTests(unittest.TestCase):
    def setUp(self):
        chess_coord_white = ChessCoord('C', '2')
        self.knight_white = Knight(chess_coord_white, white)
        chess_coord_black = ChessCoord('F', '5')
        self.knight_black = Knight(chess_coord_black, black)

    def test_constructor_white(self):
        self.failUnless(self.knight_white.letter == 'Kn')
        self.failUnless(self.knight_white.chess_coord == ChessCoord('C', '2'))
        self.failUnless(self.knight_white.grid_coord == GridCoord(2, 1))
        self.failUnless(self.knight_white.colour == white)
        self.failUnless(self.knight_white.symbol == '♘')
        self.failUnless(compare_lists(self.knight_white.move_directions,
                                           directions.move_directions_knight()))

    def test_constructor_black(self):
        self.failUnless(self.knight_black.letter == 'Kn')
        self.failUnless(self.knight_black.chess_coord == ChessCoord('F', '5'))
        self.failUnless(self.knight_black.grid_coord == GridCoord(5, 4))
        self.failUnless(self.knight_black.colour == black)
        self.failUnless(self.knight_black.symbol == '♞')
        self.failUnless(compare_lists(self.knight_black.move_directions,
                                           directions.move_directions_knight()))

    def test_white_knight_can_move_north2_east1(self):
        pieces = []
        self.failUnless(self.knight_white.inspect_move(pieces,
                                                       ChessCoord('D', '4')).is_valid_move)

    def test_white_knight_can_move_south1_east2(self):
        pieces = []
        self.failUnless(self.knight_white.inspect_move(pieces,
                                                       ChessCoord('A', '1')).is_valid_move)

    def test_white_knight_should_not_be_allowed_invalid_move(self):
        pieces = []
        self.failIf(self.knight_white.inspect_move(pieces,
                                                   ChessCoord('A', '2')).is_valid_move)

    def test_white_knight_should_not_change_coordinates_after_valid_move_check(self):
        pieces = []
        self.failUnless(self.knight_white.inspect_move(pieces,
                                                       ChessCoord('D', '4')).is_valid_move)

    def test_white_knight_should_move_when_coordinates_updated(self):
        self.knight_white.update_coord(ChessCoord('D', '6'))
        self.failUnless(self.knight_white.chess_coord == ChessCoord('D', '6'))

    def test_white_knight_should_not_be_allowed_invalid_move_after_update(self):
        pieces = []
        self.knight_white.update_coord(ChessCoord('D', '6'))
        self.failIf(self.knight_white.inspect_move(pieces,
                                                   ChessCoord('A', '2')).is_valid_move)
        self.failUnless(self.knight_white.chess_coord == ChessCoord('D', '6'))

    def test_white_knight_is_blocked_by_other_piece(self):
        pieces = [Pawn(ChessCoord('D', '4'), white, directions.go_north)]

        move_inspect_result = self.knight_white.inspect_move(pieces,
                                                             ChessCoord('D', '4'))
        self.failUnless(move_inspect_result ==
                        MoveInspectResult(False, True, [], pieces[0]))

    def test_white_knight_is_valid_to_take_enemy_piece(self):
        pieces = [Pawn(ChessCoord('F', '3'), black, directions.go_south)]

        self.knight_white.update_coord(ChessCoord('D', '4'))
        move_inspect_result = self.knight_white.inspect_move(pieces,
                                                             ChessCoord('F', '3'))
        self.failUnless(move_inspect_result ==
                        MoveInspectResult(True, False, [], pieces[0]))

    def test_black_knight_can_not_take_enemy_queen_from_start(self):
        all_pieces = copy.deepcopy(starting_pieces)
        select_piece(ChessCoord('A', '2'), all_pieces)\
            .update_coord(ChessCoord('A', '4'))

        g8_knight = select_piece(ChessCoord('G', '8'), all_pieces)

        inspect_move_result = g8_knight.inspect_move(all_pieces, ChessCoord('D', '1'))
        self.failIf(inspect_move_result.is_valid_move)