#   Copyright 1988, 1990, 1991, 1992, 1994, 1995, 1997, 1998, 1999, 2000,
#   2001, 2002, 2003, 2005, 2006, 2007, 2008, 2009
#   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/>.

if $tracelevel then {
    strace $tracelevel
}

#
# test special commands (if, while, etc)
#
set prms_id 0
set bug_id 0

set testfile "run"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/commands
if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
     untested commands.exp
     return -1
}

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

proc gdbvar_simple_if_test {} {
    global gdb_prompt

    gdb_test "set \$foo = 0" "" "set foo in gdbvar_simple_if_test"
    # All this test should do is print 0xdeadbeef once.
    gdb_test "if \$foo == 1\np/x 0xfeedface\nelse\np/x 0xdeadbeef\nend" \
	    "\\\$\[0-9\]* = 0xdeadbeef" "gdbvar_simple_if_test #1"
    # All this test should do is print 0xfeedface once.
    gdb_test "if \$foo == 0\np/x 0xfeedface\nelse\np/x 0xdeadbeef\nend" \
	    "\\\$\[0-9\]* = 0xfeedface" "gdbvar_simple_if_test #2"
}

proc gdbvar_simple_while_test {} {
    global gdb_prompt

    gdb_test "set \$foo = 5" "" "set foo in gdbvar_simple_while_test"
    # This test should print 0xfeedface five times.
    gdb_test "while \$foo > 0\np/x 0xfeedface\nset \$foo -= 1\nend" \
	    "\\\$\[0-9\]* = 0xfeedface\[^\n\]*\n\\\$\[0-9\]* = 0xfeedface\[^\n\]*\n\\\$\[0-9\]* = 0xfeedface\[^\n\]*\n\\\$\[0-9\]* = 0xfeedface\[^\n\]*\n\\\$\[0-9\]* = 0xfeedface" \
	    "gdbvar_simple_while_test #1"
}

proc gdbvar_complex_if_while_test {} {
    global gdb_prompt

    gdb_test "set \$foo = 4" "" "set foo in gdbvar complex_if_while_test"
    # This test should alternate between 0xdeadbeef and 0xfeedface two times.
    gdb_test "while \$foo > 0\nset \$foo -= 1\nif \(\$foo % 2\) == 1\np/x 0xdeadbeef\nelse\np/x 0xfeedface\nend\nend" \
	    "\\\$\[0-9\]* = 0xdeadbeef\[^\n\]*\n\\\$\[0-9\]* = 0xfeedface\[^\n\]*\n\\\$\[0-9\]* = 0xdeadbeef\[^\n\]*\n\\\$\[0-9\]* = 0xfeedface" \
	    "gdbvar_complex_if_while_test #1"
}

proc progvar_simple_if_test {} {
    global gdb_prompt

    if [target_info exists noargs] { 
        verbose "Skipping progvar_simple_if_test because of noargs."
        return
    }

    if { ![runto factorial] } then { gdb_suppress_tests; }
    # Don't depend upon argument passing, since most simulators don't
    # currently support it.  Bash value variable to be what we want.
    gdb_test "p value=5" "" "set value to 5 in progvar_simple_if_test #1"
    # All this test should do is print 0xdeadbeef once.
    gdb_test "if value == 1\np/x 0xfeedface\nelse\np/x 0xdeadbeef\nend" \
	    "\\\$\[0-9\]* = 0xdeadbeef" \
	    "progvar_simple_if_test #1"
    # All this test should do is print 0xfeedface once.
    gdb_test "if value == 5\np/x 0xfeedface\nelse\np/x 0xdeadbeef\nend" \
	    "\\\$\[0-9\]* = 0xfeedface" \
	    "progvar_simple_if_test #2"
    gdb_stop_suppressing_tests;
}

