Files
addr2line
adler
aho_corasick
arrayvec
atty
backtrace
bitflags
camino
cargo_metadata
cargo_nextest
cargo_platform
cfg_expr
cfg_if
chrono
clap
clap_derive
color_eyre
config
crossbeam_channel
crossbeam_deque
crossbeam_epoch
crossbeam_utils
ctrlc
datatest_stable
debug_ignore
duct
either
enable_ansi_support
env_logger
eyre
fixedbitset
gimli
guppy
guppy_workspace_hack
hashbrown
humantime
humantime_serde
indent_write
indenter
indexmap
is_ci
itertools
itoa
lazy_static
lexical_core
libc
log
memchr
memoffset
miniz_oxide
nested
nextest_metadata
nextest_runner
nix
nom
num_cpus
num_integer
num_traits
object
once_cell
os_pipe
os_str_bytes
owo_colors
pathdiff
petgraph
proc_macro2
proc_macro_error
proc_macro_error_attr
quick_junit
quick_xml
quote
rayon
rayon_core
regex
regex_syntax
rustc_demangle
ryu
same_file
scopeguard
semver
serde
serde_derive
serde_json
shared_child
shellwords
smallvec
static_assertions
strip_ansi_escapes
strsim
structopt
structopt_derive
supports_color
syn
target_lexicon
target_spec
termcolor
textwrap
time
toml
twox_hash
unicode_xid
utf8parse
vte
vte_generate_state_changes
walkdir
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// Copyright (c) The diem-devtools Contributors
// SPDX-License-Identifier: MIT OR Apache-2.0

#![warn(missing_docs)]

//! Core functionality for [cargo nextest](https://crates.io/crates/cargo-nextest). For a
//! higher-level overview, see that documentation.
//!
//! Here's the basic flow of operations in nextest.
//!
//! ## Building the test list
//!
//! 1. `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.)
//! 2. The messages generated by Cargo are processed into a list of [`test_list::RustTestArtifact`]
//!    instances.
//! 3. Separately, a [`test_filter::TestFilter`] is created based on text filters, along with the
//!    run-ignored and partitioning filters if provided.
//! 4. 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 a [`test_list::TestList`].
//!
//! If `cargo nextest list-tests` is called, this [`test_list::TestList`] is printed out. If `cargo
//! nextest run` is called, nextest proceeds to run the tests.
//!
//! ## Running the tests
//!
//! 1. A new [`runner::TestRunner`] is created with the test list and appropriate configuration.
//! 2. 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.
//! 3. The test runner is executed with a callback to send [`reporter::TestEvent`] instances to the
//!    test reporter.
//! 4. The test runner iterates over the test list to get individual [`test_list::TestInstance`]
//!    information. Test instances are sent to the thread pool to be executed.
//! 5. 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.
//! 6. The test reporter sees events and prints them to stderr (and aggregates them if necessary
//!    based on configs).

pub mod config;
pub mod errors;
mod helpers;
pub mod partition;
pub mod reporter;
pub mod runner;
pub mod signal;
mod stopwatch;
pub mod test_filter;
pub mod test_list;