#   Copyright 1988-2020 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/>.

#
# test special commands (if, while, etc)
#

standard_testfile

if { [prepare_for_testing "failed to prepare" commands run.c {debug additional_flags=-DFAKEARGV}] } {
    return -1
}

# Run to FUNCTION.  If that fails, issue a FAIL and make the caller
# return.

proc runto_or_return {function} {
    if { ![runto factorial] } {
	fail "cannot run to $function"
	return -code return
    }
}

proc_with_prefix gdbvar_simple_if_test {} {
    global valnum_re

    gdb_test_no_output "set \$foo = 0" "set foo"
    # All this test should do is print 0xdeadbeef once.
    gdb_test \
	[multi_line_input \
	     {if $foo == 1} \
	     {  p/x 0xfeedface} \
	     {else} \
	     {  p/x 0xdeadbeef} \
	     {end}] \
	"$valnum_re = 0xdeadbeef" \
	"#1"

    # All this test should do is print 0xfeedface once.
    gdb_test \
	[multi_line_input \
	     {if $foo == 0} \
	     {  p/x 0xfeedface} \
	     {else} \
	     {  p/x 0xdeadbeef} \
	     {end}] \
	"$valnum_re = 0xfeedface" \
	"#2"
}

proc_with_prefix gdbvar_simple_while_test {} {
    global valnum_re

    gdb_test_no_output "set \$foo = 5" "set foo"
    # This test should print 0xfeedface five times.
    gdb_test \
	[multi_line_input \
	     {while $foo > 0} \
	     {  p/x 0xfeedface} \
	     {  set $foo -= 1} \
	     {end}] \
	[multi_line \
	     "$valnum_re = 0xfeedface" \
	     "$valnum_re = 0xfeedface" \
	     "$valnum_re = 0xfeedface" \
	     "$valnum_re = 0xfeedface" \
	     "$valnum_re = 0xfeedface"] \
	"#1"
}

proc_with_prefix gdbvar_complex_if_while_test {} {
    global valnum_re

    gdb_test_no_output "set \$foo = 4" "set foo"
    # This test should alternate between 0xdeadbeef and 0xfeedface two times.
    gdb_test \
	[multi_line_input \
	     {while $foo > 0} \
	     {  set $foo -= 1} \
	     {  if ($foo % 2) == 1} \
	     {    p/x 0xdeadbeef} \
	     {  else} \
	     {    p/x 0xfeedface} \
	     {  end} \
	     {end}] \
	[multi_line \
	     "$valnum_re = 0xdeadbeef" \
	     "$valnum_re = 0xfeedface" \
	     "$valnum_re = 0xdeadbeef" \
	     "$valnum_re = 0xfeedface"] \
	"#1"
}

proc_with_prefix progvar_simple_if_test {} {
    global valnum_re

    runto_or_return factorial

    # 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" " = 5" "set value to 5"
    # All this test should do is print 0xdeadbeef once.
    gdb_test \
	[multi_line_input \
	     {if value == 1} \
	     {  p/x 0xfeedface} \
	     {else} \
	     {  p/x 0xdeadbeef} \
	     {end}] \
	"$valnum_re = 0xdeadbeef" \
	"#1"

    # All this test should do is print 0xfeedface once.
    gdb_test \
	[multi_line_input \
	     {if value == 5} \
	     {  p/x 0xfeedface} \
	     {else} \
	     {  p/x 0xdeadbeef} \
	     {end}] \
	"$valnum_re = 0xfeedface" \
	"#2"
}

proc_with_prefix progvar_simple_while_test {} {
    global valnum_re

    runto_or_return factorial

    # 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" " = 5" "set value to 5"
    # This test should print 0xfeedface five times.
    gdb_test \
	[multi_line_input \
	     {while value > 0} \
	     {  p/x 0xfeedface} \
	     {  set value -= 1} \
	     {end}] \
	[multi_line \
	     "$valnum_re = 0xfeedface" \
	     "$valnum_re = 0xfeedface" \
	     "$valnum_re = 0xfeedface" \
	     "$valnum_re = 0xfeedface" \
	     "$valnum_re = 0xfeedface"] \
	"#1"
}

