# Use org.apache.qetest.xsl.ConformanceTest test with this properties 
#   file to iterate over all the 'contrib' tests
# This file includes descriptive comments for most major options
# Most other xml-xalan\test tests use similar options

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

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

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

# All test output will be saved in this file
logFile=.\\results-contrib\\ContribTest.xml

#---- Choose processor: flavors supported: xalan|trax|other...
flavor=trax

#---- Choose tests: Filter to only run specific sets of tests
# Set category to run only the single named directory
#category=Atrs

# Set excludes to exclude specific tests: foo.xsl;bar.xsl;goo.xsl
#excludes=lre01.xsl;lre02.xsl

# Run a specific list of files in the named file (see XLDirectoryIterator.java)
#fileList=myListOfFiles.txt

# Uncomment noErrTest to skip running any ./err subdir tests
noErrTest=true

#---- 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=50

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

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

#---- Choose a liaison: only valid with flavor=xalan
# XDTM  Xalan-J 1.x/Xerces DTM -default- (uses xerces.jar)
#liaison=org.apache.xalan.xpath.dtm.DTMLiaison
# XDOM  Xalan-J 1.x/Xerces DOM (uses xerces.jar)
#liaison=org.apache.xalan.xpath.xdom.XercesLiaison

