Esempio n. 1
0
    def test_black_knight_cannot_move_if_space_blocked_by_friendly_piece():
        # Arrange
        board = Board.empty()
        knight = Knight(Player.BLACK)
        square = Square.at(3, 3)
        board.set_piece(square, knight)

        obstructing_square1 = Square.at(4, 5)
        obstructing_square2 = Square.at(4, 1)
        obstructing_square3 = Square.at(5, 4)
        obstructing_square4 = Square.at(5, 2)
        obstructing_square5 = Square.at(2, 5)
        obstructing_square6 = Square.at(2, 1)
        obstructing_square7 = Square.at(1, 4)
        obstructing_square8 = Square.at(1, 2)
        obstruction = Knight(Player.BLACK)
        board.set_piece(obstructing_square1, obstruction)
        board.set_piece(obstructing_square2, obstruction)
        board.set_piece(obstructing_square3, obstruction)
        board.set_piece(obstructing_square4, obstruction)
        board.set_piece(obstructing_square5, obstruction)
        board.set_piece(obstructing_square6, obstruction)
        board.set_piece(obstructing_square7, obstruction)
        board.set_piece(obstructing_square8, obstruction)

        # Act
        moves = knight.get_available_moves(board)

        # Assert
        assert len(moves) == 0
Esempio n. 2
0
    def testKnightJumping():
        board = Board.empty()
        knight = Knight(Player.WHITE)
        square = Square.at(3, 5)
        board.set_piece(square, knight)
        for row_delta in range(-1, 1):
            for col_delta in range(-1, 1):
                if row_delta != 0 or col_delta != 0:
                    board.set_piece(
                        Square.at(square.row + row_delta,
                                  square.col + col_delta), Pawn(Player.WHITE))

        moves = knight.get_available_moves(board)

        # Assert
        expected_moves = [
            Square.at(4, 7),
            Square.at(4, 3),
            Square.at(5, 6),
            Square.at(5, 4),
            Square.at(2, 7),
            Square.at(2, 3),
            Square.at(1, 6),
            Square.at(1, 4)
        ]
        assert len(moves) == len(expected_moves)
        assert set(moves) == set(expected_moves)
Esempio n. 3
0
    def test_white_knights_can_move_to_all_unoccupied_squares():

        # Arrange
        board = Board.empty()
        knight = Knight(Player.WHITE)
        square = Square.at(1, 4)
        board.set_piece(square, knight)
        enemy1 = Pawn(Player.BLACK)
        enemy1_square = Square.at(0, 6)
        board.set_piece(enemy1_square, enemy1)
        enemy2 = Pawn(Player.WHITE)
        enemy2_square = Square.at(2, 6)
        board.set_piece(enemy2_square, enemy2)

        # Act
        moves = knight.get_available_moves(board)

        # Assert
        assert set(moves) == set([
            Square.at(0, 6),
            Square.at(0, 2),
            Square.at(2, 2),
            Square.at(3, 3),
            Square.at(3, 5)
        ])
Esempio n. 4
0
    def test_black_knight_can_move_diagonally():
        # Arrange
        board = Board.empty()
        knight = Knight(Player.BLACK)
        square = Square.at(7, 1)
        board.set_piece(square, knight)

        # Act
        moves = knight.get_available_moves(board)

        # Assert
        assert Square.at(5, 0) in moves
Esempio n. 5
0
    def test_white_knight_can_move_diagonally():
        # Arrange
        board = Board.empty()
        knight = Knight(Player.WHITE)
        square = Square.at(0, 1)
        board.set_piece(square, knight)

        # Act
        moves = knight.get_available_moves(board)

        # Assert
        assert Square.at(2, 2) in moves
Esempio n. 6
0
    def test_knight_can_move_in_an_l_left_up():
        # Arrange
        board = Board.empty()
        knight = Knight(Player.WHITE)
        knight_square = Square.at(4, 4)
        board.set_piece(knight_square, knight)

        # Act
        moves = knight.get_available_moves(board)

        # Assert
        assert Square.at(5, 2) in moves
Esempio n. 7
0
    def test_knight_leave_the_board():
        # Arrange
        board = Board.empty()
        knight = Knight(Player.WHITE)
        square = Square.at(7, 7)
        board.set_piece(square, knight)

        # Act
        moves = knight.get_available_moves(board)

        # Assert
        expected_moves = [Square.at(5, 6), Square.at(6, 5)]
        assert len(moves) == len(expected_moves)
        assert sorted(moves) == sorted(expected_moves)
    def test_knight_can_move_in_l_pattern(valid_destination):

        # Arrange
        board = Board.empty()
        knight = Knight(Player.WHITE)
        square = Square.at(4, 4)
        board.set_piece(square, knight)

        # Act
        moves = knight.get_available_moves(board)

        # Assert
        assert Square.at(valid_destination[0], valid_destination[1]) in moves
        assert Square.at(valid_destination[1], valid_destination[0]) in moves
