Run tests regularly and download the examples
Writing a first test is quick. Its greatest value comes when it runs again after each relevant change. The package includes launch scripts, reports and a test-status summary to support that routine.
The historical training files are kept separate from the new examples. Their HTML reports show how the old tests looked; they are not results from the new environment.
Run all tests with a single command
This command launches the eight core suites:
python scripts/run-tests.py
The complete run also includes XProc and the deliberately defective initial example. To do this, the XProc runtime must be set up beforehand:
python scripts/run-tests.py --include-xproc --include-deliberate-failure
The normal suites should finish without failures or pending expectations. The defective demonstration should produce exactly its two intended mismatches. An arbitrary crash is not enough.
HTML reports are useful for reading, and JUnit files are useful for automated evaluation. scripts/ci.sh provides a starting point for the project's own CI setup. It does not mean that a GitHub, GitLab or Jenkins job has already been configured or run.
See which parts of a stylesheet are reached
A coverage report shows which parts of an XSLT stylesheet were executed. It can help locate branches that need another test case. XSpec's coverage documentation specifies Saxon 12.4 or later for this support. Coverage here is for XSLT, not automatically for every language in the guide.
python scripts/run-tests.py --only functions --coverage
The runner starts an additional coverage run, separate from JUnit generation. The available report combinations depend on the selected XSpec launcher.
High coverage does not mean all results are correct. A function can execute and still return the wrong value; the test needs an expectation that catches it. Coverage entries marked as unknown also need a closer look.
Comparing XML trees does not check how the output looks in a browser or PDF. Layout, serialization, database behavior and external services need their own checks. For calls outside the normal import model, XSpec also supports testing external transformations with a separate setup.
What is in the download?
The example project contains English source code, input and expected files, XSpec suites and launch scripts. Both language editions use the same examples. STATUS.json and the reports show which checks have actually run.
In the current draft, all 46 XML-family example files have passed well-formedness checks, including the generated individual column suite. All 16,384 column reference values agree with the independent Python calculation. The ten corrected initial examples have passed direct libxslt execution, and the defective version produced the two expected mismatches.
XSpec 4.0.3, Saxon-HE 12.9 and Java 21.0.10 were also used to run the XSLT, XQuery and Schematron suites. Eight positive core suites passed with 56 assertions. The deliberately defective initial suite produced exactly the expected two failures among three assertions. The compact full-range column test checked all 16,384 values in one assertion; the individually generated range from 695 to 710 was then run with 16 separate assertions.
The XProc suite remains open because the verification environment does not have a complete XML Calabash 3 installation with CALABASH_CP. The example ZIP is therefore still marked DRAFT. Direct libxslt checks are reported separately from the XSpec evidence.
Download: Example files
In the Download folder, you will find all example files for this article.

