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

# Make sure that we can interrupt an inferior that forks and moves to
# its own session.

standard_testfile

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

# The test proper.

proc do_test {} {
    global binfile
    global gdb_prompt

    clean_restart $binfile

    gdb_test "set follow-fork-mode child" ".*"

    if ![runto "daemon_main"] {
	return
    }

    with_test_prefix "fg" {
	global gdb_prompt

	set test "continue"
	gdb_test_multiple $test $test {
	    -re "Continuing" {
		pass $test
	    }
	}

	after 200

	send_gdb "\003"

	set test "ctrl-c stops process"
	gdb_test_multiple "" $test {
	    -re "received signal SIGINT.*\r\n$gdb_prompt $" {
		pass $test
	    }
	}
    }

    with_test_prefix "bg" {

	set test "continue&"
	gdb_test_multiple "continue&" $test {
	    -re "Continuing\\.\r\n$gdb_prompt " {
		pass $test
	    }
	}

	after 200

	set test "interrupt"
	gdb_test_multiple $test $test {
	    -re "$gdb_prompt " {
		pass $test
	    }
	}

	set test "interrupt cmd stops process"
	gdb_test_multiple "" $test {
	    -re "received signal SIGINT" {
		pass $test
	    }
	}
    }
}

do_test
