From c60b06068254c5033ee42099e36157d97c1250d8 Mon Sep 17 00:00:00 2001 From: hanbings Date: Fri, 19 Apr 2024 16:25:40 +0800 Subject: [PATCH 01/12] Implement -amin -cmin -mmin args. --- src/find/matchers/mod.rs | 18 +++++++++++++-- src/find/matchers/time.rs | 48 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 2 deletions(-) diff --git a/src/find/matchers/mod.rs b/src/find/matchers/mod.rs index 78c7af42..c76e9c4b 100644 --- a/src/find/matchers/mod.rs +++ b/src/find/matchers/mod.rs @@ -50,8 +50,8 @@ use self::regex::RegexMatcher; use self::size::SizeMatcher; use self::stat::{InodeMatcher, LinksMatcher}; use self::time::{ - FileTimeMatcher, FileTimeType, NewerMatcher, NewerOptionMatcher, NewerOptionType, - NewerTimeMatcher, + FileMinutesTimeMatcher, FileTimeMatcher, FileTimeType, NewerMatcher, NewerOptionMatcher, + NewerOptionType, NewerTimeMatcher, }; use self::type_matcher::TypeMatcher; @@ -419,6 +419,20 @@ fn build_matcher_tree( i += 1; Some(FileTimeMatcher::new(file_time_type, days).into_box()) } + "-amin" | "-cmin" | "-mmin" => { + if i >= args.len() - 1 { + return Err(From::from(format!("missing argument to {}", args[i]))); + } + let file_time_type = match args[i] { + "-amin" => FileTimeType::Accessed, + "-cmin" => FileTimeType::Created, + "-mmin" => FileTimeType::Modified, + _ => unreachable!("Encountered unexpected value {}", args[i]), + }; + let minutes = convert_arg_to_comparable_value(args[i], args[i + 1])?; + i += 1; + Some(FileMinutesTimeMatcher::new(file_time_type, minutes).into_box()) + } "-size" => { if i >= args.len() - 1 { return Err(From::from(format!("missing argument to {}", args[i]))); diff --git a/src/find/matchers/time.rs b/src/find/matchers/time.rs index 7899f202..288423a4 100644 --- a/src/find/matchers/time.rs +++ b/src/find/matchers/time.rs @@ -277,6 +277,54 @@ impl FileTimeMatcher { } } +pub struct FileMinutesTimeMatcher { + minutes: ComparableValue, + file_time_type: FileTimeType, +} + +impl Matcher for FileMinutesTimeMatcher { + fn matches(&self, file_info: &DirEntry, matcher_io: &mut MatcherIO) -> bool { + match self.matches_impl(file_info, matcher_io.now()) { + Err(e) => { + writeln!( + &mut stderr(), + "Error getting {:?} time for {}: {}", + self.file_time_type, + file_info.path().to_string_lossy(), + e + ) + .unwrap(); + false + } + Ok(t) => t, + } + } +} + +impl FileMinutesTimeMatcher { + fn matches_impl(&self, file_info: &DirEntry, now: SystemTime) -> Result> { + let this_time = self.file_time_type.get_file_time(file_info.metadata()?)?; + let mut is_negative = false; + let age = match now.duration_since(this_time) { + Ok(duration) => duration, + Err(e) => { + is_negative = true; + e.duration() + } + }; + let age_in_seconds: i64 = age.as_secs() as i64 * if is_negative { -1 } else { 1 }; + let age_in_minutes = age_in_seconds / 60 + if is_negative { -1 } else { 0 }; + Ok(self.minutes.imatches(age_in_minutes)) + } + + pub fn new(file_time_type: FileTimeType, minutes: ComparableValue) -> Self { + Self { + minutes, + file_time_type, + } + } +} + #[cfg(test)] mod tests { use std::fs; From 7180e7d8bd05716659bcd0c6a140b99e6b2bfc2b Mon Sep 17 00:00:00 2001 From: hanbings Date: Fri, 19 Apr 2024 16:48:11 +0800 Subject: [PATCH 02/12] Rename matcher: FileAgeRangeMatcher. --- src/find/matchers/mod.rs | 4 ++-- src/find/matchers/time.rs | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/find/matchers/mod.rs b/src/find/matchers/mod.rs index c76e9c4b..ec4b5734 100644 --- a/src/find/matchers/mod.rs +++ b/src/find/matchers/mod.rs @@ -50,7 +50,7 @@ use self::regex::RegexMatcher; use self::size::SizeMatcher; use self::stat::{InodeMatcher, LinksMatcher}; use self::time::{ - FileMinutesTimeMatcher, FileTimeMatcher, FileTimeType, NewerMatcher, NewerOptionMatcher, + FileAgeRangeMatcher, FileTimeMatcher, FileTimeType, NewerMatcher, NewerOptionMatcher, NewerOptionType, NewerTimeMatcher, }; use self::type_matcher::TypeMatcher; @@ -431,7 +431,7 @@ fn build_matcher_tree( }; let minutes = convert_arg_to_comparable_value(args[i], args[i + 1])?; i += 1; - Some(FileMinutesTimeMatcher::new(file_time_type, minutes).into_box()) + Some(FileAgeRangeMatcher::new(file_time_type, minutes).into_box()) } "-size" => { if i >= args.len() - 1 { diff --git a/src/find/matchers/time.rs b/src/find/matchers/time.rs index 288423a4..97cd98bd 100644 --- a/src/find/matchers/time.rs +++ b/src/find/matchers/time.rs @@ -277,12 +277,12 @@ impl FileTimeMatcher { } } -pub struct FileMinutesTimeMatcher { +pub struct FileAgeRangeMatcher { minutes: ComparableValue, file_time_type: FileTimeType, } -impl Matcher for FileMinutesTimeMatcher { +impl Matcher for FileAgeRangeMatcher { fn matches(&self, file_info: &DirEntry, matcher_io: &mut MatcherIO) -> bool { match self.matches_impl(file_info, matcher_io.now()) { Err(e) => { @@ -301,7 +301,7 @@ impl Matcher for FileMinutesTimeMatcher { } } -impl FileMinutesTimeMatcher { +impl FileAgeRangeMatcher { fn matches_impl(&self, file_info: &DirEntry, now: SystemTime) -> Result> { let this_time = self.file_time_type.get_file_time(file_info.metadata()?)?; let mut is_negative = false; From 297c2501ac9ac1b20ce1d2c89e6e14b2eebb6409 Mon Sep 17 00:00:00 2001 From: hanbings Date: Sat, 20 Apr 2024 02:51:10 +0800 Subject: [PATCH 03/12] Add test for FileAgeRangeMatcher matcher. --- src/find/matchers/time.rs | 64 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/src/find/matchers/time.rs b/src/find/matchers/time.rs index 97cd98bd..f3702ae1 100644 --- a/src/find/matchers/time.rs +++ b/src/find/matchers/time.rs @@ -695,4 +695,68 @@ mod tests { ); } } + + #[test] + fn file_age_range_matcher() { + let file = get_dir_entry_for("test_data", "simple"); + + // mores test + // mocks: + // - find test_data/simple -mmin +1 + // - find test_data/simple -amin +1 + // Means to find files accessed / modified more than 1 minute ago. + [FileTimeType::Modified, FileTimeType::Accessed] + .iter() + .for_each(|time_type| { + let more_matcher = + FileAgeRangeMatcher::new(*time_type, ComparableValue::MoreThan(1)); + assert!( + more_matcher.matches(&file, &mut FakeDependencies::new().new_matcher_io()), + "more minutes old file should match more than 1 minute old." + ); + }); + + // lesses test + // mocks: + // - find test_data/simple -mmin -1 + // - find test_data/simple -amin -1 + // Means to find files accessed / modified less than 1 minute ago. + [FileTimeType::Modified, FileTimeType::Accessed] + .iter() + .for_each(|time_type| { + let less_matcher = + FileAgeRangeMatcher::new(*time_type, ComparableValue::LessThan(1)); + assert!( + !less_matcher.matches(&file, &mut FakeDependencies::new().new_matcher_io()), + "less minutes old file should not match less than 1 minute old." + ); + }); + + let temp_dir = Builder::new().prefix("example").tempdir().unwrap(); + let temp_dir_path = temp_dir.path().to_string_lossy(); + let new_file_name = "newFile"; + // this has just been created, so should be newer + File::create(temp_dir.path().join(new_file_name)).expect("create temp file"); + let new_file = get_dir_entry_for(&temp_dir_path, new_file_name); + + // mocks: + // - find test_data/simple -cmin -1 + // Means to find the new file created less than 1 minute. + let less_matcher = + FileAgeRangeMatcher::new(FileTimeType::Created, ComparableValue::LessThan(1)); + assert!( + less_matcher.matches(&new_file, &mut FakeDependencies::new().new_matcher_io()), + "The file just created should be included in the less 1 minute match." + ); + + // mocks: + // - find test_data/simple -cmin +1 + // Means to find the new file created more than 1 minute. + let more_matcher = + FileAgeRangeMatcher::new(FileTimeType::Created, ComparableValue::MoreThan(1)); + assert!( + !more_matcher.matches(&new_file, &mut FakeDependencies::new().new_matcher_io()), + "The file just created should not be included in the more 1 minute match." + ); + } } From 54dea2a2bf20fc2cc08ffd723d854190df514669 Mon Sep 17 00:00:00 2001 From: hanbings Date: Sat, 20 Apr 2024 03:18:48 +0800 Subject: [PATCH 04/12] Add command line test for age range. --- src/find/mod.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/find/mod.rs b/src/find/mod.rs index 002dd346..8b60cef3 100644 --- a/src/find/mod.rs +++ b/src/find/mod.rs @@ -736,6 +736,29 @@ mod tests { } } + // Because the time when files exist locally is different + // from the time when Github Actions pulls them, + // it is difficult to write tests that limit a certain time period. + // + // For example, a Github Action may pull files from a new git commit within a few minutes, + // causing the file time to be refreshed to the pull time. + // and The files on the local branch may be several days old. + // + // So this test may not be too accurate and can only ensure that + // the function can be correctly identified. + #[test] + fn find_amin_cmin_mmin() { + let args = ["-amin", "-cmin", "-mmin"]; + let times = ["-60", "-120", "-240", "+60", "+120", "+240"]; + + for (arg, time) in args.iter().zip(times.iter()) { + let deps = FakeDependencies::new(); + let rc = find_main(&["find", "./test_data/simple/subdir", arg, time], &deps); + + assert_eq!(rc, 0); + } + } + #[test] fn find_size() { let deps = FakeDependencies::new(); From ff60a23e4cab5ad1ccde39c5d599d012b0426501 Mon Sep 17 00:00:00 2001 From: hanbings Date: Sat, 20 Apr 2024 03:34:05 +0800 Subject: [PATCH 05/12] Fix test error caused by FileAgeRangeMatcher test file creation time. --- src/find/matchers/time.rs | 102 +++++++++++++++++++------------------- 1 file changed, 52 insertions(+), 50 deletions(-) diff --git a/src/find/matchers/time.rs b/src/find/matchers/time.rs index f3702ae1..710f6429 100644 --- a/src/find/matchers/time.rs +++ b/src/find/matchers/time.rs @@ -698,40 +698,6 @@ mod tests { #[test] fn file_age_range_matcher() { - let file = get_dir_entry_for("test_data", "simple"); - - // mores test - // mocks: - // - find test_data/simple -mmin +1 - // - find test_data/simple -amin +1 - // Means to find files accessed / modified more than 1 minute ago. - [FileTimeType::Modified, FileTimeType::Accessed] - .iter() - .for_each(|time_type| { - let more_matcher = - FileAgeRangeMatcher::new(*time_type, ComparableValue::MoreThan(1)); - assert!( - more_matcher.matches(&file, &mut FakeDependencies::new().new_matcher_io()), - "more minutes old file should match more than 1 minute old." - ); - }); - - // lesses test - // mocks: - // - find test_data/simple -mmin -1 - // - find test_data/simple -amin -1 - // Means to find files accessed / modified less than 1 minute ago. - [FileTimeType::Modified, FileTimeType::Accessed] - .iter() - .for_each(|time_type| { - let less_matcher = - FileAgeRangeMatcher::new(*time_type, ComparableValue::LessThan(1)); - assert!( - !less_matcher.matches(&file, &mut FakeDependencies::new().new_matcher_io()), - "less minutes old file should not match less than 1 minute old." - ); - }); - let temp_dir = Builder::new().prefix("example").tempdir().unwrap(); let temp_dir_path = temp_dir.path().to_string_lossy(); let new_file_name = "newFile"; @@ -739,24 +705,60 @@ mod tests { File::create(temp_dir.path().join(new_file_name)).expect("create temp file"); let new_file = get_dir_entry_for(&temp_dir_path, new_file_name); + // mores test // mocks: - // - find test_data/simple -cmin -1 - // Means to find the new file created less than 1 minute. - let less_matcher = - FileAgeRangeMatcher::new(FileTimeType::Created, ComparableValue::LessThan(1)); - assert!( - less_matcher.matches(&new_file, &mut FakeDependencies::new().new_matcher_io()), - "The file just created should be included in the less 1 minute match." - ); + // - find test_data/simple -amin +1 + // - find test_data/simple -cmin +1 + // - find test_data/simple -mmin +1 + // Means to find files accessed / modified more than 1 minute ago. + [ + FileTimeType::Accessed, + FileTimeType::Created, + FileTimeType::Modified, + ] + .iter() + .for_each(|time_type| { + let more_matcher = FileAgeRangeMatcher::new(*time_type, ComparableValue::MoreThan(1)); + assert!( + !more_matcher.matches(&new_file, &mut FakeDependencies::new().new_matcher_io()), + "{}", + format!( + "more minutes old file should match more than 1 minute old in {} test.", + match *time_type { + FileTimeType::Accessed => "accessed", + FileTimeType::Created => "created", + FileTimeType::Modified => "modified", + } + ) + ); + }); + // lesses test // mocks: - // - find test_data/simple -cmin +1 - // Means to find the new file created more than 1 minute. - let more_matcher = - FileAgeRangeMatcher::new(FileTimeType::Created, ComparableValue::MoreThan(1)); - assert!( - !more_matcher.matches(&new_file, &mut FakeDependencies::new().new_matcher_io()), - "The file just created should not be included in the more 1 minute match." - ); + // - find test_data/simple -amin -1 + // - find test_data/simple -cmin -1 + // - find test_data/simple -mmin -1 + // Means to find files accessed / modified less than 1 minute ago. + [ + FileTimeType::Accessed, + FileTimeType::Created, + FileTimeType::Modified, + ] + .iter() + .for_each(|time_type| { + let less_matcher = FileAgeRangeMatcher::new(*time_type, ComparableValue::LessThan(1)); + assert!( + less_matcher.matches(&new_file, &mut FakeDependencies::new().new_matcher_io()), + "{}", + format!( + "less minutes old file should not match less than 1 minute old in {} test.", + match *time_type { + FileTimeType::Accessed => "accessed", + FileTimeType::Created => "created", + FileTimeType::Modified => "modified", + } + ) + ); + }); } } From 1b484563c153dfb3ac4b116f015a41fb2c8fc254 Mon Sep 17 00:00:00 2001 From: hanbings Date: Sat, 20 Apr 2024 03:48:44 +0800 Subject: [PATCH 06/12] Improve test coverage. --- src/find/matchers/time.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/find/matchers/time.rs b/src/find/matchers/time.rs index 710f6429..619c5c3e 100644 --- a/src/find/matchers/time.rs +++ b/src/find/matchers/time.rs @@ -760,5 +760,18 @@ mod tests { ) ); }); + + // catch file error + let _ = fs::remove_file(&*new_file.path().to_string_lossy()); + let matchers = [FileAgeRangeMatcher::new( + FileTimeType::Modified, + ComparableValue::MoreThan(1), + )]; + for matcher in &matchers { + assert!( + !matcher.matches(&new_file, &mut FakeDependencies::new().new_matcher_io()), + "The correct situation is that the file reading here cannot be successful." + ); + } } } From aa8f3488c33e0f9cf343910058c714707fea91f6 Mon Sep 17 00:00:00 2001 From: hanbings Date: Sat, 20 Apr 2024 03:55:28 +0800 Subject: [PATCH 07/12] Improve test code readability. --- src/find/matchers/time.rs | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/find/matchers/time.rs b/src/find/matchers/time.rs index 619c5c3e..c0146b1b 100644 --- a/src/find/matchers/time.rs +++ b/src/find/matchers/time.rs @@ -763,15 +763,11 @@ mod tests { // catch file error let _ = fs::remove_file(&*new_file.path().to_string_lossy()); - let matchers = [FileAgeRangeMatcher::new( - FileTimeType::Modified, - ComparableValue::MoreThan(1), - )]; - for matcher in &matchers { - assert!( - !matcher.matches(&new_file, &mut FakeDependencies::new().new_matcher_io()), - "The correct situation is that the file reading here cannot be successful." - ); - } + let matcher = + FileAgeRangeMatcher::new(FileTimeType::Modified, ComparableValue::MoreThan(1)); + assert!( + !matcher.matches(&new_file, &mut FakeDependencies::new().new_matcher_io()), + "The correct situation is that the file reading here cannot be successful." + ); } } From 08dc112ca575466091bc09adab719efd34d25d84 Mon Sep 17 00:00:00 2001 From: hanbings Date: Sat, 20 Apr 2024 11:21:23 +0800 Subject: [PATCH 08/12] Typo: mores -> more and lesses -> less. --- src/find/matchers/time.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/find/matchers/time.rs b/src/find/matchers/time.rs index c0146b1b..c17e15bd 100644 --- a/src/find/matchers/time.rs +++ b/src/find/matchers/time.rs @@ -705,7 +705,7 @@ mod tests { File::create(temp_dir.path().join(new_file_name)).expect("create temp file"); let new_file = get_dir_entry_for(&temp_dir_path, new_file_name); - // mores test + // more test // mocks: // - find test_data/simple -amin +1 // - find test_data/simple -cmin +1 @@ -733,7 +733,7 @@ mod tests { ); }); - // lesses test + // less test // mocks: // - find test_data/simple -amin -1 // - find test_data/simple -cmin -1 From 1847f3d80b9cc1dcabc840d1e0f235c4e42e48d4 Mon Sep 17 00:00:00 2001 From: hanbings Date: Sat, 20 Apr 2024 17:00:10 +0800 Subject: [PATCH 09/12] Add exception parameter test. --- tests/find_cmd_tests.rs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/tests/find_cmd_tests.rs b/tests/find_cmd_tests.rs index e7755541..b1cadd83 100644 --- a/tests/find_cmd_tests.rs +++ b/tests/find_cmd_tests.rs @@ -518,3 +518,34 @@ fn expression_empty_parentheses() { )) .stdout(predicate::str::is_empty()); } + +#[test] +fn find_age_range() { + let args = ["-amin", "-cmin", "-mmin"]; + let times = ["-60", "-120", "-240", "+60", "+120", "+240"]; + let time_strings = [ + "\"-60\"", "\"-120\"", "\"-240\"", "\"-60\"", "\"-120\"", "\"-240\"", + ]; + + for (arg, time) in args.iter().zip(times.iter()) { + Command::cargo_bin("find") + .expect("the time should match") + .args(["test_data/simple", arg, time]) + .assert() + .success() + .code(0); + } + + for (arg, time_string) in args.iter().zip(time_strings.iter()) { + Command::cargo_bin("find") + .expect("the except time should not match") + .args(["test_data/simple", arg, time_string]) + .assert() + .failure() + .code(1) + .stderr(predicate::str::contains( + "Error: Expected a decimal integer (with optional + or - prefix) argument to", + )) + .stdout(predicate::str::is_empty()); + } +} From 90d09c947bd40492a1deebc07c6513a56b8526df Mon Sep 17 00:00:00 2001 From: hanbings Date: Mon, 13 May 2024 23:09:45 +0800 Subject: [PATCH 10/12] Fix nest loops missed. --- tests/find_cmd_tests.rs | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/tests/find_cmd_tests.rs b/tests/find_cmd_tests.rs index b1cadd83..d06a92e7 100644 --- a/tests/find_cmd_tests.rs +++ b/tests/find_cmd_tests.rs @@ -527,25 +527,29 @@ fn find_age_range() { "\"-60\"", "\"-120\"", "\"-240\"", "\"-60\"", "\"-120\"", "\"-240\"", ]; - for (arg, time) in args.iter().zip(times.iter()) { - Command::cargo_bin("find") - .expect("the time should match") - .args(["test_data/simple", arg, time]) - .assert() - .success() - .code(0); + for arg in args.iter() { + for time in times.iter() { + Command::cargo_bin("find") + .expect("the time should match") + .args(["test_data/simple", arg, time]) + .assert() + .success() + .code(0); + } } - for (arg, time_string) in args.iter().zip(time_strings.iter()) { - Command::cargo_bin("find") - .expect("the except time should not match") - .args(["test_data/simple", arg, time_string]) - .assert() - .failure() - .code(1) - .stderr(predicate::str::contains( - "Error: Expected a decimal integer (with optional + or - prefix) argument to", - )) - .stdout(predicate::str::is_empty()); + for arg in args.iter() { + for time_string in time_strings.iter() { + Command::cargo_bin("find") + .expect("the except time should not match") + .args(["test_data/simple", arg, time_string]) + .assert() + .failure() + .code(1) + .stderr(predicate::str::contains( + "Error: Expected a decimal integer (with optional + or - prefix) argument to", + )) + .stdout(predicate::str::is_empty()); + } } } From 1c487444194f2d33adc6e558419394c6a38e217c Mon Sep 17 00:00:00 2001 From: hanbings Date: Thu, 23 May 2024 23:10:15 +0800 Subject: [PATCH 11/12] Resolve branch conflicts. --- tests/find_cmd_tests.rs | 44 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/tests/find_cmd_tests.rs b/tests/find_cmd_tests.rs index d06a92e7..8d4947c2 100644 --- a/tests/find_cmd_tests.rs +++ b/tests/find_cmd_tests.rs @@ -520,6 +520,50 @@ fn expression_empty_parentheses() { } #[test] +#[serial(working_dir)] +fn find_newer_xy() { + #[cfg(target_os = "linux")] + let options = ["a", "c", "m"]; + #[cfg(not(target_os = "linux"))] + let options = ["a", "B", "c", "m"]; + + for x in options { + for y in options { + let arg = &format!("-newer{x}{y}"); + Command::cargo_bin("find") + .expect("found binary") + .args([ + "./test_data/simple/subdir", + arg, + "./test_data/simple/subdir/ABBBC", + ]) + .assert() + .success() + .stderr(predicate::str::is_empty()); + } + } + + #[cfg(target_os = "linux")] + let args = ["-newerat", "-newerct", "-newermt"]; + #[cfg(not(target_os = "linux"))] + let args = ["-newerat", "-newerBt", "-newerct", "-newermt"]; + let times = ["jan 01, 2000", "jan 01, 2000 00:00:00"]; + + for arg in args { + for time in times { + let arg = &format!("{arg}{time}"); + Command::cargo_bin("find") + .expect("found binary") + .args(["./test_data/simple/subdir", arg, time]) + .assert() + .success() + .stderr(predicate::str::is_empty()); + } + } +} + +#[test] +#[serial(working_dir)] fn find_age_range() { let args = ["-amin", "-cmin", "-mmin"]; let times = ["-60", "-120", "-240", "+60", "+120", "+240"]; From 981b449944daa4e24901d1bf12c53d2dd6c2dfa9 Mon Sep 17 00:00:00 2001 From: hanbings Date: Thu, 23 May 2024 23:19:02 +0800 Subject: [PATCH 12/12] Clean up duplicate code. --- src/find/mod.rs | 10 ++++++---- tests/find_cmd_tests.rs | 10 +++++----- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/find/mod.rs b/src/find/mod.rs index 5d393995..96833b81 100644 --- a/src/find/mod.rs +++ b/src/find/mod.rs @@ -751,11 +751,13 @@ mod tests { let args = ["-amin", "-cmin", "-mmin"]; let times = ["-60", "-120", "-240", "+60", "+120", "+240"]; - for (arg, time) in args.iter().zip(times.iter()) { - let deps = FakeDependencies::new(); - let rc = find_main(&["find", "./test_data/simple/subdir", arg, time], &deps); + for arg in args { + for time in times { + let deps = FakeDependencies::new(); + let rc = find_main(&["find", "./test_data/simple/subdir", arg, time], &deps); - assert_eq!(rc, 0); + assert_eq!(rc, 0); + } } } diff --git a/tests/find_cmd_tests.rs b/tests/find_cmd_tests.rs index d2709c6c..6364eef0 100644 --- a/tests/find_cmd_tests.rs +++ b/tests/find_cmd_tests.rs @@ -597,8 +597,8 @@ fn find_age_range() { "\"-60\"", "\"-120\"", "\"-240\"", "\"-60\"", "\"-120\"", "\"-240\"", ]; - for arg in args.iter() { - for time in times.iter() { + for arg in args { + for time in times { Command::cargo_bin("find") .expect("the time should match") .args(["test_data/simple", arg, time]) @@ -608,10 +608,10 @@ fn find_age_range() { } } - for arg in args.iter() { - for time_string in time_strings.iter() { + for arg in args { + for time_string in time_strings { Command::cargo_bin("find") - .expect("the except time should not match") + .expect("the time should not match") .args(["test_data/simple", arg, time_string]) .assert() .failure()