proc_with_prefix progvar_complex_if_while_test {} {
    global valnum_re

    runto_or_return factorial

    # 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" " = 4" "set value to 4"
    # This test should alternate between 0xdeadbeef and 0xfeedface two
    # times.
    gdb_test \
	[multi_line_input \
	     {while value > 0} \
	     {  set value -= 1} \
	     {  if (value % 2) == 1} \
	     {    p/x 0xdeadbeef} \
	     {  else} \
	     {    p/x 0xfeedface} \
	     {  end} \
	     {end}] \
	[multi_line \
	     "$valnum_re = 0xdeadbeef" \
	     "$valnum_re = 0xfeedface" \
	     "$valnum_re = 0xdeadbeef" \
	     "$valnum_re = 0xfeedface"] \
	"#1"
}

proc_with_prefix if_while_breakpoint_command_test {} {
    global valnum_re

    runto_or_return factorial

    # 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" " = 5" "set value to 5"
    delete_breakpoints
    gdb_test "break factorial" "Breakpoint.*at.*"

    gdb_test_multiple "commands" "commands" {
	-re "End with" {
	    pass "commands"
	}
    }

    # This test should alternate between 0xdeadbeef and 0xfeedface two times.
    gdb_test \
	[multi_line_input \
	     {while value > 0} \
	     {  set value -= 1} \
	     {  if (value % 2) == 1} \
	     {    p/x 0xdeadbeef} \
	     {  else} \
	     {    p/x 0xfeedface} \
	     {  end} \
	     {end} \
	     {end}] \
	"" \
	"commands part 2"
    gdb_test \
	"continue" \
	[multi_line \
	     "$valnum_re = 0xdeadbeef" \
	     "$valnum_re = 0xfeedface" \
	     "$valnum_re = 0xdeadbeef" \
	     "$valnum_re = 0xfeedface"] \
	"#1"
    gdb_test "info break" "while.*set.*if.*p/x.*else.*p/x.*end.*"
}

# 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_with_prefix infrun_breakpoint_command_test {} {
    runto_or_return factorial

    # 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" " = 6" "set value to 6"
    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

    set test "commands #1"
    gdb_test_multiple "commands" $test {
	-re "End with" {
	    pass $test
	}
    }
    gdb_test "step\nstep\nstep\nstep\nend" "" \
	"commands #2"

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

proc_with_prefix breakpoint_command_test {} {
    runto_or_return factorial

    # 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" " = 6" "set value to 6"
    delete_breakpoints
    gdb_test "break factorial" "Breakpoint.*at.*"
    gdb_test \
	[multi_line_input \
	     {commands} \
	     {  printf "Now the value is %d\n", value} \
	     {end}] \
	"End with.*" \
	"commands"
    gdb_test "continue" \
	    "Breakpoint \[0-9\]*, factorial.*Now the value is 5"
    gdb_test "print value" " = 5"
}

# Test clearing the commands of several breakpoints with one single "end".
proc_with_prefix breakpoint_clear_command_test {} {
    runto_or_return factorial

    set any "\[^\r\n\]*"
    delete_breakpoints
    gdb_test "break factorial" "Breakpoint.*at.*"
    gdb_test_no_output "set \$bpnumfactorial = \$bpnum"
    gdb_test "break main" "Breakpoint.*at.*"
    gdb_test_no_output "set \$bpnummain = \$bpnum"

    gdb_test \
	[multi_line_input \
	     {commands $bpnumfactorial $bpnummain} \
	     {  print 1234321} \
	     {end}] \
	"End with.*" \
	"set commands of two breakpoints to print 1234321"
    gdb_test "info breakpoints" \
	[multi_line \
	     "${any}What${any}" \
	     "${any}in factorial${any}" \
	     "${any}print 1234321${any}" \
	     "${any}in main${any}" \
	     "${any}print 1234321${any}" \
	    ] \
	"print 1234321 command present in the two breakpoints"
    gdb_test \
	[multi_line_input \
	     {commands $bpnumfactorial $bpnummain} \
	     {end}] \
	"End with.*" \
	"clear the command list of the two breakpoints"
    gdb_test "info breakpoints" \
	[multi_line \
	     "${any}What${any}" \
	     "${any}in factorial${any}" \
	     "${any}in main${any}" \
	    ] \
	"print 1234321 command is not present anymore in the two breakpoints"
    }

