diff --git a/tests/by-util/test_seq.rs b/tests/by-util/test_seq.rs index 1fae070f4..25b400864 100644 --- a/tests/by-util/test_seq.rs +++ b/tests/by-util/test_seq.rs @@ -4,7 +4,6 @@ // file that was distributed with this source code. // spell-checker:ignore lmnop xlmnop use crate::common::util::TestScenario; -use std::process::Stdio; #[test] fn test_invalid_arg() { @@ -566,51 +565,52 @@ fn test_width_floats() { .stdout_only("09.0\n10.0\n"); } -// TODO This is duplicated from `test_yes.rs`; refactor them. -/// Run `seq`, capture some of the output, close the pipe, and verify it. -fn run(args: &[&str], expected: &[u8]) { - let mut cmd = new_ucmd!(); - let mut child = cmd.args(args).set_stdout(Stdio::piped()).run_no_wait(); - let buf = child.stdout_exact_bytes(expected.len()); - child.close_stdout(); - child.wait().unwrap().success(); - assert_eq!(buf.as_slice(), expected); -} - #[test] fn test_neg_inf() { - run(&["--", "-inf", "0"], b"-inf\n-inf\n-inf\n"); + new_ucmd!() + .args(&["--", "-inf", "0"]) + .run_stdout_starts_with(b"-inf\n-inf\n-inf\n") + .success(); } #[test] fn test_neg_infinity() { - run(&["--", "-infinity", "0"], b"-inf\n-inf\n-inf\n"); + new_ucmd!() + .args(&["--", "-infinity", "0"]) + .run_stdout_starts_with(b"-inf\n-inf\n-inf\n") + .success(); } #[test] fn test_inf() { - run(&["inf"], b"1\n2\n3\n"); + new_ucmd!() + .args(&["inf"]) + .run_stdout_starts_with(b"1\n2\n3\n") + .success(); } #[test] fn test_infinity() { - run(&["infinity"], b"1\n2\n3\n"); + new_ucmd!() + .args(&["infinity"]) + .run_stdout_starts_with(b"1\n2\n3\n") + .success(); } #[test] fn test_inf_width() { - run( - &["-w", "1.000", "inf", "inf"], - b"1.000\n inf\n inf\n inf\n", - ); + new_ucmd!() + .args(&["-w", "1.000", "inf", "inf"]) + .run_stdout_starts_with(b"1.000\n inf\n inf\n inf\n") + .success(); } #[test] fn test_neg_inf_width() { - run( - &["-w", "1.000", "-inf", "-inf"], - b"1.000\n -inf\n -inf\n -inf\n", - ); + new_ucmd!() + .args(&["-w", "1.000", "-inf", "-inf"]) + .run_stdout_starts_with(b"1.000\n -inf\n -inf\n -inf\n") + .success(); } #[test] diff --git a/tests/by-util/test_yes.rs b/tests/by-util/test_yes.rs index 26a7b14ac..9f5f84ed8 100644 --- a/tests/by-util/test_yes.rs +++ b/tests/by-util/test_yes.rs @@ -3,7 +3,7 @@ // For the full copyright and license information, please view the LICENSE // file that was distributed with this source code. use std::ffi::OsStr; -use std::process::{ExitStatus, Stdio}; +use std::process::ExitStatus; #[cfg(unix)] use std::os::unix::process::ExitStatusExt; @@ -22,15 +22,10 @@ fn check_termination(result: ExitStatus) { const NO_ARGS: &[&str] = &[]; -/// Run `yes`, capture some of the output, close the pipe, and verify it. +/// Run `yes`, capture some of the output, then check exit status. fn run(args: &[impl AsRef], expected: &[u8]) { - let mut cmd = new_ucmd!(); - let mut child = cmd.args(args).set_stdout(Stdio::piped()).run_no_wait(); - let buf = child.stdout_exact_bytes(expected.len()); - child.close_stdout(); - - check_termination(child.wait().unwrap().exit_status()); - assert_eq!(buf.as_slice(), expected); + let result = new_ucmd!().args(args).run_stdout_starts_with(expected); + check_termination(result.exit_status()); } #[test] diff --git a/tests/common/util.rs b/tests/common/util.rs index d6352b993..ec332c046 100644 --- a/tests/common/util.rs +++ b/tests/common/util.rs @@ -1846,6 +1846,18 @@ impl UCommand { let tmpdir_path = self.tmpd.as_ref().unwrap().path(); format!("{}/{file_rel_path}", tmpdir_path.to_str().unwrap()) } + + /// Runs the command, checks that the stdout starts with "expected", + /// then terminates the command. + #[track_caller] + pub fn run_stdout_starts_with(&mut self, expected: &[u8]) -> CmdResult { + let mut child = self.set_stdout(Stdio::piped()).run_no_wait(); + let buf = child.stdout_exact_bytes(expected.len()); + child.close_stdout(); + + assert_eq!(buf.as_slice(), expected); + child.wait().unwrap() + } } impl std::fmt::Display for UCommand {