resize-2.exp revision 1.1.1.2 1 # Copyright 2023-2024 Free Software Foundation, Inc.
2
3 # This program is free software; you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation; either version 3 of the License, or
6 # (at your option) any later version.
7 #
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # GNU General Public License for more details.
12 #
13 # You should have received a copy of the GNU General Public License
14 # along with this program. If not, see <http://www.gnu.org/licenses/>.
15
16 # Test TUI resizing using maint screen info command.
17
18 require allow_tui_tests
19
20 tuiterm_env
21
22 Term::clean_restart 24 80
23 set screen_dim { 0 0 80 24 }
24
25 # Use a layout with just a command window.
26 gdb_test "tui new-layout command-layout cmd 1"
27
28 if {![Term::prepare_for_tui]} {
29 unsupported "TUI not supported"
30 return 0
31 }
32
33 # Enter TUI.
34 Term::command_no_prompt_prefix "layout command-layout"
35
36 proc check_width { what n } {
37 set re "Number of characters $what thinks are in a line is $n"
38 Term::check_region_contents "$what width $n" {*}$::screen_dim $re
39 }
40
41 # Check that curses has the correct notion of screen width.
42 Term::command "maint info screen"
43 check_width curses 80
44 check_width gdb 80
45
46 # Resize with TUI enabled, wait for the resize message.
47 Term::resize 40 90
48 set screen_dim { 0 0 90 40 }
49
50 # Check that curses has the correct notion of screen width after resize.
51 Term::command "maint info screen"
52 check_width curses 90
53 check_width gdb 90
54
55 # Temporarily disable TUI.
56 gdb_test_multiple "tui disable" "" {
57 -re "$gdb_prompt $" {
58 pass $gdb_test_name
59 }
60 }
61
62 # Resize with TUI disabled, so don't wait for the resize message. Instead,
63 # do it in two steps, and wait for a prompt redisplay for each. If we do
64 # this in one step, it's unpredictable how may prompt redisplays we'll get.
65 Term::resize 24 90 0
66 set screen_dim { 0 0 90 24 }
67
68 gdb_test_multiple "" "prompt redisplays after first resize" {
69 -re "\r.*$gdb_prompt $" {
70 pass $gdb_test_name
71 }
72 }
73
74 Term::resize 24 80 0
75 set screen_dim { 0 0 80 24 }
76
77 gdb_test_multiple "" "prompt redisplays after second resize" {
78 -re "\r.*$gdb_prompt $" {
79 pass $gdb_test_name
80 }
81 }
82
83 # At this point, curses still thinks the width is 90. This doesn't look
84 # harmful because TUI is disabled.
85 gdb_test "maint info screen" \
86 "\r\nNumber of characters curses thinks are in a line is 90.\\r\n.*" \
87 "curses width after resize with TUI disabled"
88
89 # Re-enable TUI.
90 send_gdb "tui enable\n"
91 # The "tui enable" command is issued on the CLI screen, on the TUI we have the
92 # last command issued there: "tui disable".
93 Term::wait_for "tui disable"
94
95 # Check that curses has the correct notion of screen width after screen resize
96 # with TUI disabled.
97 Term::command "maint info screen"
98 with_test_prefix again {
99 check_width curses 80
100 check_width gdb 80
101 }
102