# Copyright (C) 2015-2020 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 {
    fail "can't run to main"
    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"
}
