# Default settings for running test automation; used in Ant file test.xml
#
# Users may override these settings either on the command line 
#   with Ant via -Dqetest.property=value, or simply by creating 
#   a 'my.test.properties' file in the same directory, which will 
#   be read first and will override similar settings below
#
# Properties prefixed with 'conf.' are used for StylesheetTestletDriver 
#   tests or similar tests with the conformance test; likewise 
#   similar tests with 'perf.' or 'contrib.'
# Properties prefixed with 'api.' are used for individual API tests
# Properties prefixed with 'qetest.' can be used with any tests
# All prefixes are removed by the XSLTestAntTask in the Ant process 
#   before these properties are passed to the tests

#---- Choose locations: where to find files, where to log to ----
# inputDir is where root of test xml/xsl files are
accept.inputDir=tests/accept
api.inputDir=tests/api
conf.inputDir=tests/conf
conferr.inputDir=tests/conferr
conferr.xsltc.inputDir=tests/conferr
contrib.inputDir=tests/contrib

# goldDir is where the 'gold' or reference files to check against live
accept.goldDir=tests/accept-gold
api.goldDir=tests/api-gold
conf.goldDir=tests/conf-gold
conferr.goldDir=results-conferr/gold-unused
conferr.xsltc.goldDir=results-conferr/gold-unused
contrib.goldDir=tests/contrib-gold

# outDir is where we put the actual output files
accept.outputDir=results-accept
api.outputDir=results-api
conf.outputDir=results-conf
conferr.outputDir=results-conferr
conferr.xsltc.outputDir=results-conferr-xsltc
contrib.outputDir=results-contrib

# The test results log will be saved in this file
accept.logFile=results-accept/results.xml
api.logFile=results-api/results.xml
conf.logFile=results-conf/results.xml
conferr.logFile=results-conferr/results.xml
conferr.xsltc.logFile=results-conferr-xsltc/results.xml
contrib.logFile=results-contrib/results.xml

# Whether or not to consult processor specific golds 
accept.processor=XalanJ-I
accept.xsltc.processor=XalanJ-C
smoketest.accept.processor=XalanJ-I
smoketest.xsltc.accept.processor=XalanJ-C

conf.processor=XalanJ-I
conf.xsltc.processor=XalanJ-C
smoketest.conf.processor=XalanJ-I
smoketest.xsltc.conf.processor=XalanJ-C
conferr.xsltc.processor=XalanJ-C

# Name of test (rename Accept test's result files)

#---- 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)
qetest.loggingLevel=99

# Choose output: How much logging info is dumped to the console
qetest.ConsoleLogger.loggingLevel=40
# By default, large conf test reports FAILSONLY
accept.ConsoleLogger.loggingLevel=20
conf.ConsoleLogger.loggingLevel=20
conferr.ConsoleLogger.loggingLevel=20

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

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


#---- Choose XSLT processor and test algorithim ----
# ProcessorWrapper flavors supported: trax|trax.dom|trax.sax|other...
qetest.flavor=trax

# Exclusion lists based on specific flavors
# Some tests are not valid when outputting DOMs
# conflictres19.xsl mismatch-value;TEXT_NODE(#text)len=85;TEXT_NODE(#text)len=85;lengths do not match
trax.dom.excludes=conflictres19.xsl
# A Testlet class defines the actual algorithim used to 
#   test each stylesheet found; several different testlets available
# The default StylesheetTestlet does a simple transform and validates output
qetest.testlet=org.apache.qetest.xsl.StylesheetTestlet

# The StylesheetErrorTestlet tests negative tests that throw exceptions
conferr.testlet=org.apache.qetest.xsl.StylesheetErrorTestlet

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

# Set filter for running multiple dirs under inputDir
#qetest.dirFilter=org.apache.qetest.xsl.ConformanceDirRules

# Set filter for files within dirFilter-found directories
#qetest.fileFilter=org.apache.qetest.xsl.ConformanceFileRules

