Core functionality for cargo nextest. For a higher-level overview, see that documentation.
Here's the basic flow of operations in nextest.
cargo test --no-run
is invoked to build test binaries. (This is handled by cargo-nextest; nextest just processes the messages produced by the command.)- The messages generated by Cargo are processed into a list of
list::RustTestArtifact
instances. - Separately, a
test_filter::TestFilter
is created based on text filters, along with the run-ignored and partitioning filters if provided. - The list of test binaries and test filter are combined. Each binary is run with
--list
to grab the list of tests, the given filters are applied to it, and everything is put together to create alist::TestList
.
If cargo nextest list-tests
is called, this list::TestList
is printed out. If cargo nextest run
is called, nextest proceeds to run the tests.
- A new
runner::TestRunner
is created with the test list and appropriate configuration. - The runner sets up two thread pools:
- The run pool: each thread in this pool executes a test (+ 1 thread for overall management).
- The wait pool: each thread in this pool monitors the status of a test being run by the run pool.
- The test runner is executed with a callback to send
reporter::TestEvent
instances to the test reporter. - The test runner iterates over the test list to get individual
list::TestInstance
information. Test instances are sent to the thread pool to be executed. - If a test fails and fail-fast is true, or if a signal is encountered, the run is cancelled; currently executing tests are allowed to complete, but no new tests are scheduled.
- The test reporter sees events and prints them to stderr (and aggregates them if necessary based on configs).
See the CONTRIBUTING file for how to help out.
This project is available under the terms of either the Apache 2.0 license or the MIT license.