# This testcase is part of GDB, the GNU debugger.

# Copyright 2007-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 gdbserver monitor commands.

load_lib gdbserver-support.exp

standard_testfile server.c

if { [skip_gdbserver_tests] } {
    return 0
}

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

# Make sure we're disconnected, in case we're testing with an
# extended-remote board, therefore already connected.
gdb_test "disconnect" ".*"

gdbserver_run ""

gdb_test_multiple "monitor help" "monitor help" {
    -re "Unknown monitor command.*$gdb_prompt $" {
	fail "monitor help"
    }
    -re "The following monitor commands.*$gdb_prompt $" {
	pass "monitor help"
    }
}

gdb_test "monitor" "Unknown monitor command.*Protocol error.*"

gdb_test "monitor set debug 1" "Debug output enabled\\."
gdb_test "monitor set debug 0" "Debug output disabled\\."
gdb_test "monitor set remote-debug 1" "Protocol debug output enabled\\."
gdb_test "monitor set remote-debug 0" "Protocol debug output disabled\\."
gdb_test "monitor set debug-format all" \
    "All extra debug format options enabled\\."
gdb_test "monitor set debug-format none" \
    "All extra debug format options disabled\\."
