From d7f32c05222ec860014ac29d807903ae7fa56258 Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Mon, 10 Aug 2026 18:43:31 +0800 Subject: fix: combine stdout and stderr in command output Prefer both streams when present so failures with stderr warnings still include stdout details like test assertions. --- .run/src/lib.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.run/src/lib.rs b/.run/src/lib.rs index 05b8e12..b17a61f 100644 --- a/.run/src/lib.rs +++ b/.run/src/lib.rs @@ -203,7 +203,15 @@ pub fn run_cmd_capture_with_dir( let exit_code = output.status.code().unwrap_or(1); let stderr = String::from_utf8_lossy(&output.stderr).to_string(); let stdout = String::from_utf8_lossy(&output.stdout).to_string(); - let combined = if stderr.is_empty() { stdout } else { stderr }; + // Keep both streams so a failure is never hidden: when stderr carries + // warnings, the real failure details (e.g. the failing test name and + // assertion diff) usually live on stdout and must not be dropped. + let combined = match (stdout.trim().is_empty(), stderr.trim().is_empty()) { + (false, false) => format!("{stdout}\n{stderr}"), + (false, true) => stdout, + (true, false) => stderr, + (true, true) => stdout, + }; if exit_code == 0 { Ok(combined) -- cgit