Improve error handling in TestServeSession for Rojo process

- Enhanced the error handling logic when the Rojo process exits unexpectedly by capturing and displaying stderr output. This provides better context for debugging failures during test execution.
- Updated the process spawning to pipe stderr, allowing for more informative panic messages when the process fails.
This commit is contained in:
Joe 2026-02-05 16:13:09 -06:00
parent df06fd0852
commit b1aa2a384f

View file

@ -1,8 +1,9 @@
use std::{ use std::{
fmt::Write as _, fmt::Write as _,
fs, fs,
io::Read as _,
path::{Path, PathBuf}, path::{Path, PathBuf},
process::Command, process::{Command, Stdio},
sync::atomic::{AtomicUsize, Ordering}, sync::atomic::{AtomicUsize, Ordering},
thread, thread,
time::Duration, time::Duration,
@ -108,6 +109,7 @@ impl TestServeSession {
port_string.as_str(), port_string.as_str(),
]) ])
.current_dir(working_dir) .current_dir(working_dir)
.stderr(Stdio::piped())
.spawn() .spawn()
.expect("Couldn't start Rojo"); .expect("Couldn't start Rojo");
@ -132,7 +134,16 @@ impl TestServeSession {
for i in 1..=MAX_TRIES { for i in 1..=MAX_TRIES {
match self.rojo_process.0.try_wait() { match self.rojo_process.0.try_wait() {
Ok(Some(status)) => panic!("Rojo process exited with status {}", status), Ok(Some(status)) => {
let mut stderr_output = String::new();
if let Some(mut stderr) = self.rojo_process.0.stderr.take() {
let _ = stderr.read_to_string(&mut stderr_output);
}
panic!(
"Rojo process exited with status {}\nstderr:\n{}",
status, stderr_output
);
}
Ok(None) => { /* The process is still running, as expected */ } Ok(None) => { /* The process is still running, as expected */ }
Err(err) => panic!("Failed to wait on Rojo process: {}", err), Err(err) => panic!("Failed to wait on Rojo process: {}", err),
} }