+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>
* gdb.base/macscp.exp: Fix code format issues.
# 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"
+ }
+ }
+ }
}
}
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] } {
+ return -1
+}
+
set test "complete 'hfgfh'"
send_gdb "hfgfh\t"
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
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).
"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.
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"
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
+if { ![readline_is_used] } {
+ unsupported "readline isn't used."
+ return -1
+}
+
set oldtimeout1 $timeout
set timeout 30
"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"
+ }
}
}
}
# 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'"
+}
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.
gdb_caching_proc is_elf_target {
set me "is_elf_target"