コード例 #1
0
    def test_white_pawn_cannot_move_if_piece_in_front():

        # Arrange
        board = Board.empty()
        pawn = Pawn(Player.WHITE)
        pawn_square = Square.at(4, 4)
        board.set_piece(pawn_square, pawn)

        obstructing_square = Square.at(5, 4)
        obstruction = Pawn(Player.BLACK)
        board.set_piece(obstructing_square, obstruction)

        # Act
        moves = pawn.get_available_moves(board)

        # Assert
        assert len(moves) == 0
コード例 #2
0
    def test_black_pawn_cannot_move_two_squares_if_piece_one_in_front():

        # Arrange
        board = Board.empty()
        pawn = Pawn(Player.BLACK)
        pawn_square = Square.at(6, 4)
        board.set_piece(pawn_square, pawn)

        obstructing_square = Square.at(5, 4)
        obstruction = Pawn(Player.WHITE)
        board.set_piece(obstructing_square, obstruction)

        # Act
        moves = pawn.get_available_moves(board)

        # Assert
        assert Square.at(4, 4) not in moves
コード例 #3
0
    def test_white_pawns_cannot_move_diagonally_except_to_capture():

        # Arrange
        board = Board.empty()
        pawn = Pawn(Player.WHITE)
        pawn_square = Square.at(3, 4)
        board.set_piece(pawn_square, pawn)

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

        # Act
        moves = pawn.get_available_moves(board)

        # Assert
        assert Square.at(4, 3) not in moves
        assert Square.at(4, 5) not in moves
コード例 #4
0
    def test_black_pawns_can_capture_diagonally():

        # Arrange
        board = Board.empty()
        pawn = Pawn(Player.BLACK)
        pawn_square = Square.at(3, 4)
        board.set_piece(pawn_square, pawn)

        friendly = Pawn(Player.BLACK)
        friendly_square = Square.at(2, 5)
        board.set_piece(friendly_square, friendly)

        # Act
        moves = pawn.get_available_moves(board)

        # Assert
        assert Square.at(2, 3) not in moves
        assert Square.at(2, 5) not in moves
コード例 #5
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)])
コード例 #6
0
    def test_pawn_can_en_passant():
        # Arrange
        board = Board.empty()
        pawn1 = Pawn(Player.WHITE)
        pawn1_square = Square.at(1, 4)
        board.set_piece(pawn1_square, pawn1)
        pawn1_to_square = Square.at(3, 4)

        pawn2 = Pawn(Player.BLACK)
        pawn2_square = Square.at(3, 5)
        board.set_piece(pawn2_square, pawn2)

        # Act
        board.move_piece(pawn1_square, pawn1_to_square)
        moves = pawn2.get_available_moves(board)

        # Assert
        assert Square.at(2, 4) in moves
        assert Square.at(2, 5) in moves
        assert Square.at(2, 6) not in moves
コード例 #7
0
 def test_white_pawn_changes_to_queen_when_moved_to_top_of_board():
     # Arrange
     board = Board.empty()
     pawn = Pawn(Player.WHITE)
     from_square = Square.at(6, 4)
     to_square = Square.at(7, 4)
     board.set_piece(from_square, pawn)
     board.move_piece(from_square, to_square)
     new_queen = board.get_piece(to_square)
     # Assert
     assert isinstance(new_queen, Queen)
コード例 #8
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
コード例 #9
0
    def test_rooks_cannot_move_off_the_board():
        # Arrange
        board = Board.empty()
        rook = Rook(Player.WHITE)
        rook_square = Square.at(0, 0)
        board.set_piece(rook_square, rook)

        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)

        # Act
        moves = rook.get_available_moves(board)

        # Assert
        assert len(moves) == 0
コード例 #10
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
コード例 #11
0
    def test_black_pawns_can_capture_diagonally():
        # Arrange
        board = Board.empty()
        pawn = Pawn(Player.BLACK)
        pawn_square = Square.at(3, 4)
        board.set_piece(pawn_square, pawn)

        enemy1 = Pawn(Player.WHITE)
        enemy1_square = Square.at(2, 5)
        board.set_piece(enemy1_square, enemy1)

        enemy2 = Pawn(Player.WHITE)
        enemy2_square = Square.at(2, 3)
        board.set_piece(enemy2_square, enemy2)

        # Act
        moves = pawn.get_available_moves(board)

        # Assert
        assert enemy1_square in moves
        assert enemy2_square in moves
コード例 #12
0
    def test_en_passant():
        # Arrange
        board = Board.empty()
        defending_pawn = Pawn(Player.WHITE)
        defending_pawn_square_1 = Square.at(1, 4)
        board.set_piece(defending_pawn_square_1, defending_pawn)

        attacking_pawn = Pawn(Player.BLACK)
        attacking_pawn_square_1 = Square.at(3, 5)
        board.set_piece(attacking_pawn_square_1, attacking_pawn)

        # Act
        defending_pawn_moves_1 = defending_pawn.get_available_moves(board)

        defending_pawn_square_2 = Square.at(3, 4)

        # Assert
        assert defending_pawn_square_2 in defending_pawn_moves_1

        board.move_piece(defending_pawn_square_1, defending_pawn_square_2)

        attacking_pawn_moves_1 = attacking_pawn.get_available_moves(board)

        en_passant_square = Square.at(2, 4)

        assert en_passant_square in attacking_pawn_moves_1

        board.move_piece(attacking_pawn_square_1, en_passant_square)

        assert board.get_piece(defending_pawn_square_2) is None