Esempio n. 9
0
    def test_white_knight_cannot_move_at_top_of_board():
        # Arrange
        board = Board.empty()
        knight = Knight(Player.WHITE)
        square = Square.at(3, 7)
        board.set_piece(square, knight)

        # Act
        moves = knight.get_available_moves(board)

        # Assert
        assert Square.at(2, 9) not in moves
        assert Square.at(4, 9) not in moves
        assert Square.at(5, 8) not in moves
        assert Square.at(1, 8) not in moves
Esempio n. 10
0
    def test_knight_cannot_move_to_friendly_square():
        # Arrange
        board = Board.empty()
        knight = Knight(Player.WHITE)
        knight_square = Square.at(4, 4)
        board.set_piece(knight_square, knight)

        friendly = Pawn(Player.WHITE)
        friendly_square = Square.at(5, 6)
        board.set_piece(friendly_square, friendly)

        # Act
        moves = knight.get_available_moves(board)

        # Assert
        assert Square.at(5, 6) not in moves
Esempio n. 11
0
    def test_knights_can_capture():
        # Arrange
        board = Board.empty()
        knight = Knight(Player.WHITE)
        knight_square = Square.at(4, 4)
        board.set_piece(knight_square, knight)

        enemy = Pawn(Player.BLACK)
        enemy_square = Square.at(6, 5)
        board.set_piece(enemy_square, enemy)

        # Act
        moves = knight.get_available_moves(board)

        # Assert
        assert Square.at(6, 5) in moves
    def test_king_cannot_move_to_check_by_knight():
        # Arrange
        board = Board.empty()
        king = King(Player.WHITE)
        king_square = Square.at(2, 3)
        board.set_piece(king_square, king)

        enemy = Knight(Player.BLACK)
        enemy_square = Square.at(1, 1)
        board.set_piece(enemy_square, enemy)

        # Act
        moves = king.get_available_moves(board)
        # check if current square is in check?
        # checked_by = king.get_checked_by(board)

        # Assert
        assert Square.at(1, 2) in moves
        assert Square.at(2, 2) in moves
        assert Square.at(3, 2) not in moves
        assert Square.at(3, 3) in moves
        assert Square.at(3, 4) in moves
        assert Square.at(2, 4) in moves
        assert Square.at(1, 4) in moves
        assert Square.at(1, 3) in moves
        assert len(moves) == 7
Esempio n. 13
0
    def testKnightFreindly():

        # Arrange
        board = Board.empty()
        knight = Knight(Player.WHITE)
        square = Square.at(3, 5)
        board.set_piece(square, knight)

        friendly = Pawn(Player.WHITE)
        friendly_square = Square.at(1, 4)
        board.set_piece(friendly_square, friendly)

        # Act
        moves = knight.get_available_moves(board)

        # Assert
        assert friendly_square not in moves
Esempio n. 14
0
    def testKnightCapturing():

        # Arrange
        board = Board.empty()
        knight = Knight(Player.WHITE)
        square = Square.at(3, 5)
        board.set_piece(square, knight)

        enemy = Pawn(Player.BLACK)
        enemy_square = Square.at(1, 4)
        board.set_piece(enemy_square, enemy)

        # Act
        moves = knight.get_available_moves(board)

        # Assert
        assert enemy_square in moves
Esempio n. 15
0
    def test_black_knights_can_move_in_l_shape():
        # Arrange
        board = Board.empty()
        knight = Knight(Player.BLACK)
        square = Square.at(3, 3)
        board.set_piece(square, knight)

        # Act
        moves = knight.get_available_moves(board)

        # Assert
        assert Square.at(4, 5) in moves
        assert Square.at(4, 1) in moves
        assert Square.at(5, 4) in moves
        assert Square.at(5, 2) in moves
        assert Square.at(2, 5) in moves
        assert Square.at(2, 1) in moves
        assert Square.at(1, 4) in moves
        assert Square.at(1, 2) in moves
Esempio n. 16
0
    def test_white_knights_can_move_to_all_possible_squares():

        # Arrange
        board = Board.empty()
        knight = Knight(Player.WHITE)
        square = Square.at(1, 4)
        board.set_piece(square, knight)

        # Act
        moves = knight.get_available_moves(board)

        # Assert
        assert set(moves) == set([
            Square.at(0, 6),
            Square.at(0, 2),
            Square.at(2, 6),
            Square.at(2, 2),
            Square.at(3, 3),
            Square.at(3, 5)
        ])