proc progvar_simple_while_test {} {
    global gdb_prompt

    if [target_info exists noargs] { 
        verbose "Skipping progvar_simple_while_test because of noargs."
        return
    }

    gdb_test "set args 5" "" "set args in progvar_simple_while_test"
    if { ![runto factorial] } then { gdb_suppress_tests }
    # Don't depend upon argument passing, since most simulators don't
    # currently support it.  Bash value variable to be what we want.
    gdb_test "p value=5" "" "set value to 5 in progvar_simple_if_test #2"
    # This test should print 0xfeedface five times.
    gdb_test "while value > 0\np/x 0xfeedface\nset value -= 1\nend" \
	    "\\\$\[0-9\]* = 0xfeedface\[^\n\]*\n\\\$\[0-9\]* = 0xfeedface\[^\n\]*\n\\\$\[0-9\]* = 0xfeedface\[^\n\]*\n\\\$\[0-9\]* = 0xfeedface\[^\n\]*\n\\\$\[0-9\]* = 0xfeedface" \
	    "progvar_simple_while_test #1"
    gdb_stop_suppressing_tests;
}

proc progvar_complex_if_while_test {} {
    global gdb_prompt

    if [target_info exists noargs] { 
        verbose "Skipping progvar_simple_if_while_test because of noargs."
        return
    }

    gdb_test "set args 4" "" "set args in progvar_complex_if_while_test"
    if { ![runto factorial] } then { gdb_suppress_tests }
    # Don't depend upon argument passing, since most simulators don't
    # currently support it.  Bash value variable to be what we want.
    gdb_test "p value=4" "" "set value to 4 in progvar_simple_if_test"
    # This test should alternate between 0xdeadbeef and 0xfeedface two times.
    gdb_test "while value > 0\nset value -= 1\nif \(value % 2\) == 1\np/x 0xdeadbeef\nelse\np/x 0xfeedface\nend\nend" \
	    "\\\$\[0-9\]* = 0xdeadbeef\[^\n\]*\n\\\$\[0-9\]* = 0xfeedface\[^\n\]*\n\\\$\[0-9\]* = 0xdeadbeef\[^\n\]*\n\\\$\[0-9\]* = 0xfeedface" \
	    "progvar_complex_if_while_test #1"
    gdb_stop_suppressing_tests;
}

proc if_while_breakpoint_command_test {} {
    if [target_info exists noargs] { 
        verbose "Skipping if_while_breakpoint_command_test because of noargs."
        return
    }

    gdb_test "set args 5" "" "set args in if_while_breakpoint_command_test"
    if { ![runto factorial] } then { gdb_suppress_tests }
    # Don't depend upon argument passing, since most simulators don't
    # currently support it.  Bash value variable to be what we want.
    gdb_test "p value=5" "" "set value to 5 in progvar_simple_if_test"
    delete_breakpoints
    gdb_test "break factorial" "Breakpoint.*at.*" "break factorial #1"

    send_gdb "commands\n"
    gdb_expect {
	-re "End with" {
	    pass "commands in if_while_breakpoint_command_test"
	}
        default {
	    fail "(timeout or eof) commands in if_while_breakpoint_command_test"
	}
    }
    # This test should alternate between 0xdeadbeef and 0xfeedface two times.
    gdb_test "while value > 0\nset value -= 1\nif \(value % 2\) == 1\np/x 0xdeadbeef\nelse\np/x 0xfeedface\nend\nend\nend" \
	    "" \
	    "commands part 2 in if_while_breakpoint_command_test"
    gdb_test "continue" \
	    "\\\$\[0-9\]* = 0xdeadbeef\[^\n\]*\n\\\$\[0-9\]* = 0xfeedface\[^\n\]*\n\\\$\[0-9\]* = 0xdeadbeef\[^\n\]*\n\\\$\[0-9\]* = 0xfeedface" \
	    "if_while_breakpoint_command_test #1"
   gdb_test "info break" \
	   "while.*set.*if.*p/x.*else.*p/x.*end.*" \
	   "info break in if_while_breakpoint_command_test"
    gdb_stop_suppressing_tests;
}

# Test that we can run the inferior from breakpoint commands.
#
# The expected behavior is that all commands after the first "step"
# shall be ignored.  See the gdb manual, "Break Commands",
# subsection "Breakpoint command lists".