コード例 #13
0
    def test_white_pawns_reaching_end_row_become_queens():
        # Arrange
        board = Board.empty()
        pawn = Pawn(Player.WHITE)
        pawn_square = Square.at(6, 0)
        board.set_piece(pawn_square, pawn)
        target_square = Square.at(7, 0)

        # Act
        board.move_piece(pawn_square, target_square)

        # Assert
        assert isinstance(board.get_piece(target_square), Queen) is True
コード例 #14
0
    def test_black_pawns_reaching_end_row_become_queens():
        # Arrange
        board = Board.empty()
        pawn = Pawn(Player.BLACK)
        pawn_square = Square.at(1, 0)
        board.set_piece(pawn_square, pawn)
        target_square = Square.at(0, 0)

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

        # Assert
        assert isinstance(board.get_piece(target_square), Queen) is True
コード例 #15
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 
コード例 #16
0
    def test_bishop_cannot_move_through_pieces_down_and_left():
        # Arrange
        board = Board.empty()
        bishop = Bishop(Player.WHITE)
        bishop_square = Square.at(4, 4)
        board.set_piece(bishop_square, bishop)

        friendly = Pawn(Player.WHITE)
        friendly_square = Square.at(3, 3)
        board.set_piece(friendly_square, friendly)
        # Act
        moves = bishop.get_available_moves(board)

        # Assert
        assert Square.at(2, 2) not in moves
コード例 #17
0
    def test_queens_cannot_move_off_the_board():
        # Arrange
        board = Board.empty()
        queen = Queen(Player.WHITE)
        queen_square = Square.at(0, 0)
        board.set_piece(queen_square, queen)

        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 = queen.get_available_moves(board)

        # Assert
        assert len(moves) == 0
コード例 #18
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
コード例 #19
0
    def test_white_queens_can_move_to_all_unoccupied_squares():

        # Arrange
        board = Board.empty()
        queen = Queen(Player.WHITE)
        square = Square.at(1, 4)
        board.set_piece(square, queen)
        team1 = Pawn(Player.WHITE)
        team1_square = Square.at(2, 5)
        board.set_piece(team1_square, team1)
        enemy1 = Pawn(Player.BLACK)
        enemy1_square = Square.at(3, 4)
        board.set_piece(enemy1_square, enemy1)

        # Act
        moves = queen.get_available_moves(board)

        # Assert
        assert set(moves) == set([
            Square.at(0, 3),
            Square.at(0, 4),
            Square.at(0, 5),
            Square.at(1, 0),
            Square.at(1, 1),
            Square.at(1, 2),
            Square.at(1, 3),
            Square.at(1, 5),
            Square.at(1, 6),
            Square.at(1, 7),
            Square.at(2, 3),
            Square.at(2, 4),
            Square.at(3, 2),
            Square.at(3, 4),
            Square.at(4, 1),
            Square.at(5, 0)
        ])
コード例 #20
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
コード例 #21
0
    def test_rooks_cannot_move_left_through_pieces():
        # Arrange
        board = Board.empty()
        rook = Rook(Player.WHITE)
        rook_square = Square.at(4, 4)
        board.set_piece(rook_square, rook)

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

        # Act
        moves = rook.get_available_moves(board)

        # Assert
        assert Square.at(4, 2) not in moves
コード例 #22
0
    def test_queens_can_capture_right():
        # Arrange
        board = Board.empty()
        queen = Queen(Player.WHITE)
        queen_square = Square.at(4, 4)
        board.set_piece(queen_square, queen)

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

        # Act
        moves = queen.get_available_moves(board)

        # Assert
        assert Square.at(4, 6) in moves
コード例 #23
0
    def test_queens_cannot_move_left_through_pieces():
        # Arrange
        board = Board.empty()
        queen = Queen(Player.WHITE)
        queen_square = Square.at(4, 4)
        board.set_piece(queen_square, queen)

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

        # Act
        moves = queen.get_available_moves(board)

        # Assert
        assert Square.at(4, 2) not in moves
コード例 #24
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
コード例 #25
0
    def test_bishop_cannot_capture_friendly_pieces():
        # Arrange
        board = Board.empty()
        bishop = Bishop(Player.WHITE)
        square = Square.at(3, 5)
        board.set_piece(square, bishop)

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

        # Act
        moves = bishop.get_available_moves(board)

        # Assert
        assert friendly_square not in moves
コード例 #26
0
    def test_bishop_cannot_move_off_board():
        # Arrange
        board = Board.empty()
        bishop = Bishop(Player.WHITE)
        bishop_square = Square.at(0, 0)
        board.set_piece(bishop_square, bishop)

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

        # Act
        moves = bishop.get_available_moves(board)

        # Assert
        assert len(moves) == 0
コード例 #27
0
    def test_bishop_can_capture_down_and_left():
        # Arrange
        board = Board.empty()
        bishop = Bishop(Player.WHITE)
        bishop_square = Square.at(4, 4)
        board.set_piece(bishop_square, bishop)

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

        # Act
        moves = bishop.get_available_moves(board)

        # Assert
        assert Square.at(2, 2) in moves
コード例 #28
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
コード例 #29
0
    def test_rooks_can_capture_right():
        # Arrange
        board = Board.empty()
        rook = Rook(Player.WHITE)
        rook_square = Square.at(4, 4)
        board.set_piece(rook_square, rook)

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

        # Act
        moves = rook.get_available_moves(board)

        # Assert
        assert Square.at(4, 6) in moves
コード例 #30
0
    def test_bishop_is_blocked_by_enemy_pieces():
        # Arrange
        board = Board.empty()
        bishop = Bishop(Player.WHITE)
        square = Square.at(3, 5)
        board.set_piece(square, bishop)

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

        # Act
        moves = bishop.get_available_moves(board)

        # Assert
        assert Square.at(6, 2) not in moves