mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-25 04:49:54 +08:00
Add TUI resizing test
This adds a test case that resizes the terminal and then checks that the TUI updates properly. gdb/testsuite/ChangeLog 2019-07-27 Tom Tromey <tom@tromey.com> * lib/tuiterm.exp (spawn): New proc. (Term::resize): New proc. * gdb.tui/resize.exp: New file.
This commit is contained in:
@ -1,3 +1,9 @@
|
||||
2019-07-27 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* lib/tuiterm.exp (spawn): New proc.
|
||||
(Term::resize): New proc.
|
||||
* gdb.tui/resize.exp: New file.
|
||||
|
||||
2019-07-27 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* gdb.tui/list.exp: New file.
|
||||
|
42
gdb/testsuite/gdb.tui/resize.exp
Normal file
42
gdb/testsuite/gdb.tui/resize.exp
Normal file
@ -0,0 +1,42 @@
|
||||
# Copyright 2019 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 TUI resizing.
|
||||
|
||||
load_lib "tuiterm.exp"
|
||||
|
||||
standard_testfile tui-layout.c
|
||||
|
||||
if {[build_executable "failed to prepare" ${testfile} ${srcfile}] == -1} {
|
||||
return -1
|
||||
}
|
||||
|
||||
Term::clean_restart 24 80 $testfile
|
||||
|
||||
if {![runto_main]} {
|
||||
perror "test suppressed"
|
||||
return
|
||||
}
|
||||
|
||||
if {![Term::enter_tui]} {
|
||||
unsupported "TUI not supported"
|
||||
}
|
||||
|
||||
Term::check_contents "source at startup" ">|21 *return 0"
|
||||
|
||||
Term::resize 40 90
|
||||
# Resizing seems to be somewhat broken.
|
||||
setup_xfail *-*-*
|
||||
Term::check_box "source box after resize" 0 0 90 23
|
@ -15,6 +15,19 @@
|
||||
|
||||
# An ANSI terminal emulator for expect.
|
||||
|
||||
# The expect "spawn" function puts the tty name into the spawn_out
|
||||
# array; but dejagnu doesn't export this globally. So, we have to
|
||||
# wrap spawn with our own function, so that we can capture this value.
|
||||
# The value is later used in calls to stty.
|
||||
rename spawn builtin_spawn
|
||||
proc spawn {args} {
|
||||
set result [uplevel builtin_spawn $args]
|
||||
global gdb_spawn_name
|
||||
upvar spawn_out spawn_out
|
||||
set gdb_spawn_name $spawn_out(slave,name)
|
||||
return $result
|
||||
}
|
||||
|
||||
namespace eval Term {
|
||||
variable _rows
|
||||
variable _cols
|
||||
@ -523,4 +536,36 @@ namespace eval Term {
|
||||
verbose "$fmt [get_line $y]"
|
||||
}
|
||||
}
|
||||
|
||||
# Resize the terminal.
|
||||
proc resize {rows cols} {
|
||||
variable _chars
|
||||
variable _rows
|
||||
variable _cols
|
||||
|
||||
set old_rows [expr {min ($_rows, $rows)}]
|
||||
set old_cols [expr {min ($_cols, $cols)}]
|
||||
|
||||
# Copy locally.
|
||||
array set local_chars [array get _chars]
|
||||
unset _chars
|
||||
|
||||
set _rows $rows
|
||||
set _cols $cols
|
||||
_clear_lines 0 $_rows
|
||||
|
||||
for {set x 0} {$x < $old_cols} {incr x} {
|
||||
for {set y 0} {$y < $old_rows} {incr y} {
|
||||
set _chars($x,$y) $local_chars($x,$y)
|
||||
}
|
||||
}
|
||||
|
||||
global gdb_spawn_name
|
||||
# Somehow the number of columns transmitted to gdb is one less
|
||||
# than what we request from expect. We hide this weird
|
||||
# details from the caller.
|
||||
stty rows $_rows columns [expr {$_cols + 1}] \
|
||||
< $gdb_spawn_name
|
||||
_accept
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user