#---- 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
#qetest.fileList=listOfFiles.txt


#---- Choose other test filtering options ----
# Specify files that have the xsl embedded in the .xml file
# Specific lists for different testTypes may be kept
conf.embedded=embed01.xml;embed02.xml;embed07.xml

# Specify a file differ for the output files
qetest.fileChecker=org.apache.qetest.xsl.XHTFileCheckService

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


#---- Special: Smoketest settings and XSLTestHarness tests ----
# Various other overrides for the smoketest; note that 
#   the prefixes are ripped off in the smoketest target in build.xml
# smoketest parent output location: used in test.properties/build.xml
smoketest.outputDir=smoketest
# Runs the conformance test once with defaults
smoketest.conf.inputDir=tests/conf
smoketest.conf.goldDir=tests/conf-gold
smoketest.conf.outputDir=smoketest/conf
smoketest.conf.logFile=smoketest/results-conf.xml
smoketest.conf.passFile=smoketest/Pass-StylesheetTestletDriver.xml
smoketest.conf.embedded=embed01.xml;embed02.xml;embed07.xml
smoketest.conf.ConsoleLogger.loggingLevel=20
# Bugzilla5389  attribset40.xsl
# Bugzilla12690 axes62.xsl
# Bugzilla10616 copy56.xsl;copy58.xsl;copy59.xsl;copy60.xsl
# Bugzilla14999 idkey31.xsl
# Bugzilla????? numbering79 -- fails to run on Sun JDK1.4 on GUMP machine; JDK bug??
# Bugzilla17400 position112.xsl;position113.xsl
smoketest.conf.normal.excludes=attribset40.xsl;axes62.xsl;copy56.xsl;copy58.xsl;copy59.xsl;copy60.xsl;idkey31.xsl;numbering79.xsl;position112.xsl;position113.xsl
smoketest.conf.supplemental.excludes=

smoketest.extensions.excludes=javaBugzilla3722.xsl;libraryNodeset05.xsl;libraryNodeset06.xsl;libraryNodeset07.xsl;libraryNodeset08.xsl

# Runs a selected set of known passing API tests
# Hack out trax.ErrorListenerTest; since fails are prob. due to differing parser versions -sc 03-May-02
smoketest.api.tests=trax.EmbeddedStylesheetTest;trax.ErrorListenerAPITest;trax.ExamplesTest;trax.OutputPropertiesTest;trax.TemplatesAPITest;trax.TransformerAPITest;trax.TransformerFactoryAPITest;trax.SystemIdTest;trax.SystemIdImpInclTest;trax.URIResolverTest;;trax.dom.DOMResultAPITest;trax.dom.DOMSourceAPITest;;trax.sax.SAXResultAPITest;trax.sax.SAXSourceAPITest;trax.sax.TemplatesHandlerAPITest;trax.sax.TransformerHandlerAPITest;trax.sax.TransformerHandlerTest;;trax.stream.StreamResultAPITest;trax.stream.StreamSourceAPITest;;xalanj2.FactoryFeatureTest;xalanj2.ProgrammaticDOMTest;xalanj2.SerializedStylesheetTest;xalanj2.TraceListenerTest;xalanj2.TransformStateAPITest;xalanj2.TransformStateTest;xalanj2.TestXPathAPI;;OutputSettingsTest;;ParameterTest;SAXTransformerFactoryAPITest;
smoketest.api.inputDir=tests/api
smoketest.api.goldDir=tests/api-gold
smoketest.api.outputDir=smoketest/api
smoketest.api.logFile=smoketest/results-api.xml
smoketest.api.passFile=smoketest/Pass-Harness.xml

smoketest.accept.inputDir=tests/accept
smoketest.accept.goldDir=tests/accept-gold
smoketest.accept.outputDir=smoketest/accept
smoketest.accept.logFile=smoketest/results-accept.xml
smoketest.accept.passFile=smoketest/Pass-Accept.xml

