[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.
This commit is contained in:
parent
ea70f941f9
commit
36078688fa
1 changed files with 158 additions and 0 deletions
158
gdb/testsuite/gdb.tui/long-prompt.exp
Normal file
158
gdb/testsuite/gdb.tui/long-prompt.exp
Normal file
|
@ -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 }
|
||||
}
|
Loading…
Add table
Reference in a new issue