Skip to content

Commit 54858b5

Browse files
author
Gary Gregory
committed
Refactor error prone magic numbers.
Refactor call to read last modified on a file.
1 parent fe375a8 commit 54858b5

1 file changed

Lines changed: 54 additions & 35 deletions

File tree

src/test/java/org/apache/commons/io/FileUtilsTestCase.java

Lines changed: 54 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import java.math.BigInteger;
3939
import java.net.URL;
4040
import java.nio.charset.Charset;
41+
import java.nio.file.Files;
4142
import java.util.ArrayList;
4243
import java.util.Arrays;
4344
import java.util.Collection;
@@ -67,6 +68,12 @@
6768
@SuppressWarnings({"deprecation", "ResultOfMethodCallIgnored"}) // unit tests include tests of many deprecated methods
6869
public class FileUtilsTestCase {
6970

71+
private static final long DATE3 = 1000000002000L;
72+
73+
private static final long DATE2 = 1000000001000L;
74+
75+
private static final long DATE1 = 1000000000000L;
76+
7077
@TempDir
7178
public File temporaryFolder;
7279

@@ -1012,7 +1019,7 @@ public void testIsFileNewerOlder() throws Exception {
10121019
} finally {
10131020
IOUtils.closeQuietly(output);
10141021
}
1015-
} while (oldFile.lastModified() == reference.lastModified());
1022+
} while (getLastModifiedMillis(oldFile) == getLastModifiedMillis(reference));
10161023

10171024
final Date date = new Date();
10181025
final long now = date.getTime();
@@ -1034,7 +1041,7 @@ public void testIsFileNewerOlder() throws Exception {
10341041
} finally {
10351042
IOUtils.closeQuietly(output);
10361043
}
1037-
} while (reference.lastModified() == newFile.lastModified());
1044+
} while (getLastModifiedMillis(reference) == getLastModifiedMillis(newFile));
10381045

10391046
// Test isFileNewer()
10401047
assertFalse(FileUtils.isFileNewer(oldFile, reference), "Old File - Newer - File");
@@ -1150,7 +1157,7 @@ public void testCopyFile1() throws Exception {
11501157
FileUtils.copyFile(testFile1, destination);
11511158
assertTrue(destination.exists(), "Check Exist");
11521159
assertEquals(testFile1Size, destination.length(), "Check Full copy");
1153-
assertEquals(testFile1.lastModified(), destination.lastModified(), "Check last modified date preserved");
1160+
assertEquals(testFile1.lastModified(), getLastModifiedMillis(destination), "Check last modified date preserved");
11541161
}
11551162

11561163
@Test
@@ -1198,7 +1205,7 @@ public void testCopyFile2() throws Exception {
11981205
FileUtils.copyFile(testFile1, destination);
11991206
assertTrue(destination.exists(), "Check Exist");
12001207
assertEquals(testFile2Size, destination.length(), "Check Full copy");
1201-
assertEquals(testFile1.lastModified() , destination.lastModified(), "Check last modified date preserved");
1208+
assertEquals(testFile1.lastModified() , getLastModifiedMillis(destination), "Check last modified date preserved");
12021209
}
12031210