proc infrun_breakpoint_command_test {} {
    if [target_info exists noargs] { 
        verbose "Skipping infrun_breakpoint_command_test because of noargs."
        return
    }

    gdb_test "set args 6" "" "set args in infrun_breakpoint_command_test"
    if { ![runto factorial] } then { gdb_suppress_tests }
    # Don't depend upon argument passing, since most simulators don't
    # currently support it.  Bash value variable to be what we want.
    gdb_test "p value=6" "" "set value to 6 in progvar_simple_if_test #1"
    delete_breakpoints
    gdb_test "break factorial if value == 5" "Breakpoint.*at.*"

# infrun_breakpoint_command_test - This test was broken into two parts 
# to get around a synchronization problem in expect.
# part1: issue the gdb command "commands"
# part2: send the list of commands
    send_gdb "commands\n"
    gdb_expect {
	-re "End with" {
	    pass "commands in infrun_breakpoint_command_test #1"
	}
        default {
	    fail "(timeout or eof) commands in infrun_breakpoint_command_test"
	}
    }
    gdb_test "step\nstep\nstep\nstep\nend" "" \
	"commands in infrun_breakpoint_command_test #2"

	gdb_test "continue" \
		"Continuing.*.*.*Breakpoint \[0-9\]*, factorial \\(value=5\\).*at.*\[0-9\]*\[      \]*if \\(value > 1\\) \{.*\[0-9\]*\[      \]*value \\*= factorial \\(value - 1\\);.*" \
		"continue in infrun_breakpoint_command_test"

    gdb_stop_suppressing_tests;
}

proc breakpoint_command_test {} {
    if [target_info exists noargs] { 
        verbose "Skipping breakpoint_command_test because of noargs."
        return
    }

    gdb_test "set args 6" "" "set args in breakpoint_command_test"
    if { ![runto factorial] } then { gdb_suppress_tests; }
    # Don't depend upon argument passing, since most simulators don't
    # currently support it.  Bash value variable to be what we want.
    gdb_test "p value=6" "" "set value to 6 in progvar_simple_if_test #2"
    delete_breakpoints
    gdb_test "break factorial" "Breakpoint.*at.*" "break factorial #2"
    gdb_test "commands\nprintf \"Now the value is %d\\n\", value\nend" \
	"End with.*" "commands in breakpoint_command_test"
    gdb_test "continue" \
	    "Breakpoint \[0-9\]*, factorial.*Now the value is 5" \
	"continue in breakpoint_command_test"
    gdb_test "print value" " = 5" "print value in breakpoint_command_test"
    gdb_stop_suppressing_tests;
}

# Test a simple user defined command (with arguments)
proc user_defined_command_test {} {
    global gdb_prompt

    gdb_test "set \$foo = 4" "" "set foo in user_defined_command_test"

    send_gdb "define mycommand\n"
    gdb_expect {
	-re "End with"  {
	    pass "define mycommand in user_defined_command_test"
	}
        default {
	    fail "(timeout or eof) define mycommand in user_defined_command_test"
	}
    }
    # This test should alternate between 0xdeadbeef and 0xfeedface two times.
    gdb_test "while \$arg0 > 0\nset \$arg0 -= 1\nif \(\$arg0 % 2\) == 1\np/x 0xdeadbeef\nelse\np/x 0xfeedface\nend\nend\nend" \
	    "" \
	    "enter commands in user_defined_command_test"

    gdb_test "mycommand \$foo" \
	    "\\\$\[0-9\]* = 0xdeadbeef\[^\n\]*\n\\\$\[0-9\]* = 0xfeedface\[^\n\]*\n\\\$\[0-9\]* = 0xdeadbeef\[^\n\]*\n\\\$\[0-9\]* = 0xfeedface" \
	    "execute user defined command in user_defined_command_test"
   gdb_test "show user mycommand" \
	"  while \\\$arg0.*set.*    if \\\(\\\$arg0.*p/x.*    else\[^\n\].*p/x.*    end\[^\n\].*  end\[^\n\].*" \
	   "display user command in user_defined_command_test"
}