# Test a simple user defined command (with arguments)
proc_with_prefix user_defined_command_test {} {
    global valnum_re

    gdb_test_no_output "set \$foo = 4" "set foo"

    gdb_test_multiple "define mycommand" "define mycommand" {
	-re "End with"  {
	    pass "define mycommand"
	}
    }

    # This test should alternate between 0xdeadbeef and 0xfeedface two times.
    gdb_test \
	[multi_line_input \
	     {while $arg0 > 0} \
	     {  set $arg0 -= 1} \
	     {  if ($arg0 % 2) == 1} \
	     {    p/x 0xdeadbeef} \
	     {  else} \
	     {    p/x 0xfeedface} \
	     {  end} \
	     {end} \
	     {end}] \
	"" \
	"enter commands"

    global decimal
    set valnum_re "\\\$$decimal"

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

    # Create and test a user-defined command with an empty body.
    gdb_test_multiple "define myemptycommand" "define myemptycommand" {
	-re "End with"  {
	    pass "define myemptycommand"
	}
    }
    gdb_test "end" \
	"" \
	"end definition of user-defined command with empty body"

    gdb_test_no_output "myemptycommand" \
	"execute user-defined empty command"

    gdb_test "show user" \
	"User command \"myemptycommand.*" \
	"display empty command in command list"

    gdb_test "show user myemptycommand" \
	"User command \"myemptycommand.*" \
	"display user-defined empty command"
}

# Test that the case with which the command was defined is preserved.

proc_with_prefix user_defined_command_case_sensitivity {} {
    # Define a first command with mixed case name.
    set test "define Homer-Simpson"
    gdb_test_multiple $test $test {
	    -re "End with"  {
		pass $test
	    }
	}

    gdb_test "print 123\nend" "" "enter commands 1"

    # Define a second command, same name but different case.
    set test "define HomeR-SimpsoN"
    gdb_test_multiple $test $test {
	    -re "End with"  {
		pass $test
	    }
	}

    gdb_test "print 456\nend" "" "enter commands 2"

    gdb_test "Homer-Simpson" " = 123" "execute command Homer-Simpson"
    gdb_test "HomeR-SimpsoN" " = 456" "execute command HomeR-SimpsoN"
    gdb_test "HOMER-SIMPSON" "Undefined command.*" "try to call in upper case"
    gdb_test "homer-simpson" "Undefined command.*" "try to call in lower case"
}

# Test that "eval" in a user-defined command expands $argc/$argN.

proc_with_prefix user_defined_command_args_eval {} {
    gdb_test_multiple "define command_args_eval" \
	"define command_args_eval" {
	    -re "End with"  {
		pass "define"
	    }
	}

    # Make a command that constructs references to $argc and $argN via
    # eval.
    gdb_test \
	[multi_line \
	     {eval "printf \"argc = %%d,\", $arg%c", 'c'} \
	     {set $i = 0} \
	     {while $i < $argc} \
	     {  eval "printf \" %%d\", $arg%d", $i} \
	     {  set $i = $i + 1} \
	     {end} \
	     {printf "\n"} \
	     {end}] \
	"" \
	"enter commands"

    gdb_test "command_args_eval 1 2 3" "argc = 3, 1 2 3" "execute command"
}

# Test that the $argc/$argN variables are pushed on/popped from the
# args stack correctly when a user-defined command calls another
# user-defined command (or in this case, recurses).

