aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2023-06-09 00:12:59 +0200
committerTom de Vries <tdevries@suse.de>2023-06-09 00:12:59 +0200
commit36078688fa9355a32939b0c856792830db6403f3 (patch)
tree06005752e399ca80348d3cf95a5974db9d93fc3a
parentea70f941f9b2ccb0bbcda62496426e060da946a7 (diff)
downloadgdb-36078688fa9355a32939b0c856792830db6403f3.zip
gdb-36078688fa9355a32939b0c856792830db6403f3.tar.gz
gdb-36078688fa9355a32939b0c856792830db6403f3.tar.bz2
[gdb/testsuite] Add test-case gdb.tui/long-prompt.exp
I noticed that the test-suite doesn't excercise the case in tui_redisplay_readline that height (initially 1) is changed by this call: ... tui_puts_internal (w, prompt, &height); ... Add a test-case that excercises this. Tested on x86_64-linux.
-rw-r--r--gdb/testsuite/gdb.tui/long-prompt.exp158
1 files changed, 158 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.tui/long-prompt.exp b/gdb/testsuite/gdb.tui/long-prompt.exp
new file mode 100644
index 0000000..e7249bb
--- /dev/null
+++ b/gdb/testsuite/gdb.tui/long-prompt.exp
@@ -0,0 +1,158 @@
+# Copyright 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/>.
+
+# Test a prompt one less than, equal to, and one more than screen width in
+# TUI.
+
+require allow_tui_tests
+
+tuiterm_env
+
+with_test_prefix "prompt size == width + 1" {
+ Term::clean_restart 24 40
+
+ if {![Term::enter_tui]} {
+ unsupported "TUI not supported"
+ return
+ }
+
+ set prompt "123456789A123456789B123456789C123456789D>"
+
+ # Set new prompt, and set old prompt back.
+ send_gdb "set prompt $prompt\n"
+ send_gdb "set prompt (gdb) \n"
+
+ # Expected output:
+ #
+ # 16 (gdb) set prompt 123456789A123456789B123
+ # 17 456789C123456789D>
+ # 18 123456789A123456789B123456789C123456789D
+ # 19 >set prompt (gdb)
+ # 20 (gdb)
+
+ gdb_assert { [Term::wait_for "^>set prompt $gdb_prompt "] } \
+ "got prompt back"
+
+ gdb_assert { $Term::_cur_row == 20 }
+}
+
+with_test_prefix "prompt size == width + 1: end of screen" {
+ Term::clean_restart 24 40
+
+ if {![Term::enter_tui]} {
+ unsupported "TUI not supported"
+ return
+ }
+
+ # Put prompt at last line.
+ Term::command "echo \\n"
+ Term::command "echo \\n"
+ Term::command "echo \\n"
+ Term::command "echo \\n"
+ gdb_assert { $Term::_cur_row == 23 } "at last line"
+
+ set prompt "123456789A123456789B123456789C123456789D>"
+
+ # Set new prompt, and set old prompt back.
+ send_gdb "set prompt $prompt\n"
+ send_gdb "set prompt (gdb) \n"
+
+ # Expected output:
+ #
+ # 19 (gdb) set prompt 123456789A123456789B123
+ # 20 456789C123456789D>
+ # 21 123456789A123456789B123456789C123456789D
+ # 22 >set prompt (gdb)
+ # 23 (gdb)
+
+ gdb_assert { [Term::wait_for "^>set prompt $gdb_prompt "] } \
+ "got prompt back"
+
+ gdb_assert { $Term::_cur_row == 23 } "still at last line"
+ Term::check_region_contents "scrolling" 0 19 40 1 \
+ "^$gdb_prompt set prompt 123456789A123456789B123$"
+}
+
+with_test_prefix "prompt size == width" {
+ Term::clean_restart 24 40
+
+ if {![Term::enter_tui]} {
+ unsupported "TUI not supported"
+ return
+ }
+
+ set prompt "123456789A123456789B123456789C123456789>"
+
+ # Set new prompt, and set old prompt back.
+ send_gdb "set prompt $prompt\n"
+ send_gdb "set prompt (gdb) \n"
+
+ # Expected output:
+ #
+ # 16 (gdb) set prompt 123456789A123456789B123
+ # 17 456789C123456789>
+ # 18 123456789A123456789B123456789C123456789>
+ # 19
+ # 20 123456789A123456789B123456789C123456789>
+ # 21 set prompt (gdb)
+ # 22 (gdb)
+ #
+ # Note that it would be nice to get instead:
+ #
+ # 16 (gdb) set prompt 123456789A123456789B123
+ # 17 456789C123456789>
+ # 18 123456789A123456789B123456789C123456789>
+ # 19 set prompt (gdb)
+ # 20 (gdb)
+ #
+ # The extra newline is added by rl_on_new_line_with_prompt, which decides
+ # this as follows:
+ # /* If the prompt length is a multiple of real_screenwidth, we don't know
+ # whether the cursor is at the end of the last line, or already at the
+ # beginning of the next line. Output a newline just to be safe. */
+
+ gdb_assert { [Term::wait_for "^set prompt $gdb_prompt "] } \
+ "got prompt back"
+
+ gdb_assert { $Term::_cur_row == 22 }
+}
+
+with_test_prefix "prompt size == width - 1" {
+ Term::clean_restart 24 40
+
+ if {![Term::enter_tui]} {
+ unsupported "TUI not supported"
+ return
+ }
+
+ set prompt "123456789A123456789B123456789C12345678>"
+
+ # Set new prompt, and set old prompt back.
+ send_gdb "set prompt $prompt\n"
+ send_gdb "set prompt (gdb) \n"
+
+ # Expected output:
+ #
+ # 16 (gdb) set prompt 123456789A123456789B123
+ # 17 456789C12345678>
+ # 18 123456789A123456789B123456789C12345678>s
+ # 19 et prompt (gdb)
+ # 20 (gdb)
+
+ gdb_assert { [Term::wait_for "^et prompt $gdb_prompt "] } \
+ "got prompt back"
+
+ gdb_assert { $Term::_cur_row == 20 }
+}