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

set testfile "hook-stop-continue"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}

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

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}

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

set bp_location [gdb_get_line_number "set breakpoint here"]

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

gdb_test "print \$do_continue = 1" "1"

send_gdb "define hook-stop\n"
gdb_expect {
  -re "Type commands for definition of \"hook-stop\".\r\nEnd with a line saying just \"end\".\r\n>$"\
          {send_gdb "if \$do_continue\nset \$do_continue = 0\ncontinue\nend\nend\n"
           gdb_expect {
             -re "$gdb_prompt $"\
                       {pass "define hook-stop command"}
             timeout {fail "(timeout) define hook-stop command"}
           }
          }
  -re "$gdb_prompt $"\
          {fail "define hook-stop command"}
  timeout {fail "(timeout) define hook-stop command"}
}

gdb_test "next" "Breakpoint.*funbreak \\(i=5\\) at .*:$bp_location\r\n$bp_location.*set breakpoint here \\*/" \
    "next triggering hook-stop"

gdb_test "next" "i = i \\+ 10;" "next no hook-stop"