proc watchpoint_command_test {} {
    global noargs
    global gdb_prompt

    if [target_info exists noargs] { 
        verbose "Skipping watchpoint_command_test because of noargs."
        return
    }

    # Disable hardware watchpoints if necessary.
    if [target_info exists gdb,no_hardware_watchpoints] {
	gdb_test "set can-use-hw-watchpoints 0" "" ""
    }

    gdb_test "set args 6" "" "set args in watchpoint_command_test"
    if { ![runto factorial] } then { return }
    delete_breakpoints

    # Verify that we can create a watchpoint, and give it a commands
    # list that continues the inferior.  We set the watchpoint on a
    # local variable, too, so that it self-deletes when the watched
    # data goes out of scope.
    #
    # What should happen is: Each time the watchpoint triggers, it
    # continues the inferior.  Eventually, the watchpoint will self-
    # delete, when the watched variable is out of scope.  But by that
    # time, the inferior should have exited.  GDB shouldn't crash or
    # anything untoward as a result of this.
    #
    set wp_id -1

    send_gdb "watch local_var\n"
    gdb_expect {
        -re ".*\[Ww\]atchpoint (\[0-9\]*): local_var.*$gdb_prompt $" {
            set wp_id $expect_out(1,string)
            pass "watch local_var"
        }
        -re "$gdb_prompt $"\
            {fail "watch local_var"}
        timeout {fail "(timeout) watch local_var"}
    }

    if {$wp_id == -1} {return}

    send_gdb "commands $wp_id\n"
    gdb_expect {
      -re "Type commands for when breakpoint $wp_id is hit, one per line.*>" {
	  pass "begin commands on watch"
      }
      -re "$gdb_prompt $" {fail "begin commands on watch"}
      timeout             {fail "(timeout) begin commands on watch"}
    }
    send_gdb "print value\n"
    gdb_expect {
	-re ">"               {pass "add print command to watch"}
	-re "$gdb_prompt $"   {fail "add print command to watch"}
	timeout               {fail "(timeout) add print command to watch"}
    }
    send_gdb "continue\n"
    gdb_expect {
	-re ">"               {pass "add continue command to watch"}
	-re "$gdb_prompt $"   {fail "add continue command to watch"}
	timeout               {fail "(timeout) add continue command to watch"}
    }
    send_gdb "end\n"
    gdb_expect {
	-re "$gdb_prompt $"   {pass "end commands on watch"}
	timeout               {fail "(timeout) end commands on watch"}
    }
    send_gdb "continue\n"
    gdb_expect {
	-re "Continuing.*\[Ww\]atchpoint $wp_id deleted because the program has left the block in.*which its expression is valid.*run.c:(57|82).*$gdb_prompt $" {
	    pass "continue with watch"
	}
	-re "$gdb_prompt $"   {fail "continue with watch"}
	timeout               {fail "(timeout) continue with watch"}
    }
}

proc test_command_prompt_position {} {
    global gdb_prompt

    if [target_info exists noargs] { 
        verbose "Skipping test_command_prompt_position because of noargs."
        return
    }

    if { ![runto factorial] } then { gdb_suppress_tests; }
    # Don't depend upon argument passing, since most simulators don't
    # currently support it.  Bash value variable to be what we want.
    delete_breakpoints
    gdb_test "break factorial" "Breakpoint.*at.*" "break factorial #3"
    gdb_test "p value=5" "" "set value to 5 in test_command_prompt_position"
    # All this test should do is print 0xdeadbeef once.
    gdb_test "if value == 1\np/x 0xfeedface\nelse\np/x 0xdeadbeef\nend" \
	    "\\\$\[0-9\]* = 0xdeadbeef" \
	    "if test in test_command_prompt_position"
    
    # Now let's test for the correct position of the '>' in gdb's
    # prompt for commands.  It should be at the beginning of the line,
    # and not after one space.

    send_gdb "commands\n"
    gdb_expect {
	-re "Type commands.*End with.*\[\r\n\]>$" { 
	    send_gdb "printf \"Now the value is %d\\n\", value\n"
	    gdb_expect {
		-re "^printf.*value\r\n>$" {
		    send_gdb "end\n"
		    gdb_expect {
			-re "^end\r\n$gdb_prompt $" { 
			    pass "> OK in test_command_prompt_position" 
			}
			-re ".*$gdb_prompt $" { 
			    fail "some other message in test_command_prompt_position" 
			}
			timeout  { 
			    fail "(timeout) 1 in test_command_prompt_position"
			}
		    }
		}
		-re "^ >$" { fail "> not OK in test_command_prompt_position" }
		-re ".*$gdb_prompt $"   { 
		    fail "wrong message in test_command_prompt_position" 
		}
		timeout    { 
		    fail "(timeout) 2 in test_command_prompt_position " 
		}
	    }
	}
	-re "Type commands.*End with.*\[\r\n\] >$" { 
	    fail "prompt not OK in test_command_prompt_position" 
	}
	-re ".*$gdb_prompt $" { 
	    fail "commands in test_command_prompt_position" 
	}
	timeout { fail "(timeout) 3 commands in test_command_prompt_position" }
    }

    gdb_stop_suppressing_tests;
}



