From 8551c55ab3799d3f7a5d5be0dbe2fe0468c214d7 Mon Sep 17 00:00:00 2001 From: Sylvestre Ledru Date: Sat, 16 Mar 2024 22:18:40 +0100 Subject: [PATCH 1/2] csplit: adjust the error message to match GNU's Should fix tests/csplit/csplit --- src/uu/csplit/src/csplit_error.rs | 2 +- tests/by-util/test_csplit.rs | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/uu/csplit/src/csplit_error.rs b/src/uu/csplit/src/csplit_error.rs index 1559a29f8..4a83b637b 100644 --- a/src/uu/csplit/src/csplit_error.rs +++ b/src/uu/csplit/src/csplit_error.rs @@ -21,7 +21,7 @@ pub enum CsplitError { MatchNotFound(String), #[error("{}: match not found on repetition {}", ._0.quote(), _1)] MatchNotFoundOnRepetition(String, usize), - #[error("line number must be greater than zero")] + #[error("0: line number must be greater than zero")] LineNumberIsZero, #[error("line number '{}' is smaller than preceding line number, {}", _0, _1)] LineNumberSmallerThanPrevious(usize, usize), diff --git a/tests/by-util/test_csplit.rs b/tests/by-util/test_csplit.rs index fb4f4cc2a..a47a2551c 100644 --- a/tests/by-util/test_csplit.rs +++ b/tests/by-util/test_csplit.rs @@ -1359,3 +1359,11 @@ fn precision_format() { assert_eq!(at.read("xx 0x001"), generate(10, 51)); } } + +#[test] +fn zero_error() { + let (_, mut ucmd) = at_and_ucmd!(); + ucmd.args(&["in", "0"]) + .fails() + .stderr_contains("0: line number must be greater"); +} From b49fbd9a2134471a6044cb05b9fa477045fd09c2 Mon Sep 17 00:00:00 2001 From: Sylvestre Ledru Date: Sun, 17 Mar 2024 19:08:25 +0100 Subject: [PATCH 2/2] csplit: run the file check before the arguments verifications --- src/uu/csplit/src/csplit.rs | 4 ++-- tests/by-util/test_csplit.rs | 11 ++++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/uu/csplit/src/csplit.rs b/src/uu/csplit/src/csplit.rs index 00bebbf4d..37ec59866 100644 --- a/src/uu/csplit/src/csplit.rs +++ b/src/uu/csplit/src/csplit.rs @@ -89,7 +89,7 @@ impl CsplitOptions { /// more than once. pub fn csplit( options: &CsplitOptions, - patterns: Vec, + patterns: Vec, input: T, ) -> Result<(), CsplitError> where @@ -97,6 +97,7 @@ where { let mut input_iter = InputSplitter::new(input.lines().enumerate()); let mut split_writer = SplitWriter::new(options); + let patterns: Vec = patterns::get_patterns(&patterns[..])?; let ret = do_csplit(&mut split_writer, patterns, &mut input_iter); // consume the rest @@ -563,7 +564,6 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { .unwrap() .map(|s| s.to_string()) .collect(); - let patterns = patterns::get_patterns(&patterns[..])?; let options = CsplitOptions::new(&matches); if file_name == "-" { let stdin = io::stdin(); diff --git a/tests/by-util/test_csplit.rs b/tests/by-util/test_csplit.rs index a47a2551c..b52c44b0e 100644 --- a/tests/by-util/test_csplit.rs +++ b/tests/by-util/test_csplit.rs @@ -1362,8 +1362,17 @@ fn precision_format() { #[test] fn zero_error() { - let (_, mut ucmd) = at_and_ucmd!(); + let (at, mut ucmd) = at_and_ucmd!(); + at.touch("in"); ucmd.args(&["in", "0"]) .fails() .stderr_contains("0: line number must be greater"); } + +#[test] +fn no_such_file() { + let (_, mut ucmd) = at_and_ucmd!(); + ucmd.args(&["in", "0"]) + .fails() + .stderr_contains("cannot access 'in': No such file or directory"); +}