# This testcase is part of GDB, the GNU debugger. # Copyright 2019-2022 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 . # 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 empty 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\".*"