Skip tests on completion and readline when readline lib isn't used

The completion feature and other features on readline depend on the
readline library.  However, readline library is not always used, for
example, running testsuite like

  make check RUNTESTFLAGS="--host_board=local-remote-host"

the input stream is not a tty, and GDB doesn't use readline library
as a result.

This patch is to skip tests on completion and readline if
'show editing' is off, which means readline isn't used.  Note that
some tests in gdb.base/completion.exp test command complete, which
isn't related to readline, so these tests aren't affected by readline
library.  This patch also moves these tests up, run them
unconditionally, and run the rest if readline library is used.

gdb/testsuite:

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.
This commit is contained in:
Yao Qi
2014-03-19 10:16:35 +08:00
parent 29361eee14
commit 0d4d0e772a
10 changed files with 203 additions and 141 deletions

View File

@ -1,3 +1,17 @@
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.
2014-03-26 Yao Qi <yao@codesourcery.com> 2014-03-26 Yao Qi <yao@codesourcery.com>
* gdb.base/macscp.exp: Fix code format issues. * gdb.base/macscp.exp: Fix code format issues.

View File

@ -176,9 +176,11 @@ test_gdb_complete "<pck__my" \
# The verification we are trying to make involves the event loop, # The verification we are trying to make involves the event loop,
# and using the "complete" command is not sufficient to reproduce # and using the "complete" command is not sufficient to reproduce
# the original problem. # the original problem.
set test "interactive complete 'print some'"
send_gdb "print some\t" if { [readline_is_used] } {
gdb_test_multiple "" "$test" { set test "interactive complete 'print some'"
send_gdb "print some\t"
gdb_test_multiple "" "$test" {
-re "^print some_local_variable $" { -re "^print some_local_variable $" {
send_gdb "\n" send_gdb "\n"
gdb_test_multiple "" "$test" { gdb_test_multiple "" "$test" {
@ -187,4 +189,5 @@ gdb_test_multiple "" "$test" {
} }
} }
} }
}
} }

View File

