wowlab_test_support/
batch.rs1#[macro_export]
3macro_rules! verify_all {
4 ($($actual:expr => $matcher:expr),+ $(,)?) => {{
5 let mut combined_failure = googletest::verify_true!(true).err();
6 $(
7 if let Err(mut failure) = googletest::verify_that!($actual, $matcher) {
8 failure.description = format!(
9 "{}:\n{}",
10 stringify!($actual),
11 failure.description,
12 );
13 if let Some(existing) = &mut combined_failure {
14 existing.description.push_str("\n\n");
15 existing.description.push_str(&failure.description);
16 } else {
17 combined_failure = Some(failure);
18 }
19 }
20 )+
21 match combined_failure {
22 Some(failure) => Err(failure),
23 None => Ok(()),
24 }
25 }};
26}
27
28#[macro_export]
30macro_rules! expect_all {
31 ($($actual:expr => $matcher:expr),+ $(,)?) => {{
32 $(
33 googletest::scoped_trace!(stringify!($actual));
34 googletest::expect_that!($actual, $matcher);
35 )+
36 }};
37}
38
39#[cfg(test)]
40mod tests {
41 use googletest::prelude::*;
42
43 #[gtest]
44 fn verify_all_accepts_heterogeneous_successes() -> Result<()> {
45 crate::verify_all!(1 => eq(1), "value" => starts_with("val"))
46 }
47
48 #[gtest]
49 fn verify_all_reports_each_failed_expression() -> Result<()> {
50 let error = crate::verify_all!(1 => eq(2), "value" => eq("other"))
51 .expect_err("fixture assertions should fail");
52
53 verify_that!(
54 error.description,
55 all!(contains_substring("1:"), contains_substring("\"value\":"))
56 )
57 }
58
59 #[gtest]
60 fn expect_all_accepts_heterogeneous_successes() {
61 crate::expect_all!(1 => eq(1), "value" => starts_with("val"));
62 }
63}