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

# Do not run if gdb debug is enabled as maintenance output will be
# redirected to the log files.
if [gdb_debug_enabled] {
    untested "debug is enabled"
    return 0
}

set do_xml_test [expr ![gdb_skip_xml_test]]

standard_testfile

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

proc run_selftests { binfile } {
    global decimal gdb_prompt

    if { $binfile == "" } {
	gdb_exit
	gdb_start
    } else {
	clean_restart ${binfile}
    }

    set test "maintenance selftest"
    gdb_test_multiple $test $test {
	-re ".*Running selftest \[^\n\r\]+\." {
	    # The selftests can take some time to complete.  To prevent
	    # timeout spot the 'Running ...' lines going past, so long as
	    # these are produced quickly enough then the overall test will
	    # not timeout.
	    exp_continue
	}
	-re "Ran ($decimal) unit tests, ($decimal) failed\r\n$gdb_prompt $" {
	    set num_ran $expect_out(1,string)
	    set num_failed $expect_out(2,string)
	    gdb_assert "$num_ran > 0" "$test, ran some tests"
	    gdb_assert "$num_failed == 0" "$test, failed none"
	}
	-re "Selftests have been disabled for this build.\r\n$gdb_prompt $" {
	    unsupported $test
	}
    }
}

with_test_prefix "no executable loaded" {
    run_selftests ""
}

with_test_prefix "executable loaded" {
    run_selftests ${binfile}
}

if { ![is_remote host] && $do_xml_test } {
    gdb_test "maintenance check xml-descriptions ${srcdir}/../features" \
	"Tested $decimal XML files, 0 failed" \
	"maintenance check xml-descriptions \${srcdir}/../features"
}
