From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19311 invoked by alias); 26 Mar 2014 12:32:12 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 19299 invoked by uid 89); 26 Mar 2014 12:32:11 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.2 X-HELO: rock.gnat.com Received: from rock.gnat.com (HELO rock.gnat.com) (205.232.38.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-SHA encrypted) ESMTPS; Wed, 26 Mar 2014 12:32:08 +0000 Received: from localhost (localhost.localdomain [127.0.0.1]) by filtered-rock.gnat.com (Postfix) with ESMTP id DF6921167DE; Wed, 26 Mar 2014 08:32:06 -0400 (EDT) Received: from rock.gnat.com ([127.0.0.1]) by localhost (rock.gnat.com [127.0.0.1]) (amavisd-new, port 10024) with LMTP id 63+aL6mO9eQF; Wed, 26 Mar 2014 08:32:06 -0400 (EDT) Received: from joel.gnat.com (localhost.localdomain [127.0.0.1]) by rock.gnat.com (Postfix) with ESMTP id 876B411674F; Wed, 26 Mar 2014 08:32:06 -0400 (EDT) Received: by joel.gnat.com (Postfix, from userid 1000) id E5DB7E07DC; Wed, 26 Mar 2014 05:32:07 -0700 (PDT) Date: Wed, 26 Mar 2014 12:32:00 -0000 From: Joel Brobecker To: Yao Qi Cc: gdb-patches@sourceware.org Subject: Re: [PATCH] Skip tests on completion and readline when readline lib isn't used Message-ID: <20140326123207.GP4282@adacore.com> References: <1395812833-17748-1-git-send-email-yao@codesourcery.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1395812833-17748-1-git-send-email-yao@codesourcery.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-SW-Source: 2014-03/txt/msg00607.txt.bz2 > 2014-03-26 Yao Qi > > * 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 " # 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