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

if [target_info exists gdb,nointerrupts] {
    verbose "Skipping paginate-after-ctrl-c-running.exp because of nointerrupts."
    return
}

standard_testfile

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

# Send a ctrl-c while the target is running and check that the output
# does not cause a pagination prompt.

proc test_ctrlc_while_target_running_does_not_paginate {} {
    global binfile srcfile
    global gdb_prompt

    set testline [gdb_get_line_number "after sleep"]

    with_test_prefix "ctrlc target running" {
	clean_restart $binfile

	if ![runto_main] then {
	    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.  Make sure that this does not
	# trigger pagination.
	gdb_test_multiple "" "no pagination" {
	    -re "$gdb_prompt $" {
		pass $gdb_test_name
	    }
	}

	# 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_does_not_paginate
