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

# 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 document command preserves whitespace in the beginning of the line.
#
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 $" {}
             timeout {fail "(timeout) preserve whitespace in help string"}
           }
          }
  -re "$gdb_prompt $"\
          {fail "preserve whitespace in help string"}
  timeout {fail "(timeout) preserve whitespace in help string"}
}

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 "preserve whitespace in help string"}
  -re "$gdb_prompt $"\
          {fail "preserve whitespace in help string"}
  timeout {fail "(timeout) preserve whitespace in help string"}
}

# 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






