# Copyright (C) 2022 Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

# Check that FinishBreakpoints are deleted after use.

load_lib gdb-python.exp

standard_testfile

if {[prepare_for_testing "failed to prepare" $testfile $srcfile]} {
    return -1
}

# Skip all tests if Python scripting is not enabled.
if { [skip_python_tests] } { continue }

if ![runto_main] then {
    return 0
}

# For remote host testing
set pyfile [gdb_remote_download host ${srcdir}/${subdir}/${testfile}.py]

gdb_test "python print(len(gdb.breakpoints()))" "1" "check default BP count"
gdb_test "source $pyfile" ".*Python script imported.*" \
    "import python scripts"
gdb_test "python print(len(gdb.breakpoints()))" "2" "check modified BP count"
gdb_test "continue" "Breakpoint.*at.*" "run until FinishBreakpoint stops"
gdb_test "python print(len(gdb.breakpoints()))" "2" "check BP count"
