# This testcase is part of GDB, the GNU debugger.
#
# Copyright 2015-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/>.

# Test the basic operation of the "kill inferiors" and "detach inferiors"
# commands.

if ![can_spawn_for_attach] {
    return 0
}

standard_testfile
set executable $testfile

if [prepare_for_testing "failed to prepare" $executable] {
    return -1
}

runto_main

# Add another forked inferior process.
gdb_test "add-inferior" "Added inferior 2 on connection .*" "add inferior 2"
gdb_test "inferior 2" "Switching to inferior 2.*"
gdb_test "file $binfile" "Reading symbols from .*" "load binary"
gdb_test "start" "Temporary breakpoint.*Starting program.*"

# Add an attached inferior process.
set test_spawn_id [spawn_wait_for_attach $binfile]
set test_pid [spawn_id_get_pid $test_spawn_id]
gdb_test "add-inferior" "Added inferior 3 on connection .*" "add inferior 3"
gdb_test "inferior 3" "Switching to inferior 3.*"
gdb_test "attach $test_pid" "Attaching to process.*" "attach to pid"

# Kill the first two inferiors, and detach the third.
gdb_test_no_output "kill inferiors 1 2"
gdb_test "info inferiors 3" "\r\n\\* 3 \[^\r\n\]+" "inf 3 is still current"
gdb_test "inferior 1" "Switching to inferior 1.*"
gdb_test "kill" "The program is not being run.*"
gdb_test "detach inferiors 3" "Detaching from program.*process $test_pid.*"
gdb_test "info inferiors 1" "\r\n\\* 1 \[^\r\n\]+" "inf 1 is still current"

# No inferiors should be running anymore.
gdb_test "kill inferiors 1 2 3" \
	 "ID 1 is not running.*ID 2 is not running.*ID 3 is not running.*"
gdb_test "detach inferiors 1 2 3" \
	 "ID 1 is not running.*ID 2 is not running.*ID 3 is not running.*"

gdb_test "kill inferiors 10" \
	 "ID 10 not known.*"

kill_wait_spawned_process $test_spawn_id
