# Copyright (C) 2014-2020 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 PS1=\"$shell_prompt\" /bin/sh"

set test "spawn subshell from multi-line"
gdb_test_multiple "if 1\nshell ${shell_cmd}\nend" $test {
    -re "$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"