proc deprecated_command_test {} {
    gdb_test "maintenance deprecate blah" "Can't find command.*" \
          "tried to deprecate non-existing command"

    gdb_test "maintenance deprecate p \"new_p\"" "" "maintenance deprecate p \"new_p\" /1/"
    gdb_test "p 5" \
	    "Warning: 'p', an alias for the command 'print' is deprecated.*Use 'new_p'.*" \
	    "p deprecated warning, with replacement"
    gdb_test "p 5" ".\[0-9\]* = 5.*" "Deprecated warning goes away /1/"

    gdb_test "maintenance deprecate p \"new_p\"" "" "maintenance deprecate p \"new_p\" /2/"
    gdb_test "maintenance deprecate print \"new_print\"" ""
    gdb_test "p 5" \
	    "Warning: command 'print' \\(p\\) is deprecated.*Use 'new_print'.*" \
	    "both alias and command are deprecated"
    gdb_test "p 5" ".\[0-9\]* = 5.*" "Deprecated warning goes away /2/"

    gdb_test "maintenance deprecate set remote memory-read-packet-size \"srm\" " \
	    "" \
	    "deprecate long command /1/"
    gdb_test "set remote memory-read-packet-size" \
	    "Warning: command 'set remote memory-read-packet-size' is deprecated.*Use 'srm'.*" \
	    "long command deprecated /1/"

    gdb_test "maintenance deprecate set remote memory-read-packet-size" \
	    "" \
	    "deprecate long command /2/"
    gdb_test "set remote memory-read-packet-size" \
	    "Warning: command 'set remote memory-read-packet-size' is deprecated.*No alternative known.*" \
	    "long command deprecated with no alternative /2/"

    gdb_test "maintenance deprecate" \
	    "\"maintenance deprecate\".*" \
	    "deprecate with no arguments"
}

proc bp_deleted_in_command_test {} {
    global gdb_prompt
    
    if [target_info exists noargs] { 
        verbose "Skipping bp_deleted_in_command_test because of noargs."
        return
    }

    gdb_test "set args 1" "" "set args in bp_deleted_in_command_test"
    delete_breakpoints

    # Create a breakpoint, and associate a command-list to it, with
    # one command that deletes this breakpoint.
    gdb_test "break factorial" \
             "Breakpoint \[0-9\]+ at .*: file .*/run.c, line \[0-9\]+\." \
             "breakpoint in bp_deleted_in_command_test"
    
    send_gdb "commands\n"
    gdb_expect {
      -re "Type commands for when breakpoint .* is hit, one per line.*>" {
          pass "begin commands in bp_deleted_in_command_test"
      }
      -re "$gdb_prompt $" {fail "begin commands in bp_deleted_in_command_test"}
      timeout             {fail "(timeout) begin commands bp_deleted_in_command_test"}
    }
    send_gdb "silent\n"
    gdb_expect {
        -re ">"               {pass "add silent command"}
        -re "$gdb_prompt $"   {fail "add silent command"}
        timeout               {fail "(timeout) add silent command"}
    }
    send_gdb "clear factorial\n"
    gdb_expect {
        -re ">"               {pass "add clear command"}
        -re "$gdb_prompt $"   {fail "add clear command"}
        timeout               {fail "(timeout) add clear command"} }
    send_gdb "printf \"factorial command-list executed\\n\"\n"
    gdb_expect {
        -re ">"               {pass "add printf command"}
        -re "$gdb_prompt $"   {fail "add printf command"}
        timeout               {fail "(timeout) add printf command"}
    }
    send_gdb "cont\n"
    gdb_expect {
        -re ">"               {pass "add cont command"}
        -re "$gdb_prompt $"   {fail "add cont command"}
        timeout               {fail "(timeout) add cont command"} }
    send_gdb "end\n"
    gdb_expect {
        -re "$gdb_prompt $"   {pass "end commands"}
        timeout               {fail "(timeout) end commands"}
    }

    gdb_run_cmd
    gdb_expect {
        -re ".*factorial command-list executed.*1.*$gdb_prompt $" {
	    pass "run factorial until breakpoint"
        }
	-re ".*$gdb_prompt $" {
	    fail "run factorial until breakpoint"
	}
	default { fail "(timeout) run factorial until breakpoint" }
	timeout { fail "(timeout) run factorial until breakpoint" }
    }
}

