public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] gdb/testsuite introduce foreach_mi_ui_mode helper proc
@ 2023-02-28 11:09 Andrew Burgess
  0 siblings, 0 replies; only message in thread
From: Andrew Burgess @ 2023-02-28 11:09 UTC (permalink / raw)
  To: gdb-cvs

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

commit 292deeba7d6e0f1df99fff8c18000a1a3c481f3a
Author: Andrew Burgess <aburgess@redhat.com>
Date:   Fri Feb 17 15:19:12 2023 +0000

    gdb/testsuite introduce foreach_mi_ui_mode helper proc
    
    Introduce foreach_mi_ui_mode, a helper proc which can be used when
    tests are going to be repeated once with the MI in the main UI, and
    once with the MI on a separate UI.
    
    The proc is used like this:
    
      foreach_mi_ui_mode VAR {
        # BODY
      }
    
    The BODY will be run twice, once with VAR set to 'main' and once with
    VAR set to 'separate', inside BODY we can then change the behaviour
    based on the current UI mode.
    
    The point of this proc is that we sometimes shouldn't run the separate
    UI tests (when gdb_debug_enabled is true), and this proc hides all
    this logic.  If the separate UI mode should not be used then BODY will
    be run just once with VAR set to 'main'.
    
    I've updated two tests that can make use of this helper proc.  I'm
    going to add another similar test in a later commit.
    
    There should be no change to what is tested with this commit.
    
    Approved-By: Pedro Alves <pedro@palves.net>

Diff:
---
 gdb/testsuite/gdb.mi/mi-break.exp |  9 +-------
 gdb/testsuite/gdb.mi/mi-watch.exp |  9 +-------
 gdb/testsuite/lib/mi-support.exp  | 44 +++++++++++++++++++++++++++++++++++++++
 3 files changed, 46 insertions(+), 16 deletions(-)

diff --git a/gdb/testsuite/gdb.mi/mi-break.exp b/gdb/testsuite/gdb.mi/mi-break.exp
index 5b5d3aad2e4..3400e2e6f7c 100644
--- a/gdb/testsuite/gdb.mi/mi-break.exp
+++ b/gdb/testsuite/gdb.mi/mi-break.exp
@@ -419,13 +419,6 @@ proc test_break {mi_mode} {
     test_forced_conditions
 }
 
-if [gdb_debug_enabled] {
-  # gdb debug doesn't work for separate-mi-tty.
-  set modes {"main"}
-} else {
-  set modes {"main" "separate"}
-}
-
-foreach_with_prefix mi-mode $modes {
+foreach_mi_ui_mode mi-mode {
     test_break ${mi-mode}
 }
diff --git a/gdb/testsuite/gdb.mi/mi-watch.exp b/gdb/testsuite/gdb.mi/mi-watch.exp
index aaac7611015..12b9781e95a 100644
--- a/gdb/testsuite/gdb.mi/mi-watch.exp
+++ b/gdb/testsuite/gdb.mi/mi-watch.exp
@@ -175,16 +175,9 @@ proc test_watchpoint_all {mi_mode type} {
     test_watchpoint_triggering
 }
 
-if [gdb_debug_enabled] {
-  # gdb debug doesn't work for separate-mi-tty.
-  set modes {"main"}
-} else {
-  set modes {"main" "separate"}
-}
-
 # Run the tests twice, once using software watchpoints, and another
 # with hardware watchpoints.
-foreach_with_prefix mi-mode $modes {
+foreach_mi_ui_mode mi-mode {
     foreach_with_prefix wp-type {"sw" "hw"} {
 	test_watchpoint_all ${mi-mode} ${wp-type}
     }
diff --git a/gdb/testsuite/lib/mi-support.exp b/gdb/testsuite/lib/mi-support.exp
index cdebcc7d0f7..6454205e124 100644
--- a/gdb/testsuite/lib/mi-support.exp
+++ b/gdb/testsuite/lib/mi-support.exp
@@ -2795,3 +2795,47 @@ proc mi_get_valueof { fmt exp default {test ""} } {
     }
     return ${val}
 }
+
+# Some MI tests should be run in the normal way, on the main UI, while
+# other tests should be run twice, once when the MI is on the main UI,
+# and once with the MI on a secondary UI, this proc facilitates that.
+#
+# Use as:
+#
+#   foreach_mi_ui_mode mode {
+#     # ... body ...
+#   }
+#
+# The BODY will then be run once with MODE set to 'main' and once with
+# MODE set to 'separate'.
+#
+# However, there are times when we know using the 'separate' UI will
+# not work.  This proc handles figuring that out, if the 'separate' UI
+# is known not to work then the 'separate' mode will be skipped and
+# BODY will be run just once with MODE set to 'main'.
+
+proc foreach_mi_ui_mode { var_name body } {
+    upvar 1 $var_name var
+
+    if [gdb_debug_enabled] {
+       # gdb debug doesn't work for separate-mi-tty.
+       set modes {"main"}
+    } else {
+       set modes {"main" "separate"}
+    }
+
+    foreach var $modes {
+       with_test_prefix "$var_name=$var" {
+           set code [catch {uplevel 1 $body} result]
+       }
+
+       if {$code == 1} {
+           global errorInfo errorCode
+           return -code $code -errorinfo $errorInfo -errorcode $errorCode $result
+       } elseif {$code == 3} {
+           break
+       } elseif {$code == 2} {
+           return -code $code $result
+       }
+    }
+}

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

only message in thread, other threads:[~2023-02-28 11:09 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-02-28 11:09 [binutils-gdb] gdb/testsuite introduce foreach_mi_ui_mode helper proc Andrew Burgess

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