# This testcase is part of GDB, the GNU debugger.

# Copyright 2019-2021 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 test verifies the "define-prefix" command.

gdb_start

####################
# Verify the definition of user defined prefix commands.
# Test the definition of a command using these prefixes.

# Define an empty prefix command.
gdb_test_no_output "define-prefix abc-prefix"

# Verify an empty prefix command cannot be used as a command.
gdb_test "abc-prefix" \
    "\"abc-prefix\" must be followed by the name of a subcommand.*" \
    "execute prefix command not followed by subcommand"

# Define a sub-prefix command.
gdb_test_no_output "define-prefix abc-prefix def-prefix"

# Define ghi-cmd using the prefixes.
gdb_test_multiple "define abc-prefix def-prefix ghi-cmd" \
    "define user command: abc-prefix def-prefix ghi-cmd" {
	-re "Type commands for definition of \"abc-prefix def-prefix ghi-cmd\".\r\nEnd with a line saying just \"end\".\r\n>$" {
	    gdb_test "echo command ghi-cmd\\n\nend" "" \
		"define user command: ghi-cmd"
	}
    }
# Verify ghi-cmd works.
gdb_test "abc-prefix def-prefix ghi-cmd" \
    "command ghi-cmd" \
    "use user command: ghi-cmd"


####################
# Verify an existing (empty) command can be marked as a prefix command.
# Then verify an empty prefix command can be transformed into an executable command.

# Define ghi-prefix-cmd as an empty command.
gdb_test_multiple "define abc-prefix def-prefix ghi-prefix-cmd" \
    "define user command: abc-prefix def-prefix ghi-prefix-cmd" {
	-re "Type commands for definition of \"abc-prefix def-prefix ghi-prefix-cmd\".\r\nEnd with a line saying just \"end\".\r\n>$" {
	    gdb_test "end" "" \
		"define user command: ghi-prefix-cmd"
	}
    }
gdb_test_no_output "define-prefix abc-prefix def-prefix ghi-prefix-cmd"

# Verify a sequence ending with an empty prefix command cannot be used as
# a command.
gdb_test "abc-prefix def-prefix ghi-prefix-cmd" \
    "\"abc-prefix def-prefix ghi-prefix-cmd\" must be followed by the name of a subcommand.*" \
    "execute sequence of prefix commands not followed by a subcommand"

# Define jkl-cmd command.
gdb_test_multiple "define abc-prefix def-prefix ghi-prefix-cmd jkl-cmd" \
    "define user command: abc-prefix def-prefix ghi-prefix-cmd jkl-cmd" {
	-re "Type commands for definition of \"abc-prefix def-prefix ghi-prefix-cmd jkl-cmd\".\r\nEnd with a line saying just \"end\".\r\n>$" {
	    gdb_test "echo command jkl-cmd\\n\nend" "" \
		"define user command: jkl-cmd"
	}
    }
# Verify jkl-cmd command works.
gdb_test "abc-prefix def-prefix ghi-prefix-cmd jkl-cmd" \
    "command jkl-cmd" \
    "use user command: jkl-cmd"

# Define alternate-jkl-cmd and check it works.
# Define alternate-jkl-cmd command.
gdb_test_multiple "define abc-prefix def-prefix ghi-prefix-cmd alternate-jkl-cmd" \
    "define user command: abc-prefix def-prefix ghi-prefix-cmd alternate-jkl-cmd" {
	-re "Type commands for definition of \"abc-prefix def-prefix ghi-prefix-cmd alternate-jkl-cmd\".\r\nEnd with a line saying just \"end\".\r\n>$" {
	    gdb_test "echo command alternate-jkl-cmd\\n\nend" "" \
		"define user command: alternate-jkl-cmd"
	}
    }
# Verify alternate-jkl-cmd command works.
gdb_test "abc-prefix def-prefix ghi-prefix-cmd alternate-jkl-cmd" \
    "command alternate-jkl-cmd" \
    "use user command: alternate-jkl-cmd"



# Now define ghi-prefix-cmd as a real command, and check it is working.
send_gdb "define abc-prefix def-prefix ghi-prefix-cmd\n"
gdb_expect {
    -re "Type commands for definition of \"abc-prefix def-prefix ghi-prefix-cmd\".\r\nEnd with a line saying just \"end\".\r\n>$" {
	send_gdb "echo defined command ghi-prefix-cmd\\n\nend\n"
	gdb_expect {
	    -re "$gdb_prompt $" {pass "define user command: ghi-prefix-cmd"}
	    timeout {fail "(timeout) define user command: ghi-prefix-cmd"}
	}
    }
    timeout {fail "(timeout) define user command: ghi-prefix-cmd"}
}

# Verify ghi-prefix-cmd command works.
gdb_test "abc-prefix def-prefix ghi-prefix-cmd" \
    "defined command ghi-prefix-cmd" \
    "use defined user command: ghi-prefix-cmd"

# Now redefine ghi-prefix-cmd, and check it is working.
send_gdb "define abc-prefix def-prefix ghi-prefix-cmd\n"
gdb_expect {
    -re "Keeping subcommands of prefix command \"ghi-prefix-cmd\"\.\r\nRedefine command \"ghi-prefix-cmd\".*y or n. $" {
	send_gdb "y\n"
	gdb_expect {
	    -re "Type commands for definition of \"abc-prefix def-prefix ghi-prefix-cmd\".\r\nEnd with a line saying just \"end\".\r\n>$" {
		send_gdb "echo redefined command ghi-prefix-cmd\\n\nend\n"
		gdb_expect {
		    -re "$gdb_prompt $" {pass "redefine user command: ghi-prefix-cmd"}
		    timeout {fail "(timeout) redefine user command: ghi-prefix-cmd"}
		}
	    }
	    timeout {fail "(timeout) redefine user command: ghi-prefix-cmd"}
	}
    }
    -re "$gdb_prompt $" {fail "redefine user command: ghi-prefix-cmd"}
    timeout {fail "(timeout) redefine user command: ghi-prefix-cmd"}
}

# Verify redefined ghi-prefix-cmd command works.
gdb_test "abc-prefix def-prefix ghi-prefix-cmd" \
    "redefined command ghi-prefix-cmd" \
    "use redefined user command: ghi-prefix-cmd"

# Check jkl-cmd still works.
gdb_test "abc-prefix def-prefix ghi-prefix-cmd jkl-cmd" \
    "command jkl-cmd" \
    "use user command after redefining ghi-prefix-cmd: jkl-cmd"

# Check alternate-jkl-cmd still works.
gdb_test "abc-prefix def-prefix ghi-prefix-cmd alternate-jkl-cmd" \
    "command alternate-jkl-cmd" \
    "use user command after redefining ghi-prefix-cmd: alternate-jkl-cmd"

####################
# Check error behaviour.

gdb_test "define-prefix print" ".* is built-in.*"

gdb_test "define-prefix something-not-existing something-else" \
    "Undefined command: \"something-not-existing\".*"

gdb_test "define-prefix abc-prefix something-not-existing something-else" \
    "Undefined abc-prefix command: \"something-not-existing\".*"

