aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorPhilippe Waroquiers <philippe.waroquiers@skynet.be>2019-09-08 19:22:35 +0200
committerPhilippe Waroquiers <philippe.waroquiers@skynet.be>2019-11-30 09:36:56 +0100
commit643c0cbedb4647702778ca8788a54053d1259d3b (patch)
tree8e971b432440e91260a5fc8830ceb8a9e363352e /gdb
parentc6ac7fc98718d7e472e1e1c12aae9855c79353a5 (diff)
downloadgdb-643c0cbedb4647702778ca8788a54053d1259d3b.zip
gdb-643c0cbedb4647702778ca8788a54053d1259d3b.tar.gz
gdb-643c0cbedb4647702778ca8788a54053d1259d3b.tar.bz2
Test define-prefix.
Adds a test testing the new define-prefix command. 2019-11-30 Philippe Waroquiers <philippe.waroquiers@skynet.be> * gdb.base/define-prefix.exp: New file.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/testsuite/ChangeLog4
-rw-r--r--gdb/testsuite/gdb.base/define-prefix.exp164
2 files changed, 168 insertions, 0 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 6b520e1..a88c545 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2019-11-30 Philippe Waroquiers <philippe.waroquiers@skynet.be>
+
+ * gdb.base/define-prefix.exp: New file.
+
2019-11-28 Andrew Burgess <andrew.burgess@embecosm.com>
* lib/gdb.exp (skip_btrace_tests): Return 1 if the test fails to
diff --git a/gdb/testsuite/gdb.base/define-prefix.exp b/gdb/testsuite/gdb.base/define-prefix.exp
new file mode 100644
index 0000000..b04c595
--- /dev/null
+++ b/gdb/testsuite/gdb.base/define-prefix.exp
@@ -0,0 +1,164 @@
+# This testcase is part of GDB, the GNU debugger.
+
+# Copyright 2019 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\".*"
+