public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] Make gdb_test's question non-optional if specified
@ 2022-05-17 10:15 Pedro Alves
  0 siblings, 0 replies; only message in thread
From: Pedro Alves @ 2022-05-17 10:15 UTC (permalink / raw)
  To: gdb-cvs

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=ed01945057cfdf048bc025f15b410492e12283f6

commit ed01945057cfdf048bc025f15b410492e12283f6
Author: Pedro Alves <pedro@palves.net>
Date:   Wed Mar 30 14:31:56 2022 +0100

    Make gdb_test's question non-optional if specified
    
    gdb_test supports handling scenarios where GDB asks a question before
    finishing handling some command.  The full prototype of gdb_test is:
    
      # gdb_test COMMAND PATTERN MESSAGE QUESTION RESPONSE
    
    However, QUESTION is a question that GDB _may_ ask, not one that GDB
    _must_ ask:
    
     # QUESTION is a question GDB may ask in response to COMMAND, like
     #   "are you sure?"
     # RESPONSE is the response to send if QUESTION appears.
    
    If GDB doesn't raise the question, the test still passes.
    
    I think that this is a misfeature.  If GDB regresses and stops asking
    a question, the testsuite won't notice.  So I think that if a QUESTION
    is specified, gdb_test should ensure it comes out of GDB.
    
    Running the testsuite exposed a number of tests that pass
    QUESTION/RESPONSE to GDB, but no question comes out.  The previous
    commits fixed them all, so this commit changes gdb_test's behavior.
    
    A related issue is that gdb_test doesn't enforce that if you specify
    QUESTION, that you also specify RESPONSE.  I.e., you should pass 1, 2,
    3, or 5 arguments to gdb_test, but never 4, or more than 5.  Making
    gdb_test detect bogus arguments actually regressed some testcases,
    also all fixed in previous commits.
    
    Change-Id: I47c39c9034e6a6841129312037a5ca4c5811f0db

Diff:
---
 gdb/testsuite/lib/gdb.exp | 25 +++++++++++++++++++++----
 1 file changed, 21 insertions(+), 4 deletions(-)

diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index 47cb2b23676..0b1104bd299 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -1326,9 +1326,10 @@ proc gdb_test_multiline { name args } {
 #   omitted, then the pass/fail messages use the command string as the
 #   message.  (If this is the empty string, then sometimes we don't
 #   call pass or fail at all; I don't understand this at all.)
-# QUESTION is a question GDB may ask in response to COMMAND, like
-#   "are you sure?"
-# RESPONSE is the response to send if QUESTION appears.
+# QUESTION is a question GDB should ask in response to COMMAND, like
+#   "are you sure?"  If this is specified, the test fails if GDB
+#   doesn't print the question.
+# RESPONSE is the response to send when QUESTION appears.
 #
 # Returns:
 #    1 if the test failed,
@@ -1339,6 +1340,11 @@ proc gdb_test { args } {
     global gdb_prompt
     upvar timeout timeout
 
+    # Can't have a question without a response.
+    if { [llength $args] == 4 || [llength $args] > 5 } {
+	error "Unexpected arguments: $args"
+    }
+
     if [llength $args]>2 then {
 	set message [lindex $args 2]
     } else {
@@ -1347,11 +1353,21 @@ proc gdb_test { args } {
     set command [lindex $args 0]
     set pattern [lindex $args 1]
 
+    set must_see_question 0
+    if { [llength $args] == 5 } {
+	set must_see_question 1
+	set saw_question 0
+    }
+
     set user_code {}
     lappend user_code {
 	-re "\[\r\n\]*(?:$pattern)\[\r\n\]+$gdb_prompt $" {
 	    if ![string match "" $message] then {
-		pass "$message"
+		if {$must_see_question} {
+		    gdb_assert $saw_question "$message"
+		} else {
+		    pass "$message"
+		}
             }
         }
     }
@@ -1361,6 +1377,7 @@ proc gdb_test { args } {
 	set response_string [lindex $args 4]
 	lappend user_code {
 	    -re "(${question_string})$" {
+		set saw_question 1
 		send_gdb "$response_string\n"
 		exp_continue
 	    }


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-05-17 10:15 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-17 10:15 [binutils-gdb] Make gdb_test's question non-optional if specified Pedro Alves

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).