# 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/>.

# A collection of tests related to running execution commands directly
# from the command line, with "-ex".

standard_testfile

if {[build_executable "failed to prepare" $testfile $srcfile debug] == -1} {
    return -1
}

# Test paginating while printing about the inferior having exited.
#
proc test_paginate_inferior_exited {} {
    global binfile
    global gdb_prompt pagination_prompt
    global inferior_exited_re

    with_test_prefix "paginate" {
	clean_restart $binfile

	if ![runto_main] then {
	    fail "can't run to main"
	    return 0
	}

	# Force pagination.
	gdb_test_no_output "set height 2"

	set test "continue to pagination"

	# Wait for the "Starting program" line, indicating the program
	# is running.
	set saw_starting 0
	gdb_test_multiple "continue" $test {
	    -re "$pagination_prompt" {
		if {$saw_starting} {
		    pass $test
		} else {
		    send_gdb "\n"
		    exp_continue
		}
	    }
	    -re "Continuing" {
		set saw_starting 1
		exp_continue
	    }
	}

	# We're now stopped in a pagination output while handling a
	# target event, trying to print about the program exiting.
	set test "inferior exits normally"

	send_gdb "\n"
	gdb_test_multiple "" $test {
	    -re "$inferior_exited_re normally.*$gdb_prompt $" {
		pass $test
	    }
	}

	gdb_test "p 1" " = 1" "GDB accepts further input"

	# In case the board file wants to send further commands.
	gdb_test_no_output "set height unlimited"
    }
}

test_paginate_inferior_exited
