This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[patch, testsuite] require readline for gdb.linespec/explicit.exp tab-completion tests
- From: Sandra Loosemore <sandra at codesourcery dot com>
- To: gdb-patches <gdb-patches at sourceware dot org>, Keith Seitz <keiths at redhat dot com>
- Date: Thu, 17 Sep 2015 01:28:23 -0600
- Subject: [patch, testsuite] require readline for gdb.linespec/explicit.exp tab-completion tests
- Authentication-results: sourceware.org; auth=none
Tab-completion tests require readline support. The ones in
gdb.base/completion.exp are already conditional, but the recently-added
gdb.linespec/explicit.exp tests are not. This patch fixes that, and
also an obvious typo ("faill" -> "fail"). The patch is kind of long
because I had to insert an "if" block and reindent, but there's nothing
else going on here. OK to commit?
BTW, independently of the readline-related failures on Windows host that
are addressed by this patch, on Linux host I've also run into the
failures already noted in this thread:
https://sourceware.org/ml/gdb-patches/2015-08/msg00432.html
The immediate problem is that the response to the "break -function
mai\t" test doesn't always include the ^G character in the output
pattern, and the other FAILs are cascading off of the testcase not being
structured to recover from a pattern match failure (it's sending more
commands without a newline to terminate the one that failed). But, I
have no clue why GDB is giving a ^G in some configurations and not
others (I observed that this test fails on nios2-elf target but passes
on nios2-linux-gnu, for instance), or whether this difference is
indicative of an actual bug. So I've not touched that part of the testcase.
-Sandra
2015-09-17 Sandra Loosemore <sandra@codesourcery.com>
gdb/testsuite/
* gdb.linespec/explicit.exp: Check for readline support for
tab-completion tests. Fix obvious typo.
diff --git a/gdb/testsuite/gdb.linespec/explicit.exp b/gdb/testsuite/gdb.linespec/explicit.exp
index a0851cd..1fa203f 100644
--- a/gdb/testsuite/gdb.linespec/explicit.exp
+++ b/gdb/testsuite/gdb.linespec/explicit.exp
@@ -145,186 +145,193 @@ namespace eval $testfile {
gdb_test "break $linespec thread 123" "Unknown thread 123."
}
- # Test the explicit location completer
- foreach abbrev {"fun" "so" "lab" "li"} full {"function" "source" "label" "line"} {
- set tst "complete 'break -$abbrev'"
- send_gdb "break -${abbrev}\t"
- gdb_test_multiple "" $tst {
- "break -$full " {
- send_gdb "\n"
- gdb_test_multiple "" $tst {
- -re "missing argument for \"-$full\".*$gdb_prompt " {
- pass $tst
+ # Tests below are about tab-completion, which doesn't work if readline
+ # library isn't used. Check it first.
+ if { [readline_is_used] } {
+
+ # Test the explicit location completer
+ foreach abbrev {"fun" "so" "lab" "li"} full {"function" "source" "label" "line"} {
+ set tst "complete 'break -$abbrev'"
+ send_gdb "break -${abbrev}\t"
+ gdb_test_multiple "" $tst {
+ "break -$full " {
+ send_gdb "\n"
+ gdb_test_multiple "" $tst {
+ -re "missing argument for \"-$full\".*$gdb_prompt " {
+ pass $tst
+ }
}
}
}
- }
- set tst "complete -$full with no value"
- send_gdb "break -$full \t"
- gdb_test_multiple "" $tst {
- -re ".*break -$full " {
- send_gdb "\n"
- gdb_test_multiple "" $tst {
- -re ".*Source filename requires function, label, or line offset\..*$gdb_prompt " {
- if {[string equal $full "source"]} {
+ set tst "complete -$full with no value"
+ send_gdb "break -$full \t"
+ gdb_test_multiple "" $tst {
+ -re ".*break -$full " {
+ send_gdb "\n"
+ gdb_test_multiple "" $tst {
+ -re ".*Source filename requires function, label, or line offset\..*$gdb_prompt " {
+ if {[string equal $full "source"]} {
+ pass $tst
+ } else {
+ fail $tst
+ }
+ }
+ -re "missing argument for \"-$full\".*$gdb_prompt " {
pass $tst
- } else {
- faill $tst
}
}
- -re "missing argument for \"-$full\".*$gdb_prompt " {
- pass $tst
- }
}
}
}
- }
- set tst "complete unique function name"
- send_gdb "break -function mai\t"
- gdb_test_multiple "" $tst {
- "break -function mai\\\x07n" {
- send_gdb "\n"
- gdb_test "" ".*Breakpoint \[0-9\]+.*" $tst
- gdb_test_no_output "delete \$bpnum" "delete $tst breakpoint"
+ set tst "complete unique function name"
+ send_gdb "break -function mai\t"
+ gdb_test_multiple "" $tst {
+ "break -function mai\\\x07n" {
+ send_gdb "\n"
+ gdb_test "" ".*Breakpoint \[0-9\]+.*" $tst
+ gdb_test_no_output "delete \$bpnum" "delete $tst breakpoint"
+ }
}
- }
- set tst "complete non-unique function name"
- send_gdb "break -function myfunc\t"
- gdb_test_multiple "" $tst {
- "break -function myfunc\\\x07tion" {
- send_gdb "\t\t"
- gdb_test_multiple "" $tst {
- -re "\\\x07\r\nmyfunction\[ \t\]+myfunction2\[ \t\]+myfunction3\[ \t\]+myfunction4\[ \t\]+\r\n$gdb_prompt " {
- gdb_test "2" ".*Breakpoint \[0-9\]+.*" $tst
- gdb_test_no_output "delete \$bpnum" "delete $tst breakpoint"
+ set tst "complete non-unique function name"
+ send_gdb "break -function myfunc\t"
+ gdb_test_multiple "" $tst {
+ "break -function myfunc\\\x07tion" {
+ send_gdb "\t\t"
+ gdb_test_multiple "" $tst {
+ -re "\\\x07\r\nmyfunction\[ \t\]+myfunction2\[ \t\]+myfunction3\[ \t\]+myfunction4\[ \t\]+\r\n$gdb_prompt " {
+ gdb_test "2" ".*Breakpoint \[0-9\]+.*" $tst
+ gdb_test_no_output "delete \$bpnum" "delete $tst breakpoint"
+ }
}
}
}
- }
- set tst "complete non-existant function name"
- send_gdb "break -function foo\t"
- gdb_test_multiple "" $tst {
- "break -function foo\\\x07" {
- send_gdb "\t\t"
- gdb_test_multiple "" $tst {
- -re "\\\x07\\\x07" {
- send_gdb "\n"
- gdb_test "" {Function "foo" not defined.} $tst
+ set tst "complete non-existant function name"
+ send_gdb "break -function foo\t"
+ gdb_test_multiple "" $tst {
+ "break -function foo\\\x07" {
+ send_gdb "\t\t"
+ gdb_test_multiple "" $tst {
+ -re "\\\x07\\\x07" {
+ send_gdb "\n"
+ gdb_test "" {Function "foo" not defined.} $tst
+ }
}
}
}
- }
- set tst "complete unique file name"
- send_gdb "break -source 3ex\t"
- gdb_test_multiple "" $tst {
- "break -source 3explicit.c " {
- send_gdb "\n"
- gdb_test "" \
- {Source filename requires function, label, or line offset.} $tst
+ set tst "complete unique file name"
+ send_gdb "break -source 3ex\t"
+ gdb_test_multiple "" $tst {
+ "break -source 3explicit.c " {
+ send_gdb "\n"
+ gdb_test "" \
+ {Source filename requires function, label, or line offset.} $tst
+ }
}
- }
- set tst "complete non-unique file name"
- send_gdb "break -source exp\t"
- gdb_test_multiple "" $tst {
- "break -source exp\\\x07licit" {
- send_gdb "\t\t"
- gdb_test_multiple "" $tst {
- -re "\\\x07\r\nexplicit.c\[ \t\]+explicit2.c\[ \t\]+\r\n$gdb_prompt" {
- send_gdb "\n"
- gdb_test "" \
- {Source filename requires function, label, or line offset.} \
- $tst
+ set tst "complete non-unique file name"
+ send_gdb "break -source exp\t"
+ gdb_test_multiple "" $tst {
+ "break -source exp\\\x07licit" {
+ send_gdb "\t\t"
+ gdb_test_multiple "" $tst {
+ -re "\\\x07\r\nexplicit.c\[ \t\]+explicit2.c\[ \t\]+\r\n$gdb_prompt" {
+ send_gdb "\n"
+ gdb_test "" \
+ {Source filename requires function, label, or line offset.} \
+ $tst
+ }
}
}
- }
- "break -source exp\\\x07l" {
- # This pattern may occur when glibc debuginfo is installed.
- send_gdb "\t\t"
- gdb_test_multiple "" $tst {
- -re "\\\x07\r\nexplicit.c\[ \t\]+explicit2.c\[ \t\]+expl.*\r\n$gdb_prompt" {
- send_gdb "\n"
- gdb_test "" \
- {Source filename requires function, label, or line offset.} \
- $tst
+ "break -source exp\\\x07l" {
+ # This pattern may occur when glibc debuginfo is installed.
+ send_gdb "\t\t"
+ gdb_test_multiple "" $tst {
+ -re "\\\x07\r\nexplicit.c\[ \t\]+explicit2.c\[ \t\]+expl.*\r\n$gdb_prompt" {
+ send_gdb "\n"
+ gdb_test "" \
+ {Source filename requires function, label, or line offset.} \
+ $tst
+ }
}
}
}
- }
- set tst "complete non-existant file name"
- send_gdb "break -source foo\t"
- gdb_test_multiple "" $tst {
- "break -source foo" {
- send_gdb "\t\t"
- gdb_test_multiple "" $tst {
- "\\\x07\\\x07" {
- send_gdb "\n"
- gdb_test "" \
- {Source filename requires function, label, or line offset.} \
- $tst
+ set tst "complete non-existant file name"
+ send_gdb "break -source foo\t"
+ gdb_test_multiple "" $tst {
+ "break -source foo" {
+ send_gdb "\t\t"
+ gdb_test_multiple "" $tst {
+ "\\\x07\\\x07" {
+ send_gdb "\n"
+ gdb_test "" \
+ {Source filename requires function, label, or line offset.} \
+ $tst
+ }
}
}
}
- }
- set tst "complete filename and unique function name"
- send_gdb "break -source explicit.c -function ma\t"
- gdb_test_multiple "" $tst {
- "break -source explicit.c -function main " {
- send_gdb "\n"
- gdb_test "" ".*Breakpoint .*" $tst
- gdb_test_no_output "delete \$bpnum" "delete $tst breakpoint"
+ set tst "complete filename and unique function name"
+ send_gdb "break -source explicit.c -function ma\t"
+ gdb_test_multiple "" $tst {
+ "break -source explicit.c -function main " {
+ send_gdb "\n"
+ gdb_test "" ".*Breakpoint .*" $tst
+ gdb_test_no_output "delete \$bpnum" "delete $tst breakpoint"
+ }
}
- }
- set tst "complete filename and non-unique function name"
- send_gdb "break -so 3explicit.c -func myfunc\t"
- gdb_test_multiple "" $tst {
- "break -so 3explicit.c -func myfunc\\\x07tion" {
- send_gdb "\t\t"
- gdb_test_multiple "" $tst {
- -re "\\\x07\r\nmyfunction3\[ \t\]+myfunction4\[ \t\]+\r\n$gdb_prompt " {
- gdb_test "3" ".*Breakpoint \[0-9\]+.*" $tst
- gdb_test_no_output "delete \$bpnum" "delete $tst breakpoint"
+ set tst "complete filename and non-unique function name"
+ send_gdb "break -so 3explicit.c -func myfunc\t"
+ gdb_test_multiple "" $tst {
+ "break -so 3explicit.c -func myfunc\\\x07tion" {
+ send_gdb "\t\t"
+ gdb_test_multiple "" $tst {
+ -re "\\\x07\r\nmyfunction3\[ \t\]+myfunction4\[ \t\]+\r\n$gdb_prompt " {
+ gdb_test "3" ".*Breakpoint \[0-9\]+.*" $tst
+ gdb_test_no_output "delete \$bpnum" "delete $tst breakpoint"
+ }
}
}
}
- }
- set tst "complete filename and non-existant function name"
- send_gdb "break -sou 3explicit.c -fun foo\t"
- gdb_test_multiple "" $tst {
- "break -sou 3explicit.c -fun foo\\\x07" {
- send_gdb "\t\t"
- gdb_test_multiple "" $tst {
- "\\\x07\\\x07" {
- send_gdb "\n"
- gdb_test "" \
- {Function "foo" not defined in "3explicit.c".} $tst
+ set tst "complete filename and non-existant function name"
+ send_gdb "break -sou 3explicit.c -fun foo\t"
+ gdb_test_multiple "" $tst {
+ "break -sou 3explicit.c -fun foo\\\x07" {
+ send_gdb "\t\t"
+ gdb_test_multiple "" $tst {
+ "\\\x07\\\x07" {
+ send_gdb "\n"
+ gdb_test "" \
+ {Function "foo" not defined in "3explicit.c".} $tst
+ }
}
}
}
- }
- set tst "complete filename and function reversed"
- send_gdb "break -func myfunction4 -source 3ex\t"
- gdb_test_multiple "" $tst {
- "break -func myfunction4 -source 3explicit.c " {
- send_gdb "\n"
- gdb_test "" "Breakpoint \[0-9\]+.*" $tst
- gdb_test_no_output "delete \$bpnum" "delete $tst breakpoint"
+ set tst "complete filename and function reversed"
+ send_gdb "break -func myfunction4 -source 3ex\t"
+ gdb_test_multiple "" $tst {
+ "break -func myfunction4 -source 3explicit.c " {
+ send_gdb "\n"
+ gdb_test "" "Breakpoint \[0-9\]+.*" $tst
+ gdb_test_no_output "delete \$bpnum" "delete $tst breakpoint"
+ }
}
- }
- # NOTE: We don't bother testing more elaborate combinations of options,
- # such as "-func main -sour 3ex\t" (main is defined in explicit.c). The
- # completer cannot handle these yet.
+ # NOTE: We don't bother testing more elaborate combinations of options,
+ # such as "-func main -sour 3ex\t" (main is defined in explicit.c).
+ # The completer cannot handle these yet.
+
+ }
+ # End of completion tests.
# Test pending explicit breakpoints
gdb_exit