# Copyright 2007, 2008 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 {[gdb_skip_xml_test]} {
    unsupported "tdesc-errors.exp"
    return -1
}

gdb_start

proc set_arch { srcfile errmsg } {
    global gdb_prompt
    global srcdir
    global subdir

    # Anchor the test output, so that error messages are detected.
    set cmd "set tdesc filename $srcdir/$subdir/$srcfile"
    set msg "set tdesc filename $subdir/$srcfile"
    set cmd_regex [string_to_regexp $cmd]
    gdb_test_multiple $cmd $msg {
	-re "^$cmd_regex\r\n$errmsg$gdb_prompt $" {
	    pass $msg
	}
    }
}

set common_warn "\r\nwarning: Could not load XML target description; ignoring\r\n"

# This file is valid, but specifies an unknown architecture.
# We should get a warning, if we process the includes correctly.
set_arch "includes.xml" \
    "warning:.*specified unknown architecture.* \"invalid-body\"$common_warn"

# This file contains a missing include.  We should warn the user about
# it.
set_arch "bad-include.xml" \
    "warning:.*Could not load XML document \"nonexistant.xml\"$common_warn"

# Make sure we detect infinite loops, eventually.
set_arch "loop.xml" \
    "warning:.*Maximum XInclude depth.*$common_warn"
