libtest2_mimic/
lib.rs

1//! An experimental replacement for libtest-mimic
2//!
3//! # Usage
4//!
5//! To use this, you most likely want to add a manual `[[test]]` section to
6//! `Cargo.toml` and set `harness = false`. For example:
7//!
8//! ```toml
9//! [[test]]
10//! name = "mytest"
11//! path = "tests/mytest.rs"
12//! harness = false
13//! ```
14//!
15//! And in `tests/mytest.rs` you would call [`Harness::main`] in the `main` function:
16//!
17//! ```no_run
18//! libtest2_mimic::Harness::with_env()
19//!     .main();
20//! ```
21//!
22
23#![cfg_attr(docsrs, feature(doc_auto_cfg))]
24#![warn(clippy::print_stderr)]
25#![warn(clippy::print_stdout)]
26
27pub use libtest2_harness::Harness;
28pub use libtest2_harness::RunError;
29pub use libtest2_harness::RunResult;
30pub use libtest2_harness::State;
31pub use libtest2_harness::TestKind;
32
33use libtest2_harness::Case;
34use libtest2_harness::Source;
35
36pub struct Trial {
37    name: String,
38    #[allow(clippy::type_complexity)]
39    runner: Box<dyn Fn(&State) -> Result<(), RunError> + Send + Sync>,
40}
41
42impl Trial {
43    pub fn test(
44        name: impl Into<String>,
45        runner: impl Fn(&State) -> Result<(), RunError> + Send + Sync + 'static,
46    ) -> Self {
47        Self {
48            name: name.into(),
49            runner: Box::new(runner),
50        }
51    }
52}
53
54impl Case for Trial {
55    fn name(&self) -> &str {
56        &self.name
57    }
58    fn kind(&self) -> TestKind {
59        Default::default()
60    }
61    fn source(&self) -> Option<&Source> {
62        None
63    }
64    fn exclusive(&self, _: &State) -> bool {
65        false
66    }
67
68    fn run(&self, state: &State) -> Result<(), RunError> {
69        (self.runner)(state)
70    }
71}
72
73#[doc = include_str!("../README.md")]
74#[cfg(doctest)]
75pub struct ReadmeDoctests;