blob: 4dfd256c147d84c937beb340b12ac5e00c1e953f [file] [log] [blame]
<HTML><HEAD><SCRIPT language="JavaScript" src="resources/script.js" type="text/javascript"></SCRIPT><TITLE>Testing Design/Standards</TITLE></HEAD><BODY alink="#ff0000" bgcolor="#ffffff" leftmargin="4" link="#0000ff" marginheight="4" marginwidth="4" text="#000000" topmargin="4" vlink="#0000aa"><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" height="60" rowspan="3" valign="top" width="135"><IMG alt="logo" border="0" height="60" hspace="0" src="resources/logo.gif" vspace="0" width="135"></TD><TD align="left" colspan="4" height="5" valign="top" width="456"><IMG alt="line" border="0" height="5" hspace="0" src="resources/line.gif" vspace="0" width="456"></TD><TD align="left" height="60" rowspan="3" valign="top" width="29"><IMG alt="right" border="0" height="60" hspace="0" src="resources/right.gif" vspace="0" width="29"></TD></TR><TR><TD align="left" bgcolor="#0086b2" colspan="4" height="35" valign="top" width="456"><IMG alt="" border="0" height="35" hspace="0" src="graphics/design-header.jpg" vspace="0" width="456"></TD></TR><TR><TD align="left" height="20" valign="top" width="168"><IMG alt="bottom" border="0" height="20" hspace="0" src="resources/bottom.gif" vspace="0" width="168"></TD><TD align="left" height="20" valign="top" width="96"><A href="http://xml.apache.org/" onMouseOut="rolloverOff('xml');" onMouseOver="rolloverOn('xml');" target="new"><IMG alt="http://xml.apache.org/" border="0" height="20" hspace="0" name="xml" onLoad="rolloverLoad('xml','resources/button-xml-hi.gif','resources/button-xml-lo.gif');" src="resources/button-xml-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.apache.org/" onMouseOut="rolloverOff('asf');" onMouseOver="rolloverOn('asf');" target="new"><IMG alt="http://www.apache.org/" border="0" height="20" hspace="0" name="asf" onLoad="rolloverLoad('asf','resources/button-asf-hi.gif','resources/button-asf-lo.gif');" src="resources/button-asf-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.w3.org/" onMouseOut="rolloverOff('w3c');" onMouseOver="rolloverOn('w3c');" target="new"><IMG alt="http://www.w3.org/" border="0" height="20" hspace="0" name="w3c" onLoad="rolloverLoad('w3c','resources/button-w3c-hi.gif','resources/button-w3c-lo.gif');" src="resources/button-w3c-lo.gif" vspace="0" width="96"></A></TD></TR></TABLE><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" valign="top" width="120"><IMG alt="join" border="0" height="14" hspace="0" src="resources/join.gif" vspace="0" width="120"><BR>
<A href="overview.html" onMouseOut="rolloverOff('side-overview');" onMouseOver="rolloverOn('side-overview');"><IMG alt="Overview" border="0" height="12" hspace="0" name="side-overview" onLoad="rolloverLoad('side-overview','graphics/overview-label-2.jpg','graphics/overview-label-3.jpg');" src="graphics/overview-label-3.jpg" vspace="0" width="120"></A><BR>
<A href="getstarted.html" onMouseOut="rolloverOff('side-getstarted');" onMouseOver="rolloverOn('side-getstarted');"><IMG alt="Getting Started" border="0" height="12" hspace="0" name="side-getstarted" onLoad="rolloverLoad('side-getstarted','graphics/getstarted-label-2.jpg','graphics/getstarted-label-3.jpg');" src="graphics/getstarted-label-3.jpg" vspace="0" width="120"></A><BR>
<IMG alt="separator" border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
<A href="apidocs/index.html" onMouseOut="rolloverOff('side-ext-10');" onMouseOver="rolloverOn('side-ext-10');"><IMG alt="Java API" border="0" height="12" hspace="0" name="side-ext-10" onLoad="rolloverLoad('side-ext-10','graphics/ext-10-label-2.jpg','graphics/ext-10-label-3.jpg');" src="graphics/ext-10-label-3.jpg" vspace="0" width="120"></A><BR>
<IMG alt="separator" border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
<A href="faq.html" onMouseOut="rolloverOff('side-faq');" onMouseOver="rolloverOn('side-faq');"><IMG alt="FAQ" border="0" height="12" hspace="0" name="side-faq" onLoad="rolloverLoad('side-faq','graphics/faq-label-2.jpg','graphics/faq-label-3.jpg');" src="graphics/faq-label-3.jpg" vspace="0" width="120"></A><BR>
<A href="run.html" onMouseOut="rolloverOff('side-run');" onMouseOver="rolloverOn('side-run');"><IMG alt="Running Tests" border="0" height="12" hspace="0" name="side-run" onLoad="rolloverLoad('side-run','graphics/run-label-2.jpg','graphics/run-label-3.jpg');" src="graphics/run-label-3.jpg" vspace="0" width="120"></A><BR>
<A href="submit.html" onMouseOut="rolloverOff('side-submit');" onMouseOver="rolloverOn('side-submit');"><IMG alt="Writing New Tests" border="0" height="12" hspace="0" name="side-submit" onLoad="rolloverLoad('side-submit','graphics/submit-label-2.jpg','graphics/submit-label-3.jpg');" src="graphics/submit-label-3.jpg" vspace="0" width="120"></A><BR>
<IMG alt="Test Standards" border="0" height="12" hspace="0" src="graphics/design-label-1.jpg" vspace="0" width="120"><BR>
<A href="xalanc.html" onMouseOut="rolloverOff('side-xalanc');" onMouseOver="rolloverOn('side-xalanc');"><IMG alt="Xalan-C Tests" border="0" height="12" hspace="0" name="side-xalanc" onLoad="rolloverLoad('side-xalanc','graphics/xalanc-label-2.jpg','graphics/xalanc-label-3.jpg');" src="graphics/xalanc-label-3.jpg" vspace="0" width="120"></A><BR>
<IMG alt="separator" border="0" height="6" hspace="0" src="resources/separator.gif" vspace="0" width="120"><BR>
<A href="http://xml.apache.org/xalan-j" onMouseOut="rolloverOff('side-ext-28');" onMouseOver="rolloverOn('side-ext-28');"><IMG alt="Xalan-J 2.x" border="0" height="12" hspace="0" name="side-ext-28" onLoad="rolloverLoad('side-ext-28','graphics/ext-28-label-2.jpg','graphics/ext-28-label-3.jpg');" src="graphics/ext-28-label-3.jpg" vspace="0" width="120"></A><BR>
<A href="http://xml.apache.org/xalan" onMouseOut="rolloverOff('side-ext-30');" onMouseOver="rolloverOn('side-ext-30');"><IMG alt="Xalan-J 1.x" border="0" height="12" hspace="0" name="side-ext-30" onLoad="rolloverLoad('side-ext-30','graphics/ext-30-label-2.jpg','graphics/ext-30-label-3.jpg');" src="graphics/ext-30-label-3.jpg" vspace="0" width="120"></A><BR>
<A href="http://xml.apache.org/xalan-c" onMouseOut="rolloverOff('side-ext-32');" onMouseOver="rolloverOn('side-ext-32');"><IMG alt="Xalan-C 1.x" border="0" height="12" hspace="0" name="side-ext-32" onLoad="rolloverLoad('side-ext-32','graphics/ext-32-label-2.jpg','graphics/ext-32-label-3.jpg');" src="graphics/ext-32-label-3.jpg" vspace="0" width="120"></A><BR>
<IMG alt="close" border="0" height="14" hspace="0" src="resources/close.gif" vspace="0" width="120"><BR></TD><TD align="left" valign="top" width="500"><TABLE border="0" cellpadding="3" cellspacing="0"><TR><TD>
<UL>
<LI><A href="#overview-tests">Overview of Testing concepts</A></LI>
<LI><A href="#standards-api-tests">Standards for API Tests</A></LI>
<LI><A href="#standards-xsl-tests">Standards for Stylesheet Tests</A></LI>
<LI><A href="#testing-links">Links to other testing sites</A></LI>
</UL>
<A name="overview-tests"><!--anchor--></A>
<TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG alt="" border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG alt="" border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG alt="" border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG alt="" border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG alt="" border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Overview of Testing concepts</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG alt="" border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG alt="" border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG alt="" border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG alt="" border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10">&nbsp;</TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
<P>While an overview of software testing in general is outside
the scope we can address in this document, here are some of the
concepts and background behind the Xalan testing effort.</P>
<DL>
<DT>A quick glossary of Xalan testing terms:</DT><DD></DD>
<DT>What is a test?</DT>
<DD>The word 'test' is overused, and can refer to a number
of things. It can be an API test, which will usually be a Java
class that verifies the behavior of Xalan by calling it's API's.
It can be a stylesheet test, which is normally an .xsl stylesheet
file with a matching .xml data file, and often has an expected
output file with a .out extension.</DD>
<DT>What kinds of tests does Xalan have?</DT>
<DD>There are several different ways to categorize the
tests currently used in Xalan: API tests and testlets, specific tests
for detailed areas of the API in Xalan; Conformance Tests,
with stylesheets in the tests\conf directory that each test
conformance with a specific part of the XSLT spec, and are
run automatically by a test driver; performance tests, which
are a set of stylesheets specifically designed to show the
performance of a processor in various ways, that are run
automatically by a test driver; contributed tests, which are
stored in tests\contrib, where anyone is invited to submit their
own favorite stylesheets that we can use to test future Xalan
releases. There are also a few specific tests of extensions, as well
as a small but growing suite of individual Bugzilla bug regression tests.
We are working on better documentation and
structure for the tests.</DD>
<DT>What is a test result?</DT>
<DD>While most people view tests as having a simple boolean
pass/fail result, I've found it more useful to have a range of
results from our tests. Briefly, they include INCP or incomplete
tests; PASS tests, where everything went correctly; FAIL tests,
where something obviously didn't go correctly; ERRR tests, where
something failed in an unexpected way, and AMBG or ambiguous tests,
where the test appears to have completed but the output results
haven't been verified to be correct yet.
<A href="#overview-tests-results">See a full description of test results.</A></DD>
<DT>How are test results stored/displayed?</DT>
<DD>Xalan tests all use
<A href="apidocs/org/apache/qetest/Reporter.html">Reporter</A>s and
<A href="apidocs/org/apache/qetest/Logger.html">Logger</A>s to store their results.
By default, most Reporters send output to a ConsoleLogger (so you
can see what's happening as the test runs) and to an XMLFileLogger
(which stores it's results on disk). The logFile input to a test
(generally on the command line or in a .properties file)
determines where it will produce it's MyTestResults.xml file, which
are the complete report of what the test did, as saved to disk by
it's XMLFileLogger. You can
then use <A href="run.html#how-to-view-results">viewResults.xsl</A>
to pretty-print the results into a MyTestResults.html
file that you can view in your browser. We are working on other
stylesheets to output results in different formats.
</DD>
<DT>What are your file/test naming conventions?</DT>
<DD>See the sections below for <A href="#standards-api-tests">API test naming</A> and
<A href="#standards-xsl-tests">stylesheet file naming</A> conventions.</DD>
</DL>
<A name="overview-tests-results"><!--anchor--></A>
<P>Xalan tests will report one of several results, as detailed below.
Note that the framework automatically rolls-up the results for
any individual test file: a testCase's result is calculated from
any test points or <CODE><FONT face="courier, monospaced">check*()</FONT></CODE> calls within that testCase;
a testFile's result is calculated from the results of it's testCases.</P>
<UL>
<LI>INCP/incomplete: all tests start out as incomplete. If a test never calls
a <CODE><FONT face="courier, monospaced">check*()</FONT></CODE> method (i.e. never officially verifies a test
point), then it's result will be incomplete. This is important for cases
where a test file begins running, and then causes some unexpected
error that exits the test.
<BR>Some other test harnesses will erroneously
report this test as passing, since it never actually reported that
anything failed. For Xalan, this may also be reported if a test
calls <CODE><FONT face="courier, monospaced">testFileInit</FONT></CODE> or <CODE><FONT face="courier, monospaced">testCaseInit</FONT></CODE>, but
never calls the corresponding <CODE><FONT face="courier, monospaced">testFileClose</FONT></CODE> or <CODE><FONT face="courier, monospaced">testCaseClose</FONT></CODE>.
See <A href="apidocs/org/apache/qetest/Logger.html#INCP">Logger.INCP</A></LI>
<LI>PASS: the test ran to completion and all test points verified correctly.
This is obviously a good thing. A test will only pass if it has at least one
test point that passes and has no other kinds of test points (i.e. fail,
ambiguous, or error).
See <A href="apidocs/org/apache/qetest/Logger.html#PASS">Logger.PASS</A></LI>
<LI>AMBG/ambiguous: the test ran to completion but at least one test point
could not verify it's data because it could not find the 'gold'
data to verify against. This test niether passes nor fails,
but exists somewhere in the middle.
<BR>The usual solution is to
manually compare the actual output the test produced and verify
that it is correct, and then check in the output as the 'gold'
or expected data. Then when you next run the test, it should pass.
A test is ambiguous if at least one test point is ambiguous, and
it has no fail or error test points; this means that a test with
both ambiguous and pass test points will roll-up to be ambiguous.
See <A href="apidocs/org/apache/qetest/Logger.html#AMBG">Logger.AMBG</A></LI>
<LI>FAIL: the test ran to completion but at least one test point
did not verify correctly. This is normally used for cases where
we attempt to validate a test point, but get the wrong answer:
for example if we call setData(3) then call getData and get a '2' back.
<BR>In most cases, a test should be able to continue normally after a FAIL
result, and the rest of the results should be valid.
A test will fail if at least one test point is fail, and
it has no error test points; thus a fail always takes precedence
over a pass or ambiguous result.
See <A href="apidocs/org/apache/qetest/Logger.html#FAIL">Logger.FAIL</A></LI>
<LI>ERRR/error: the test ran to completion but at least one test point
had an error or did not verify correctly. This is normally used for
cases where we attempt to validate a test point, but something unexpected
happens: for example if we call setData(3), and calling getData throws
an exception.
<BR>Although the difference seems subtle, it can be a useful
diagnostic, since a test that reports an ERRR may not necessarily be able
to continue normally. In Xalan API tests, we often use this code if
some setup routines for a testCase fail, meaning that the rest of the
test case probably won't work properly.
<BR>A test will report an ERRR result if at least one test point is ERRR;
thus an ERRR result takes precedence over any other kind of result.
Note that calling <CODE><FONT face="courier, monospaced">Reporter.logErrorMsg()</FONT></CODE> will not cause
an error result, it will merely log out the message. You generally must
call <CODE><FONT face="courier, monospaced">checkErr</FONT></CODE> directly to cause an ERRR result.
See <A href="apidocs/org/apache/qetest/Logger.html#ERRR">Logger.ERRR</A></LI>
</UL>
</FONT></TD></TR></TABLE><BR>
<A name="standards-api-tests"><!--anchor--></A>
<TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG alt="" border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG alt="" border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG alt="" border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG alt="" border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG alt="" border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Standards for API Tests</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG alt="" border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG alt="" border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG alt="" border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG alt="" border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10">&nbsp;</TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
<P>In progress. Both the overall Java testing framework, the test drivers,
and the specific API tests have a number of design decisions detailed
in the javadoc
<A href="apidocs/org/apache/qetest/package-summary.html">here</A> and
<A href="apidocs/org/apache/qetest/xsl/package-summary.html">here</A>.</P>
<P>Naming conventions: obviously we follow basic Java coding
standards as well as some specific standards that apply to Xalan
or to testing in general. Comments appreciated.</P>
<DL>
<DT>Some naming conventions currently used:</DT><DD></DD>
<DT>*Test.java/.class</DT>
<DD>As in 'ConformanceTest', 'PerformanceTest', etc.: a single,
automated test file designed to be run from the command line or
from a testing harness. This may be used in the future by
automated test discovery mechanisims.</DD>
<DT>*Testlet.java/.class</DT>
<DD>As in '<A href="apidocs/org/apache/qetest/xsl/StylesheetTestlet.html">StylesheetTestlet</A>', 'PerformanceTestlet', etc.: a single,
automated testlet designed to be run from the command line or
from a testing harness. Testlets are generally focused on one
or a very few test points, and usually are data-driven. A testlet
defines a single test case algorithim, and relies on the caller
(or *TestletDriver) to provide it with the data point(s) to use
in it's test, including gold comparison info.</DD>
<DT>*Datalet.java/.class</DT>
<DD>As in '<A href="apidocs/org/apache/qetest/xsl/StylesheetDatalet.html">StylesheetDatalet</A>': a single set of test data for
a Testlet to execute. Separating a specific set of data from the
testing algorithim to use with the data makes it easy to write
and run large sets of data-driven tests.</DD>
<DT>*APITest.java/.class</DT>
<DD>As in 'TransformerAPITest', etc.: a single,
automated test file designed to be run from the command line or
from a testing harness, specifically providing test coverage of
a number of API's. Instead of performing the same kind of generic
processing/transformations to a whole directory tree of files, these
*APITests attempt to validate the API functionality itself: e.g. when
you call setFoo(1), you should expect that getFoo() will return 1.
</DD>
<DT>XSL*.java/.class</DT>
<DD>Files that are specific to some kind of XSL(T) and XML concepts in
general, but not necessarily specific to Xalan itself. I.e. these
files may generally need org.xml.sax.* or org.w3c.dom.* to compile, but
usually should not need org.apache.xalan.* to compile.</DD>
<DT>Logging*.java/.class</DT>
<DD>Various testing implementations of common error handler,
URI resolver, and other classes. These generally do not implement
much functionality of the underlying classes, but simply log out
everything that happens to them to a Logger, for later analysis.
Thus we can hook a LoggingErrorHandler up to a Transformer, run a
stylesheet with known errors through it, and then go back and validate
that the Transformer logged the appropriate errors with this service.</DD>
<DT>QetestUtils.java/.class</DT>
<DD>A simple static utility class with a few general-purpose
utility methods for testing.</DD>
</DL>
<P>Please: if you plan to submit Java API tests, use the existing framework
as <A href="submit.html#write-API-tests">described</A>.</P>
</FONT></TD></TR></TABLE><BR>
<A name="standards-xsl-tests"><!--anchor--></A>
<TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG alt="" border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG alt="" border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG alt="" border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG alt="" border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG alt="" border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Standards for Stylesheet Tests</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG alt="" border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG alt="" border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG alt="" border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG alt="" border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10">&nbsp;</TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
<P>In progress. See the <A href="submit.html#write-xsl-tests">discussion about OASIS</A> for an overview.</P>
<P>Currently, the basic standards for Conformance and related
tests are to provide similarly-named
*.xml and *.xsl files, and a proposed *.out 'gold' or expected
output file. The basenames of the file should start with the name
of the parent directory the files are in. Thus if you had a new
test you wanted to contribute about the 'foo' feature, you might
submit a set of files like so:</P>
<P>All under <CODE><FONT face="courier, monospaced">xml-xalan\test\tests</FONT></CODE>:<BR>
<CODE><FONT face="courier, monospaced">contrib\foo\foo.xml</FONT></CODE><BR>
<CODE><FONT face="courier, monospaced">contrib\foo\foo.xsl</FONT></CODE><BR>
<CODE><FONT face="courier, monospaced">contrib-gold\foo\foo.out</FONT></CODE><BR><BR>
You could then run this test through the Conformance test driver like:<BR>
<CODE><FONT face="courier, monospaced">cd xml-xalan\test</FONT></CODE><BR>
<CODE><FONT face="courier, monospaced">build contrib -Dqetest.category=foo</FONT></CODE><BR>
</P>
<P>Tests using Xalan Extensions may be found under test/tests/extensions and are separated
into directories by language:<BR>
<DL>
<DT>test/tests/extensions/library</DT>
<DD>Stylesheets for extensions implemented natively in Xalan; these only
have .xsl and .xml files for the test</DD>
<DT>test/tests/extensions/java</DT>
<DD>Stylesheets for extensions implemented in Java; these are run by
a .java file that uses an ExtensionTestlet to run</DD>
<DT>test/tests/extensions/javascript</DT>
<DD>Stylesheets for extensions implemented in Javascript; these include
only a .xsl and .xml file but require
<A href="http://xml.apache.org/xalan-j/extensions.html#supported-lang">bsf.jar and js.jar</A> in the classpath</DD>
</DL>
</P>
</FONT></TD></TR></TABLE><BR>
<A name="testing-links"><!--anchor--></A>
<TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="666699" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG alt="" border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG alt="" border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG alt="" border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG alt="" border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG alt="" border="0" height="2" hspace="0" src="resources/void.gif" vspace="0" width="2"><B>Links to other testing sites</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG alt="" border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG alt="" border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG alt="" border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG alt="" border="0" height="1" hspace="0" src="resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10">&nbsp;</TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">
<P>A few quick links to other websites about software quality
engineering/assurance. No endorsement, express or implied should
be inferred from any of these links, but hopefully they'll be
useful for a few of you.</P>
<P>One note: I've commonly found two basic
kinds of sites about software testing: ones for IS/IT types,
and ones for software engineers. The first kind deal with testing
or verifying the deployment or integration of business software
systems, certification exams for MS or Novell networks, ISO
certification for your company, etc. The second kind (which I
find more interesting) deal with testing software applications
themselves; i.e. the testing ISV's do to their own software before
selling it in the market. So far, there seem to be a lot more
IS/IT 'testing' sites than there are application 'testing' sites.</P>
<UL>
<LI><A href="http://www.soft.com/Institute/HotList/index.html">Software Research Institute HotList</A>
This is a pretty good laundry list of top-level links for software testing</LI>
<LI><A href="http://www.swquality.com/users/pustaver/index.shtml">SWQuality site; plenty of links</A></LI>
<LI><A href="http://www.stickyminds.com/">StickyMinds</A></LI>
<LI><A href="http://www.sqe.com/press/index.asp">SQE</A></LI>
</UL>
</FONT></TD></TR></TABLE><BR>
</TD></TR></TABLE></TD></TR></TABLE><BR><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD bgcolor="#0086b2"><IMG alt="dot" height="1" src="resources/dot.gif" width="1"></TD></TR><TR><TD align="center"><FONT color="#0086b2" size="-1"><I>
Copyright &copy; 2000 The Apache Software Foundation.
All Rights Reserved.
</I></FONT></TD></TR></TABLE></BODY></HTML>