proc_with_prefix user_defined_command_args_stack_test {} {
    gdb_test_multiple "define args_stack_command" \
	"define args_stack_command" {
	    -re "End with"  {
		pass "define"
	    }
	}

    # Make a command that refers to $argc/$argN before and after
    # recursing.  Also, vary the number of arguments passed to each
    # recursion point.
    gdb_test \
	[multi_line \
	     {printf "before, argc = %d,", $argc} \
	     {set $i = 0} \
	     {while $i < $argc} \
	     {  eval "printf \" %%d\", $arg%d", $i} \
	     {  set $i = $i + 1} \
	     {end} \
	     {printf "\n"} \
	     {} \
	     {} \
	     {if $argc == 3} \
	     {  args_stack_command 21 22} \
	     {end} \
	     {if $argc == 2} \
	     {  args_stack_command 11} \
	     {end} \
	     {} \
	     {} \
	     {printf "after, argc = %d,", $argc} \
	     {set $i = 0} \
	     {while $i < $argc} \
	     {  eval "printf \" %%d\", $arg%d", $i} \
	     {  set $i = $i + 1} \
	     {end} \
	     {printf "\n"} \
	     {end}] \
	"" \
	"enter commands"

    set expected \
	[multi_line \
	     "before, argc = 3, 31 32 33" \
	     "before, argc = 2, 21 22" \
	     "before, argc = 1, 11" \
	     "after, argc = 1, 11" \
	     "after, argc = 2, 21 22" \
	     "after, argc = 3, 31 32 33"]
    gdb_test "args_stack_command 31 32 33" $expected "execute command"
}

# Test a simple user defined command with many arguments.  GDB <= 7.12
# used to have a hard coded limit of 10 arguments.

proc_with_prefix user_defined_command_manyargs_test {} {
    set test "define command"
    gdb_test_multiple "define manyargs" $test {
	-re "End with"  {
	    pass $test
	}
    }

    # Define a function that doubles its arguments.
    gdb_test \
	[multi_line \
	     {printf "nargs=%d:", $argc} \
	     {set $i = 0} \
	     {while $i < $argc} \
	     {  eval "printf \" %%d\", 2 * $arg%d\n", $i} \
	     {  set $i = $i + 1} \
	     {end} \
	     {printf "\n"} \
	     {end}] \
	"" \
	"enter commands"

    # Some random number of arguments, as long as higher than 10.
    set nargs 100

    set cmd "manyargs"
    for {set i 1} {$i <= $nargs} {incr i} {
	append cmd " $i"
    }

    set expected "nargs=$nargs:"
    for {set i 1} {$i <= $nargs} {incr i} {
	append expected " " [expr 2 * $i]
    }

    gdb_test $cmd $expected "execute command"
}

proc_with_prefix watchpoint_command_test {} {
    global gdb_prompt

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

    runto_or_return factorial

    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

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

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

    gdb_test_multiple "commands $wp_id" "begin commands on watch" {
	-re "Type commands for breakpoint.*, one per line.*>$" {
	    pass "begin commands on watch"
	}
    }
    # See the 'No symbol "value...' fail below.  This command will
    # fail if it's executed in the wrong frame.  If adjusting the
    # test, make sure this property holds.
    gdb_test_multiple "print value" "add print command to watch" {
	-re ">$" {
	    pass "add print command to watch"
	}
    }
    gdb_test_multiple "continue" "add continue command to watch" {
	-re ">$" {
	    pass "add continue command to watch"
	}
    }
    gdb_test "end" \
	"" \
	"end commands on watch"

    set test "continue with watch"
    set lno_1 [gdb_get_line_number "commands.exp: hw local_var out of scope" "run.c"]
    set lno_2 [gdb_get_line_number "commands.exp: local_var out of scope"    "run.c"]
    gdb_test_multiple "continue" "$test" {
	-re "No symbol \"value\" in current context.\r\n$gdb_prompt $" {
	    # Happens if GDB actually runs the watchpoints commands,
	    # even though the watchpoint was deleted for not being in
	    # scope.
	    fail $test
	}
	-re "Continuing.*\[Ww\]atchpoint $wp_id deleted because the program has left the block in.*which its expression is valid.*run.c:($lno_1|$lno_2).*$gdb_prompt $" {
	    pass $test
	}
   }
}

