def test_king_cannot_move_if_piece_in_front():
        # Arrange
        board = Board.empty()
        king = King(Player.WHITE)
        king_square = Square.at(4, 4)
        board.set_piece(king_square, king)

        friend = Pawn(Player.WHITE)
        friend_square = Square.at(5, 5)
        board.set_piece(friend_square, friend)

        friend2 = Pawn(Player.WHITE)
        friendly_square2 = Square.at(3, 4)
        board.set_piece(friendly_square2, friend2)

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

        # Act
        moves = king.get_available_moves(board)

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

        enemy = Queen(Player.BLACK)
        enemy_square = Square.at(1, 2)
        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) not in moves
        assert Square.at(3, 2) not in moves
        assert Square.at(3, 3) in moves
        assert Square.at(3, 4) not in moves
        assert Square.at(2, 4) in moves
        assert Square.at(1, 4) not in moves
        assert Square.at(1, 3) not in moves
        assert len(moves) == 3
예제 #3
0
    def test_black_king_cannot_move_if_friendly_piece_in_the_way():
        # Arrange
        board = Board.empty()
        king = King(Player.BLACK)
        king_square = Square.at(2, 2)
        board.set_piece(king_square, king)

        obstructing_square1 = Square.at(1, 1)
        obstructing_square2 = Square.at(3, 3)
        obstructing_square3 = Square.at(1, 3)
        obstructing_square4 = Square.at(3, 1)
        obstructing_square5 = Square.at(2, 1)
        obstructing_square6 = Square.at(2, 3)
        obstructing_square7 = Square.at(1, 2)
        obstructing_square8 = Square.at(3, 2)
        obstruction = Pawn(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 = king.get_available_moves(board)

        # Assert
        assert len(moves) == 0
    def test_white_king_can_move_diagonally():
        # Arrange
        board = Board.empty()
        king = King(Player.BLACK)
        square = Square.at(0, 4)
        board.set_piece(square, king)

        # Act
        moves = king.get_available_moves(board)

        # Assert
        assert Square.at(1, 3) in moves
    def test_black_king_can_move_right_one_square():
        # Arrange
        board = Board.empty()
        king = King(Player.BLACK)
        square = Square.at(5, 3)
        board.set_piece(square, king)

        # Act
        moves = king.get_available_moves(board)

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

        # Act
        moves = king.get_available_moves(board)

        # Assert
        assert Square.at(3, 5) in moves
예제 #7
0
    def test_kings_can_move_one_step_up_and_left():
        # Arrange
        board = Board.empty()
        king = King(Player.WHITE)
        king_square = Square.at(4, 4)
        board.set_piece(king_square, king)

        # Act
        moves = king.get_available_moves(board)

        # Assert
        assert Square.at(5, 3) in moves
    def test_king_cannot_move_off_board_up():
        # Arrange
        board = Board.empty()
        king = King(Player.BLACK)
        king_square = Square.at(7, 7)
        board.set_piece(king_square, king)

        # Act
        moves = king.get_available_moves(board)

        # Assert
        assert Square.at(7, 6) in moves
        assert Square.at(8, 8) not in moves
    def test_king_cannot_move_off_board_down():
        # Arrange
        board = Board.empty()
        king = King(Player.WHITE)
        king_square = Square.at(0, 0)
        board.set_piece(king_square, king)

        # Act
        moves = king.get_available_moves(board)

        # Assert
        assert Square.at(-1, -1) not in moves
        assert Square.at(0, 1) in moves
예제 #10
0
    def test_black_king_cannot_move_off_top_of_board():
        # Arrange
        board = Board.empty()
        king = King(Player.BLACK)
        square = Square.at(1, 7)
        board.set_piece(square, king)

        # Act
        moves = king.get_available_moves(board)

        # Assert
        assert Square.at(2, 8) not in moves
        assert Square.at(0, 8) not in moves
        assert Square.at(1, 8) not in moves
    def test_king_cannot_move_to_check_by_king():
        # Arrange
        board = Board.empty()
        king = King(Player.WHITE)
        king_square = Square.at(2, 3)
        board.set_piece(king_square, king)

        enemy = King(Player.BLACK)
        enemy_square = Square.at(2, 5)
        board.set_piece(enemy_square, enemy)

        # Act
        moves_white = king.get_available_moves(board)
        moves_black = enemy.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_white
        assert Square.at(2, 2) in moves_white
        assert Square.at(3, 2) in moves_white
        assert Square.at(3, 3) in moves_white
        assert Square.at(3, 4) not in moves_white
        assert Square.at(2, 4) not in moves_white
        assert Square.at(1, 4) not in moves_white
        assert Square.at(1, 3) in moves_white
        assert len(moves_white) == 5

        assert Square.at(3, 5) in moves_black
        assert Square.at(3, 6) in moves_black
        assert Square.at(2, 6) in moves_black
        assert Square.at(1, 6) in moves_black
        assert Square.at(3, 4) not in moves_black
        assert Square.at(2, 4) not in moves_black
        assert Square.at(1, 4) not in moves_black
        assert Square.at(1, 5) in moves_black
        assert len(moves_black) == 5
    def test_king_can_move_1_backslash():
        # Arrange
        board = Board.empty()
        king = King(Player.BLACK)
        king_square = Square.at(4, 4)
        board.set_piece(king_square, king)

        # Act
        moves = king.get_available_moves(board)

        # Assert
        assert Square.at(3, 5) in moves
        assert Square.at(2, 6) not in moves
        assert Square.at(5, 3) in moves
        assert Square.at(6, 2) not in moves
예제 #13
0
    def test_black_king_can_move_vertically_and_horizontally():
        # Arrange
        board = Board.empty()
        king = King(Player.BLACK)
        king_square = Square.at(3, 3)
        board.set_piece(king_square, king)

        # Act
        moves = king.get_available_moves(board)

        # Assert
        assert Square.at(3, 4) in moves
        assert Square.at(4, 3) in moves
        assert Square.at(3, 2) in moves
        assert Square.at(2, 3) in moves
예제 #14
0
    def test_white_king_can_move_diagonally():
        # Arrange
        board = Board.empty()
        king = King(Player.WHITE)
        king_square = Square.at(3, 3)
        board.set_piece(king_square, king)

        # Act
        moves = king.get_available_moves(board)

        # Assert
        assert Square.at(4, 4) in moves
        assert Square.at(2, 2) in moves
        assert Square.at(4, 2) in moves
        assert Square.at(2, 4) in moves
예제 #15
0
    def test_white_kings_can_move_to_all_neighbouring_squares_inside_board():

        # Arrange
        board = Board.empty()
        king = King(Player.WHITE)
        square = Square.at(7, 0)
        board.set_piece(square, king)

        # Act
        moves = king.get_available_moves(board)

        # Assert
        assert set(moves) == set(
            [Square.at(6, 0),
             Square.at(6, 1),
             Square.at(7, 1)])
예제 #16
0
    def test_kings_cannot_move_to_friendly_square():
        # Arrange
        board = Board.empty()
        king = King(Player.WHITE)
        king_square = Square.at(4, 4)
        board.set_piece(king_square, king)

        friendly_1 = Pawn(Player.WHITE)
        friendly_1_square = Square.at(4, 3)
        board.set_piece(friendly_1_square, friendly_1)

        # Act
        moves = king.get_available_moves(board)

        # Assert
        assert Square.at(4, 3) not in moves
예제 #17
0
    def test_king_can_take_enemy_pieces():

        # Arrange 
        board = Board.empty()
        king = King(Player.WHITE)
        square = Square.at(4,4)

        pawn1 = Pawn(Player.BLACK)
        pawn2 = Pawn(Player.BLACK)
        pawn3 = Pawn(Player.BLACK)
        pawn4 = Pawn(Player.BLACK)
        pawn5 = Pawn(Player.BLACK)
        pawn6 = Pawn(Player.BLACK)
        pawn7 = Pawn(Player.BLACK)
        pawn8 = Pawn(Player.BLACK)

        square1 = Square.at(3, 3)
        square2 = Square.at(3, 4)
        square3 = Square.at(3, 5)
        square4 = Square.at(4, 3)
        square5 = Square.at(4, 5)
        square6 = Square.at(5, 3)
        square7 = Square.at(5, 4)
        square8 = Square.at(5, 5)

        board.set_piece(square, king)
        board.set_piece(square1, pawn1)
        board.set_piece(square2, pawn2)
        board.set_piece(square3, pawn3)
        board.set_piece(square4, pawn4)
        board.set_piece(square5, pawn5)
        board.set_piece(square6, pawn6)
        board.set_piece(square7, pawn7)
        board.set_piece(square8, pawn8)

        # Act
        moves = king.get_available_moves(board)

        # Assert
        assert Square.at(3, 3) in moves
        assert Square.at(3, 4) in moves
        assert Square.at(3, 5) in moves
        assert Square.at(4, 3) in moves
        assert Square.at(4, 5) in moves
        assert Square.at(5, 3) in moves
        assert Square.at(5, 4) in moves
        assert Square.at(5, 5) in moves 
예제 #18
0
        def test_black_king_can_castle():
            # Arrange
            board = Board.empty()
            king = King(Player.BLACK)
            square = Square.at(7, 4)
            board.set_piece(square, king)

            rook1 = Rook(Player.BLACK)
            board.set_piece(Square.at(7, 0), rook1)

            rook2 = Rook(Player.BLACK)
            board.set_piece(Square.at(7, 7), rook2)

            # Act
            moves = king.get_available_moves(board)

            # Assert
            assert Square.at(7, 2) in moves
            assert Square.at(7, 6) in moves
예제 #19
0
    def test_white_kings_can_move_to_unoccupied_neighbouring_squares_inside_board(
    ):

        # Arrange
        board = Board.empty()
        king = King(Player.WHITE)
        square = Square.at(7, 0)
        board.set_piece(square, king)
        enemy1 = Pawn(Player.BLACK)
        enemy1_square = Square.at(6, 0)
        board.set_piece(enemy1_square, enemy1)
        enemy2 = Pawn(Player.WHITE)
        enemy2_square = Square.at(6, 1)
        board.set_piece(enemy2_square, enemy2)

        # Act
        moves = king.get_available_moves(board)

        # Assert
        assert set(moves) == set([Square.at(6, 0), Square.at(7, 1)])
예제 #20
0
    def test_king_cannot_move_off_the_left_of_board():

        # Arrange 
        board = Board.empty()
        king = King(Player.BLACK)
        square = Square.at(4,0)
        board.set_piece(square, king)

        # Act
        moves = king.get_available_moves(board)

        # Assert
        assert Square.at(3, 1) in moves
        assert Square.at(4, 1) in moves
        assert Square.at(5, 1) in moves
        assert Square.at(3, 0) in moves
        assert Square.at(5, 0) in moves
        assert Square.at(3, -1) not in moves
        assert Square.at(4, -1) not in moves
        assert Square.at(5, -1) not in moves
예제 #21
0
    def test_king_cannot_move_off_the_bottom_of_board():

        # Arrange 
        board = Board.empty()
        king = King(Player.BLACK)
        square = Square.at(0,4)
        board.set_piece(square, king)

        # Act
        moves = king.get_available_moves(board)

        # Assert
        assert Square.at(1, 3) in moves
        assert Square.at(1, 4) in moves
        assert Square.at(1, 5) in moves
        assert Square.at(0, 3) in moves
        assert Square.at(0, 5) in moves
        assert Square.at(-1, 3) not in moves
        assert Square.at(-1, 4) not in moves
        assert Square.at(-1, 5) not in moves
예제 #22
0
    def test_king_cannot_move_off_the_right_of_board():

        # Arrange 
        board = Board.empty()
        king = King(Player.BLACK)
        square = Square.at(4,7)
        board.set_piece(square, king)

        # Act
        moves = king.get_available_moves(board)

        # Assert
        assert Square.at(3, 6) in moves
        assert Square.at(4, 6) in moves
        assert Square.at(5, 6) in moves
        assert Square.at(3, 7) in moves
        assert Square.at(5, 7) in moves
        assert Square.at(3, 8) not in moves
        assert Square.at(4, 8) not in moves
        assert Square.at(5, 8) not in moves
예제 #23
0
    def test_kings_can_capture():
        # Arrange
        board = Board.empty()
        king = King(Player.WHITE)
        king_square = Square.at(4, 4)
        board.set_piece(king_square, king)

        enemy_1 = Pawn(Player.BLACK)
        enemy_1_square = Square.at(4, 3)
        board.set_piece(enemy_1_square, enemy_1)

        enemy_2 = Pawn(Player.BLACK)
        enemy_2_square = Square.at(3, 4)
        board.set_piece(enemy_2_square, enemy_2)

        # Act
        moves = king.get_available_moves(board)

        # Assert
        assert Square.at(4, 3) in moves
        assert Square.at(3, 4) in moves
    def test_king_can_castle():
        # Arrange
        board = Board.empty()
        king = King(Player.WHITE)
        king_square = Square.at(0, 4)
        board.set_piece(king_square, king)

        friend1 = Rook(Player.WHITE)
        friend_square1 = Square.at(0, 7)
        board.set_piece(friend_square1, friend1)

        friend2 = Rook(Player.WHITE)
        friend_square2 = Square.at(0, 0)
        board.set_piece(friend_square2, friend2)

        # Act
        moves = king.get_available_moves(board)

        # Assert
        assert Square.at(0, 2) in moves
        assert Square.at(0, 6) in moves
예제 #25
0
    def test_white_kings_can_move_to_all_neighbouring_squares():

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

        # Act
        moves = king.get_available_moves(board)

        # Assert
        assert set(moves) == set([
            Square.at(1, 5),
            Square.at(1, 3),
            Square.at(2, 5),
            Square.at(2, 3),
            Square.at(2, 4),
            Square.at(0, 5),
            Square.at(0, 3),
            Square.at(0, 4)
        ])
    def test_king_cannot_move_to_check_by_bishop():
        # Arrange
        board = Board.empty()
        king = King(Player.WHITE)
        king_square = Square.at(2, 3)
        board.set_piece(king_square, king)

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

        # Act
        moves = king.get_available_moves(board)

        # Assert
        assert len(moves) == 7
        assert Square.at(1, 2) in moves
        assert Square.at(2, 2) in moves
        assert Square.at(3, 2) in moves
        assert Square.at(3, 3) in moves
        assert Square.at(3, 4) not in moves
        assert Square.at(2, 4) in moves
        assert Square.at(1, 4) in moves
        assert Square.at(1, 3) in moves
예제 #27
0
    def test_kings_cannot_move_off_the_board():
        # Arrange
        board = Board.empty()
        king = King(Player.WHITE)
        king_square = Square.at(0, 0)
        board.set_piece(king_square, king)

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

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

        friendly_3 = Pawn(Player.WHITE)
        friendly_3_square = Square.at(1, 1)
        board.set_piece(friendly_3_square, friendly_3)

        # Act
        moves = king.get_available_moves(board)

        # Assert
        assert len(moves) == 0