public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] gdb/testsuite: extend gdb.tui/tui-layout.exp test script
@ 2023-01-25 11:27 Andrew Burgess
  0 siblings, 0 replies; only message in thread
From: Andrew Burgess @ 2023-01-25 11:27 UTC (permalink / raw)
  To: gdb-cvs

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

commit b3b0595ff66d8597637c415f74d43dd459a18cb3
Author: Andrew Burgess <aburgess@redhat.com>
Date:   Fri Nov 25 18:19:16 2022 +0000

    gdb/testsuite: extend gdb.tui/tui-layout.exp test script
    
    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.

Diff:
---
 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 2c502191d11..c7fdb1b0c0a 100644
--- a/gdb/testsuite/gdb.tui/tui-layout.exp
+++ b/gdb/testsuite/gdb.tui/tui-layout.exp
@@ -18,19 +18,41 @@
 
 require allow_tui_tests
 
+tuiterm_env
+
 standard_testfile
 
 if {[prepare_for_testing "failed to prepare" ${testfile} ${srcfile}]} {
     return -1
 }
 
-# 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]} {
@@ -38,16 +60,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
+	}
     }
 }

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

only message in thread, other threads:[~2023-01-25 11:27 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-01-25 11:27 [binutils-gdb] gdb/testsuite: extend gdb.tui/tui-layout.exp test script 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).