proc_with_prefix test_command_prompt_position {} {
    global gdb_prompt
    global valnum_re

    runto_or_return factorial

    # 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.*"
    gdb_test "p value=5" ".*" "set value to 5"
    # All this test should do is print 0xdeadbeef once.
    gdb_test \
	[multi_line_input \
	     {if value == 1} \
	     {  p/x 0xfeedface} \
	     {else} \
	     {  p/x 0xdeadbeef} \
	     {end}] \
	"$valnum_re = 0xdeadbeef" \
	"if test"

    # 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.

    set test "> OK"
    gdb_test_multiple "commands" $test {
	-re "Type commands.*End with.*\[\r\n\]>$" {
	    gdb_test_multiple "printf \"Now the value is %d\\n\", value" $test {
		-re "^printf.*value\r\n>$" {
		    gdb_test_multiple "end" $test {
			-re "^end\r\n$gdb_prompt $" { 
			    pass $test
			}
		    }
		}
	    }
	}
    }
}



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

    gdb_test_no_output "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_no_output "maintenance deprecate p \"new_p\"" "maintenance deprecate p \"new_p\" /2/"
    gdb_test_no_output "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_no_output "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_no_output "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_with_prefix bp_deleted_in_command_test {} {
    global gdb_prompt

    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\]+\."
    
    gdb_test_multiple "commands" "begin commands" {
      -re "Type commands for breakpoint.*>$" {
          pass "begin commands"
      }
    }
    gdb_test_multiple "silent" "add silent command" {
        -re ">$" {
	    pass "add silent command"
	}
    }
    gdb_test_multiple "clear factorial" "add clear command" {
        -re ">$" {
	    pass "add clear command"
	}
    }
    gdb_test_multiple "printf \"factorial command-list executed\\n\"" \
	"add printf command" {
        -re ">$" {
	    pass "add printf command"
	}
    }
    gdb_test_multiple "cont" "add cont command" {
        -re ">$" {
	    pass "add cont command"
	}
    }
    gdb_test "end" \
	"" \
	"end commands"

    gdb_run_cmd
    gdb_test "" "factorial command-list executed.*" "run factorial until breakpoint"
}

proc_with_prefix 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"

    gdb_test_multiple "commands" \
	"begin commands in bp_deleted_in_command_test" {
	    -re "Type commands for breakpoint.*>$" {
		pass "begin commands"
	    }
	}
    gdb_test_multiple "silent" "add silent tbreak command" {
	-re ">$" {
	    pass "add silent tbreak command"
	}
    }
    gdb_test_multiple "printf \"factorial tbreak commands executed\\n\"" \
	"add printf tbreak command" {
	    -re ">$" {
		pass "add printf tbreak command"
	    }
	}
    gdb_test_multiple "cont" "add cont tbreak command" {
	-re ">$" {
	    pass "add cont tbreak command"
	}
    }
    gdb_test "end" \
	"" \
	"end tbreak commands"

    gdb_run_cmd
    gdb_test "" "factorial tbreak commands executed.*" \
	"run factorial until temporary breakpoint"
}

# Test that GDB can handle $arg0 outside of user functions without
# crashing.
proc_with_prefix stray_arg0_test { } {
    global valnum_re

    gdb_test "print \$arg0" \
	"$valnum_re = void" \
	"#1"

    gdb_test "if 1 == 1\nprint \$arg0\nend" \
	"$valnum_re = void" \
	"#2"

    gdb_test "print \$arg0 = 1" \
	"$valnum_re = 1" \
	"#3"

    gdb_test "print \$arg0" \
	"$valnum_re = 1" \
	"#4"
}