Esempio n. 17
0
    def testKnightMovementShape():
        board = Board.empty()
        knight = Knight(Player.WHITE)
        square = Square.at(3, 5)
        board.set_piece(square, knight)

        moves = knight.get_available_moves(board)

        expected_moves = [
            Square.at(4, 7),
            Square.at(4, 3),
            Square.at(5, 6),
            Square.at(5, 4),
            Square.at(2, 7),
            Square.at(2, 3),
            Square.at(1, 6),
            Square.at(1, 4)
        ]
        assert len(moves) == len(expected_moves)
        assert set(moves) == set(expected_moves)
Esempio n. 18
0
    def test_knights_cannot_move_off_board():
        # Arrange
        board = Board.empty()
        knight = Knight(Player.WHITE)
        knight_square = Square.at(0, 0)
        board.set_piece(knight_square, knight)

        friendly_1 = Pawn(Player.WHITE)
        friendly_1_square = Square.at(2, 1)
        board.set_piece(friendly_1_square, friendly_1)

        friendly_2 = Pawn(Player.WHITE)
        friendly_2_square = Square.at(1, 2)
        board.set_piece(friendly_2_square, friendly_2)

        # Act
        moves = knight.get_available_moves(board)

        # Assert
        assert len(moves) == 0
Esempio n. 19
0
    def test_white_knights_moving_to_home_row_do_not_become_queens():
        # Arrange
        board = Board.empty()
        knight = Knight(Player.WHITE)
        knight_square = Square.at(1, 2)
        board.set_piece(knight_square, knight)
        target_square = Square.at(0, 0)

        # Act
        board.move_piece(knight_square, target_square)

        # Assert
        assert isinstance(board.get_piece(target_square), Knight) is True
Esempio n. 20
0
    def test_black_knights_moving_to_home_row_do_not_become_queens():
        # Arrange
        board = Board.empty()
        knight = Knight(Player.BLACK)
        knight_square = Square.at(6, 2)
        board.set_piece(knight_square, knight)
        target_square = Square.at(7, 0)

        # Act
        board.current_player = board.current_player.opponent()
        board.move_piece(knight_square, target_square)

        # Assert
        assert isinstance(board.get_piece(target_square), Knight) is True
Esempio n. 21
0
 def handle_promotion(self, moving_piece, to_square):
     if isinstance(moving_piece, Pawn):
         if to_square.row == 0 or to_square.row == 7:
             piece = input(
                 "Select piece to promote pawn to: 'Q', 'K', 'R' or 'B'.")
             if piece == 'Q':
                 self.set_piece(to_square, Queen(self.current_player))
             elif piece == 'K':
                 self.set_piece(to_square, Knight(self.current_player))
             elif piece == 'R':
                 self.set_piece(to_square, Rook(self.current_player))
             elif piece == 'B':
                 self.set_piece(to_square, Bishop(self.current_player))
             else:
                 self.set_piece(to_square, Queen(self.current_player))
     return
    def test_white_king_checked_by_black_knight():
        # Arrange
        board = Board.empty()
        king = King(Player.WHITE)
        king_square = Square.at(2, 3)
        board.set_piece(king_square, king)

        enemy = Knight(Player.BLACK)
        enemy_square = Square.at(1, 1)
        board.set_piece(enemy_square, enemy)

        # Act
        # check if current square is in check?
        check = king.is_in_check(board)

        # Assert
        assert check is True
    def test_white_king_not_in_check():
        # Arrange
        board = Board.empty()
        king = King(Player.WHITE)
        king_square = Square.at(2, 3)
        board.set_piece(king_square, king)

        enemy_pawn = Pawn(Player.BLACK)
        enemy_pawn_square = Square.at(3, 3)
        board.set_piece(enemy_pawn_square, enemy_pawn)

        enemy_rook = Rook(Player.BLACK)
        enemy_rook_square = Square.at(3, 4)
        board.set_piece(enemy_rook_square, enemy_rook)

        enemy_bishop = Bishop(Player.BLACK)
        enemy_bishop_square = Square.at(1, 3)
        board.set_piece(enemy_bishop_square, enemy_bishop)

        enemy_knight = Knight(Player.BLACK)
        enemy_knight_square = Square.at(7, 7)
        board.set_piece(enemy_knight_square, enemy_knight)

        enemy_queen = Queen(Player.BLACK)
        enemy_queen_square = Square.at(3, 0)
        board.set_piece(enemy_queen_square, enemy_queen)

        enemy_king = King(Player.BLACK)
        enemy_king_square = Square.at(6, 6)
        board.set_piece(enemy_king_square, enemy_king)

        # Act
        check = king.is_in_check(board)

        # Assert
        assert check is False