# Copyright 1998-2013 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
#

standard_testfile break.c break1.c

if {[prepare_for_testing ${testfile}.exp ${testfile} \
	 [list $srcfile $srcfile2] {debug nowarnings}]} {
    return -1
}

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
