# Copyright (C) 2015-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 Python-based
# unwinding CLI.

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 }

set pyfile [gdb_remote_download host ${srcdir}/${subdir}/${testfile}.py]

if ![runto_main ] then {
    return -1
}

gdb_test "source ${pyfile}" "Python script imported" \
    "import python scripts"

gdb_test_sequence "frame" "All unwinders enabled" {
    "py_unwind_maint_ps_unwinder called"
    "global_unwinder called"
    "#0  main"
}

gdb_test_sequence "info unwinder" "Show all unwinders" {
    "Global:"
    "  global_unwinder"
    "Progspace .*py-unwind-maint:"
    "py_unwind_maint_ps_unwinder"
}

gdb_breakpoint ${srcfile}:[gdb_get_line_number "next-line"]

gdb_test_sequence "continue" "Unwinders called" {
    "py_unwind_maint_ps_unwinder called"
    "global_unwinder called"
}

gdb_test_sequence "disable unwinder global .*" "Unwinder disabled" {
    "1 unwinder disabled"
}

gdb_test_sequence "info unwinder" "Show with global unwinder disabled" {
    "Global:"
    "  global_unwinder \\[disabled\\]"
    "Progspace .*py-unwind-maint:"
    "  py_unwind_maint_ps_unwinder"
}

gdb_test_sequence "where" "Global unwinder disabled" {
    "py_unwind_maint_ps_unwinder called\r\n#0  main"
}
