This is a guide for developers, including design, programming, test, and quality assurance roles.
Running a Single Test in sbt
We have a large number of tests runnable from sbt.
All short-running tests are run by just issuing the command
But often one will want to run only a single test. Here is the syntax to run one such test.
sbt > cli:test-only edu.illinois.ncsa.daffodil.CLI.debugger.TestCLIdebugger -- --tests=test_1382_.*
The 'cli:' prefix is only needed for the CLI i.e., tests of the daffodil-cli module.
The class name is optional. It will search (and output lots of noise lines) and find the test anyway.
The value of the --tests option is a regular expression. Keep it simple. But notice this is a ".*" not simply "*". This is not a command line "*" it is a regular expression "*", which must follow something to be matched.
Warning: if you get the class name wrong, it doesn't complain to you. It just iterates its way through all the potential testable modules, saying "No tests to run for ...". Not very helpful for finding out you had a typographical error in the class name.
Running Outside Tests
Tests may exist that cannot be included in the Daffodil repo, usually because of size or privacy concerns. However, it is still desirable to build and run the tests as if they were part of the normal sbt build/test process. The Daffodil build system provides a way to do this, using the
daffodil-extra directory. First, create a directory containing tests using the SBT Directory Structure (you really only need
src/test, and you do not need to create any sbt definition files, like build.sbt). Once this is created, add a symlink from the
daffodil-extra directory to the root of your test directory:
$ cd daffodil-extra $ ln -s /path/to/root/dir/of/custom-tests
With sbt restarted, the
custom-tests directory will appear as a normal daffodil subproject, with the tests run as if they were part of the normal Daffodil test suite. The directory name is used as the sub-project name, so you can use standard sbt commands to run only the tests in that project, for example: