# Copyright (C) 2010, 2011 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
# pretty-printing for the CLI.

# Skip all tests if Python scripting is not enabled.

if $tracelevel then {
    strace $tracelevel
}

load_lib gdb-python.exp

set testfile "py-evthreads"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
set pyfile ${srcdir}/${subdir}/py-events.py

gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug nowarnings}
clean_restart $testfile

if { [skip_python_tests] } { continue }

gdb_test_no_output "python execfile ('${pyfile}')" ""

gdb_test "Test_Events" "Event testers registered."
gdb_test_no_output "set non-stop on"
gdb_test_no_output "set target-async on"

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

send_gdb "run\n"
gdb_expect {
    -re "event type: stop.*
.*stop reason: breakpoint.*
.*breakpoint number: 1.*
.*thread num: 1.*" {
        pass "reached breakpoint 1"
    }
    timeout {
	    fail "did not reach breakpoint 1"
	}
}

send_gdb "next\n"
gdb_expect {
    -re "event type: stop.*
.*stop reason: breakpoint.*
.*breakpoint number: 2.*
.*thread num: 2.*" {
        pass "reached breakpoint 2"
    }
    timeout {
	    fail "did not reach breakpoint 2"
	}
}

send_gdb "next\n"
gdb_expect {
    -re "event type: stop.*
.*stop reason: breakpoint.*
.*breakpoint number: 3.*
.*thread num: 3.*" {
        pass "reached breakpoint 3"
    }
    timeout {
	    fail "did not reach breakpoint 3"
	}
}

send_gdb "continue&\n"
gdb_expect {
    -re ".*event type: continue.*
.*thread num: 1.*" {
        pass "continue thread 1"
    }
    timeout {
	    fail "continue thread 1 failed"
	}
}

gdb_test "thread 2" ".*Switching to thread 2.*"
send_gdb "continue&\n"
gdb_expect {
    -re ".*event type: continue.*
.*thread num: 2.*" {
        pass "continue thread 2"
    }
    timeout {
	    fail "continue thread 2 failed"
	}
}

send_gdb "continue -a\n"
gdb_expect {
    -re ".*stop reason: signal.*
.*stop signal: SIGSEGV.*
.*thread num: 3.*" {
        pass "thread 3 was signalled"
    }
    timeout {
	    fail "thread 3 was not signalled"
	}
}
