Projet_SETI_RISC-V/riscv-gnu-toolchain/binutils/gdb/testsuite/gdb.tui/winheight.exp
2023-03-06 14:48:14 +01:00

129 lines
4.6 KiB
Text

# Copyright 2019-2022 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/>.
# Test the "winheight" command.
tuiterm_env
standard_testfile tui-layout.c
if {[build_executable "failed to prepare" ${testfile} ${srcfile}] == -1} {
return -1
}
Term::clean_restart 24 80 $testfile
if {![Term::enter_tui]} {
unsupported "TUI not supported"
return
}
Term::check_box "source box" 0 0 80 15
Term::command "winheight cmd +5"
Term::check_box "smaller source box" 0 0 80 10
Term::command "winheight cmd -5"
Term::check_box "larger source box" 0 0 80 15
Term::command "winheight src -5"
Term::check_box "smaller source box again" 0 0 80 10
Term::command "winheight src +5"
Term::check_box "larger source box again" 0 0 80 15
# Check that attempting a window to be too large gives an error.
Term::command "winheight src 100"
Term::check_box "source box has not changed" 0 0 80 15
Term::check_region_contents "check error message about src size 100" 0 16 80 8 \
[multi_line "$gdb_prompt winheight src 100\\s+" \
"warning: Invalid window height specified\\s+" \
"$gdb_prompt"]
# Check that incrementing to a size that is "too big" will trigger an
# error, and that the window doesn't resize.
Term::command "winheight src 20"
Term::check_box "source box is at its max size" 0 0 80 20
Term::command "winheight src +1"
Term::check_box "source box is still at its max size" 0 0 80 20
Term::check_region_contents "check error message about src +1" 0 21 80 3 \
[multi_line "$gdb_prompt winheight src \\+1\\s+" \
"warning: Invalid window height specified\\s+" \
"$gdb_prompt"]
# Reset the cmd window to a sane size.
Term::command "winheight cmd 8"
Term::command "layout regs"
Term::check_box "register window" 0 0 80 8
Term::check_box "source window" 0 7 80 8
Term::command "winheight cmd 10"
Term::check_box "register window after resize" 0 0 80 7
Term::check_box "source window after resize" 0 6 80 7
# At one point we had a bug where adjusting the winheight would result
# in GDB keeping hold of duplicate window pointers, which it might
# then try to delete when the layout was changed. Running this test
# under valgrind would expose that bug.
Term::command "layout asm"
Term::command "winheight cmd 8"
Term::check_box "check for asm window" 0 0 80 15
# Check what happens when we switch from src layout to split layout.
# The interesting thing here is that the src layout has one flexible
# window (the src), the status window, which is of fixed size, and the
# cmd window, which tries to retain its size when a layout changes.
#
# In contrast, the split layout has both a src and asm window, plus
# the same status and cmd windows.
#
# Of particular interest here is the first test, where we maximise the
# cmd window before switching to split. This requires gdb to realise
# that it has to shrink the cmd window, even though this is something
# gdb usually avoids doing.
#
# Each test here is a size for the src window in the 'src' layout.
# The test then switches to the 'split' layout, and calculates the
# expected window sizes.
foreach_with_prefix cmd_size {20 12 5} {
set src_size_before [expr 24 - ${cmd_size} - 1]
set split_size [expr (24 - ${cmd_size}) / 2]
if { $split_size < 3 } {
# The minimum window size is 3, so force that.
set src_size_after 3
set asm_size_after 3
} elseif { [expr $split_size % 2] == 0 } {
# The remaining space can be divided evenly between the two
# windows.
set src_size_after ${split_size}
set asm_size_after ${split_size}
} else {
# The space can't be divided evenly, the asm window will get
# the extra line.
set src_size_after ${split_size}
set asm_size_after [expr ${split_size} + 1]
}
Term::command "layout src"
Term::command "winheight cmd ${cmd_size}"
Term::check_box "check for src window" 0 0 80 ${src_size_before}
# Both windows should be of equal size, which will be their minimum.
Term::command "layout split"
Term::check_box "check for src window in split" 0 0 80 ${src_size_after}
Term::check_box "check for asm window in split" 0 [expr ${src_size_after} - 1] 80 ${asm_size_after}
}