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

require support_displaced_stepping allow_python_tests

load_lib gdb-python.exp

standard_testfile

if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
    return -1
}

save_vars { GDBFLAGS } {
    append GDBFLAGS " -ex \"set non-stop on\""
    clean_restart $testfile
}

set pyfile [gdb_remote_download host ${srcdir}/${subdir}/py-events.py]
gdb_test_no_output "source ${pyfile}" "load python file"

gdb_test "test-events" "Event testers registered."

gdb_breakpoint "main"
gdb_breakpoint "thread2"
gdb_breakpoint "thread3"

gdb_run_cmd
set test "run to breakpoint 1"
gdb_test_multiple "" $test {
    -re "event type: stop\r\nstop reason: breakpoint\r\nfirst breakpoint number: 1\r\nbreakpoint number: 1\r\nthread num: 1\r\n.*$gdb_prompt $" {
	pass $test
    }
    -re "The target does not support running in non-stop mode" {
	unsupported "non-stop mode is unsupported"
	return
    }
}

gdb_test "next" "event type: stop\r\nstop reason: breakpoint\r\nfirst breakpoint number: 2\r\nbreakpoint number: 2\r\nthread num: 2.*" "reached breakpoint 2"

gdb_test "thread 2" {\[Switching to thread 2 .*}

gdb_test "next" "event type: stop\r\nstop reason: breakpoint\r\nfirst breakpoint number: 3\r\nbreakpoint number: 3\r\nthread num: 3.*" "reached breakpoint 3"

gdb_test "thread 3" {\[Switching to thread 3 .*}

set test "continue thread 1"
gdb_test_multiple "continue&" $test {
    -re "event type: continue\r\nthread num: 3\r\n$gdb_prompt " {
	# This expect string must not expect the end-of-buffer '$'.
	pass $test
    }
}

set test "thread 3 was signaled"
gdb_test_multiple "" $test {
    -re "event type: stop\r\nstop reason: signal\r\nstop signal: SIGUSR1\r\nthread num: 3\r\nevent type: stop\r\n" {
	pass $test
    }
}