# Runs the extension tests
smoketest.extensions.inputDir=tests/extensions
smoketest.extensions.goldDir=tests/extensions-gold
smoketest.extensions.outputDir=smoketest/extensions
smoketest.extensions.logFile=smoketest/extensions/results-extensions.xml
smoketest.extensions.passFile=smoketest/extensions/Pass-StylesheetTestletDriver.xml
smoketest.extensions.testlet=org.apache.qetest.xsl.ExtensionTestlet
# Note: skip javascript extensions for now since they require js.jar
smoketest.extensions.category=java;library

#---- Special: Smoketest settings and XSLTestHarness tests ----
# Various other overrides for the smoketest; note that 
#   the prefixes are ripped off in the smoketest target in build.xml
# smoketest parent output location: used in test.properties/build.xml
smoketest.xsltc.Processor.setAttribute.indent-number=0
smoketest.xsltc.conf.fileChecker=org.apache.qetest.xsl.XHTFileCheckServiceXSLTC
smoketest.xsltc.outputDir=smoketest.xsltc
# Runs the conformance test once with defaults
smoketest.xsltc.conf.inputDir=tests/conf
smoketest.xsltc.conf.goldDir=tests/conf-gold
smoketest.xsltc.conf.outputDir=smoketest.xsltc/conf
smoketest.xsltc.conf.logFile=smoketest.xsltc/results-conf.xml
smoketest.xsltc.conf.passFile=smoketest.xsltc/Pass-StylesheetTestletDriver.xml
smoketest.xsltc.conf.embedded=embed01.xml;embed07.xml
smoketest.xsltc.conf.ConsoleLogger.loggingLevel=20

# Bugzilla????  attribset15.xsl;attribset23.xsl - are permitted to fail (discretionary item)
# Bugzilla????? axes120.xsl - shortcoming of the compilation model
# Bugzilla14999 idkey31.xsl
# Bugzilla15253 idkey49.xsl
# Bugzilla15333 impincl28.xsl;impincll29.xsl;position102.xsl
# Bugzilla????? math111.xsl
# Bugzilla26259 namespace140.xsl
# Bugzilla14610 output63.xsl
# Bugzilla15335 select85.xsl
# Bugzilla1396  sort15.xsl
# Bugzilla15205 ver01.xsl;ver05.xsl;ver06.xsl;ver07.xsl
# Bugzilla15326 whitespace35.xsl
# embed02.xml - testcase is actually passing; harness issue to be resolved

smoketest.xsltc.conf.normal.excludes=attribset15.xsl;attribset23.xsl;axes120.xsl;idkey31.xsl;idkey49.xsl;impincl28.xsl;impincl29.xsl;math111.xsl;namespace140.xsl;output63.xsl;position102.xsl;select85.xsl;sort15.xsl;ver01.xsl;ver05.xsl;ver06.xsl;ver07.xsl;whitespace35.xsl

smoketest.xsltc.conf.supplemental.excludes=

smoketest.xsltc.accept.Processor.setAttribute.indent-number=0
smoketest.xsltc.accept.inputDir=tests/accept
smoketest.xsltc.accept.goldDir=tests/accept-gold
smoketest.xsltc.accept.outputDir=smoketest.xsltc/accept
smoketest.xsltc.accept.logFile=smoketest.xsltc/results-accept.xml
smoketest.xsltc.accept.passFile=smoketest.xsltc/Pass-Accept.xml

# Used by both the minitest and smoketest targets
minitest.inputDir=tests/api
minitest.goldDir=tests/api-gold
minitest.outputDir=smoketest/
minitest.logFile=smoketest/Minitest.xml
minitest.passFile=smoketest/Pass-Minitest.xml

