# Copyright (C) 2017-2026 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/>.

# This file is part of the GDB testsuite.  It tests the mechanism
# exposing values to Python.

load_lib gdb-python.exp

require allow_python_tests

standard_testfile py-rbreak.c py-rbreak-func2.c

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

if {![runto_main]} {
    return 0
}

gdb_test_no_output "nosharedlibrary"
gdb_py_test_silent_cmd "py sl = gdb.rbreak(\"\",minsyms=False)" \
    "get all function breakpoints" 0
set min_breakpoints 11
gdb_test_multiple "py print(len(sl))" \
    "check number of returned breakpoints is at least $min_breakpoints" {
	-re -wrap "($decimal)" {
	    set n $expect_out(1,string)
	    gdb_assert { $n >= $min_breakpoints } $gdb_test_name
	}
    }
gdb_py_test_silent_cmd "py sl = gdb.rbreak(\"main\.\*\",minsyms=False)" \
    "get main function breakpoint" 0
gdb_test "py print(len(sl))" "1" \
    "check number of returned breakpoints is 1"
gdb_py_test_silent_cmd "py sl = gdb.rbreak(\"func\.\*\",minsyms=False,throttle=10)" \
    "get functions matching func.*" 0
gdb_test "py print(len(sl))" "9" \
    "check number of returned breakpoints is 9"
gdb_test "py gdb.rbreak(\"func\.\*\",minsyms=False,throttle=5)" \
    "Number of breakpoints exceeds throttled maximum.*" \
    "check throttle errors on too many breakpoints"
gdb_py_test_silent_cmd "py sl = gdb.rbreak(\"func1\",minsyms=True)" \
    "including minimal symbols, get functions matching func.*" 0
gdb_test "py print(len(sl))" "2" \
    "check number of returned breakpoints is 2"
gdb_py_test_silent_cmd "python sym = gdb.lookup_symbol(\"efunc1\")" \
    "find a symbol in objfile" 1
gdb_py_test_silent_cmd "python symtab = sym\[0\].symtab" \
    "get backing symbol table" 1
gdb_py_test_silent_cmd "py sl = gdb.rbreak(\"func\.\*\",minsyms=False,throttle=10,symtabs=\[symtab\])" \
    "get functions matching func.* in one symtab only" 0
gdb_test "py print(len(sl))" "3" \
    "check number of returned breakpoints is 3"
