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

if { [prepare_for_testing ${testfile}.exp "${testfile}" "${testfile}.c" {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 $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"