@ -69,6 +69,70 @@ if ![runto_main] then {
set oldtimeout1 $timeout set oldtimeout1 $timeout
set timeout 30 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] } {
return -1
}
set test "complete 'hfgfh'" set test "complete 'hfgfh'"
send_gdb "hfgfh\t" send_gdb "hfgfh\t"
gdb_test_multiple "" "$test" { gdb_test_multiple "" "$test" {
@ -672,63 +736,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... # Restore globals modified in this test...
set timeout $oldtimeout1 set timeout $oldtimeout1

View File

@ -22,6 +22,12 @@ if {[prepare_for_testing $testfile.exp $testfile $srcfile debug]} {
return -1 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 # Test completion list for "filesy". We expect the immediate result to
# complete to "filesym"; completing again, we expect the symbol name and the # complete to "filesym"; completing again, we expect the symbol name and the
# filename (in that order). # filename (in that order).

View File

@ -517,11 +517,13 @@ gdb_test "macro undef" \
"usage: macro undef.*" \ "usage: macro undef.*" \
"macro undef with no arguments" "macro undef with no arguments"
# Completion tests. # Do completion tests if readline is used.
# The macro FIFTY_SEVEN is in scope at this point. if { [readline_is_used] } {
send_gdb "p FIFTY_\t"
gdb_expect { # The macro FIFTY_SEVEN is in scope at this point.
send_gdb "p FIFTY_\t"
gdb_expect {
-re "^p FIFTY_SEVEN $" { -re "^p FIFTY_SEVEN $" {
send_gdb "\n" send_gdb "\n"
gdb_expect { gdb_expect {
@ -534,11 +536,11 @@ gdb_expect {
} }
-re ".*$gdb_prompt $" { fail "complete 'p FIFTY_SEVEN'" } -re ".*$gdb_prompt $" { fail "complete 'p FIFTY_SEVEN'" }
timeout { fail "(timeout) complete 'p FIFTY_SEVEN' 2" } timeout { fail "(timeout) complete 'p FIFTY_SEVEN' 2" }
} }
# The macro TWENTY_THREE is not in scope. # The macro TWENTY_THREE is not in scope.
send_gdb "p TWENTY_\t" send_gdb "p TWENTY_\t"
gdb_expect { gdb_expect {
-re "^p TWENTY_\\\x07$" { -re "^p TWENTY_\\\x07$" {
send_gdb "\n" send_gdb "\n"
gdb_expect { gdb_expect {
@ -551,11 +553,11 @@ gdb_expect {
} }
-re ".*$gdb_prompt $" { fail "complete 'p TWENTY_'" } -re ".*$gdb_prompt $" { fail "complete 'p TWENTY_'" }
timeout { fail "(timeout) complete 'p TWENTY_' 2" } timeout { fail "(timeout) complete 'p TWENTY_' 2" }
} }
# The macro FORTY_EIGHT was undefined and thus is not in scope. # The macro FORTY_EIGHT was undefined and thus is not in scope.
send_gdb "p FORTY_\t" send_gdb "p FORTY_\t"
gdb_expect { gdb_expect {
-re "^p FORTY_\\\x07$" { -re "^p FORTY_\\\x07$" {
send_gdb "\n" send_gdb "\n"
gdb_expect { gdb_expect {
@ -568,14 +570,14 @@ gdb_expect {
} }
-re ".*$gdb_prompt $" { fail "complete 'p FORTY_'" } -re ".*$gdb_prompt $" { fail "complete 'p FORTY_'" }
timeout { fail "(timeout) complete 'p FORTY_' 2" } timeout { fail "(timeout) complete 'p FORTY_' 2" }
} }
gdb_test_no_output "macro define TWENTY_THREE 25" \ gdb_test_no_output "macro define TWENTY_THREE 25" \
"defining TWENTY_THREE" "defining TWENTY_THREE"
# User-defined macros are always in scope. # User-defined macros are always in scope.
send_gdb "p TWENTY_\t" send_gdb "p TWENTY_\t"
gdb_expect { gdb_expect {
-re "^p TWENTY_THREE $" { -re "^p TWENTY_THREE $" {
send_gdb "\n" send_gdb "\n"
gdb_expect { gdb_expect {
@ -588,6 +590,7 @@ gdb_expect {
} }
-re ".*$gdb_prompt $" { fail "complete 'p TWENTY_THREE'" } -re ".*$gdb_prompt $" { fail "complete 'p TWENTY_THREE'" }
timeout { fail "(timeout) complete 'p TWENTY_THREE' 2" } timeout { fail "(timeout) complete 'p TWENTY_THREE' 2" }
}
} }
# Splicing tests. # Splicing tests.

View File

@ -25,6 +25,11 @@ if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" object {debug}]
setenv INPUTRC $inputrc setenv INPUTRC $inputrc
clean_restart ${binfile} 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 width 50"
gdb_test_no_output "set height 3" gdb_test_no_output "set height 3"

View File

@ -145,6 +145,11 @@ proc operate_and_get_next {name args} {
gdb_start gdb_start
gdb_reinitialize_dir $srcdir/$subdir gdb_reinitialize_dir $srcdir/$subdir
if { ![readline_is_used] } {
unsupported "readline isn't used."
return -1
}
set oldtimeout1 $timeout set oldtimeout1 $timeout
set timeout 30 set timeout 30

View File

@ -177,9 +177,10 @@ gdb_test "complete expr_test bar\." \
"expr_test bar\.bc.*expr_test bar\.ij.*" \ "expr_test bar\.bc.*expr_test bar\.ij.*" \
"Test completion through complete command" "Test completion through complete command"
set test "complete 'expr_test bar.i'" if { [readline_is_used] } {
send_gdb "expr_test bar\.i\t\t" set test "complete 'expr_test bar.i'"
gdb_test_multiple "" "$test" { send_gdb "expr_test bar\.i\t\t"
gdb_test_multiple "" "$test" {
-re "expr_test bar\.ij \\\x07$" { -re "expr_test bar\.ij \\\x07$" {
send_gdb "\n" send_gdb "\n"
gdb_test_multiple "" $test { gdb_test_multiple "" $test {
@ -188,4 +189,5 @@ gdb_test_multiple "" "$test" {
} }
} }
} }
}
} }

View File

@ -148,6 +148,8 @@ gdb_test "interpreter-exec mi \"-trace-status\"" \
# Test completion works well. # Test completion works well.
gdb_test "target tfile [file rootname $tfile_basic]\t" \ if { [readline_is_used] } {
gdb_test "target tfile [file rootname $tfile_basic]\t" \
"Assuming tracepoint.*" \ "Assuming tracepoint.*" \
"complete-command 'target tfile'" "complete-command 'target tfile'"
}

View File

@ -1831,6 +1831,21 @@ proc supports_reverse {} {
return 0 return 0
} }
# Return 1 if readline library is used.
proc readline_is_used { } {
global gdb_prompt
gdb_test_multiple "show editing" "" {
-re ".*Editing of command lines as they are typed is on\..*$gdb_prompt $" {
return 1
}
-re ".*$gdb_prompt $" {
return 0
}
}
}
# Return 1 if target is ELF. # Return 1 if target is ELF.
gdb_caching_proc is_elf_target { gdb_caching_proc is_elf_target {
set me "is_elf_target" set me "is_elf_target"