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

Message ID 5332D1D1.20509@codesourcery.com
State Committed
Headers

Commit Message

Yao Qi March 26, 2014, 1:10 p.m. UTC
  On 03/26/2014 08:32 PM, Joel Brobecker wrote:
>> +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).
> 

OK.

>> >  
>> > +# 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?

Done.  Patch below is pushed in.
  

Patch

diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 694efd6..45355f3 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,5 +1,19 @@ 
 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.
 
 2014-03-25  Ulrich Weigand  <uweigand@de.ibm.com>
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..73e3a06 100644
--- a/gdb/testsuite/gdb.base/completion.exp
+++ b/gdb/testsuite/gdb.base/completion.exp
@@ -69,6 +69,70 @@  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] } {
+    return -1
+}
+
 set test "complete 'hfgfh'"
 send_gdb "hfgfh\t"
 gdb_test_multiple "" "$test" {
@@ -687,63 +751,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..0db3c90 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -1831,6 +1831,21 @@  proc supports_reverse {} {
     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"