# Test that GDB is able to source a file with an indented comment.
proc_with_prefix source_file_with_indented_comment {} {
    set file1 [standard_output_file file1]

    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"
}

# Test that GDB can handle arguments when sourcing files recursively.
# If the arguments are overwritten with ####### then the test has failed.
proc_with_prefix recursive_source_test {} {
    set file1 [standard_output_file file1]
    set file2 [standard_output_file file2]
    set file3 [standard_output_file file3]

    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>>>" \
	"source file"

    file delete $file1
    file delete $file2
    file delete $file3
}

proc gdb_test_no_prompt { command result msg } {
    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_with_prefix if_commands_test {} {
    global gdb_prompt

    gdb_test_no_output "set \$tem = 1" "set \$tem"

    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"
	}
    }
}

# Verify an error during "commands" commands execution will prevent any other
# "commands" from other breakpoints at the same location to be executed.

proc_with_prefix error_clears_commands_left {} {
    set test "hook-stop 1"
    gdb_test_multiple {define hook-stop} $test {
	-re "End with a line saying just \"end\"\\.\r\n>$" {
	    pass $test
	}
    }
    set test "hook-stop 1a"
    gdb_test_multiple {echo hook-stop1\n} $test {
	-re "\r\n>$" {
	    pass $test
	}
    }
    gdb_test_no_output "end" "hook-stop 1b"

    delete_breakpoints
    gdb_breakpoint "main"

    set test "main commands 1"
    gdb_test_multiple {commands $bpnum} $test {
	-re "End with a line saying just \"end\"\\.\r\n>$" {
	    pass $test
	}
    }
    set test "main commands 1a"
    gdb_test_multiple {echo cmd1\n} $test {
	-re "\r\n>$" {
	    pass $test
	}
    }
    set test "main commands 1b"
    gdb_test_multiple {errorcommandxy\n} $test {
	-re "\r\n>$" {
	    pass $test
	}
    }
    gdb_test_no_output "end" "main commands 1c"

    gdb_breakpoint "main"
    set test "main commands 2"
    gdb_test_multiple {commands $bpnum} $test {
	-re "End with a line saying just \"end\"\\.\r\n>$" {
	    pass $test
	}
    }
    set test "main commands 2a"
    gdb_test_multiple {echo cmd2\n} $test {
	-re "\r\n>$" {
	    pass $test
	}
    }
    set test "main commands 2b"
    gdb_test_multiple {errorcommandyz\n} $test {
	-re "\r\n>$" {
	    pass $test
	}
    }
    gdb_test_no_output "end" "main commands 2c"

    gdb_run_cmd
    gdb_test \
	"" \
	[multi_line \
	     "hook-stop1" \
	     ".*" \
	     "cmd1" \
	     "Undefined command: \"errorcommandxy\"\\.  Try \"help\"\\."] \
	"cmd1 error"

    gdb_test {echo idle\n} "\r\nidle" "no cmd2"
}

proc_with_prefix redefine_hook_test {} {
    gdb_test \
	[multi_line_input \
	     "define one"\
	     "end"] \
	"" \
	"define one"

    gdb_test \
	[multi_line_input \
	     "define hook-one" \
	     "echo hibob\\n" \
	     "end"] \
	"" \
	"define hook-one"

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

	-re "End with"  {
	    pass $test
	}
    }

    gdb_test "end" "" "enter commands for one redefinition"

    gdb_test "one" "hibob" "execute one command"
}

proc_with_prefix redefine_backtrace_test {} {
    gdb_test_multiple "define backtrace" "define backtrace" {
	-re "Really redefine built-in command \"backtrace\"\\? \\(y or n\\) $"  {
	    pass "define backtrace"
	}
    }

    gdb_test_multiple "y" "expect response to define backtrace" {
	-re "End with a line saying just \"end\"\\.\r\n>$"  {
	    pass "expect response to define backtrace"
	}
    }

    gdb_test \
	[multi_line_input \
	     "echo hibob\\n" \
	     "end"] \
	"" \
	"enter commands"

    gdb_test "backtrace" "hibob" "execute backtrace command"
    gdb_test "bt" "hibob" "execute bt command"
}

