# Copyright (C) 1998 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

# This file was written by Elena Zannoni. (ezannoni@cygnus.com)

if $tracelevel then {
	strace $tracelevel
	}

global usestubs


#
# test running programs
#
set prms_id 0
set bug_id 0

set testfile "break"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-w}] != "" } {
    gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}

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

if ![runto_main] then { fail "define tests suppressed" }

# Verify that GDB allows a user to define their very own commands.
#
send_gdb "define nextwhere\n"
gdb_expect {
  -re "Type commands for definition of \"nextwhere\".\r\nEnd with a line saying just \"end\".\r\n>$"\
          {send_gdb "next\nbt\nend\n"
           gdb_expect {
             -re "$gdb_prompt $"\
                     {pass "define user command: nextwhere"}
             timeout {fail "(timeout) define user command: nextwhere"}
           }
          }
  -re "$gdb_prompt $"\
          {fail "define user command: nextwhere"}
  timeout {fail "(timeout) define user command: nextwhere"}
}

# Verify that those commands work as gdb_expected.
#
send_gdb "nextwhere\n"
gdb_expect {
  -re ".*79\[ \t\]*printf.*#0\[ \t\]*main.*:79.*$gdb_prompt $"\
          {pass "use user command: nextwhere"}
  -re "$gdb_prompt $"\
          {fail "use user command: nextwhere"}
  timeout {fail "(timeout) use user command: nextwhere"}
}

# Verify that a user can define a command whose spelling is a
# proper substring of another user-defined command.
#
send_gdb "define nextwh\n"
gdb_expect {
  -re "Type commands for definition of \"nextwh\".\r\nEnd with a line saying just \"end\".\r\n>$"\
          {send_gdb "next 2\nbt\nend\n"
           gdb_expect {
             -re "$gdb_prompt $"\
                     {pass "define user command: nextwh"}
             timeout {fail "(timeout) define user command: nextwh"}
           }
          }
  -re "$gdb_prompt $"\
          {fail "define user command: nextwh"}
  timeout {fail "(timeout) define user command: nextwh"}
}

# Verify that a user can redefine their commands.  (Test both the
# confirmed and unconfirmed cases.)
#
send_gdb "define nextwhere\n"
gdb_expect {
  -re "Redefine command \"nextwhere\".*y or n. $"\
          {send_gdb "n\n"
           gdb_expect {
             -re "Command \"nextwhere\" not redefined.*$gdb_prompt $"\
                     {pass "redefine user command aborted: nextwhere"}
             -re "$gdb_prompt $"\
                     {fail "redefine user command aborted: nextwhere"}
             timeout {fail "(timeout) redefine user command aborted: nextwhere"}
           }
          }
  -re "$gdb_prompt $"\
          {fail "redefine user command aborted: nextwhere"}
  timeout {fail "(timeout) redefine user command aborted: nextwhere"}
}

send_gdb "define nextwhere\n"
gdb_expect {
  -re "Redefine command \"nextwhere\".*y or n. $"\
          {send_gdb "y\n"
           gdb_expect {
             -re "Type commands for definition of \"nextwhere\".\r\nEnd with a line saying just \"end\".\r\n>$"\
                     {send_gdb "bt\nnext\nend\n"
                      gdb_expect {
                        -re "$gdb_prompt $"\
                                {pass "redefine user command: nextwhere"}
                        timeout {fail "(timeout) redefine user command: nextwhere"}
                      }
                     }
             timeout {fail "(timeout) redefine user command: nextwhere"}
           }
          }
  -re "$gdb_prompt $"\
          {fail "redefine user command: nextwhere"}
  timeout {fail "(timeout) redefine user command: nextwhere"}
}

# Verify that GDB gracefully handles an attempt to redefine the
# help text for a builtin command.
#
send_gdb "document step\n"
gdb_expect {
  -re "Command \"step\" is built-in..*$gdb_prompt $"\
          {pass "redocumenting builtin command disallowed"}
  -re "$gdb_prompt $"\
          {fail "redocumenting builtin command disallowed"}
  timeout {fail "(timeout) redocumenting builtin command disallowed"}
}

# Verify that a user can document their own commands.  (And redocument
# them.)
#
send_gdb "document nextwhere\n"
gdb_expect {
  -re "Type documentation for \"nextwhere\".\r\nEnd with a line saying just \"end\".\r\n>$"\
          {send_gdb "A next command that frist shows you where you're stepping from.\nend\n"
           gdb_expect {
             -re "$gdb_prompt $"\
                     {pass "document user command: nextwhere"}
             timeout {fail "(timeout) document user command: nextwhere"}
           }
          }
  -re "$gdb_prompt $"\
          {fail "documenting user command: nextwhere"}
  timeout {fail "(timeout) documenting user command: nextwhere"}
}