# A listing of all normal API tests currently available, except Minitest
#   Note tests do not all include package names since they'll 
#   actually be loaded by QetestUtils.testClassForName()
# Note: some tests are Xalan-specific; SmoketestOuttakes is expected to fail
harness.tests=trax.EmbeddedStylesheetTest;trax.ErrorListenerAPITest;trax.ErrorListenerTest;trax.ExamplesTest;trax.OutputPropertiesTest;trax.ParameterTest;trax.TemplatesAPITest;trax.TransformerAPITest;trax.TransformerFactoryAPITest;trax.SystemIdTest;trax.SystemIdImpInclTest;trax.URIResolverTest;;trax.dom.DOMResultAPITest;trax.dom.DOMSourceAPITest;;trax.sax.SAXResultAPITest;trax.sax.SAXSourceAPITest;trax.sax.SAXTransformerFactoryAPITest;trax.sax.TemplatesHandlerAPITest;trax.sax.TransformerHandlerAPITest;trax.sax.TransformerHandlerTest;;trax.stream.StreamResultAPITest;trax.stream.StreamSourceAPITest;;xalanj2.FactoryFeatureTest;xalanj2.ProgrammaticDOMTest;xalanj2.SerializedStylesheetTest;xalanj2.TraceListenerTest;xalanj2.TransformStateAPITest;xalanj2.TransformStateTest;xalanj2.TestXPathAPI;xalanj2.SmoketestOuttakes;;OutputSettingsTest;;dtm.TestDTM;dtm.TestDTMIter;dtm.TestDTMTrav;dtm.TimeDTMIterDeep;dtm.TimeDTMTravDeep
harness.threads.testlet=org.apache.qetest.xsl.ThreadedStylesheetTestlet
harness.threads.fileList=threads.filelist

#---- Special: used to run threaded tests, which use a specific fileList format ----
threads.inputDir=tests/api
threads.goldDir=tests/api
threads.outputDir=results-threads/
threads.logFile=results-threads/results.xml
threads.fileList=threads.filelist
threads.testlet=org.apache.qetest.xsl.ThreadedStylesheetTestlet

#---- Special: used to run bugzilla Testlets and tests ----
bugzilla.inputDir=tests/bugzilla
bugzilla.goldDir=tests/bugzilla
bugzilla.outputDir=results-bugzilla/
bugzilla.logFile=results-bugzilla/results.xml

#---- Special: used to run extensions Testlets and tests ----
extensions.inputDir=tests/extensions
extensions.goldDir=tests/extensions-gold
extensions.outputDir=results-extensions/
extensions.logFile=results-extensions/results.xml
extensions.testlet=org.apache.qetest.xsl.ExtensionTestlet

#---- Special: used in conf.xsltc target temporarily ----
conf.xsltc.inputDir=tests/conf
conf.xsltc.goldDir=tests/conf-gold
conf.xsltc.outputDir=results-conf_xsltc
conf.xsltc.logFile=results-conf_xsltc/results.xml
conf.xsltc.fileChecker=org.apache.qetest.xsl.XHTFileCheckServiceXSLTC

#---- Special: used in accept.xsltc target temporarily ----
accept.xsltc.inputDir=tests/accept
accept.xsltc.goldDir=tests/accept-gold
accept.xsltc.outputDir=results-accept_xsltc
accept.xsltc.logFile=results-accept_xsltc/results.xml
accept.xsltc.fileChecker=org.apache.qetest.xsl.XHTFileCheckServiceXSLTC

# The PerfTestlet iterates through a number of transforms with timing output
perf.testlet=org.apache.qetest.xsl.PerfTestlet
perf.inputDir=tests/perf
perf.goldDir=tests/perf-gold
perf.outputDir=results-perf
perf.logFile=results-perf/results.xml
perf.runId=xalan
perf.iterations=5

#---- Special: used in perf.xsltc target temporarily ----
perf.xsltc.testlet=org.apache.qetest.xsl.PerfTestlet
perf.xsltc.inputDir=tests/perf
perf.xsltc.goldDir=tests/perf-gold
perf.xsltc.outputDir=results-perf_xsltc
perf.xsltc.logFile=results-perf_xsltc/results.xml
perf.xsltc.runId=xsltc
perf.xsltc.iterations=5


# End of File
