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

standard_testfile

if { [prepare_for_testing ${testfile}.exp "${testfile}" $srcfile {debug nowarnings}] } {
    return -1
}

if ![runto_main] then {
    perror "Couldn't run to main"
}

set bp_location [gdb_get_line_number "set breakpoint here"]

gdb_test "break func" \
    "Breakpoint.*at.* file .*$srcfile.*\\." \
    "breakpoint line number"

set test "define hook-stop command"
gdb_test_multiple "define hook-stop" "$test" {
    -re "Type commands for definition of \"hook-stop\".\r\nEnd with a line saying just \"end\".\r\n>$" {
	gdb_test "echo \"Hello.\"\nend" "" "$test"
    }
}

set test "hook-stop runs before frame print"
gdb_test_multiple "continue" "$test" {
    -re "\"Hello\\.\"\r\nBreakpo.*func.*set breakpoint here.*${gdb_prompt} $" {
	pass $test
    }

    -re "Breakpo.*func.*set breakpoint here.*\"Hello\\.\".*${gdb_prompt} $" {
	fail $test
    }
}
