# Default settings for running test automation; used ONLY 
# when manually running or debugging conf tests like:
#
# cd xml-xalan/test
# java -classpath xalan.jar;xerces.jar;xml-apis.jar;testxsl.jar blah.StylesheetTestletDriver -load debugconf.properties
#
# Note for debugging environments: if you're not in xml-xalan/test, 
# be sure to adjust various paths appropriately
#


#---- Choose locations: where to find files, where to log to ----
# inputDir is where root of test xml/xsl files are
inputDir=tests/conf

# goldDir is where the 'gold' or reference files to check against live
goldDir=tests/conf-gold

# outDir is where we put the actual output files
outputDir=results-conf

# The test results log will be saved in this file
logFile=results-conf/results.xml


#---- Choose output: How much/what kinds of info should we log ----
# Choose output: How much logging info is saved into our logFile
#   Between 0 (very little) and 99 (lots)
loggingLevel=99

# Choose output: How much logging info is dumped to the console
ConsoleLogger.loggingLevel=40


#---- Below only used with conf/perf/contrib tests  ----
# you'll probably need to adjust inputDir, etc. to point 
# to tests/conf, etc. instead of tests/conf

#---- Choose XSLT processor and test algorithim ----
# A Testlet class defines the actual algorithim used to 
#   test each stylesheet found; several different testlets available
testlet=org.apache.qetest.xsl.StylesheetTestlet

# TransformWrapper flavors supported: trax|trax.dom|trax.sax|other...
flavor=trax

#---- Choose tests via filters (either/or...) ----
# Set category to run only the single named directory in inputDir
#category=axes

#---- Choose tests via a specific list (...either/or) ----
# Set fileList to specify a list of files yourself
#   Using a fileList means filtering above is not done
#fileList=listOfFiles.txt

# Specify files to be skipped, and not tested at all
#excludes=lre01.xsl;lre02.xsl

# End of File
