# Copyright (C) 2012-2021 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 convenience
# functions in caller_is.py.

load_lib gdb-python.exp

standard_testfile

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

if ![runto_main] {
    return 0
}

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

gdb_breakpoint "bottom_func"
gdb_continue_to_breakpoint "bottom_func"

proc test_all_caller_is_fns { } {
    gdb_test "p \$_caller_is (\"bottom_func\", 0)" " = 1"
    gdb_test "p \$_caller_is (\"middle_func\")" " = 1"
    gdb_test "p \$_caller_is (\"top_func\")" " = 0"
    gdb_test "p \$_caller_is (\"middle_func\", 2)" " = 0"
    gdb_test "p \$_caller_is (\"top_func\", 2)" " = 1"
    gdb_test "p \$_caller_is (\"foo\", 100)" " = 0"
    gdb_test "p \$_caller_is (\"foo\", -1)" "nframes must be >= 0"

    gdb_test "p \$_caller_matches (\"^bottom\", 0)" " = 1"
    gdb_test "p \$_caller_matches (\"^middle_\")" " = 1"
    gdb_test "p \$_caller_matches (\"^top_\")" " = 0"
    gdb_test "p \$_caller_matches (\"^middle_\", 2)" " = 0"
    gdb_test "p \$_caller_matches (\"^top_f\", 2)" " = 1"
    gdb_test "p \$_caller_matches (\"foo\", 100)" " = 0"
    gdb_test "p \$_caller_matches (\"foo\", -1)" "nframes must be >= 0"

    gdb_test "p \$_any_caller_is (\"bottom_func\", 0)" " = 1"
    gdb_test "p \$_any_caller_is (\"middle_func\")" " = 1"
    gdb_test "p \$_any_caller_is (\"top_func\")" " = 0"
    gdb_test "p \$_any_caller_is (\"middle_func\", 2)" " = 1"
    gdb_test "p \$_any_caller_is (\"top_func\", 2)" " = 1"
    gdb_test "p \$_any_caller_is (\"main\", 100)" " = 1"
    gdb_test "p \$_any_caller_is (\"foo\", 100)" " = 0"
    gdb_test "p \$_any_caller_is (\"foo\", -1)" "nframes must be >= 0"

    gdb_test "p \$_any_caller_matches (\"^bottom\", 0)" " = 1"
    gdb_test "p \$_any_caller_matches (\"^middle_\")" " = 1"
    gdb_test "p \$_any_caller_matches (\"^top_\")" " = 0"
    gdb_test "p \$_any_caller_matches (\"^middle_\", 2)" " = 1"
    gdb_test "p \$_any_caller_matches (\"^top_f\", 2)" " = 1"
    gdb_test "p \$_any_caller_matches (\"^main\", 100)" " = 1"
    gdb_test "p \$_any_caller_matches (\"foo\", 100)" " = 0"
    gdb_test "p \$_any_caller_matches (\"foo\", -1)" "nframes must be >= 0"
}

test_all_caller_is_fns
