#   Copyright (C) 2013-2016 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 [is_remote target] then {
    # Testing with remote/non-stop is racy at the moment.
    unsupported "Testing dprintf with remote/non-stop is not supported."
    return 0
}

standard_testfile
set executable ${testfile}

if [build_executable "failed to prepare for dprintf with non-stop" \
    ${testfile} ${srcfile} {debug}] {
    return -1
}

save_vars { GDBFLAGS } {
    append GDBFLAGS " -ex \"set non-stop on\""
    clean_restart ${executable}
}

if ![runto main] {
    fail "Can't run to main"
    return -1
}

gdb_test "dprintf foo,\"At foo entry\\n\"" "Dprintf .*"

gdb_test "continue &" "Continuing\\."

# Wait for the dprintf to trigger.
set test "dprintf triggered"
gdb_expect {
    -re "At foo entry" {
	pass "$test"
    }
    timeout {
	fail "$test (timeout)"
    }
}

# Now test that we're still able to issue commands.  GDB used to
# implement re-resuming from dprintfs with a synchronous "continue" in
# the dprintf's command list, which stole the prompt from the user.
set test "interrupt"
gdb_test_multiple $test $test {
    -re "interrupt\r\n$gdb_prompt " {
	pass $test
    }
}

set test "inferior stopped"
gdb_test_multiple "" $test {
    -re "Program stopped\\\.\r\n" {
	pass $test
    }
}
