From 63e6b333576e029fff8819fc46704e69a6a7de3a Mon Sep 17 00:00:00 2001 From: hanbings Date: Fri, 19 Jul 2024 13:23:26 -0400 Subject: [PATCH 01/19] Support -fprint feature. --- src/find/matchers/mod.rs | 27 ++++++++++++++++++--- src/find/matchers/printer.rs | 47 ++++++++++++++++++++++++++---------- 2 files changed, 58 insertions(+), 16 deletions(-) diff --git a/src/find/matchers/mod.rs b/src/find/matchers/mod.rs index 92dcc01e..d23c691e 100644 --- a/src/find/matchers/mod.rs +++ b/src/find/matchers/mod.rs @@ -32,6 +32,7 @@ mod user; use ::regex::Regex; use chrono::{DateTime, Datelike, NaiveDateTime, Utc}; use fs::FileSystemMatcher; +use std::fs::File; use std::path::Path; use std::time::SystemTime; use std::{error::Error, str::FromStr}; @@ -202,7 +203,7 @@ pub fn build_top_level_matcher( if !top_level_matcher.has_side_effects() { let mut new_and_matcher = AndMatcherBuilder::new(); new_and_matcher.new_and_condition(top_level_matcher); - new_and_matcher.new_and_condition(Printer::new(PrintDelimiter::Newline)); + new_and_matcher.new_and_condition(Printer::new(PrintDelimiter::Newline, None)); return Ok(new_and_matcher.build()); } Ok(top_level_matcher) @@ -361,8 +362,8 @@ fn build_matcher_tree( let mut invert_next_matcher = false; while i < args.len() { let possible_submatcher = match args[i] { - "-print" => Some(Printer::new(PrintDelimiter::Newline).into_box()), - "-print0" => Some(Printer::new(PrintDelimiter::Null).into_box()), + "-print" => Some(Printer::new(PrintDelimiter::Newline, None).into_box()), + "-print0" => Some(Printer::new(PrintDelimiter::Null, None).into_box()), "-printf" => { if i >= args.len() - 1 { return Err(From::from(format!("missing argument to {}", args[i]))); @@ -370,6 +371,26 @@ fn build_matcher_tree( i += 1; Some(Printf::new(args[i])?.into_box()) } + "-fprint" => { + if i >= args.len() - 1 { + return Err(From::from(format!("missing argument to {}", args[i]))); + } + i += 1; + + // If the file does not exist, it is created. + let file = match File::open(args[i]) { + Ok(file) => file, + Err(err) => { + if err.kind() == std::io::ErrorKind::NotFound { + File::create(args[i])? + } else { + return Err(From::from(err)); + } + } + }; + + Some(Printer::new(PrintDelimiter::Newline, Some(file)).into_box()) + } "-true" => Some(TrueMatcher.into_box()), "-false" => Some(FalseMatcher.into_box()), "-lname" | "-ilname" => { diff --git a/src/find/matchers/printer.rs b/src/find/matchers/printer.rs index 039741c7..e73a191a 100644 --- a/src/find/matchers/printer.rs +++ b/src/find/matchers/printer.rs @@ -4,6 +4,8 @@ // license that can be found in the LICENSE file or at // https://opensource.org/licenses/MIT. +use std::{fs::File, io::Write}; + use walkdir::DirEntry; use super::{Matcher, MatcherIO}; @@ -25,25 +27,44 @@ impl std::fmt::Display for PrintDelimiter { /// This matcher just prints the name of the file to stdout. pub struct Printer { delimiter: PrintDelimiter, + output_file: Option, } impl Printer { - pub fn new(delimiter: PrintDelimiter) -> Self { - Self { delimiter } + pub fn new(delimiter: PrintDelimiter, output_file: Option) -> Self { + Self { + delimiter, + output_file, + } } } impl Matcher for Printer { fn matches(&self, file_info: &DirEntry, matcher_io: &mut MatcherIO) -> bool { - let mut out = matcher_io.deps.get_output().borrow_mut(); - write!( - out, - "{}{}", - file_info.path().to_string_lossy(), - self.delimiter - ) - .unwrap(); - out.flush().unwrap(); + match &self.output_file { + Some(output_file) => { + let mut out = output_file; + write!( + out, + "{}{}", + file_info.path().to_string_lossy(), + self.delimiter + ) + .unwrap(); + out.flush().unwrap(); + } + None => { + let mut out = matcher_io.deps.get_output().borrow_mut(); + write!( + out, + "{}{}", + file_info.path().to_string_lossy(), + self.delimiter + ) + .unwrap(); + out.flush().unwrap(); + } + } true } @@ -64,7 +85,7 @@ mod tests { fn prints_newline() { let abbbc = get_dir_entry_for("./test_data/simple", "abbbc"); - let matcher = Printer::new(PrintDelimiter::Newline); + let matcher = Printer::new(PrintDelimiter::Newline, None); let deps = FakeDependencies::new(); assert!(matcher.matches(&abbbc, &mut deps.new_matcher_io())); assert_eq!( @@ -77,7 +98,7 @@ mod tests { fn prints_null() { let abbbc = get_dir_entry_for("./test_data/simple", "abbbc"); - let matcher = Printer::new(PrintDelimiter::Null); + let matcher = Printer::new(PrintDelimiter::Null, None); let deps = FakeDependencies::new(); assert!(matcher.matches(&abbbc, &mut deps.new_matcher_io())); assert_eq!( From 236b9cd16c7adf61c0ed715638ed4891bfca0d98 Mon Sep 17 00:00:00 2001 From: hanbings Date: Fri, 19 Jul 2024 14:05:21 -0400 Subject: [PATCH 02/19] Extract create file function. --- src/find/matchers/mod.rs | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/src/find/matchers/mod.rs b/src/find/matchers/mod.rs index d23c691e..5851c78d 100644 --- a/src/find/matchers/mod.rs +++ b/src/find/matchers/mod.rs @@ -340,6 +340,23 @@ fn parse_str_to_newer_args(input: &str) -> Option<(String, String)> { } } +/// Creates a file if it doesn't exist. +/// If it does exist, it will be overwritten. +fn get_or_create_file(path: &str) -> Result> { + let file = match File::open(path) { + Ok(file) => file, + Err(err) => { + if err.kind() == std::io::ErrorKind::NotFound { + File::create(path)? + } else { + return Err(From::from(err)); + } + } + }; + + Ok(file) +} + /// The main "translate command-line args into a matcher" function. Will call /// itself recursively if it encounters an opening bracket. A successful return /// consists of a tuple containing the new index into the args array to use (if @@ -377,18 +394,7 @@ fn build_matcher_tree( } i += 1; - // If the file does not exist, it is created. - let file = match File::open(args[i]) { - Ok(file) => file, - Err(err) => { - if err.kind() == std::io::ErrorKind::NotFound { - File::create(args[i])? - } else { - return Err(From::from(err)); - } - } - }; - + let file = get_or_create_file(args[i])?; Some(Printer::new(PrintDelimiter::Newline, Some(file)).into_box()) } "-true" => Some(TrueMatcher.into_box()), From c3ec47721f3aaaf0e69a31872e40dcbdf95ce4de Mon Sep 17 00:00:00 2001 From: hanbings Date: Sat, 20 Jul 2024 08:42:51 -0400 Subject: [PATCH 03/19] Add tests. --- src/find/matchers/mod.rs | 19 +++++++++++++++++++ src/find/mod.rs | 17 +++++++++++++++++ tests/find_cmd_tests.rs | 26 ++++++++++++++++++++++++-- 3 files changed, 60 insertions(+), 2 deletions(-) diff --git a/src/find/matchers/mod.rs b/src/find/matchers/mod.rs index 5851c78d..f367ede4 100644 --- a/src/find/matchers/mod.rs +++ b/src/find/matchers/mod.rs @@ -1538,4 +1538,23 @@ mod tests { .expect("-version should stop parsing"); assert!(config.version_requested); } + + #[test] + fn get_or_create_file_test() { + use std::fs; + + // remove file if hard link file exist. + // But you can't delete a file that doesn't exist, + // so ignore the error returned here. + let _ = fs::remove_file("test_data/get_or_create_file_test"); + + // test create file + let file = get_or_create_file("test_data/get_or_create_file_test"); + assert!(file.is_ok()); + + let file = get_or_create_file("test_data/get_or_create_file_test"); + assert!(file.is_ok()); + + let _ = fs::remove_file("test_data/get_or_create_file_test"); + } } diff --git a/src/find/mod.rs b/src/find/mod.rs index 3d012199..4cdfb4c2 100644 --- a/src/find/mod.rs +++ b/src/find/mod.rs @@ -1262,4 +1262,21 @@ mod tests { fix_up_slashes("./test_data/depth\n") ); } + + #[test] + fn find_fprint() { + let deps = FakeDependencies::new(); + let rc = find_main( + &[ + "find", + "./test_data/simple", + "-fprint", + "test_data/find_fprint", + ], + &deps, + ); + assert_eq!(rc, 0); + + let _ = fs::remove_file("test_data/find_fprint"); + } } diff --git a/tests/find_cmd_tests.rs b/tests/find_cmd_tests.rs index 8fc04218..91314ac5 100644 --- a/tests/find_cmd_tests.rs +++ b/tests/find_cmd_tests.rs @@ -11,8 +11,8 @@ use assert_cmd::Command; use predicates::prelude::*; use serial_test::serial; -use std::fs::File; -use std::io::Write; +use std::fs::{self, File}; +use std::io::{Read, Write}; use std::{env, io::ErrorKind}; use tempfile::Builder; @@ -921,3 +921,25 @@ fn find_noleaf() { .stdout(predicate::str::contains("test_data/simple/subdir")) .stderr(predicate::str::is_empty()); } + +#[test] +#[serial(working_dir)] +fn find_nogroup() { + let _ = fs::remove_file("test_data/find_fprint"); + + Command::cargo_bin("find") + .expect("found binary") + .args(["test_data/simple", "-fprint", "test_data/find_fprint"]) + .assert() + .success() + .stdout(predicate::str::is_empty()) + .stderr(predicate::str::is_empty()); + + // read test_data/find_fprint + let mut f = File::open("test_data/find_fprint").unwrap(); + let mut contents = String::new(); + f.read_to_string(&mut contents).unwrap(); + assert_eq!(contents, fix_up_slashes("test_data/simple\ntest_data/simple/subdir\ntest_data/simple/subdir/ABBBC\ntest_data/simple/abbbc\n")); + + let _ = fs::remove_file("test_data/find_fprint"); +} From e40ae107c1767e546933a518170430ceebf2c557 Mon Sep 17 00:00:00 2001 From: hanbings Date: Sat, 20 Jul 2024 08:47:34 -0400 Subject: [PATCH 04/19] Fix tests. --- tests/find_cmd_tests.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/find_cmd_tests.rs b/tests/find_cmd_tests.rs index 91314ac5..5a7d472f 100644 --- a/tests/find_cmd_tests.rs +++ b/tests/find_cmd_tests.rs @@ -939,7 +939,7 @@ fn find_nogroup() { let mut f = File::open("test_data/find_fprint").unwrap(); let mut contents = String::new(); f.read_to_string(&mut contents).unwrap(); - assert_eq!(contents, fix_up_slashes("test_data/simple\ntest_data/simple/subdir\ntest_data/simple/subdir/ABBBC\ntest_data/simple/abbbc\n")); + assert!(contents.contains("test_data/simple")); let _ = fs::remove_file("test_data/find_fprint"); } From 93035082ce4bb0213b9a17042c7115adac5dddd0 Mon Sep 17 00:00:00 2001 From: hanbings Date: Sun, 21 Jul 2024 10:19:17 -0400 Subject: [PATCH 05/19] Run cargo fmt. --- tests/find_cmd_tests.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/find_cmd_tests.rs b/tests/find_cmd_tests.rs index 1a359a43..392e560f 100644 --- a/tests/find_cmd_tests.rs +++ b/tests/find_cmd_tests.rs @@ -967,4 +967,4 @@ fn find_nogroup() { assert!(contents.contains("test_data/simple")); let _ = fs::remove_file("test_data/find_fprint"); -} \ No newline at end of file +} From 823949cceb729b4b3bdb15ad13d290846d9256aa Mon Sep 17 00:00:00 2001 From: hanbings Date: Tue, 23 Jul 2024 08:00:39 -0400 Subject: [PATCH 06/19] Add tests. --- src/find/matchers/mod.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/find/matchers/mod.rs b/src/find/matchers/mod.rs index c70e6d48..4ffe0bc2 100644 --- a/src/find/matchers/mod.rs +++ b/src/find/matchers/mod.rs @@ -1562,6 +1562,13 @@ mod tests { let file = get_or_create_file("test_data/get_or_create_file_test"); assert!(file.is_ok()); + // test error when file no permission + #[cfg(unix)] + { + let result = get_or_create_file("/etc/shadow"); + assert!(result.is_err()); + } + let _ = fs::remove_file("test_data/get_or_create_file_test"); } } From b255b4e6e01e9f100789443fab12e5eb9163df1a Mon Sep 17 00:00:00 2001 From: hanbings Date: Thu, 25 Jul 2024 14:56:08 -0400 Subject: [PATCH 07/19] Fix code regarding file creation. --- src/find/matchers/mod.rs | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/find/matchers/mod.rs b/src/find/matchers/mod.rs index 4ffe0bc2..a4884558 100644 --- a/src/find/matchers/mod.rs +++ b/src/find/matchers/mod.rs @@ -343,14 +343,10 @@ fn parse_str_to_newer_args(input: &str) -> Option<(String, String)> { /// Creates a file if it doesn't exist. /// If it does exist, it will be overwritten. fn get_or_create_file(path: &str) -> Result> { - let file = match File::open(path) { + let file = match File::create(path) { Ok(file) => file, Err(err) => { - if err.kind() == std::io::ErrorKind::NotFound { - File::create(path)? - } else { - return Err(From::from(err)); - } + return Err(From::from(err)); } }; From 3e1b18008aef7bbfe3164730ba00e29adac30081 Mon Sep 17 00:00:00 2001 From: hanbings Date: Thu, 25 Jul 2024 15:08:36 -0400 Subject: [PATCH 08/19] Run cargo clippy. --- src/find/matchers/exec.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/find/matchers/exec.rs b/src/find/matchers/exec.rs index 9f14fe48..487cd332 100644 --- a/src/find/matchers/exec.rs +++ b/src/find/matchers/exec.rs @@ -67,7 +67,7 @@ impl Matcher for SingleExecMatcher { for arg in &self.args { match *arg { Arg::LiteralArg(ref a) => command.arg(a.as_os_str()), - Arg::FileArg(ref parts) => command.arg(&parts.join(path_to_file.as_os_str())), + Arg::FileArg(ref parts) => command.arg(parts.join(path_to_file.as_os_str())), }; } if self.exec_in_parent_dir { From d02b2c491f87f00610c62b662c2b13a2ac83b319 Mon Sep 17 00:00:00 2001 From: hanbings Date: Thu, 25 Jul 2024 16:11:24 -0400 Subject: [PATCH 09/19] Removed redundant error handling code. --- src/find/matchers/mod.rs | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/find/matchers/mod.rs b/src/find/matchers/mod.rs index a4884558..99bcc509 100644 --- a/src/find/matchers/mod.rs +++ b/src/find/matchers/mod.rs @@ -343,13 +343,7 @@ fn parse_str_to_newer_args(input: &str) -> Option<(String, String)> { /// Creates a file if it doesn't exist. /// If it does exist, it will be overwritten. fn get_or_create_file(path: &str) -> Result> { - let file = match File::create(path) { - Ok(file) => file, - Err(err) => { - return Err(From::from(err)); - } - }; - + let file = File::create(path)?; Ok(file) } From ff45c0681d33bec464c3449485dc443e18b436e6 Mon Sep 17 00:00:00 2001 From: hanbings Date: Mon, 29 Jul 2024 13:28:23 +0800 Subject: [PATCH 10/19] Typo test name. --- tests/find_cmd_tests.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/find_cmd_tests.rs b/tests/find_cmd_tests.rs index 392e560f..364d484f 100644 --- a/tests/find_cmd_tests.rs +++ b/tests/find_cmd_tests.rs @@ -949,7 +949,7 @@ fn find_daystart() { #[test] #[serial(working_dir)] -fn find_nogroup() { +fn find_fprint() { let _ = fs::remove_file("test_data/find_fprint"); Command::cargo_bin("find") From 423291f2b615706b78a12e0f3e008fc20d951387 Mon Sep 17 00:00:00 2001 From: hanbings Date: Mon, 29 Jul 2024 13:45:34 +0800 Subject: [PATCH 11/19] Cleaned up duplicate code when selecting print output. --- src/find/matchers/printer.rs | 38 ++++++++++++++---------------------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/src/find/matchers/printer.rs b/src/find/matchers/printer.rs index e73a191a..d0097787 100644 --- a/src/find/matchers/printer.rs +++ b/src/find/matchers/printer.rs @@ -37,33 +37,25 @@ impl Printer { output_file, } } + + fn print(&self, file_info: &DirEntry, mut out: impl Write) { + write!( + out, + "{}{}", + file_info.path().to_string_lossy(), + self.delimiter + ) + .unwrap(); + out.flush().unwrap(); + } } impl Matcher for Printer { fn matches(&self, file_info: &DirEntry, matcher_io: &mut MatcherIO) -> bool { - match &self.output_file { - Some(output_file) => { - let mut out = output_file; - write!( - out, - "{}{}", - file_info.path().to_string_lossy(), - self.delimiter - ) - .unwrap(); - out.flush().unwrap(); - } - None => { - let mut out = matcher_io.deps.get_output().borrow_mut(); - write!( - out, - "{}{}", - file_info.path().to_string_lossy(), - self.delimiter - ) - .unwrap(); - out.flush().unwrap(); - } + if let Some(file) = &self.output_file { + self.print(file_info, file); + } else { + self.print(file_info, &mut *matcher_io.deps.get_output().borrow_mut()); } true } From bc6b06ffea97c043c818c2e2431fd4d66e8a6d7e Mon Sep 17 00:00:00 2001 From: hanbings Date: Mon, 29 Jul 2024 13:46:51 +0800 Subject: [PATCH 12/19] Removed force flush in printer.rs. --- src/find/matchers/printer.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/find/matchers/printer.rs b/src/find/matchers/printer.rs index d0097787..b9f10c4e 100644 --- a/src/find/matchers/printer.rs +++ b/src/find/matchers/printer.rs @@ -46,7 +46,6 @@ impl Printer { self.delimiter ) .unwrap(); - out.flush().unwrap(); } } From 315b42f33ccc38fe9f4b3b06559dca3d6db93fd8 Mon Sep 17 00:00:00 2001 From: hanbings Date: Thu, 1 Aug 2024 17:33:26 +0800 Subject: [PATCH 13/19] Handle errors when writing file in printer.rs. --- src/find/matchers/printer.rs | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/find/matchers/printer.rs b/src/find/matchers/printer.rs index b9f10c4e..fdb42be2 100644 --- a/src/find/matchers/printer.rs +++ b/src/find/matchers/printer.rs @@ -4,7 +4,10 @@ // license that can be found in the LICENSE file or at // https://opensource.org/licenses/MIT. -use std::{fs::File, io::Write}; +use std::{ + fs::File, + io::{stderr, Write}, +}; use walkdir::DirEntry; @@ -39,13 +42,23 @@ impl Printer { } fn print(&self, file_info: &DirEntry, mut out: impl Write) { - write!( + match write!( out, "{}{}", file_info.path().to_string_lossy(), self.delimiter - ) - .unwrap(); + ) { + Ok(_) => {}, + Err(e) => { + writeln!( + &mut stderr(), + "Error writing {:?} for {}", + file_info.path().to_string_lossy(), + e + ) + .unwrap(); + } + } } } From 695e220556b71447bfbb3ea01461414ff19605c0 Mon Sep 17 00:00:00 2001 From: hanbings Date: Thu, 1 Aug 2024 17:36:46 +0800 Subject: [PATCH 14/19] Run cargo fmt. --- src/find/matchers/printer.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/find/matchers/printer.rs b/src/find/matchers/printer.rs index fdb42be2..3efbf6a3 100644 --- a/src/find/matchers/printer.rs +++ b/src/find/matchers/printer.rs @@ -48,7 +48,7 @@ impl Printer { file_info.path().to_string_lossy(), self.delimiter ) { - Ok(_) => {}, + Ok(_) => {} Err(e) => { writeln!( &mut stderr(), From 10c3dd5422d08f0e4ffa524aedf4c85158f6dacb Mon Sep 17 00:00:00 2001 From: hanbings Date: Thu, 1 Aug 2024 18:16:03 +0800 Subject: [PATCH 15/19] Added print_error_message flag in printer.rs. --- src/find/matchers/printer.rs | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/find/matchers/printer.rs b/src/find/matchers/printer.rs index 3efbf6a3..78aa24e8 100644 --- a/src/find/matchers/printer.rs +++ b/src/find/matchers/printer.rs @@ -41,7 +41,7 @@ impl Printer { } } - fn print(&self, file_info: &DirEntry, mut out: impl Write) { + fn print(&self, file_info: &DirEntry, mut out: impl Write, print_error_message: bool) { match write!( out, "{}{}", @@ -50,13 +50,15 @@ impl Printer { ) { Ok(_) => {} Err(e) => { - writeln!( - &mut stderr(), - "Error writing {:?} for {}", - file_info.path().to_string_lossy(), - e - ) - .unwrap(); + if print_error_message { + writeln!( + &mut stderr(), + "Error writing {:?} for {}", + file_info.path().to_string_lossy(), + e + ) + .unwrap(); + } } } } @@ -65,9 +67,13 @@ impl Printer { impl Matcher for Printer { fn matches(&self, file_info: &DirEntry, matcher_io: &mut MatcherIO) -> bool { if let Some(file) = &self.output_file { - self.print(file_info, file); + self.print(file_info, file, true); } else { - self.print(file_info, &mut *matcher_io.deps.get_output().borrow_mut()); + self.print( + file_info, + &mut *matcher_io.deps.get_output().borrow_mut(), + false, + ); } true } From 65d23fb9e3de00e0b3fa0d5900f29d478fb9974b Mon Sep 17 00:00:00 2001 From: hanbings Date: Mon, 5 Aug 2024 12:15:24 -0400 Subject: [PATCH 16/19] Improve test pass rate in printer.rs. --- src/find/matchers/printer.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/find/matchers/printer.rs b/src/find/matchers/printer.rs index 78aa24e8..b1099af8 100644 --- a/src/find/matchers/printer.rs +++ b/src/find/matchers/printer.rs @@ -58,9 +58,11 @@ impl Printer { e ) .unwrap(); + uucore::error::set_exit_code(1); } } } + out.flush().unwrap(); } } From 267db8ac1f83ea557b1b6b22f437d213ff967531 Mon Sep 17 00:00:00 2001 From: hanbings Date: Mon, 5 Aug 2024 12:46:13 -0400 Subject: [PATCH 17/19] Improve tests. --- src/find/matchers/printer.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/find/matchers/printer.rs b/src/find/matchers/printer.rs index b1099af8..f33bea01 100644 --- a/src/find/matchers/printer.rs +++ b/src/find/matchers/printer.rs @@ -118,4 +118,15 @@ mod tests { deps.get_output_as_string() ); } + + #[test] + fn prints_error_message() { + let dev_full = File::open("/dev/full").unwrap(); + let abbbc = get_dir_entry_for("./test_data/simple", "abbbc"); + + let matcher = Printer::new(PrintDelimiter::Newline, Some(dev_full)); + let deps = FakeDependencies::new(); + assert!(matcher.matches(&abbbc, &mut deps.new_matcher_io())); + assert!(deps.get_output_as_string().is_empty()); + } } From da394ad7fc2ec13d84c992be0e0e2d9bc4521bc5 Mon Sep 17 00:00:00 2001 From: hanbings Date: Mon, 5 Aug 2024 12:52:49 -0400 Subject: [PATCH 18/19] Improve tests. --- src/find/matchers/printer.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/find/matchers/printer.rs b/src/find/matchers/printer.rs index f33bea01..ad846388 100644 --- a/src/find/matchers/printer.rs +++ b/src/find/matchers/printer.rs @@ -126,7 +126,13 @@ mod tests { let matcher = Printer::new(PrintDelimiter::Newline, Some(dev_full)); let deps = FakeDependencies::new(); + assert!(matcher.matches(&abbbc, &mut deps.new_matcher_io())); + + // Reset the exit code global variable in case we run another test after this one + // See https://github.com/uutils/coreutils/issues/5777 + uucore::error::set_exit_code(0); + assert!(deps.get_output_as_string().is_empty()); } } From b38a96353764f44362cfa52cb1769c64543f97d3 Mon Sep 17 00:00:00 2001 From: hanbings Date: Mon, 5 Aug 2024 13:03:08 -0400 Subject: [PATCH 19/19] Improve tests. --- src/find/matchers/printer.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/find/matchers/printer.rs b/src/find/matchers/printer.rs index ad846388..6e01a84f 100644 --- a/src/find/matchers/printer.rs +++ b/src/find/matchers/printer.rs @@ -120,6 +120,7 @@ mod tests { } #[test] + #[cfg(target_os = "linux")] fn prints_error_message() { let dev_full = File::open("/dev/full").unwrap(); let abbbc = get_dir_entry_for("./test_data/simple", "abbbc");