macro_rules! cases {
($ty:ty, $s:ident => $($rest:tt)*) => { ... };
(@parse ($ty:ty) ($s:ident) [$($out:expr),*] $name:ident (depends_on = [$($dep:ident),+ $(,)?]) => $body:block $(, $($rest:tt)*)?) => { ... };
(@parse ($ty:ty) ($s:ident) [$($out:expr),*] $name:ident => $body:block $(, $($rest:tt)*)?) => { ... };
(@parse ($ty:ty) ($s:ident) [$($out:expr),*] ,) => { ... };
(@parse ($ty:ty) ($s:ident) [$($out:expr),*]) => { ... };
}Expand description
Build a &'static [Case<S>] from case names and inline blocks.
§Declaration
cases! {
$ty:ty, $s:ident => $($name:ident => $body:block),* $(,)?
}With dependencies:
cases! {
$ty:ty, $s:ident =>
$name:ident => $body:block,
$name:ident (depends_on = [$($dep:ident),+]) => $body:block,
}§Description
The type and binding $s are written once; each $body is a block that runs as the case
body. Closures must not capture the environment so they coerce to fn(&mut S).
§Example
use suitecase::{cases, run, Case, HookFns, RunConfig};
#[derive(Default)]
struct MySuite {
n: i32,
}
let cases: &[Case<MySuite>] = cases![MySuite, s =>
one => { s.n = 1; },
two => { assert_eq!(s.n, 1); },
];
let mut suite = MySuite::default();
run(&mut suite, cases, RunConfig::all(), &HookFns::default());§Example with dependencies
use suitecase::{cases, run, Case, HookFns, RunConfig};
#[derive(Default)]
struct MySuite {
n: i32,
}
let cases: &[Case<MySuite>] = cases![MySuite, s =>
setup => { s.n = 1; },
verify(depends_on = [setup]) => { assert_eq!(s.n, 1); },
];
let mut suite = MySuite::default();
run(&mut suite, cases, RunConfig::filter("verify"), &HookFns::default());
assert_eq!(suite.n, 1);