| # 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\".*" |
| |