|
12 | 12 | //! harness = false |
13 | 13 | //! ``` |
14 | 14 | //! |
15 | | -//! And in `tests/mytest.rs` you would call [`libtest2_main`], passing it each of your tests: |
| 15 | +//! And in `tests/mytest.rs` you would call [`main!`], passing it each of your tests: |
16 | 16 | //! |
17 | 17 | //! ```no_run |
18 | 18 | //! # use libtest2::RunError; |
19 | 19 | //! # use libtest2::RunResult; |
20 | 20 | //! # use libtest2::TestContext; |
21 | | -//! # use libtest2::libtest2_main; |
22 | 21 | //! fn check_toph(_context: &TestContext) -> RunResult { |
23 | 22 | //! Ok(()) |
24 | 23 | //! } |
25 | 24 | //! |
26 | | -//! libtest2_main!(check_toph); |
| 25 | +//! libtest2::main!(check_toph); |
27 | 26 | //! ``` |
28 | 27 | //! |
29 | 28 |
|
30 | 29 | #![cfg_attr(docsrs, feature(doc_cfg))] |
31 | 30 | //#![warn(clippy::print_stderr)] |
32 | 31 | #![warn(clippy::print_stdout)] |
33 | 32 |
|
34 | | -pub use libtest2_harness::Harness; |
35 | | -pub use libtest2_harness::RunError; |
36 | | -pub use libtest2_harness::RunResult; |
37 | | -pub use libtest2_harness::TestContext; |
38 | | -pub use libtest2_harness::TestKind; |
39 | | -pub use libtest2_harness::ERROR_EXIT_CODE; |
40 | | - |
41 | | -use libtest2_harness::Case; |
42 | | -use libtest2_harness::Source; |
| 33 | +mod case; |
| 34 | +mod macros; |
43 | 35 |
|
44 | | -pub struct Trial { |
45 | | - name: String, |
46 | | - #[allow(clippy::type_complexity)] |
47 | | - runner: Box<dyn Fn(&TestContext) -> Result<(), RunError> + Send + Sync>, |
| 36 | +#[doc(hidden)] |
| 37 | +pub mod _private { |
| 38 | + pub use crate::_main as main; |
48 | 39 | } |
49 | 40 |
|
50 | | -impl Trial { |
51 | | - pub fn test( |
52 | | - name: impl Into<String>, |
53 | | - runner: impl Fn(&TestContext) -> Result<(), RunError> + Send + Sync + 'static, |
54 | | - ) -> Self { |
55 | | - Self { |
56 | | - name: name.into(), |
57 | | - runner: Box::new(runner), |
58 | | - } |
59 | | - } |
60 | | -} |
61 | | - |
62 | | -impl Case for Trial { |
63 | | - fn name(&self) -> &str { |
64 | | - &self.name |
65 | | - } |
66 | | - fn kind(&self) -> TestKind { |
67 | | - Default::default() |
68 | | - } |
69 | | - fn source(&self) -> Option<&Source> { |
70 | | - None |
71 | | - } |
72 | | - fn exclusive(&self, _: &TestContext) -> bool { |
73 | | - false |
74 | | - } |
75 | | - |
76 | | - fn run(&self, context: &TestContext) -> Result<(), RunError> { |
77 | | - (self.runner)(context) |
78 | | - } |
79 | | -} |
80 | | - |
81 | | -/// Expands to the test harness |
82 | | -#[macro_export] |
83 | | -macro_rules! libtest2_main { |
84 | | - ( $( $test:path ),* $(,)*) => { |
85 | | - fn main() { |
86 | | - let harness = $crate::Harness::new(); |
87 | | - let harness = match harness.with_env() { |
88 | | - Ok(harness) => harness, |
89 | | - Err(err) => { |
90 | | - eprintln!("{err}"); |
91 | | - ::std::process::exit(1); |
92 | | - } |
93 | | - }; |
94 | | - let harness = match harness.parse() { |
95 | | - Ok(harness) => harness, |
96 | | - Err(err) => { |
97 | | - eprintln!("{err}"); |
98 | | - ::std::process::exit(1); |
99 | | - } |
100 | | - }; |
101 | | - let harness = match harness.discover([ |
102 | | - $($crate::Trial::test(::std::stringify!($test), $test)),* |
103 | | - ]) { |
104 | | - Ok(harness) => harness, |
105 | | - Err(err) => { |
106 | | - eprintln!("{err}"); |
107 | | - ::std::process::exit($crate::ERROR_EXIT_CODE) |
108 | | - } |
109 | | - }; |
110 | | - match harness.run() { |
111 | | - Ok(true) => ::std::process::exit(0), |
112 | | - Ok(false) => ::std::process::exit($crate::ERROR_EXIT_CODE), |
113 | | - Err(err) => { |
114 | | - eprintln!("{err}"); |
115 | | - ::std::process::exit($crate::ERROR_EXIT_CODE) |
116 | | - } |
117 | | - } |
118 | | - } |
119 | | - } |
120 | | -} |
| 41 | +pub use _private::main; |
| 42 | +pub use case::main; |
| 43 | +pub use case::FnCase; |
| 44 | +pub use libtest2_harness::RunError; |
| 45 | +pub use libtest2_harness::RunResult; |
| 46 | +pub use libtest2_harness::TestContext; |
121 | 47 |
|
122 | 48 | #[doc = include_str!("../README.md")] |
123 | 49 | #[cfg(doctest)] |
|
0 commit comments