# Test using "if" and "while" without args when building a command list.

proc define_if_without_arg_test {} {
    foreach cmd {if while define} {
	set test "define some_command_$cmd"
	gdb_test_multiple $test $test {
	    -re "End with"  {
		pass $test
	    }
	}

	gdb_test "$cmd" "$cmd command requires an argument." "type $cmd without args"
    }
}

# Test the loop_break command.

proc_with_prefix loop_break_test {} {
    gdb_test_no_output "set \$a = 0" "initialize \$a"
    gdb_test_no_output "set \$total = 0" "initialize \$total"

    gdb_test \
	[multi_line_input \
	     "while \$a < 5" \
	     "  if \$a == 4" \
	     "    loop_break" \
	     "  end" \
	     "  set \$b = 0" \
	     "  while \$b < 5" \
	     "    if \$b == 2" \
	     "      loop_break" \
	     "    end" \
	     "    set \$total = \$total + 1" \
	     "    set \$b = \$b + 1" \
	     "  end" \
	     "  set \$a = \$a + 1" \
	     "end"] \
	"" \
	"run while loop"

    gdb_test "print \$a" " = 4" "validate \$a"
    gdb_test "print \$b" " = 2" "validate \$b"
    gdb_test "print \$total" " = 8" "validate \$total"
}

# Test the loop_continue command.

proc_with_prefix loop_continue_test {} {
    gdb_test_no_output "set \$a = 0" "initialize \$a"
    gdb_test_no_output "set \$total = 0" "initialize \$total"

    gdb_test \
	[multi_line_input \
	     "while \$a < 5" \
	     "  set \$a = \$a + 1" \
	     "  set \$b = 0" \
	     "  if \$a == 4" \
	     "    loop_continue" \
	     "  end" \
	     "  while \$b < 5" \
	     "    set \$b = \$b + 1" \
	     "    if \$b == 2" \
	     "      loop_continue" \
	     "    end" \
	     "    set \$total = \$total + 1" \
	     "  end" \
	     "end"] \
	"" \
	"run while loop"

    gdb_test "print \$a" " = 5" "validate \$a"
    gdb_test "print \$b" " = 5" "validate \$b"
    gdb_test "print \$total" " = 16" "validate \$total"
}

# Test an input line split with a continuation character (backslash)
# while entering a multi-line command (in a secondary prompt).

proc_with_prefix backslash_in_multi_line_command_test {} {
    set dg_ver [dejagnu_version]
    set dg_major [lindex $dg_ver 0]
    set dg_minor [lindex $dg_ver 1]

    # With older versions of DejaGnu, the "\\\n" we send gets replaced with a
    # space, thus breaking the test.  Just skip it in that case.
    if { $dg_major == 1 && $dg_minor < 5 } {
	untested "dejagnu version is too old"
	return
    }

    gdb_breakpoint "main"

    gdb_test_multiple "commands" "commands" {
	-re "End with a line saying just \"end\"\\.\r\n>$" {
	    pass "commands"
	}
    }

    set test "input line split with backslash"
    send_gdb "print \\\nargc\n"
    gdb_test_multiple "" $test {
	-re "^print \\\\\r\nargc\r\n>$" {
	    pass $test
	}
    }

    gdb_test_no_output "end"

    # Input any command, just to be sure the readline state is sane.
    # In PR 21218, this would trigger the infamous:
    # readline: readline_callback_read_char() called with no handler!
    gdb_test "print 1" "" "run command"
}

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
breakpoint_clear_command_test
user_defined_command_test
user_defined_command_case_sensitivity
user_defined_command_args_eval
user_defined_command_args_stack_test
user_defined_command_manyargs_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
error_clears_commands_left
redefine_hook_test
backslash_in_multi_line_command_test
define_if_without_arg_test
loop_break_test
loop_continue_test
# This one should come last, as it redefines "backtrace".
redefine_backtrace_test