12041211
@Test
@@ -1217,16 +1224,19 @@ public void testCopyToSelf() throws Exception {
12171224

12181225
@Test
12191226
public void testCopyFile2WithoutFileDatePreservation() throws Exception {
1220-
final File destination = new File(temporaryFolder, "copy2.txt");
1227+
final File destFile = new File(temporaryFolder, "copy2.txt");
12211228

12221229
backDateFile(testFile1); // set test file back 10 minutes
12231230

1224-
final long now = new Date().getTime()-1000L; // destination file time should not be less than this (allowing for granularity)
1225-
FileUtils.copyFile(testFile1, destination, false);
1226-
assertTrue(destination.exists(), "Check Exist");
1227-
assertEquals(testFile2Size, destination.length(), "Check Full copy");
1228-
final long destLastMod = destination.lastModified();
1229-
assertNotEquals(testFile1.lastModified(), destLastMod, "Check last modified date not same as input");
1231+
// destination file time should not be less than this (allowing for granularity)
1232+
final long now = new Date().getTime() - 1000L;
1233+
FileUtils.copyFile(testFile1, destFile, false);
1234+
assertTrue(destFile.exists(), "Check Exist");
1235+
assertEquals(testFile2Size, destFile.length(), "Check Full copy");
1236+
final long destLastMod = getLastModifiedMillis(destFile);
1237+
final long unexpected = getLastModifiedMillis(testFile1);
1238+
assertNotEquals(unexpected, destLastMod,
1239+
"Check last modified date not same as input, delta " + (destLastMod - unexpected));
12301240
assertTrue(destLastMod > now, destLastMod + " > " + now);
12311241
}
12321242

@@ -1388,45 +1398,51 @@ public void testCopyDirectoryPreserveDates() throws Exception {
13881398
// Set dates in reverse order to avoid overwriting previous values
13891399
// Also, use full seconds (arguments are in ms) close to today
13901400
// but still highly unlikely to occur in the real world
1391-
sourceFile.setLastModified(1000000002000L);
1392-
sourceDirectory.setLastModified(1000000001000L);
1393-
source.setLastModified(1000000000000L);
1401+
sourceFile.setLastModified(DATE3);
1402+
sourceDirectory.setLastModified(DATE2);
1403+
source.setLastModified(DATE1);
13941404

13951405
final File target = new File(temporaryFolder, "target");
13961406
final File targetDirectory = new File(target, "directory");
13971407
final File targetFile = new File(targetDirectory, "hello.txt");
13981408

13991409
// Test with preserveFileDate disabled
14001410
FileUtils.copyDirectory(source, target, false);
1401-
assertTrue(1000000000000L != target.lastModified());
1402-
assertTrue(1000000001000L != targetDirectory.lastModified());
1403-
assertTrue(1000000002000L != targetFile.lastModified());
1411+
assertTrue(DATE1 != getLastModifiedMillis(target));
1412+
assertTrue(DATE2 != getLastModifiedMillis(targetDirectory));
1413+
assertTrue(DATE3 != getLastModifiedMillis(targetFile));
14041414
FileUtils.deleteDirectory(target);
14051415

14061416
// Test with preserveFileDate enabled
14071417
FileUtils.copyDirectory(source, target, true);
1408-
assertEquals(1000000000000L, target.lastModified());
1409-
assertEquals(1000000001000L, targetDirectory.lastModified());
1410-
assertEquals(1000000002000L, targetFile.lastModified());
1418+
assertEquals(DATE1, getLastModifiedMillis(target));
1419+
assertEquals(DATE2, getLastModifiedMillis(targetDirectory));
1420+
assertEquals(DATE3, getLastModifiedMillis(targetFile));
14111421
FileUtils.deleteDirectory(target);
14121422

14131423
// also if the target directory already exists (IO-190)
14141424
target.mkdirs();
14151425
FileUtils.copyDirectory(source, target, true);
1416-
assertEquals(1000000000000L, target.lastModified());
1417-
assertEquals(1000000001000L, targetDirectory.lastModified());
1418-
assertEquals(1000000002000L, targetFile.lastModified());
1426+
assertEquals(DATE1, getLastModifiedMillis(target));
1427+
assertEquals(DATE2, getLastModifiedMillis(targetDirectory));
1428+
assertEquals(DATE3, getLastModifiedMillis(targetFile));
14191429
FileUtils.deleteDirectory(target);
14201430

14211431
// also if the target subdirectory already exists (IO-190)
14221432
targetDirectory.mkdirs();
14231433
FileUtils.copyDirectory(source, target, true);
1424-
assertEquals(1000000000000L, target.lastModified());
1425-
assertEquals(1000000001000L, targetDirectory.lastModified());
1426-
assertEquals(1000000002000L, targetFile.lastModified());
1434+
assertEquals(DATE1, getLastModifiedMillis(target));
1435+
assertEquals(DATE2, getLastModifiedMillis(targetDirectory));
1436+
assertEquals(DATE3, getLastModifiedMillis(targetFile));
14271437
FileUtils.deleteDirectory(target);
14281438
}
14291439

1440+
public long getLastModifiedMillis(final File file) throws IOException {
1441+
return file.lastModified();
1442+
//https://bugs.openjdk.java.net/browse/JDK-8177809
1443+
//return Files.getLastModifiedTime(file.toPath()).toMillis();
1444+
}
1445+
14301446
/* Test for IO-141 */
14311447
@Test
14321448
public void testCopyDirectoryToChild() throws Exception {
@@ -1759,13 +1775,13 @@ public void testTouch() throws IOException {
17591775
final long y2k = new GregorianCalendar(2000, 0, 1).getTime().getTime();
17601776
final boolean res = file.setLastModified(y2k); // 0L fails on Win98
17611777
assertEquals(true, res, "Bad test: set lastModified failed");
1762-
assertEquals(y2k, file.lastModified(), "Bad test: set lastModified set incorrect value");
1778+
assertEquals(y2k, getLastModifiedMillis(file), "Bad test: set lastModified set incorrect value");
17631779
final long now = System.currentTimeMillis();
17641780
FileUtils.touch(file);
17651781
assertEquals(1, file.length(), "FileUtils.touch() didn't empty the file.");
1766-
assertEquals(false, y2k == file.lastModified(), "FileUtils.touch() changed lastModified");
1767-
assertEquals(true, file.lastModified() >= now - 3000, "FileUtils.touch() changed lastModified to more than now-3s");
1768-
assertEquals(true, file.lastModified() <= now + 3000, "FileUtils.touch() changed lastModified to less than now+3s");
1782+
assertEquals(false, y2k == getLastModifiedMillis(file), "FileUtils.touch() changed lastModified");
1783+
assertEquals(true, getLastModifiedMillis(file) >= now - 3000, "FileUtils.touch() changed lastModified to more than now-3s");
1784+
assertEquals(true, getLastModifiedMillis(file) <= now + 3000, "FileUtils.touch() changed lastModified to less than now+3s");
17691785
}
17701786

17711787
@Test
@@ -3076,16 +3092,19 @@ public void testIncorrectOutputSize() throws Exception {
30763092
}
30773093
}
30783094

3079-
private void backDateFile(File testFile){
3080-
final long mins10 = 1000*60*10;
3081-
final long lastModified1 = testFile.lastModified();
3082-
testFile.setLastModified(lastModified1-mins10);
3083-
assertNotEquals(testFile.lastModified(), lastModified1, "Should have changed source date"); // ensure it was changed
3095+
private void backDateFile(File testFile) throws IOException {
3096+
final long mins10 = 1000 * 60 * 10;
3097+
final long lastModified1 = getLastModifiedMillis(testFile);
3098+
testFile.setLastModified(lastModified1 - mins10);
3099+
// ensure it was changed
3100+
assertNotEquals(getLastModifiedMillis(testFile), lastModified1, "Should have changed source date");
30843101
}
3102+
30853103
/**
30863104
* DirectoryWalker implementation that recursively lists all files and directories.
30873105
*/
30883106
static class ListDirectoryWalker extends DirectoryWalker<File> {
3107+
30893108
ListDirectoryWalker() {
30903109
super();
30913110
}

0 commit comments

Comments
 (0)