# Copyright 2017-2021 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/>.

# Regression test for PR tui/21216 - TUI line breaks regression.
#
# Tests that newlines in filtered output force a "carriage return" in
# the TUI command window.  With a broken gdb, instead of:
#
#  (gdb) printf "hello\nworld\n"
#  hello
#  world
#  (gdb)
#
# we'd get:
#
#  (gdb) printf "hello\nworld\n"hello
#                                    world
#
#  (gdb)

gdb_exit
gdb_start

if {[skip_tui_tests]} {
    return
}

# Enable the TUI.

set test "tui enable"
gdb_test_multiple "tui enable" $test {
    -re "$gdb_prompt $" {
	pass $test
    }
}

# Make sure filtering/pagination is enabled, but make the window high
# enough that we don't paginate in practice.
gdb_test_no_output "set pagination on"
gdb_test_no_output "set height 2000"

gdb_test \
    {printf "hello\nworld\n"} \
    "hello\r\nworld" \
    "correct line breaks"
