public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Andrew Burgess <aburgess@redhat.com>
To: gdb-patches@sourceware.org
Cc: Andrew Burgess <aburgess@redhat.com>
Subject: [PATCH 01/15] gdb/testsuite: extend gdb.tui/tui-layout.exp test script
Date: Fri,  6 Jan 2023 10:25:28 +0000	[thread overview]
Message-ID: <3adda76c2743f4b5c7c811cc68a212ec9fcf3f57.1673000632.git.aburgess@redhat.com> (raw)
In-Reply-To: <cover.1673000632.git.aburgess@redhat.com>

In passing I noticed that the gdb.tui/tui-layout.exp test script was a
little strange, it tests the layout command multiple times, but never
sets up our ANSI terminal emulator, so every layout command fails with
a message about the terminal lacking the required abilities.

It turns out that this was caused by this commit:

  commit 9162a27c5f5828240b53379d735679e2a69a9f41
  Date:   Tue Nov 13 11:59:03 2018 -0700

      Change gdb test suite's TERM setting

This was when we changed the testsuite to set the TERM environment
variable to "dumb" by default.

After this, any tui test that didn't set the terminal mode back to
'ansi' would fail to activate tui mode.

For the tui-layout.exp test it just so happens that the test patterns
are generic enough that the test continued to pass, even after this
change.

In this commit I have updated the test so we now check the layout
command both with a 'dumb' terminal and with the 'ansi' terminal.
When testing with the 'ansi' terminal, I have some limited validation
that GDB correctly entered tui mode.

I figured that it is probably worth having at least one test in the
test suite that deliberately tries to enter tui mode in a dumb
terminal, it would be sad if we one day managed to break GDB such that
this caused a crash, and never noticed.
---
 gdb/testsuite/gdb.tui/tui-layout.exp | 57 ++++++++++++++++++++++------
 1 file changed, 46 insertions(+), 11 deletions(-)

diff --git a/gdb/testsuite/gdb.tui/tui-layout.exp b/gdb/testsuite/gdb.tui/tui-layout.exp
index 97734cf7b68..e69760193c5 100644
--- a/gdb/testsuite/gdb.tui/tui-layout.exp
+++ b/gdb/testsuite/gdb.tui/tui-layout.exp
@@ -16,6 +16,8 @@
 # Minimal testcase that just checks that the various "layout $foo"
 # commands do not cause gdb to crash.
 
