forked from Imagelibrary/binutils-gdb
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 9162a27c5f
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.
89 lines
2.7 KiB
Plaintext
89 lines
2.7 KiB
Plaintext
# Copyright 2017-2023 Free Software Foundation, Inc.
|
|
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
# Minimal testcase that just checks that the various "layout $foo"
|
|
# commands do not cause gdb to crash.
|
|
|
|
require allow_tui_tests
|
|
|
|
tuiterm_env
|
|
|
|
standard_testfile
|
|
|
|
if {[prepare_for_testing "failed to prepare" ${testfile} ${srcfile}]} {
|
|
return -1
|
|
}
|
|
|
|
# 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_or_focus {layout_name terminal execution} {
|
|
global binfile gdb_prompt
|
|
|
|
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]} {
|
|
return 0
|
|
}
|
|
}
|
|
|
|
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 terminal {ansi dumb} {
|
|
foreach_with_prefix execution {false true} {
|
|
foreach_with_prefix layout {"asm" "reg" "src" "split"} {
|
|
test_layout_or_focus $layout $terminal $execution
|
|
}
|
|
}
|
|
}
|