1#[macro_export]
14macro_rules! capture {
15 ($eval:stmt) => {{
16 let mut out = $crate::gag::BufferRedirect::stdout().expect("redirected stdout required for test");
17 let mut err = $crate::gag::BufferRedirect::stderr().expect("redirected stderr required for test");
18
19 $eval
20
21 <std::io::Stdout as std::io::Write>::flush(&mut std::io::stdout()).expect("to flush stdout");
23 <std::io::Stderr as std::io::Write>::flush(&mut std::io::stderr()).expect("to flush stderr");
24
25 let mut stdout = String::new();
26 let mut stderr = String::new();
27
28 std::io::Read::read_to_string(&mut out, &mut stdout).expect("to copy captured stdout to string");
29 std::io::Read::read_to_string(&mut err, &mut stderr).expect("to copy captured stderr to string");
30
31 (stdout, stderr)
32 }}
33}