From 8abd06e066be7ad41d608b500187e90736c9e8fa Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Fri, 6 Jan 2023 13:27:14 -0500 Subject: [PATCH] gdb/testsuite/dap: make dap_wait_for_event_and_check return preceding messages In the following patch, I change gdb.dap/basic-dap.exp such that after waiting for some event, it checks if it received another event meanwhile. To help with this, make dap_wait_for_event_and_check and _dap_dap_wait_for_event return a list with everything received before the event of interest. This is similar to what dap_check_request_and_response returns. Change-Id: I85c8980203a2dec833937e7552c2196bc137935d --- gdb/testsuite/lib/dap-support.exp | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/gdb/testsuite/lib/dap-support.exp b/gdb/testsuite/lib/dap-support.exp index 179f675b4d8..527e7db5228 100644 --- a/gdb/testsuite/lib/dap-support.exp +++ b/gdb/testsuite/lib/dap-support.exp @@ -282,17 +282,27 @@ proc dap_match_values {name d args} { pass $name } -# A helper for dap_read_event that reads events, looking for one +# A helper for dap_wait_for_event_and_check that reads events, looking for one # matching TYPE. -proc _dap_wait_for_event {type} { +# +# Return a list of two items: +# +# - the matched event +# - a list of any JSON objects (events or others) seen before the matched +# event. +proc _dap_wait_for_event { {type ""} } { + set preceding [list] + while 1 { # We don't do any extra error checking here for the time # being; we'll just get a timeout thrown instead. set d [_dap_read_json] if {[dict get $d type] == "event" - && [dict get $d event] == $type} { - return $d + && ($type == "" || [dict get $d event] == $type)} { + return [list $d $preceding] } + + lappend preceding $d } } @@ -302,14 +312,20 @@ proc _dap_wait_for_event {type} { # are used to check fields of the event; the arguments alternate # between a field name (in "dict get" form) and its expected value. # -# Returns the dict for the chosen event, or empty string on error. +# Return a list of two items: +# +# - the matched event (regardless of whether it passed the field validation or +# not) +# - a list of any JSON objects (events or others) seen before the matched +# event. proc dap_wait_for_event_and_check {name type args} { if {$name == ""} { set name $type } set result [_dap_wait_for_event $type] - eval dap_match_values [list $name $result] $args + set event [lindex $result 0] + eval dap_match_values [list $name $event] $args return $result } -- 2.30.2