# Copyright 1998-1999, 2001, 2003-2004, 2007-2012 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)


#
# test running programs
#

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.
#
gdb_test_multiple "define nextwhere" "define user command: nextwhere" {
    -re "Type commands for definition of \"nextwhere\".\r\nEnd with a line saying just \"end\".\r\n>$" {
	gdb_test "next\nbt\nend" "" \
	    "define user command: nextwhere"
    }
}

# Verify that those commands work as gdb_expected.
#
gdb_test "nextwhere" \
    "$bp_location1\[ \t\]*printf.*#0\[ \t\]*main.*:$bp_location1.*" \
    "use user command: nextwhere"

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

# Verify that a user can redefine their commands.  (Test both the
# confirmed and unconfirmed cases.)
#
gdb_test "define nextwhere" \
    "Command \"nextwhere\" not redefined.*" \
    "redefine user command aborted: nextwhere" \
    "Redefine command \"nextwhere\".*y or n. $" \
    "n"

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.
#
gdb_test "document step" "Command \"step\" is built-in.*" \
    "redocumenting builtin command disallowed"

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

gdb_test_multiple "document nextwhere" "re-document user command: nextwhere" {
    -re "Type documentation for \"nextwhere\".\r\nEnd with a line saying just \"end\".\r\n>$" {
	gdb_test "A next command that first shows you where you're stepping from.\nend" \
	    "" \
	    "re-document user command: nextwhere"
    }
}

gdb_test "help nextwhere" \
    "A next command that first shows you where you're stepping from.*" \
    "help user command: nextwhere"

# Verify that the document command preserves whitespace in the beginning of the line.
#
gdb_test_multiple "document nextwhere" "set up whitespace in help string" {
    -re "Type documentation for \"nextwhere\".\r\nEnd with a line saying just \"end\".\r\n>$" {
	gdb_test "   A next command that first shows you where you're stepping from.\nend" \
	    "" \
	    "set up whitespace in help string"
    }
}

gdb_test "help nextwhere" \
    "   A next command that first shows you where you're stepping from.*" \
    "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.
#
gdb_test_multiple "define user-bt" "define user command: user-bt" {
    -re "Type commands for definition of \"user-bt\".\r\nEnd with a line saying just \"end\".\r\n>$" {
	gdb_test "bt\nend" \
	    "" \
	    "define user command: user-bt"
    }
}

gdb_test_multiple "define hook-stop" "define hook-stop command" {
    -re "Type commands for definition of \"hook-stop\".\r\nEnd with a line saying just \"end\".\r\n>$" {
	gdb_test "user-b\nend" \
	    "" \
	    "define hook-stop command"
    }
}

gdb_test "next" "#0\[ \t\]*main.*:$bp_location11.*" \
    "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.)
#
gdb_test "define hook-bar" \
    "Not confirmed.*" \
    "define hook undefined command aborted: bar" \
    "warning: Your new `hook-bar' command does not hook any existing command.\r\nProceed.*y or n. $" \
    "n"

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

# Test creation of an additional target subcommand.
gdb_test_multiple "define target testsuite" "" {
    -re "Type commands for definition of \"target testsuite\".\r\nEnd with a line saying just \"end\".\r\n>$" {
	gdb_test "printf \"hello\\n\"\nend" "" "define target testsuite"
    }
}
gdb_test_multiple "document target testsuite" "" {
    -re "Type documentation for \"target testsuite\".\r\nEnd with a line saying just \"end\".\r\n>$" {
	gdb_test "A test target.\nend" "" "document target testsuite"
    }
}

gdb_test "help target" ".*A test target.*"
gdb_test "target testsuite" "hello"
gdb_test "show user target testsuite" "User command \"target testsuite\":\r\n  printf \"hello\\\\n\"\r\n"

# We should even be able to hook subcommands.
gdb_test_multiple "define target hook-testsuite" "" {
    -re "Type commands for definition of \"target hook-testsuite\".\r\nEnd with a line saying just \"end\".\r\n>$" {
	gdb_test "printf \"one\\n\"\nend" "" "define target hook-testsuite"
    }
}

gdb_test_multiple "define target hookpost-testsuite" "" {
    -re "Type commands for definition of \"target hookpost-testsuite\".\r\nEnd with a line saying just \"end\".\r\n>$" {
	gdb_test "printf \"two\\n\"\nend" "" "define target hookpost-testsuite"
    }
}

gdb_test "target testsuite" "one\r\nhello\r\ntwo" "target testsuite with hooks"

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

gdb_test_multiple "set prompt \\(gdb\\) " "reset gdb_prompt" {
    -re "$gdb_prompt $" {
	pass "reset gdb_prompt"
    }
}

gdb_exit
return 0
