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

standard_testfile

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

# Send a ctrl-c while the target is running and the next output causes
# a pagination prompt.

proc test_ctrlc_while_target_running_paginates {} {
    global binfile srcfile
    global gdb_prompt pagination_prompt

    set testline [gdb_get_line_number "after sleep"]

    with_test_prefix "ctrlc target running" {
	clean_restart $binfile

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

	gdb_test "b $srcfile:$testline" \
	    "Breakpoint .*$srcfile, line $testline.*" \
	    "set breakpoint"

	gdb_test_no_output "set height 2"

	# Wait for the "Continuing" line, indicating the program is
	# running.
	set test "continue"
	gdb_test_multiple $test $test {
	    -re "Continuing" {
		pass $test
	    }
	}

	# The program sleeps 10 seconds.  Wait just a bit and send a
	# ctrl-c.
	sleep 2
	send_gdb "\003"

	# GDB now intercepts the SIGINT and tries to let the user know
	# about the spurious signal, but that paginates.  Make sure
	# the user can respond to the pagination query.
	set test "got prompt"
	set saw_pagination_prompt 0
	gdb_test_multiple "" $test {
	    -re "$pagination_prompt$" {
		set saw_pagination_prompt 1
		send_gdb "\n"
		exp_continue
	    }
	    -re "$gdb_prompt $" {
		gdb_assert $saw_pagination_prompt $test
	    }
	}

	# Confirm GDB can still process input.
	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_ctrlc_while_target_running_paginates
