From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) by sourceware.org (Postfix) with ESMTPS id 1E75C3858D3C for ; Tue, 17 May 2022 11:25:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 1E75C3858D3C Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=palves.net Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-wm1-f42.google.com with SMTP id n6-20020a05600c3b8600b0039492b44ce7so1079653wms.5 for ; Tue, 17 May 2022 04:25:20 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:to:cc:references:from:in-reply-to :content-transfer-encoding; bh=qt4B0BqZbn3EveFIQtjNBeQWGiLuOnr0tid++Ts30FE=; b=gWTKVUwOrIqJLoGkIG/6eOmEEiTGYN1FcOiTEyd9MNySPCvapIhjt4LMva+/vTUDPc BkirAimqCx3Fw3Ne0xr1ghU86IA7vPXyDcUnqLpb6V2cUfcFD3yoMxtPI+tFI/eF6XFQ hkacUojh+SSaR9VnTZsrXGWHWXt6Xx2hW2agsAg/I4eH/VyctR4/ZL0Jby3qzpMFSEz6 MotivhQnZBztxCyDatFHH5KVUTjSKahuZGo+OOswx5bBscSX1bcLWMgzFyZcgJol8ZUQ iAU7iN5PdcXJrrqFX5bbnKOO3Pntn4c3u68hOlF1+VfVa5zoVuek8I+JgarFUKqgf0nQ rQ6w== X-Gm-Message-State: AOAM5308TejqKF4i8PPnEhwwxFxDrCesuJsTHzAStbffaC0XXM1VSV0F uoXcThDS3B9AYf2enXeeq/L0IhGJWFw= X-Google-Smtp-Source: ABdhPJzSGJrQdPT8B9UD2YVdRGukZfrR0/uG/W7Z7JZSylcRyyN+ST7yJ5+csAk0XM3A2iShWPKD3w== X-Received: by 2002:a05:600c:24a:b0:394:4ce6:57db with SMTP id 10-20020a05600c024a00b003944ce657dbmr31185047wmj.193.1652786719010; Tue, 17 May 2022 04:25:19 -0700 (PDT) Received: from ?IPV6:2001:8a0:f924:2600:209d:85e2:409e:8726? ([2001:8a0:f924:2600:209d:85e2:409e:8726]) by smtp.gmail.com with ESMTPSA id n187-20020a1ca4c4000000b003942a244ecfsm1650763wme.20.2022.05.17.04.25.17 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 17 May 2022 04:25:17 -0700 (PDT) Message-ID: Date: Tue, 17 May 2022 12:25:16 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.9.0 Subject: Re: [PATCH 5/5] Make gdb_test's question non-optional if specified Content-Language: en-US To: Tom Tromey Cc: gdb-patches@sourceware.org References: <20220330192929.3161015-1-pedro@palves.net> <20220330192929.3161015-6-pedro@palves.net> <87o7zxeaa6.fsf@tromey.com> From: Pedro Alves In-Reply-To: <87o7zxeaa6.fsf@tromey.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-11.0 required=5.0 tests=BAYES_00, FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 17 May 2022 11:25:22 -0000 On 2022-05-16 17:01, Tom Tromey wrote: >>>>>> "Pedro" == Pedro Alves writes: > > Pedro> gdb_test supports handling scenarios where GDB asks a question before > Pedro> finishing handling some command. The full prototype of gdb_test is: > > Pedro> # gdb_test COMMAND PATTERN MESSAGE QUESTION RESPONSE > > I wonder if, after this patch, we can rewrite gdb_test to use ordinary > arguments and not parse 'args' by itself: > > Like instead of: > > set command [lindex $args 0] > set pattern [lindex $args 1] > > Just write > > proc gdb_test {command pattern {message ""} {question ""} {response ""}} > > ... and then default 'message' when appropriate. (Note pattern is optional too.) Maybe, but OTOH, we could instead switch to using parse_args, which would let us support other options to gdb_test, like gdb_test_multiple's [ -prompt PROMPT_REGEXP] [ -lbl ], and whatever other options we come up in future. We could even support gdb_test "command" "pattern" \ -question "you sure\?" -response "y" gdb_test "command" "pattern" \ -question "you sure\?" -response "y" which has the advantage of not requiring you to specify $message whenever you need to supply a question/response. We could do both, actually, support parse_args, and keep supporting the positional arguments. lindex returns an empty string if the index is >= than number of elements, so we can simplify things by checking if the positional argument is "" instead of looking at whether it was actually passed down. I think this removes most of the ugliness. In the patch below I've added support for -prompt and -lbl, and one example using gdb_test -prompt, to show better what I mean. >From 2ef20ed4a12a94a8352d16051b8d1920497348f4 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Tue, 17 May 2022 11:16:01 +0100 Subject: [PATCH] Support -prompt and -lbl in gdb_test Change-Id: I243e1296d32c05a421ccef30b63d43a89eaeb4a0 --- gdb/testsuite/gdb.base/ui-redirect.exp | 10 ++--- gdb/testsuite/lib/gdb.exp | 56 +++++++++++++++----------- 2 files changed, 37 insertions(+), 29 deletions(-) diff --git a/gdb/testsuite/gdb.base/ui-redirect.exp b/gdb/testsuite/gdb.base/ui-redirect.exp index 13bc964f46c..4ed82ae63bf 100644 --- a/gdb/testsuite/gdb.base/ui-redirect.exp +++ b/gdb/testsuite/gdb.base/ui-redirect.exp @@ -117,12 +117,10 @@ with_test_prefix "debugging" { gdb_test "set logging enabled on" \ "Copying output to /dev/null.*Copying debug output to /dev/null\\." - set prompt "$gdb_prompt \\\[infrun\\\] fetch_inferior_event: exit\r\n$" - gdb_test_multiple "continue" "continue" -prompt $prompt { - -re "Continuing.*\\\[infrun\\\] .*\\\[infrun\\\] .*Breakpoint \[0-9\]+, foo.*$prompt$" { - pass $gdb_test_name - } - } + gdb_test \ + -prompt "$gdb_prompt \\\[infrun\\\] fetch_inferior_event: exit\r\n$" \ + "continue" \ + "Continuing.*\\\[infrun\\\] .*\\\[infrun\\\] .*Breakpoint \[0-9\]+, foo.*" gdb_test "set debug infrun 0" gdb_test "set logging enabled off" "Done logging to /dev/null\\." diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index 0b1104bd299..071f4994a76 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -1313,7 +1313,7 @@ proc gdb_test_multiline { name args } { } -# gdb_test COMMAND PATTERN MESSAGE QUESTION RESPONSE +# gdb_test COMMAND [PATTERN] [MESSAGE] [QUESTION RESPONSE] [-prompt PROMPT] [-lbl] # Send a command to gdb; test the result. # # COMMAND is the command to execute, send to GDB with send_gdb. If @@ -1335,57 +1335,67 @@ proc gdb_test_multiline { name args } { # 1 if the test failed, # 0 if the test passes, # -1 if there was an internal error. -# +# proc gdb_test { args } { global gdb_prompt upvar timeout timeout + parse_args { + {prompt ""} + {lbl} + } + + set command [lindex $args 0] + set pattern [lindex $args 1] + set message [lindex $args 2] + set question [lindex $args 3] + set response [lindex $args 4] + # Can't have a question without a response. - if { [llength $args] == 4 || [llength $args] > 5 } { + if { $question != "" && $response == "" } { error "Unexpected arguments: $args" } - if [llength $args]>2 then { - set message [lindex $args 2] - } else { - set message [lindex $args 0] + if { $message == "" } { + set message $command } - 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 + if { $prompt == "" } { + set prompt "$gdb_prompt $" } + set saw_question 0 + set user_code {} lappend user_code { - -re "\[\r\n\]*(?:$pattern)\[\r\n\]+$gdb_prompt $" { + -re "\[\r\n\]*(?:$pattern)\[\r\n\]+$prompt" { if ![string match "" $message] then { - if {$must_see_question} { + if { $question != "" } { gdb_assert $saw_question "$message" } else { pass "$message" } - } - } + } + } } - if { [llength $args] == 5 } { - set question_string [lindex $args 3] - set response_string [lindex $args 4] + if { $question != "" } { lappend user_code { - -re "(${question_string})$" { + -re "($question)$" { set saw_question 1 - send_gdb "$response_string\n" + send_gdb "$response\n" exp_continue } } } + set opts {} + lappend "-prompt $prompt" + if {$lbl} { + lappend opts "-lbl" + } set user_code [join $user_code] - return [gdb_test_multiple $command $message $user_code] + return [gdb_test_multiple $command $message {*}$opts $user_code] } # Return 1 if version MAJOR.MINOR is at least AT_LEAST_MAJOR.AT_LEAST_MINOR. base-commit: ed01945057cfdf048bc025f15b410492e12283f6 -- 2.36.0