send_gdb "document nextwhere\n"
gdb_expect {
  -re "Type documentation for \"nextwhere\".\r\nEnd with a line saying just \"end\".\r\n>$"\
          {send_gdb "A next command that first shows you where you're stepping from.\nend\n"
           gdb_expect {
             -re "$gdb_prompt $"\
                     {pass "document user command: nextwhere"}
             timeout {fail "(timeout) document user command: nextwhere"}
           }
          }
  -re "$gdb_prompt $"\
          {fail "documenting user command: nextwhere"}
  timeout {fail "(timeout) documenting user command: nextwhere"}
}

send_gdb "help nextwhere\n"
gdb_expect {
  -re "A next command that first shows you where you're stepping from.\r\n$gdb_prompt $"\
          {pass "help user command: nextwhere"}
  -re "$gdb_prompt $"\
          {fail "help user command: nextwhere"}
  timeout {fail "(timeout) help user command: nextwhere"}
}

# Verify that the user can "hook" a builtin command.  We choose to
# hook the "stop" pseudo command, and we'll define it to use a user-
# define command.
#
send_gdb "define user-bt\n"
gdb_expect {
  -re "Type commands for definition of \"user-bt\".\r\nEnd with a line saying just \"end\".\r\n>$"\
          {send_gdb "bt\nend\n"
           gdb_expect {
             -re "$gdb_prompt $"\
                       {pass "define user command: user-bt"}
             timeout {fail "(timeout) define user command: user-bt"}
           }
          }
  -re "$gdb_prompt $"\
          {fail "define user command: user-bt"}
  timeout {fail "(timeout) define user command: user-bt"}
}

send_gdb "define hook-stop\n"
gdb_expect {
  -re "Type commands for definition of \"hook-stop\".\r\nEnd with a line saying just \"end\".\r\n>$"\
          {send_gdb "user-b\nend\n"
           gdb_expect {
             -re "$gdb_prompt $"\
                       {pass "define hook-stop command"}
             timeout {fail "(timeout) define hook-stop command"}
           }
          }
  -re "$gdb_prompt $"\
          {fail "define hook-stop command"}
  timeout {fail "(timeout) define hook-stop command"}
}

send_gdb "next\n"
gdb_expect {
  -re "#0\[ \t\]*main.*:81.*$gdb_prompt $"\
          {pass "use hook-stop command"}
  -re "$gdb_prompt $"\
          {fail "use hook-stop command"}
  timeout {fail "(timeout) use hook-stop command"}
}

# Verify that GDB responds gracefully to an attempt to define a "hook
# command" which doesn't exist.  (Test both the confirmed and unconfirmed
# cases.)
#
send_gdb "define hook-bar\n"
gdb_expect {
  -re "warning: Your new `hook-bar' command does not hook any existing command.\r\nProceed.*y or n. $"\
          {send_gdb "n\n"
           gdb_expect {
             -re "Not confirmed.*$gdb_prompt $"\
                     {pass "define hook undefined command aborted: bar"}
             -re "$gdb_prompt $"\
                     {fail "define hook undefined command aborted: bar"}
             timeout {fail "(timeout) define hook undefined command aborted: bar"}
           }
          }
  -re "$gdb_prompt $"\
          {fail "define hook undefined command aborted: bar"}
  timeout {fail "(timeout) define hook undefined command aborted: bar"}
}

send_gdb "define hook-bar\n"
gdb_expect {
  -re "warning: Your new `hook-bar' command does not hook any existing command.\r\nProceed.*y or n. $"\
          {send_gdb "y\n"
           gdb_expect {
             -re "Type commands for definition of \"hook-bar\".\r\nEnd with a line saying just \"end\".\r\n>$"\
                     {send_gdb "nextwhere\nend\n"
                      gdb_expect {
                        -re "$gdb_prompt $"\
                                {pass "define hook undefined command: bar"}
                        timeout {fail "(timeout) define hook undefined command: bar"}
                      }
                     }
             -re "$gdb_prompt $"\
                     {fail "define hook undefined command: bar"}
             timeout {fail "(timeout) define hook undefined command: bar"}
           }
          }
  -re "$gdb_prompt $"\
          {fail "define hook undefined command: bar"}
  timeout {fail "(timeout) define hook undefined command: bar"}
}

# This is a quasi-define command: Verify that the user can redefine
# GDB's gdb_prompt.
#
send_gdb "set prompt \\(blah\\) \n"
gdb_expect {
  -re "\\(blah\\) $"\
          {pass "set gdb_prompt"}
  -re "$gdb_prompt $"\
          {fail "set gdb_prompt"}
  timeout {fail "(timeout) set gdb_prompt"}
}

send_gdb "set prompt \\(gdb\\) \n"
gdb_expect {
  -re "$gdb_prompt $"\
          {pass "reset gdb_prompt"}
  timeout {fail "(timeout) reset gdb_prompt"}
}

gdb_exit
return 0






