# Copyright (C) 2014-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/>.

# Test spawning a subshell from a multi-line command, where the last
# prompt displayed is a secondary prompt.  GDB used to have a bug
# where in this case the subshell would start with the wrong terminal
# settings.  See PR python/17372.

gdb_exit
gdb_start

# The subshell's prompt.
set shell_prompt "gdb-subshell$ "
set shell_prompt_re [string_to_regexp $shell_prompt]

# Point HOME nowhere to avoid the shell sourcing the user's init
# scripts.
set shell_cmd "HOME=/dev/null /bin/sh"

set test "spawn subshell from multi-line"
gdb_test_multiple "if 1\nshell ${shell_cmd}\nend\nPS1=\"$shell_prompt\"" $test {
    -re "PS1=\[^\r\n\]*\r\n$shell_prompt_re$" {
	pass $test

	# Now check that shell input works and that echo is enabled.
	set test "shell input works"
	send_gdb "echo foo\n"
	gdb_expect {
	    -re "^echo foo\r\nfoo\r\n$shell_prompt_re$" {
		pass $test
	    }
	    timeout {
		fail "$test (timeout)"
	    }
	}

	# Exit the subshell, back to GDB
	gdb_test "exit" ".*" "exit shell"
    }
}

# Check that we restore input in GDB correctly.
gdb_test "print 1" "^print 1\r\n.. = 1" "gdb input still works"
