# Copyright 2014-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/>.

# Test Python SIGINT handling.
# This is easiest if we can send SIGINT when gdb is at particular points.

load_lib selftest-support.exp
load_lib gdb-python.exp

proc test_python_interrupts {} {
    if {[skip_python_tests]} {
	return -1
    }

    gdb_breakpoint set_active_ext_lang temporary
    gdb_test "call catch_command_errors(execute_command, \"python print(5)\", 0, true)" \
	"Temporary breakpoint.*silently stop."
    gdb_test "signal SIGINT" \
	"KeyboardInterrupt.*Error while executing Python code."
    return 0
}

do_self_tests captured_command_loop test_python_interrupts
