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

if { [prepare_for_testing commands.exp commands run.c {debug additional_flags=-DFAKEARGV}] } {
    return -1
}

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 is able to source a file with an indented comment.
proc source_file_with_indented_comment {} {
    set fd [open "file1" w]
    puts $fd \
{define my_fun
    #indented comment
end
echo Done!\n}
    close $fd

    gdb_test "source file1" "Done!" "source file with indented comment"
}

# 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
source_file_with_indented_comment
recursive_source_test
if_commands_test
redefine_hook_test
# This one should come last, as it redefines "backtrace".
redefine_backtrace_test
