Improve integration testing

This commit is contained in:
mo8it 2026-02-26 18:01:17 +01:00
parent 75c06bb7f4
commit 064f057b10

View File

@ -5,7 +5,7 @@ use std::{
}; };
enum Output<'a> { enum Output<'a> {
FullStdout(&'a str), FullStdout(&'a [u8]),
PartialStdout(&'a str), PartialStdout(&'a str),
PartialStderr(&'a str), PartialStderr(&'a str),
} }
@ -61,32 +61,27 @@ impl<'a> Cmd<'a> {
cmd.args(self.args).stdin(Stdio::null()); cmd.args(self.args).stdin(Stdio::null());
let output = match self.output { let output = cmd.output().unwrap();
None => cmd.output().unwrap(), match self.output {
None => (),
Some(FullStdout(stdout)) => { Some(FullStdout(stdout)) => {
let output = cmd.stderr(Stdio::null()).output().unwrap(); assert_eq!(output.stdout, stdout);
assert_eq!(from_utf8(&output.stdout).unwrap(), stdout);
output
} }
Some(PartialStdout(stdout)) => { Some(PartialStdout(stdout)) => {
let output = cmd.stderr(Stdio::null()).output().unwrap();
assert!(from_utf8(&output.stdout).unwrap().contains(stdout)); assert!(from_utf8(&output.stdout).unwrap().contains(stdout));
output
} }
Some(PartialStderr(stderr)) => { Some(PartialStderr(stderr)) => {
let output = cmd.stdout(Stdio::null()).output().unwrap();
assert!(from_utf8(&output.stderr).unwrap().contains(stderr)); assert!(from_utf8(&output.stderr).unwrap().contains(stderr));
output
} }
}; };
assert_eq!( if output.status.success() != success {
output.status.success(), panic!(
success, "{cmd:?}\n\nstdout:\n{}\n\nstderr:\n{}",
"{cmd:?}\n\nstdout:\n{}\nstderr:\n{}", from_utf8(&output.stdout).unwrap(),
from_utf8(&output.stdout).unwrap(), from_utf8(&output.stderr).unwrap(),
from_utf8(&output.stderr).unwrap(), );
); }
} }
#[inline] #[inline]
@ -153,7 +148,7 @@ fn hint() {
Cmd::default() Cmd::default()
.current_dir("tests/test_exercises") .current_dir("tests/test_exercises")
.args(&["hint", "test_failure"]) .args(&["hint", "test_failure"])
.output(FullStdout("The answer to everything: 42\n")) .output(FullStdout(b"The answer to everything: 42\n"))
.success(); .success();
} }