#   Copyright 1988, 1990, 1991, 1992, 1994, 1995, 1997, 1998, 1999, 2000,
#   2001 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 2 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  

# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu

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}] != "" } {
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}

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
    }

    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.*$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
    
    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.*Program exited normally.*$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
    
    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" \
	    "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.*Program exited normally.*" {
	    pass "run factorial until temporary breakpoint"
	}
	timeout { fail "(timeout) run factorial until temporary breakpoint" }
    }
}
  
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
