4444import java .nio .file .Path ;
4545import java .nio .file .Paths ;
4646import java .nio .file .StandardCopyOption ;
47+ import java .nio .file .attribute .FileTime ;
4748import java .time .Instant ;
4849import java .time .LocalDate ;
4950import java .time .LocalDateTime ;
6364import java .util .Iterator ;
6465import java .util .List ;
6566import java .util .Map ;
67+ import java .util .concurrent .TimeUnit ;
6668import java .util .zip .CRC32 ;
6769import java .util .zip .Checksum ;
6870
8082import org .junit .jupiter .api .BeforeEach ;
8183import org .junit .jupiter .api .Disabled ;
8284import org .junit .jupiter .api .Test ;
85+ import org .junit .jupiter .params .ParameterizedTest ;
86+ import org .junit .jupiter .params .provider .ValueSource ;
8387
8488/**
8589 * This is used to test FileUtils for correctness.
@@ -1595,60 +1599,53 @@ public void testIsEmptyDirectory() throws IOException {
15951599 Assertions .assertFalse (FileUtils .isEmptyDirectory (PathUtilsIsEmptyTest .DIR_SIZE_1 .toFile ()));
15961600 }
15971601
1598- @ Test
1599- public void testIsFileNewerOlder () throws Exception {
1600- final File reference = new File (tempDirFile , "FileUtils-reference.txt" );
1602+ @ ParameterizedTest
1603+ @ ValueSource (longs = {1L , 100L , 1_000L , 10_000L , 100_000L , 1_000_000L })
1604+ public void testIsFileNewerOlder (final long millis ) throws Exception {
1605+ // Files
16011606 final File oldFile = new File (tempDirFile , "FileUtils-old.txt" );
1607+ final File refFile = new File (tempDirFile , "FileUtils-reference.txt" );
16021608 final File newFile = new File (tempDirFile , "FileUtils-new.txt" );
16031609 final File invalidFile = new File (tempDirFile , "FileUtils-invalid-file.txt" );
1604-
1605- // Create Files
1606- if (!oldFile .getParentFile ().exists ()) {
1607- throw new IOException ("Cannot create file " + oldFile
1608- + " as the parent directory does not exist" );
1609- }
1610- try (final OutputStream output1 = new BufferedOutputStream (Files .newOutputStream (oldFile .toPath ()))) {
1611- TestUtils .generateTestData (output1 , 0 );
1610+ // Paths
1611+ final Path oldPath = oldFile .toPath ();
1612+ final Path refPath = refFile .toPath ();
1613+ final Path newPath = newFile .toPath ();
1614+ // FileTimes
1615+ final FileTime oldFileTime = FileTime .from (millis * 1 , TimeUnit .MILLISECONDS );
1616+ final FileTime refFileTime = FileTime .from (millis * 2 , TimeUnit .MILLISECONDS );
1617+ final FileTime testFileTime = FileTime .from (millis * 3 , TimeUnit .MILLISECONDS );
1618+ final FileTime newFileTime = FileTime .from (millis * 4 , TimeUnit .MILLISECONDS );
1619+
1620+ // Create fixtures
1621+ try (final OutputStream output = new BufferedOutputStream (Files .newOutputStream (oldPath ))) {
1622+ TestUtils .generateTestData (output , 0 );
16121623 }
1624+ Files .setLastModifiedTime (oldPath , oldFileTime );
16131625
1614- do {
1615- TestUtils .sleepQuietly (1000 );
1616- if (!reference .getParentFile ().exists ()) {
1617- throw new IOException ("Cannot create file " + reference + " as the parent directory does not exist" );
1618- }
1619- try (final OutputStream output = new BufferedOutputStream (Files .newOutputStream (reference .toPath ()))) {
1620- TestUtils .generateTestData (output , 0 );
1621- }
1622- } while (getLastModifiedMillis (oldFile ) == getLastModifiedMillis (reference ));
1626+ try (final OutputStream output = new BufferedOutputStream (Files .newOutputStream (refPath ))) {
1627+ TestUtils .generateTestData (output , 0 );
1628+ }
1629+ Files .setLastModifiedTime (refPath , refFileTime );
16231630
1624- final Date date = new Date ();
1631+ final Date date = new Date (testFileTime . toMillis () );
16251632 final long now = date .getTime ();
16261633 final Instant instant = date .toInstant ();
16271634 final ZonedDateTime zonedDateTime = ZonedDateTime .ofInstant (instant , ZoneId .systemDefault ());
16281635 final OffsetDateTime offsetDateTime = zonedDateTime .toOffsetDateTime ();
16291636 final LocalDateTime localDateTime = zonedDateTime .toLocalDateTime ();
16301637 final LocalDate localDate = zonedDateTime .toLocalDate ();
16311638 final LocalDate localDatePlusDay = localDate .plusDays (1 );
1632- final LocalTime localTime = LocalTime .ofSecondOfDay (0 );
1633- final OffsetTime offsetTime = OffsetTime .of (localTime , ZoneOffset .UTC );
1634-
1635- do {
1636- try {
1637- TestUtils .sleep (1000 );
1638- } catch (final InterruptedException ie ) {
1639- // ignore
1640- }
1641- if (!newFile .getParentFile ().exists ()) {
1642- throw new IOException ("Cannot create file " + newFile
1643- + " as the parent directory does not exist" );
1644- }
1645- try (final OutputStream output = new BufferedOutputStream (Files .newOutputStream (newFile .toPath ()))) {
1646- TestUtils .generateTestData (output , 0 );
1647- }
1648- } while (getLastModifiedMillis (reference ) == getLastModifiedMillis (newFile ));
1639+ final LocalTime localTime0 = LocalTime .MIDNIGHT ;
1640+ final OffsetTime offsetTime0 = OffsetTime .of (localTime0 , ZoneOffset .UTC );
1641+
1642+ try (final OutputStream output = new BufferedOutputStream (Files .newOutputStream (newPath ))) {
1643+ TestUtils .generateTestData (output , 0 );
1644+ }
1645+ Files .setLastModifiedTime (newPath , newFileTime );
16491646
1650- // Test isFileNewer()
1651- assertFalse (FileUtils .isFileNewer (oldFile , reference ), "Old File - Newer - File" );
1647+ // Test
1648+ assertFalse (FileUtils .isFileNewer (oldFile , refFile ), "Old File - Newer - File" );
16521649 assertFalse (FileUtils .isFileNewer (oldFile , date ), "Old File - Newer - Date" );
16531650 assertFalse (FileUtils .isFileNewer (oldFile , now ), "Old File - Newer - Mili" );
16541651 assertFalse (FileUtils .isFileNewer (oldFile , instant ), "Old File - Newer - Instant" );
@@ -1657,13 +1654,13 @@ public void testIsFileNewerOlder() throws Exception {
16571654 assertFalse (FileUtils .isFileNewer (oldFile , localDateTime ), "Old File - Newer - LocalDateTime" );
16581655 assertFalse (FileUtils .isFileNewer (oldFile , localDateTime , ZoneId .systemDefault ()), "Old File - Newer - LocalDateTime,ZoneId" );
16591656 assertFalse (FileUtils .isFileNewer (oldFile , localDate ), "Old File - Newer - LocalDate" );
1660- assertTrue (FileUtils .isFileNewer (oldFile , localDate , localTime ), "Old File - Newer - LocalDate,LocalTime" );
1661- assertTrue (FileUtils .isFileNewer (oldFile , localDate , offsetTime ), "Old File - Newer - LocalDate,OffsetTime" );
1657+ assertTrue (FileUtils .isFileNewer (oldFile , localDate , localTime0 ), "Old File - Newer - LocalDate,LocalTime" );
1658+ assertTrue (FileUtils .isFileNewer (oldFile , localDate , offsetTime0 ), "Old File - Newer - LocalDate,OffsetTime" );
16621659 assertFalse (FileUtils .isFileNewer (oldFile , localDatePlusDay ), "Old File - Newer - LocalDate plus one day" );
1663- assertFalse (FileUtils .isFileNewer (oldFile , localDatePlusDay , localTime ), "Old File - Newer - LocalDate plus one day,LocalTime" );
1664- assertFalse (FileUtils .isFileNewer (oldFile , localDatePlusDay , offsetTime ), "Old File - Newer - LocalDate plus one day,OffsetTime" );
1660+ assertFalse (FileUtils .isFileNewer (oldFile , localDatePlusDay , localTime0 ), "Old File - Newer - LocalDate plus one day,LocalTime" );
1661+ assertFalse (FileUtils .isFileNewer (oldFile , localDatePlusDay , offsetTime0 ), "Old File - Newer - LocalDate plus one day,OffsetTime" );
16651662
1666- assertTrue (FileUtils .isFileNewer (newFile , reference ), "New File - Newer - File" );
1663+ assertTrue (FileUtils .isFileNewer (newFile , refFile ), "New File - Newer - File" );
16671664 assertTrue (FileUtils .isFileNewer (newFile , date ), "New File - Newer - Date" );
16681665 assertTrue (FileUtils .isFileNewer (newFile , now ), "New File - Newer - Mili" );
16691666 assertTrue (FileUtils .isFileNewer (newFile , instant ), "New File - Newer - Instant" );
@@ -1672,17 +1669,16 @@ public void testIsFileNewerOlder() throws Exception {
16721669 assertTrue (FileUtils .isFileNewer (newFile , localDateTime ), "New File - Newer - LocalDateTime" );
16731670 assertTrue (FileUtils .isFileNewer (newFile , localDateTime , ZoneId .systemDefault ()), "New File - Newer - LocalDateTime,ZoneId" );
16741671 assertFalse (FileUtils .isFileNewer (newFile , localDate ), "New File - Newer - LocalDate" );
1675- assertTrue (FileUtils .isFileNewer (newFile , localDate , localTime ), "New File - Newer - LocalDate,LocalTime" );
1676- assertTrue (FileUtils .isFileNewer (newFile , localDate , offsetTime ), "New File - Newer - LocalDate,OffsetTime" );
1672+ assertTrue (FileUtils .isFileNewer (newFile , localDate , localTime0 ), "New File - Newer - LocalDate,LocalTime" );
1673+ assertTrue (FileUtils .isFileNewer (newFile , localDate , offsetTime0 ), "New File - Newer - LocalDate,OffsetTime" );
16771674 assertFalse (FileUtils .isFileNewer (newFile , localDatePlusDay ), "New File - Newer - LocalDate plus one day" );
1678- assertFalse (FileUtils .isFileNewer (newFile , localDatePlusDay , localTime ), "New File - Newer - LocalDate plus one day,LocalTime" );
1679- assertFalse (FileUtils .isFileNewer (newFile , localDatePlusDay , offsetTime ), "New File - Newer - LocalDate plus one day,OffsetTime" );
1680- assertFalse (FileUtils .isFileNewer (invalidFile , reference ), "Invalid - Newer - File" );
1681- final String invalidFileName = invalidFile .getName ();
1675+ assertFalse (FileUtils .isFileNewer (newFile , localDatePlusDay , localTime0 ), "New File - Newer - LocalDate plus one day,LocalTime" );
1676+ assertFalse (FileUtils .isFileNewer (newFile , localDatePlusDay , offsetTime0 ), "New File - Newer - LocalDate plus one day,OffsetTime" );
1677+ assertFalse (FileUtils .isFileNewer (invalidFile , refFile ), "Invalid - Newer - File" );
16821678 assertThrows (IllegalArgumentException .class , () -> FileUtils .isFileNewer (newFile , invalidFile ));
16831679
16841680 // Test isFileOlder()
1685- assertTrue (FileUtils .isFileOlder (oldFile , reference ), "Old File - Older - File" );
1681+ assertTrue (FileUtils .isFileOlder (oldFile , refFile ), "Old File - Older - File" );
16861682 assertTrue (FileUtils .isFileOlder (oldFile , date ), "Old File - Older - Date" );
16871683 assertTrue (FileUtils .isFileOlder (oldFile , now ), "Old File - Older - Mili" );
16881684 assertTrue (FileUtils .isFileOlder (oldFile , instant ), "Old File - Older - Instant" );
@@ -1691,13 +1687,13 @@ public void testIsFileNewerOlder() throws Exception {
16911687 assertTrue (FileUtils .isFileOlder (oldFile , localDateTime ), "Old File - Older - LocalDateTime" );
16921688 assertTrue (FileUtils .isFileOlder (oldFile , localDateTime , ZoneId .systemDefault ()), "Old File - Older - LocalDateTime,LocalTime" );
16931689 assertTrue (FileUtils .isFileOlder (oldFile , localDate ), "Old File - Older - LocalDate" );
1694- assertFalse (FileUtils .isFileOlder (oldFile , localDate , localTime ), "Old File - Older - LocalDate,LocalTime" );
1695- assertFalse (FileUtils .isFileOlder (oldFile , localDate , offsetTime ), "Old File - Older - LocalDate,OffsetTime" );
1690+ assertFalse (FileUtils .isFileOlder (oldFile , localDate , localTime0 ), "Old File - Older - LocalDate,LocalTime" );
1691+ assertFalse (FileUtils .isFileOlder (oldFile , localDate , offsetTime0 ), "Old File - Older - LocalDate,OffsetTime" );
16961692 assertTrue (FileUtils .isFileOlder (oldFile , localDatePlusDay ), "Old File - Older - LocalDate plus one day" );
1697- assertTrue (FileUtils .isFileOlder (oldFile , localDatePlusDay , localTime ), "Old File - Older - LocalDate plus one day,LocalTime" );
1698- assertTrue (FileUtils .isFileOlder (oldFile , localDatePlusDay , offsetTime ), "Old File - Older - LocalDate plus one day,OffsetTime" );
1693+ assertTrue (FileUtils .isFileOlder (oldFile , localDatePlusDay , localTime0 ), "Old File - Older - LocalDate plus one day,LocalTime" );
1694+ assertTrue (FileUtils .isFileOlder (oldFile , localDatePlusDay , offsetTime0 ), "Old File - Older - LocalDate plus one day,OffsetTime" );
16991695
1700- assertFalse (FileUtils .isFileOlder (newFile , reference ), "New File - Older - File" );
1696+ assertFalse (FileUtils .isFileOlder (newFile , refFile ), "New File - Older - File" );
17011697 assertFalse (FileUtils .isFileOlder (newFile , date ), "New File - Older - Date" );
17021698 assertFalse (FileUtils .isFileOlder (newFile , now ), "New File - Older - Mili" );
17031699 assertFalse (FileUtils .isFileOlder (newFile , instant ), "New File - Older - Instant" );
@@ -1706,16 +1702,15 @@ public void testIsFileNewerOlder() throws Exception {
17061702 assertFalse (FileUtils .isFileOlder (newFile , localDateTime ), "New File - Older - LocalDateTime" );
17071703 assertFalse (FileUtils .isFileOlder (newFile , localDateTime , ZoneId .systemDefault ()), "New File - Older - LocalDateTime,ZoneId" );
17081704 assertTrue (FileUtils .isFileOlder (newFile , localDate ), "New File - Older - LocalDate" );
1709- assertFalse (FileUtils .isFileOlder (newFile , localDate , localTime ), "New File - Older - LocalDate,LocalTime" );
1710- assertFalse (FileUtils .isFileOlder (newFile , localDate , offsetTime ), "New File - Older - LocalDate,OffsetTime" );
1705+ assertFalse (FileUtils .isFileOlder (newFile , localDate , localTime0 ), "New File - Older - LocalDate,LocalTime" );
1706+ assertFalse (FileUtils .isFileOlder (newFile , localDate , offsetTime0 ), "New File - Older - LocalDate,OffsetTime" );
17111707 assertTrue (FileUtils .isFileOlder (newFile , localDatePlusDay ), "New File - Older - LocalDate plus one day" );
1712- assertTrue (FileUtils .isFileOlder (newFile , localDatePlusDay , localTime ), "New File - Older - LocalDate plus one day,LocalTime" );
1713- assertTrue (FileUtils .isFileOlder (newFile , localDatePlusDay , offsetTime ), "New File - Older - LocalDate plus one day,OffsetTime" );
1708+ assertTrue (FileUtils .isFileOlder (newFile , localDatePlusDay , localTime0 ), "New File - Older - LocalDate plus one day,LocalTime" );
1709+ assertTrue (FileUtils .isFileOlder (newFile , localDatePlusDay , offsetTime0 ), "New File - Older - LocalDate plus one day,OffsetTime" );
17141710
1715- assertFalse (FileUtils .isFileOlder (invalidFile , reference ), "Invalid - Older - File" );
1711+ assertFalse (FileUtils .isFileOlder (invalidFile , refFile ), "Invalid - Older - File" );
17161712 assertThrows (IllegalArgumentException .class , () -> FileUtils .isFileOlder (newFile , invalidFile ));
17171713
1718- // ----- Test isFileNewer() exceptions -----
17191714 // Null File
17201715 assertThrows (NullPointerException .class , () -> FileUtils .isFileNewer (null , now ));
17211716
0 commit comments