This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH] Skip tests on completion and readline when readline lib isn't used
- From: Joel Brobecker <brobecker at adacore dot com>
- To: Yao Qi <yao at codesourcery dot com>
- Cc: gdb-patches at sourceware dot org
- Date: Wed, 26 Mar 2014 05:32:07 -0700
- Subject: Re: [PATCH] Skip tests on completion and readline when readline lib isn't used
- Authentication-results: sourceware.org; auth=none
- References: <1395812833-17748-1-git-send-email-yao at codesourcery dot com>
> 2014-03-26 Yao Qi <yao@codesourcery.com>
>
> * lib/gdb.exp (readline_is_used): New proc.
> * gdb.base/completion.exp: Move tests on command complete up.
> Skip the rest of tests if readline is not used.
> * gdb.ada/complete.exp: Skp the test if readline is not
> used.
> * gdb.base/filesym.exp: Likewise.
> * gdb.base/macscp.exp: Likewise.
> * gdb.base/readline-ask.exp: Likewise.
> * gdb.base/readline.exp: Likewise.
> * gdb.python/py-cmd.exp: Likewise.
> * gdb.trace/tfile.exp: Likewise.
Mostly OK, see below... Pre-approved with the small changes requested
below.
> ---
> gdb/testsuite/gdb.ada/complete.exp | 23 +++---
> gdb/testsuite/gdb.base/completion.exp | 123 ++++++++++++++++--------------
> gdb/testsuite/gdb.base/filesym.exp | 6 ++
> gdb/testsuite/gdb.base/macscp.exp | 119 +++++++++++++++---------------
> gdb/testsuite/gdb.base/readline-ask.exp | 5 +
> gdb/testsuite/gdb.base/readline.exp | 5 +
> gdb/testsuite/gdb.python/py-cmd.exp | 18 +++--
> gdb/testsuite/gdb.trace/tfile.exp | 8 +-
> gdb/testsuite/lib/gdb.exp | 16 ++++
> 9 files changed, 187 insertions(+), 136 deletions(-)
>
> diff --git a/gdb/testsuite/gdb.ada/complete.exp b/gdb/testsuite/gdb.ada/complete.exp
> index 5b52f73..1e1ebaa 100644
> --- a/gdb/testsuite/gdb.ada/complete.exp
> +++ b/gdb/testsuite/gdb.ada/complete.exp
> @@ -176,15 +176,18 @@ test_gdb_complete "<pck__my" \
> # The verification we are trying to make involves the event loop,
> # and using the "complete" command is not sufficient to reproduce
> # the original problem.
> -set test "interactive complete 'print some'"
> -send_gdb "print some\t"
> -gdb_test_multiple "" "$test" {
> - -re "^print some_local_variable $" {
> - send_gdb "\n"
> - gdb_test_multiple "" "$test" {
> - -re " = 1$eol$gdb_prompt $" {
> - pass "$test"
> - }
> - }
> +
> +if { [readline_is_used] } {
> + set test "interactive complete 'print some'"
> + send_gdb "print some\t"
> + gdb_test_multiple "" "$test" {
> + -re "^print some_local_variable $" {
> + send_gdb "\n"
> + gdb_test_multiple "" "$test" {
> + -re " = 1$eol$gdb_prompt $" {
> + pass "$test"
> + }
> + }
> + }
> }
> }
> diff --git a/gdb/testsuite/gdb.base/completion.exp b/gdb/testsuite/gdb.base/completion.exp
> index b7b9b8e..caa3115 100644
> --- a/gdb/testsuite/gdb.base/completion.exp
> +++ b/gdb/testsuite/gdb.base/completion.exp
> @@ -69,6 +69,72 @@ if ![runto_main] then {
> set oldtimeout1 $timeout
> set timeout 30
>
> +gdb_test_no_output "complete print values\[0\].x." \
> + "field completion with invalid field"
> +
> +# If there is a non-deprecated completion, it should be returned.
> +gdb_test "complete sav" "save" "test non-deprecated completion"
> +# If there is only a deprecated completion, then it should be returned.
> +gdb_test "complete save-t" "save-tracepoints" "test deprecated completion"
> +
> +
> +#
> +# Tag name completion.
> +#
> +
> +gdb_test "complete ptype struct some_" "ptype struct some_struct"
> +gdb_test "complete ptype enum some_" "ptype enum some_enum"
> +gdb_test "complete ptype union some_" "ptype union some_union"
> +
> +
> +gdb_test "complete set gnutarget aut" "set gnutarget auto"
> +
> +
> +gdb_test "complete set cp-abi aut" "set cp-abi auto"
> +
> +# Test that completion of commands 'target FOO' works well.
> +set targets [list "core" "tfile" "exec"]
> +
> +# Test that completion of command 'target ctf' if GDB supports ctf
> +# target.
> +gdb_test_multiple "target ctf" "" {
> + -re "Undefined target command: \"ctf\"\. Try \"help target\"\.\r\n$gdb_prompt $" {
> + }
> + -re "No CTF directory specified.*\r\n$gdb_prompt $" {
> + lappend targets "ctf"
> + }
> +}
> +
> +foreach target_name ${targets} {
> + gdb_test "complete target ${target_name} ./gdb.base/completion" \
> + "target ${target_name} \\./gdb.base/completion.*\\./gdb.base/completion0\\.o.*\\./gdb.base/completion1\\.o.*"
> +}
> +
> +#
> +# "set foo unlimited" completion.
> +#
> +
> +# A var_uinteger command.
> +gdb_test "complete set height " "set height unlimited"
> +gdb_test "complete set height u" "set height unlimited"
> +
> +# A var_integer command.
> +gdb_test "complete set listsize " "set listsize unlimited"
> +gdb_test "complete set listsize unl" "set listsize unlimited"
> +
> +# A var_zuinteger_unlimited command.
> +gdb_test "complete set trace-buffer-size " "set trace-buffer-size unlimited"
> +gdb_test "complete set trace-buffer-size unl" "set trace-buffer-size unlimited"
> +
> +# Tests below are about tab-completion, which doesn't work if readline
> +# library isn't used. Check it first.
> +
> +if { ![readline_is_used] } {
> + # Restore globals modified in this test...
> + set timeout $oldtimeout1
> + return -1
You actually do not need to restore $timeout. It's automatically
restored at the start of every testcase (see lib/gdb.exp::gdb_init).
> +}
> +
> set test "complete 'hfgfh'"
> send_gdb "hfgfh\t"
> gdb_test_multiple "" "$test" {
> @@ -687,63 +753,6 @@ gdb_test_multiple "" "$test" {
> }
> }
>
> -gdb_test_no_output "complete print values\[0\].x." \
> - "field completion with invalid field"
> -
> -# If there is a non-deprecated completion, it should be returned.
> -gdb_test "complete sav" "save" "test non-deprecated completion"
> -# If there is only a deprecated completion, then it should be returned.
> -gdb_test "complete save-t" "save-tracepoints" "test deprecated completion"
> -
> -
> -#
> -# Tag name completion.
> -#
> -
> -gdb_test "complete ptype struct some_" "ptype struct some_struct"
> -gdb_test "complete ptype enum some_" "ptype enum some_enum"
> -gdb_test "complete ptype union some_" "ptype union some_union"
> -
> -
> -gdb_test "complete set gnutarget aut" "set gnutarget auto"
> -
> -
> -gdb_test "complete set cp-abi aut" "set cp-abi auto"
> -
> -# Test that completion of commands 'target FOO' works well.
> -set targets [list "core" "tfile" "exec"]
> -
> -# Test that completion of command 'target ctf' if GDB supports ctf
> -# target.
> -gdb_test_multiple "target ctf" "" {
> - -re "Undefined target command: \"ctf\"\. Try \"help target\"\.\r\n$gdb_prompt $" {
> - }
> - -re "No CTF directory specified.*\r\n$gdb_prompt $" {
> - lappend targets "ctf"
> - }
> -}
> -
> -foreach target_name ${targets} {
> - gdb_test "complete target ${target_name} ./gdb.base/completion" \
> - "target ${target_name} ./gdb.base/completion\\.exp.*"
> -}
> -
> -#
> -# "set foo unlimited" completion.
> -#
> -
> -# A var_uinteger command.
> -gdb_test "complete set height " "set height unlimited"
> -gdb_test "complete set height u" "set height unlimited"
> -
> -# A var_integer command.
> -gdb_test "complete set listsize " "set listsize unlimited"
> -gdb_test "complete set listsize unl" "set listsize unlimited"
> -
> -# A var_zuinteger_unlimited command.
> -gdb_test "complete set trace-buffer-size " "set trace-buffer-size unlimited"
> -gdb_test "complete set trace-buffer-size unl" "set trace-buffer-size unlimited"
> -
> # Restore globals modified in this test...
> set timeout $oldtimeout1
>
> diff --git a/gdb/testsuite/gdb.base/filesym.exp b/gdb/testsuite/gdb.base/filesym.exp
> index 5f43116..77e643b 100644
> --- a/gdb/testsuite/gdb.base/filesym.exp
> +++ b/gdb/testsuite/gdb.base/filesym.exp
> @@ -22,6 +22,12 @@ if {[prepare_for_testing $testfile.exp $testfile $srcfile debug]} {
> return -1
> }
>
> +if { ![readline_is_used] } {
> + unsupported "completion doesn't work when readline isn't used."
> + return -1
> +}
> +
> +
> # Test completion list for "filesy". We expect the immediate result to
> # complete to "filesym"; completing again, we expect the symbol name and the
> # filename (in that order).
> diff --git a/gdb/testsuite/gdb.base/macscp.exp b/gdb/testsuite/gdb.base/macscp.exp
> index e953c0d..9503e75 100644
> --- a/gdb/testsuite/gdb.base/macscp.exp
> +++ b/gdb/testsuite/gdb.base/macscp.exp
> @@ -517,77 +517,80 @@ gdb_test "macro undef" \
> "usage: macro undef.*" \
> "macro undef with no arguments"
>
> -# Completion tests.
> -
> -# The macro FIFTY_SEVEN is in scope at this point.
> -send_gdb "p FIFTY_\t"
> -gdb_expect {
> - -re "^p FIFTY_SEVEN $" {
> - send_gdb "\n"
> - gdb_expect {
> - -re "^.* = 57.*$gdb_prompt $" {
> - pass "complete 'p FIFTY_SEVEN'"
> - }
> - -re ".*$gdb_prompt $" { fail "complete 'p FIFTY_SEVEN'" }
> - timeout { fail "(timeout) complete 'p FIFTY_SEVEN'" }
> +# Do completion tests if readline is used.
> +
> +if { [readline_is_used] } {
> +
> + # The macro FIFTY_SEVEN is in scope at this point.
> + send_gdb "p FIFTY_\t"
> + gdb_expect {
> + -re "^p FIFTY_SEVEN $" {
> + send_gdb "\n"
> + gdb_expect {
> + -re "^.* = 57.*$gdb_prompt $" {
> + pass "complete 'p FIFTY_SEVEN'"
> + }
> + -re ".*$gdb_prompt $" { fail "complete 'p FIFTY_SEVEN'" }
> + timeout { fail "(timeout) complete 'p FIFTY_SEVEN'" }
> }
> }
> - -re ".*$gdb_prompt $" { fail "complete 'p FIFTY_SEVEN'" }
> - timeout { fail "(timeout) complete 'p FIFTY_SEVEN' 2" }
> -}
> + -re ".*$gdb_prompt $" { fail "complete 'p FIFTY_SEVEN'" }
> + timeout { fail "(timeout) complete 'p FIFTY_SEVEN' 2" }
> + }
>
> -# The macro TWENTY_THREE is not in scope.
> -send_gdb "p TWENTY_\t"
> -gdb_expect {
> - -re "^p TWENTY_\\\x07$" {
> - send_gdb "\n"
> - gdb_expect {
> - -re "No symbol \"TWENTY_\" in current context\\..*$gdb_prompt $" {
> - pass "complete 'p TWENTY_'"
> + # The macro TWENTY_THREE is not in scope.
> + send_gdb "p TWENTY_\t"
> + gdb_expect {
> + -re "^p TWENTY_\\\x07$" {
> + send_gdb "\n"
> + gdb_expect {
> + -re "No symbol \"TWENTY_\" in current context\\..*$gdb_prompt $" {
> + pass "complete 'p TWENTY_'"
> + }
> + -re ".*$gdb_prompt $" { fail "complete 'p TWENTY_'" }
> + timeout { fail "(timeout) complete 'p TWENTY_'"}
> }
> - -re ".*$gdb_prompt $" { fail "complete 'p TWENTY_'" }
> - timeout { fail "(timeout) complete 'p TWENTY_'"}
> }
> + -re ".*$gdb_prompt $" { fail "complete 'p TWENTY_'" }
> + timeout { fail "(timeout) complete 'p TWENTY_' 2" }
> }
> - -re ".*$gdb_prompt $" { fail "complete 'p TWENTY_'" }
> - timeout { fail "(timeout) complete 'p TWENTY_' 2" }
> -}
>
> -# The macro FORTY_EIGHT was undefined and thus is not in scope.
> -send_gdb "p FORTY_\t"
> -gdb_expect {
> - -re "^p FORTY_\\\x07$" {
> - send_gdb "\n"
> - gdb_expect {
> - -re "No symbol \"FORTY_\" in current context\\..*$gdb_prompt $" {
> - pass "complete 'p FORTY_'"
> - }
> - -re ".*$gdb_prompt $" { fail "complete 'p FORTY_'" }
> - timeout {fail "(timeout) complete 'p FORTY_'"}
> + # The macro FORTY_EIGHT was undefined and thus is not in scope.
> + send_gdb "p FORTY_\t"
> + gdb_expect {
> + -re "^p FORTY_\\\x07$" {
> + send_gdb "\n"
> + gdb_expect {
> + -re "No symbol \"FORTY_\" in current context\\..*$gdb_prompt $" {
> + pass "complete 'p FORTY_'"
> + }
> + -re ".*$gdb_prompt $" { fail "complete 'p FORTY_'" }
> + timeout {fail "(timeout) complete 'p FORTY_'"}
> }
> }
> - -re ".*$gdb_prompt $" { fail "complete 'p FORTY_'" }
> - timeout { fail "(timeout) complete 'p FORTY_' 2" }
> -}
> + -re ".*$gdb_prompt $" { fail "complete 'p FORTY_'" }
> + timeout { fail "(timeout) complete 'p FORTY_' 2" }
> + }
>
> -gdb_test_no_output "macro define TWENTY_THREE 25" \
> - "defining TWENTY_THREE"
> -
> -# User-defined macros are always in scope.
> -send_gdb "p TWENTY_\t"
> -gdb_expect {
> - -re "^p TWENTY_THREE $" {
> - send_gdb "\n"
> - gdb_expect {
> - -re "^.* = 25.*$gdb_prompt $" {
> - pass "complete 'p TWENTY_THREE'"
> + gdb_test_no_output "macro define TWENTY_THREE 25" \
> + "defining TWENTY_THREE"
> +
> + # User-defined macros are always in scope.
> + send_gdb "p TWENTY_\t"
> + gdb_expect {
> + -re "^p TWENTY_THREE $" {
> + send_gdb "\n"
> + gdb_expect {
> + -re "^.* = 25.*$gdb_prompt $" {
> + pass "complete 'p TWENTY_THREE'"
> + }
> + -re ".*$gdb_prompt $" { fail "complete 'p TWENTY_THREE'"}
> + timeout { fail "(timeout) complete 'p TWENTY_THREE'" }
> }
> - -re ".*$gdb_prompt $" { fail "complete 'p TWENTY_THREE'"}
> - timeout { fail "(timeout) complete 'p TWENTY_THREE'" }
> }
> + -re ".*$gdb_prompt $" { fail "complete 'p TWENTY_THREE'" }
> + timeout { fail "(timeout) complete 'p TWENTY_THREE' 2" }
> }
> - -re ".*$gdb_prompt $" { fail "complete 'p TWENTY_THREE'" }
> - timeout { fail "(timeout) complete 'p TWENTY_THREE' 2" }
> }
>
> # Splicing tests.
> diff --git a/gdb/testsuite/gdb.base/readline-ask.exp b/gdb/testsuite/gdb.base/readline-ask.exp
> index e15dcca..d0a349d 100644
> --- a/gdb/testsuite/gdb.base/readline-ask.exp
> +++ b/gdb/testsuite/gdb.base/readline-ask.exp
> @@ -25,6 +25,11 @@ if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" object {debug}]
> setenv INPUTRC $inputrc
> clean_restart ${binfile}
>
> +if { ![readline_is_used] } {
> + unsupported "completion doesn't work when readline isn't used."
> + return -1
> +}
> +
> gdb_test_no_output "set width 50"
> gdb_test_no_output "set height 3"
>
> diff --git a/gdb/testsuite/gdb.base/readline.exp b/gdb/testsuite/gdb.base/readline.exp
> index 3c7d4c1..ef7fa13 100644
> --- a/gdb/testsuite/gdb.base/readline.exp
> +++ b/gdb/testsuite/gdb.base/readline.exp
> @@ -145,6 +145,11 @@ proc operate_and_get_next {name args} {
> gdb_start
> gdb_reinitialize_dir $srcdir/$subdir
>
> +if { ![readline_is_used] } {
> + unsupported "readline isn't used."
> + return -1
> +}
> +
> set oldtimeout1 $timeout
> set timeout 30
>
> diff --git a/gdb/testsuite/gdb.python/py-cmd.exp b/gdb/testsuite/gdb.python/py-cmd.exp
> index c48c8bf..a87aecb 100644
> --- a/gdb/testsuite/gdb.python/py-cmd.exp
> +++ b/gdb/testsuite/gdb.python/py-cmd.exp
> @@ -177,14 +177,16 @@ gdb_test "complete expr_test bar\." \
> "expr_test bar\.bc.*expr_test bar\.ij.*" \
> "Test completion through complete command"
>
> -set test "complete 'expr_test bar.i'"
> -send_gdb "expr_test bar\.i\t\t"
> -gdb_test_multiple "" "$test" {
> - -re "expr_test bar\.ij \\\x07$" {
> - send_gdb "\n"
> - gdb_test_multiple "" $test {
> - -re "invoked on = bar.ij.*$gdb_prompt $" {
> - pass "$test"
> +if { [readline_is_used] } {
> + set test "complete 'expr_test bar.i'"
> + send_gdb "expr_test bar\.i\t\t"
> + gdb_test_multiple "" "$test" {
> + -re "expr_test bar\.ij \\\x07$" {
> + send_gdb "\n"
> + gdb_test_multiple "" $test {
> + -re "invoked on = bar.ij.*$gdb_prompt $" {
> + pass "$test"
> + }
> }
> }
> }
> diff --git a/gdb/testsuite/gdb.trace/tfile.exp b/gdb/testsuite/gdb.trace/tfile.exp
> index 634c2fc..c98e64c 100644
> --- a/gdb/testsuite/gdb.trace/tfile.exp
> +++ b/gdb/testsuite/gdb.trace/tfile.exp
> @@ -148,6 +148,8 @@ gdb_test "interpreter-exec mi \"-trace-status\"" \
>
> # Test completion works well.
>
> -gdb_test "target tfile [file rootname $tfile_basic]\t" \
> - "Assuming tracepoint.*" \
> - "complete-command 'target tfile'"
> +if { [readline_is_used] } {
> + gdb_test "target tfile [file rootname $tfile_basic]\t" \
> + "Assuming tracepoint.*" \
> + "complete-command 'target tfile'"
> +}
> diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
> index 61e476b..29c0d21 100644
> --- a/gdb/testsuite/lib/gdb.exp
> +++ b/gdb/testsuite/lib/gdb.exp
> @@ -1831,6 +1831,22 @@ proc supports_reverse {} {
> return 0
> }
>
> +# Return 1 if readline library is used.
> +
> +proc readline_is_used { } {
> + global gdb_prompt
> +
> + send_gdb "show editing\n"
> + gdb_expect {
> + -re ".*Editing of command lines as they are typed is on\..*$gdb_prompt $" {
> + return 1
> + }
> + -re ".*$gdb_prompt $" {
> + return 0
> + }
Can you use gdb_test_multiple, in this case?
Thank you,
--
Joel