This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Skip tests on completion and readline when readline lib isn't used


> 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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]