# @author shane_curcuru@lotus.com
# Harness properties file used with the smoketest and related targets:
# xml-xalan\test\java\build.xml target:apitests-xalan2
# xml-xalan\java\build.xml target:smoketest
#
# WARNING: This file is used both in the build process for the 
#   tests and in the Xalan-J 2.x build process, as well as by 
#   automated nightly build systems - use care in editing!

#---- Choose tests: which tests should we run
# Semicolon delimited list of tests, either FQCNs or just 
#   package.ClassName assuming org.apache.qetest. will be prepended
tests=trax.TemplatesAPITest;trax.TransformerFactoryAPITest;trax.stream.StreamResultAPITest;trax.stream.StreamSourceAPITest;trax.dom.DOMResultAPITest;trax.dom.DOMSourceAPITest;trax.sax.SAXSourceAPITest;trax.sax.SAXTransformerFactoryAPITest;trax.sax.TemplatesHandlerAPITest;trax.sax.TransformerHandlerAPITest;trax.SystemIdTest;trax.SystemIdImpInclTest;trax.EmbeddedStylesheetTest;trax.OutputPropertiesTest;trax.URIResolverTest;trax.ErrorListenerAPITest;trax.TransformerAPITest

# Tests that do not pass as-is on the current CVS code 
#   should be commented out with descriptions below:
# trax.ExamplesTest; commented out due to smoketest problems I haven't had time to solve yet
# trax.sax.SAXResultAPITest; commented out due to Bugzilla
# trax.ErrorListenerTest; commented out due to Bugzilla
# trax.SystemIdTest; commented out since it's very sensitive to environment issues

#---- Choose locations: where to find files, where to log to
# Note that improperly written tests may respond differently 
#   to absolute vs. relative paths for inputDir - caveat emptor
# testDir is where root of test xml/xsl files are
inputDir=..\\tests\\api

# goldDir is where the 'gold' files to check against live
goldDir=..\\tests\\api-gold

# outDir is where we put the actual output files and any logs or error dumps
outputDir=..\\results-apitests

# Harness test output will be saved in this file; 
#   individual test output will be in the outputDir
#   in separate files per testfile
logFile=..\\results-apitests\\Harness.xml

#---- Choose output: How much/what kinds of info should we log
# Choose output: How much logging info is saved: between 0 (very little) and 99 (lots)
loggingLevel=99
ConsoleLogger.loggingLevel=30

# If we should save performance-oriented info in the logfile
perfLogging=true

# Set debug for advanced debugging of the tests themselves
#debug=true