proc temporary_breakpoint_commands {} {
    global gdb_prompt
    
    if [target_info exists noargs] { 
        verbose "Skipping temporary_breakpoint_commands because of noargs."
        return
    }

    gdb_test "set args 1" "" "set args in temporary_breakpoint_commands"
    delete_breakpoints

    # Create a temporary breakpoint, and associate a commands list to it.
    # This test will verify that this commands list is executed when the
    # breakpoint is hit.
    gdb_test "tbreak factorial" \
	    "Temporary breakpoint \[0-9\]+ at .*: file .*/run.c, line \[0-9\]+\." \
	    "breakpoint in temporary_breakpoint_commands"
    
    send_gdb "commands\n"
    gdb_expect {
	-re "Type commands for when breakpoint .* is hit, one per line.*>" {
	    pass "begin commands in bp_deleted_in_command_test"
	}
	-re "$gdb_prompt $" {fail "begin commands in bp_deleted_in_command_test"}
	timeout             {fail "(timeout) begin commands bp_deleted_in_command_test"}
    }
    send_gdb "silent\n"
    gdb_expect {
	-re ">"               {pass "add silent tbreak command"}
	-re "$gdb_prompt $"   {fail "add silent tbreak command"}
	timeout               {fail "(timeout) add silent tbreak command"}
     }
    send_gdb "printf \"factorial tbreak commands executed\\n\"\n"
    gdb_expect {
	-re ">"               {pass "add printf tbreak command"}
	-re "$gdb_prompt $"   {fail "add printf tbreak command"}
	timeout               {fail "(timeout) add printf tbreak command"}
     }
    send_gdb "cont\n"
    gdb_expect {
	-re ">"               {pass "add cont tbreak command"}
	-re "$gdb_prompt $"   {fail "add cont tbreak command"}
	timeout               {fail "(timeout) add cont tbreak command"} }
    send_gdb "end\n"
    gdb_expect {
	-re "$gdb_prompt $"   {pass "end tbreak commands"}
	timeout               {fail "(timeout) end tbreak commands"}
     }

    gdb_run_cmd
    gdb_expect {
	-re ".*factorial tbreak commands executed.*1.*$gdb_prompt $" {
	    pass "run factorial until temporary breakpoint"
	}
	timeout { fail "(timeout) run factorial until temporary breakpoint" }
    }
}

# Test that GDB can handle $arg0 outside of user functions without
# crashing.
proc stray_arg0_test { } {
    gdb_test "print \$arg0" \
	"\\\$\[0-9\]* = void" \
	"stray_arg0_test #1"

    gdb_test "if 1 == 1\nprint \$arg0\nend" \
	"\\\$\[0-9\]* = void" \
	"stray_arg0_test #2"

    gdb_test "print \$arg0 = 1" \
	"\\\$\[0-9\]* = 1" \
	"stray_arg0_test #3"

    gdb_test "print \$arg0" \
	"\\\$\[0-9\]* = 1" \
	"stray_arg0_test #4"
}

# Test that GDB can handle arguments when sourcing files recursively.
# If the arguments are overwritten with ####### then the test has failed.
proc recursive_source_test {} {
    set fd [open "file1" w]
    puts $fd \
{source file2
abcdef qwerty}
    close $fd

    set fd [open "file2" w]
    puts $fd \
{define abcdef
  echo 1: <<<$arg0>>>\n
  source file3
  echo 2: <<<$arg0>>>\n
end}
    close $fd

    set fd [open "file3" w]
    puts $fd \
"echo in file3\\n
#################################################################"
    close $fd

    gdb_test "source file1" \
	"1: <<<qwerty>>>\[\r\n]+in file3\[\r\n]+2: <<<qwerty>>>" \
	"recursive source test"

    file delete file1
    file delete file2
    file delete file3
}

proc gdb_test_no_prompt { command result msg } {
    global gdb_prompt

    set msg "$command - $msg"
    set result "^[string_to_regexp $command]\r\n$result$"
    gdb_test_multiple $command $msg {
	-re "$result" {
	    pass $msg
	    return 1
	}
	-re "\r\n *>$" {
	    fail $msg
	    return 0
	}
    }
    return 0
}

