# -----------------------------------------------------------------------------
#
#   Licensed to the Apache Software Foundation (ASF) under one or more
#   contributor license agreements.  See the NOTICE file distributed with
#   this work for additional information regarding copyright ownership.
#   The ASF licenses this file to You under the Apache License, Version 2.0
#   (the "License"); you may not use this file except in compliance with
#   the License.  You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.
#
# XMLTestReportProcessor configuration
#
# $Id$
# -----------------------------------------------------------------------------

XMLTestReportProcessor.config.xml.test.report.default.directory = \
test-reports

XMLTestReportProcessor.xml.report.directory = \
xml

XMLTestReportProcessor.xml.resources.directory = \
resources

XMLTestReportProcessor.config.xml.test.report.name = \
report.xml

#
# Messages
#
XMLTestSuiteRunner.messages.unmatched.test.ids = \
WARNING: There are no test or testSuite matching the following id(s): {0} 

XMLTestSuiteRunner.messages.error.usage = \
This application takes an argument which can be either a file
name or a URL: \
(ant) build runTestSuite -Dargs="<fileNameOrURL> <[testId | testSuiteId]*>" \
(command-line) java org.apache.batik.test.xml.XMLTestSuiteRunner <fileNameOrURL> <[testId | testSuiteId]*>" 

XMLTestSuiteRunner.messages.error.not.a.file.try.uri = \
The argument: {0} is not a valid file name. \
Trying to use it as a URL...

XMLTestSuiteRunner.messages.error.could.not.convert.file.name = \
Error: could not convert file name "{0}" to a URI.

XMLTestSuiteRunner.messages.error.invalid.uri = \
Invalid URI : {0}

XMLTestSuiteRunner.messages.error.invalid.document = \
{0} is an invalid document. Got the following exception while parsing it: \
{1} with error message "{2}".

XMLTestSuiteRunner.messages.error.running.test.suite = \
Error while running test suite : {0}

xml.XMLReflect.error.no.matching.constructor = \
Could not find a constructor of class {0} with arguments of type {1}
