public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Yao Qi <yao@codesourcery.com>
To: Joel Brobecker <brobecker@adacore.com>
Cc: <gdb-patches@sourceware.org>
Subject: Re: [PATCH] Skip tests on completion and readline when readline lib isn't used
Date: Wed, 26 Mar 2014 13:13:00 -0000	[thread overview]
Message-ID: <5332D1D1.20509@codesourcery.com> (raw)
In-Reply-To: <20140326123207.GP4282@adacore.com>

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.

-- 
Yao (齐尧)

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.
---
 gdb/testsuite/ChangeLog                 |   14 ++++
 gdb/testsuite/gdb.ada/complete.exp      |   23 ++++---
 gdb/testsuite/gdb.base/completion.exp   |  121 ++++++++++++++++---------------
 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               |   15 ++++
 10 files changed, 198 insertions(+), 136 deletions(-)

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"
-- 
1.7.7.6

  reply	other threads:[~2014-03-26 13:13 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-26  5:49 Yao Qi
2014-03-26 12:32 ` Joel Brobecker
2014-03-26 13:13   ` Yao Qi [this message]
2014-05-01 16:27 ` [PUSHED 0/2] Make local-remote-host.exp force pseudo-tty allocation; add local-remote-host-notty.exp Pedro Alves
2014-05-01 16:27   ` [PUSHED 2/2] New testsuite/boards/local-remote-host.exp board, now with editing on Pedro Alves
2014-05-02 11:28     ` Yao Qi
2014-05-01 16:27   ` [PUSHED 1/2] Rename testsuite/boards/local-remote-host.exp -> testsuite/boards/local-remote-host-notty.exp Pedro Alves

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5332D1D1.20509@codesourcery.com \
    --to=yao@codesourcery.com \
    --cc=brobecker@adacore.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).