+tuiterm_env
+
 standard_testfile
 
 if {[prepare_for_testing "failed to prepare" ${testfile} ${srcfile}]} {
@@ -26,13 +28,33 @@ if {[skip_tui_tests]} {
     return
 }
 
-# Test one layout command.  EXECUTION indicates whether to activate
-# the layout with or without execution.
+# Run one test of the 'layout' command, selecting LAYOUT_NAME.
+#
+# TERMINAL should be either 'dumb' or 'ansi'.  When TERMINAL is 'dumb'
+# then GDB is started in a terminal that does not support tui mode, in
+# this case the layout command is expected to fail.
+#
+# When TERMINAL is 'ansi' then GDB is started using our emulated ANSI
+# terminal, and the layout command is expected to succeed.
+#
+# When EXECUTION is true then a call to runto_main is used, otherwise
+# this call is skipped and the inferior is left in whatever state it
+# happens to be in after a call to clean_restart.
 
-proc test_layout {layout execution} {
+proc test_layout_or_focus {layout_name terminal execution} {
     global binfile gdb_prompt
 
-    clean_restart $binfile
+    set dumb_terminal [string equal $terminal "dumb"]
+
+    if {$dumb_terminal} {
+	clean_restart $binfile
+    } else {
+	Term::clean_restart 24 80 $binfile
+	if {![Term::prepare_for_tui]} {
+	    unsupported "TUI not supported"
+	    return
+	}
+    }
 
     if {$execution} {
 	if {![runto_main]} {
@@ -40,16 +62,29 @@ proc test_layout {layout execution} {
 	}
     }
 
-    set test "layout command"
-    gdb_test_multiple "layout $layout" $test {
-	-re "$gdb_prompt $" {
-	    pass $test
+    if {$dumb_terminal} {
+	gdb_test "layout $layout_name" \
+	    "Cannot enable the TUI: terminal doesn't support cursor addressing \\\[TERM=dumb\\\]"
+    } else {
+	Term::command_no_prompt_prefix "layout $layout_name"
+	if {$layout_name == "asm"} {
+	    Term::check_box "asm box" 0 0 80 15
+	} elseif {$layout_name == "reg"} {
+	    Term::check_box "reg box" 0 0 80 8
+	    Term::check_box "src box" 0 7 80 8
+	} elseif {$layout_name == "src"} {
+	    Term::check_box "src box" 0 0 80 15
+	} elseif {$layout_name == "split"} {
+	    Term::check_box "src box" 0 0 80 8
+	    Term::check_box "asm box" 0 7 80 8
 	}
     }
 }
 
-foreach_with_prefix execution {0 1} {
-    foreach_with_prefix layout {"asm" "reg" "src" "split"} {
-	test_layout $layout $execution
+foreach_with_prefix terminal {ansi dumb} {
+    foreach_with_prefix execution {false true} {
+	foreach_with_prefix layout {"asm" "reg" "src" "split"} {
+	    test_layout_or_focus $layout $terminal $execution
+	}
     }
 }
-- 
2.25.4


  reply	other threads:[~2023-01-06 10:25 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-06 10:25 [PATCH 00/15] Mixed bag of TUI tests and fixes Andrew Burgess
2023-01-06 10:25 ` Andrew Burgess [this message]
2023-01-25 11:29   ` [PATCH 01/15] gdb/testsuite: extend gdb.tui/tui-layout.exp test script Andrew Burgess
2023-01-06 10:25 ` [PATCH 02/15] gdb/testsuite: update gdb.tui/tui-disasm-long-lines.exp Andrew Burgess
2023-01-25 11:29   ` Andrew Burgess
2023-01-06 10:25 ` [PATCH 03/15] gdb/testsuite: update gdb.tui/tui-nl-filtered-output.exp Andrew Burgess
2023-01-25 11:30   ` Andrew Burgess
2023-01-06 10:25 ` [PATCH 04/15] gdb/testsuite/tui: more testing of the 'focus' command Andrew Burgess
2023-01-25 11:32   ` Andrew Burgess
2023-01-06 10:25 ` [PATCH 05/15] gdb/tui: convert if/error to an assert Andrew Burgess
2023-01-25 11:33   ` Andrew Burgess
2023-01-06 10:25 ` [PATCH 06/15] gdb/tui: better filtering of tab completion results for focus command Andrew Burgess
2023-01-25 11:33   ` Andrew Burgess
2023-01-06 10:25 ` [PATCH 07/15] gdb/testsuite: fix line feed scrolling in tuiterm.exp Andrew Burgess
2023-01-06 10:25 ` [PATCH 08/15] gdb/tui: improve errors from tui focus command Andrew Burgess
2023-01-06 10:25 ` [PATCH 09/15] gdb/tui: disable tui mode when an assert triggers Andrew Burgess
2023-01-06 10:25 ` [PATCH 10/15] gdb/tui: make m_horizontal_offset private Andrew Burgess
2023-01-06 10:25 ` [PATCH 11/15] gdb/tui: rewrite of tui_source_window_base to handle very long lines Andrew Burgess
2023-01-06 10:25 ` [PATCH 12/15] gdb/tui: avoid extra refresh_window on horizontal scroll Andrew Burgess
2023-01-06 10:25 ` [PATCH 13/15] gdb/tui: avoid extra refresh_window on vertical scroll Andrew Burgess
2023-01-06 10:25 ` [PATCH 14/15] gdb/tui: more debug output Andrew Burgess
2023-01-06 10:25 ` [PATCH 15/15] gdb/tui: make use of a scoped_restore Andrew Burgess
2023-01-25 12:01   ` Andrew Burgess
2023-01-25 12:08 ` [PATCHv2 0/8] Mixed bag of TUI tests and fixes Andrew Burgess
2023-01-25 12:08   ` [PATCHv2 1/8] gdb/testsuite: fix line feed scrolling in tuiterm.exp Andrew Burgess
2023-01-25 19:46     ` Tom Tromey
2023-01-25 12:08   ` [PATCHv2 2/8] gdb/tui: improve errors from tui focus command Andrew Burgess
2023-01-25 12:08   ` [PATCHv2 3/8] gdb/tui: disable tui mode when an assert triggers Andrew Burgess
2023-01-25 12:08   ` [PATCHv2 4/8] gdb/tui: make m_horizontal_offset private Andrew Burgess
2023-01-25 12:08   ` [PATCHv2 5/8] gdb/tui: rewrite of tui_source_window_base to handle very long lines Andrew Burgess
2023-01-25 12:08   ` [PATCHv2 6/8] gdb/tui: avoid extra refresh_window on horizontal scroll Andrew Burgess
2023-01-25 20:05     ` Tom Tromey
2023-01-25 12:08   ` [PATCHv2 7/8] gdb/tui: avoid extra refresh_window on vertical scroll Andrew Burgess
2023-01-25 12:08   ` [PATCHv2 8/8] gdb/tui: more debug output Andrew Burgess
2023-01-25 20:07   ` [PATCHv2 0/8] Mixed bag of TUI tests and fixes Tom Tromey
2023-01-27 16:31     ` Andrew Burgess

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=3adda76c2743f4b5c7c811cc68a212ec9fcf3f57.1673000632.git.aburgess@redhat.com \
    --to=aburgess@redhat.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).