diff --git a/src/args.rs b/src/args.rs index 09d301dde0410a9fcfd0ebf7141bd6e10bddc80b..0d9469215dcf58c2ca435fe6700a43cea0252399 100644 --- a/src/args.rs +++ b/src/args.rs @@ -229,9 +229,13 @@ impl Expel { #[derive(Debug, Parser, tlua::Push)] #[clap(about = "Run picodata integration tests")] pub struct Test { - #[clap()] + #[clap(env = "PICODATA_TEST_FILTER")] /// Only run tests matching the filter. pub filter: Option<String>, + + #[clap(long = "nocapture", env = "PICODATA_TEST_NOCAPTURE")] + /// Do not capture test output. + pub nocapture: bool, } impl Test { diff --git a/src/main.rs b/src/main.rs index 3c45ee7825e24ec890732e0295eb1b7657399da3..84c3a0511d01fbc6d186af2443d2384e0ef14fa0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -942,8 +942,10 @@ fn main_test(args: args::Test) -> ! { ForkResult::Child => { drop(rx); unistd::close(0).ok(); // stdin - unistd::dup2(*tx, 1).ok(); // stdout - unistd::dup2(*tx, 2).ok(); // stderr + if !args.nocapture { + unistd::dup2(*tx, 1).ok(); // stdout + unistd::dup2(*tx, 2).ok(); // stderr + } drop(tx); let rc = tarantool_main!( @@ -959,9 +961,11 @@ fn main_test(args: args::Test) -> ! { let log = { let mut buf = Vec::new(); use std::io::Read; - rx.read_to_end(&mut buf) - .map_err(|e| println!("error reading ipc pipe: {e}")) - .ok(); + if !args.nocapture { + rx.read_to_end(&mut buf) + .map_err(|e| println!("error reading ipc pipe: {e}")) + .ok(); + } buf }; @@ -981,6 +985,10 @@ fn main_test(args: args::Test) -> ! { println!("{FAILED}"); cnt_failed += 1; + if args.nocapture { + continue; + } + use std::io::Write; println!(); std::io::stderr()