# Copyright 1998, 1999, 2001, 2003, 2004, 2007, 2008
# 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/>.

# 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 srcfile1 ${testfile}1.c
set binfile ${objdir}/${subdir}/${testfile}

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}0.o" object {debug nowarnings}] != "" } {
     untested define.exp
     return -1
}

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile1}" "${binfile}1.o" object {debug nowarnings}] != "" } {
     untested define.exp
     return -1
}

if  { [gdb_compile "${binfile}0.o ${binfile}1.o" "${binfile}" executable {debug nowarnings}] != "" } {
     untested define.exp
     return -1
}

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

set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]
set bp_location11 [gdb_get_line_number "set breakpoint 11 here"]

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 ".*$bp_location1\[ \t\]*printf.*#0\[ \t\]*main.*:$bp_location1.*$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 "document user command: nextwhere"}
  timeout {fail "(timeout) document 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 "re-document user command: nextwhere"}
             timeout {fail "(timeout) re-document user command: nextwhere"}
           }
          }
  -re "$gdb_prompt $"\
          {fail "re-document user command: nextwhere"}
  timeout {fail "(timeout) re-document 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 command parser doesn't require a space after an 'if'
# command in a user defined function.
#
gdb_test_multiple "define ifnospace" "define user command: ifnospace" \
{
  -re "Type commands for definition of \"ifnospace\".\r\nEnd with a line saying just \"end\".\r\n>$" \
    {
      gdb_test_multiple "if(3<4)\nprint \"hi there\\n\"\nend\nend" "send body of ifnospace"  \
        {
         -re "$gdb_prompt $"\
                 {pass "define user command: ifnospace"}
        }
    }
}

gdb_test "ifnospace" ".*hi there.*" "test ifnospace is parsed correctly"

# Verify that the command parser doesn't require a space after an 'while'
# command in a user defined function.
#
gdb_test_multiple "define whilenospace" "define user command: whilenospace" \
{
  -re "Type commands for definition of \"whilenospace\".\r\nEnd with a line saying just \"end\".\r\n>$" \
    {
      gdb_test_multiple "set \$i=1\nwhile(\$i<2)\nset \$i=2\nprint \"hi there\\n\"\nend\nend" "send body of whilenospace" \
         {
           -re "$gdb_prompt $" \
                   {pass "define user command: whilenospace"}
         }
    }
}

gdb_test "whilenospace" ".*hi there.*" "test whilenospace is parsed correctly"

# 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.*:$bp_location11.*$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