proc if_commands_test {} {
    global gdb_prompt

    gdb_test "set \$tem = 1" "" "set \$tem in if_commands_test"

    set test "if_commands_test 1"
    gdb_test_no_prompt "if \$tem == 2" { >} $test
    gdb_test_no_prompt "break main" { >} $test
    gdb_test_no_prompt "else" { >} $test
    gdb_test_no_prompt "break factorial" { >} $test
    gdb_test_no_prompt "commands" {  >} $test
    gdb_test_no_prompt "silent" {  >} $test
    gdb_test_no_prompt "set \$tem = 3" {  >} $test
    gdb_test_no_prompt "continue" {  >} $test
    gdb_test_multiple "end" "first end - $test" {
	-re " >\$" {
	    pass "first end - $test"
	}
	-re "\r\n>\$" {
	    fail "first end - $test"
	}
    }
    gdb_test_multiple "end" "second end - $test" {
	-re "Breakpoint \[0-9\]+ at .*: file .*/run.c, line \[0-9\]+\.\r\n$gdb_prompt $" {
	    pass "second end - $test"
	}
	-re "Undefined command: \"silent\".*$gdb_prompt $" {
	    fail "second end - $test"
	}
    }

    set test "if_commands_test 2"
    gdb_test_no_prompt "if \$tem == 1" { >} $test
    gdb_test_no_prompt "break main" { >} $test
    gdb_test_no_prompt "else" { >} $test
    gdb_test_no_prompt "break factorial" { >} $test
    gdb_test_no_prompt "commands" {  >} $test
    gdb_test_no_prompt "silent" {  >} $test
    gdb_test_no_prompt "set \$tem = 3" {  >} $test
    gdb_test_no_prompt "continue" {  >} $test
    gdb_test_multiple "end" "first end - $test" {
	-re " >\$" {
	    pass "first end - $test"
	}
	-re "\r\n>\$" {
	    fail "first end - $test"
	}
    }
    gdb_test_multiple "end" "second end - $test" {
	-re "Breakpoint \[0-9\]+ at .*: file .*/run.c, line \[0-9\]+\.\r\n$gdb_prompt $" {
	    pass "second end - $test"
	}
    }
}

proc redefine_hook_test {} {
    global gdb_prompt

    gdb_test "define one\nend" \
      "" \
      "define one"

    gdb_test "define hook-one\necho hibob\\n\nend" \
      "" \
      "define hook-one"

    gdb_test_multiple "define one" "redefine one" {
	-re "Redefine command .one.. .y or n. $" {
	    send_gdb "y\n"
	    exp_continue
	}

	-re "End with"  {
	    pass "define one in redefine_hook_test"
	}
        default {
	    fail "(timeout or eof) define one in redefine_hook_test"
	}
    }

    gdb_test "end" \
	    "" \
	    "enter commands for one redefinition in redefine_hook_test"

    gdb_test "one" \
	    "hibob" \
	    "execute one command in redefine_hook_test"
}

proc redefine_backtrace_test {} {
    global gdb_prompt

    gdb_test_multiple "define backtrace" "define backtrace" {
	-re "Really redefine built-in.*$" {
	    send_gdb "y\n"
	    exp_continue
	}

	-re "End with"  {
	    pass "define backtrace in redefine_backtrace_test"
	}
        default {
	    fail "(timeout or eof) define backtrace in redefine_backtrace_test"
	}
    }
    gdb_test "echo hibob\\n\nend" \
	    "" \
	    "enter commands in redefine_backtrace_test"

    gdb_test "backtrace" \
	    "hibob" \
	    "execute backtrace command in redefine_backtrace_test"
    gdb_test "bt" \
	    "hibob" \
	    "execute bt command in redefine_backtrace_test"
}

gdbvar_simple_if_test
gdbvar_simple_while_test
gdbvar_complex_if_while_test
progvar_simple_if_test
progvar_simple_while_test
progvar_complex_if_while_test
if_while_breakpoint_command_test
infrun_breakpoint_command_test
breakpoint_command_test
user_defined_command_test
watchpoint_command_test
test_command_prompt_position
deprecated_command_test
bp_deleted_in_command_test
temporary_breakpoint_commands
stray_arg0_test
recursive_source_test
if_commands_test
redefine_hook_test
# This one should come last, as it redefines "backtrace".
redefine_backtrace_test
