Skip to content

Commit 3a61904

Browse files
committed
[IO-862] Add FileUtils.deleteDirectory(File)
- Also rename some test methods - Internal test refactoring
1 parent 79efcff commit 3a61904

File tree

1 file changed

+40
-14
lines changed

1 file changed

+40
-14
lines changed

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

Lines changed: 40 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@
1717
package org.apache.commons.io;
1818

1919
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
20+
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
2021
import static org.junit.jupiter.api.Assertions.assertEquals;
2122
import static org.junit.jupiter.api.Assertions.assertFalse;
2223
import static org.junit.jupiter.api.Assertions.assertNotEquals;
2324
import static org.junit.jupiter.api.Assertions.assertNotNull;
2425
import static org.junit.jupiter.api.Assertions.assertNull;
2526
import static org.junit.jupiter.api.Assertions.assertSame;
26-
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
2727
import static org.junit.jupiter.api.Assertions.assertThrows;
2828
import static org.junit.jupiter.api.Assertions.assertThrowsExactly;
2929
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -91,6 +91,7 @@
9191
import org.apache.commons.io.test.TestUtils;
9292
import org.apache.commons.lang3.SystemProperties;
9393
import org.apache.commons.lang3.SystemUtils;
94+
import org.apache.commons.lang3.tuple.ImmutablePair;
9495
import org.junit.jupiter.api.Assertions;
9596
import org.junit.jupiter.api.BeforeEach;
9697
import org.junit.jupiter.api.Disabled;
@@ -245,12 +246,12 @@ private void createFilesForTestCopyDirectory(final File grandParentDir, final Fi
245246
FileUtils.writeStringToFile(file6, "File 6 in grandChild2", "UTF8");
246247
}
247248

248-
private Path createTempSymbolicLinkedRelativeDir() throws IOException {
249+
private ImmutablePair<Path, Path> createTempSymbolicLinkedRelativeDir() throws IOException {
249250
final Path targetDir = tempDirPath.resolve("subdir");
250251
final Path symlinkDir = tempDirPath.resolve("symlinked-dir");
251252
Files.createDirectory(targetDir);
252253
Files.createSymbolicLink(symlinkDir, targetDir);
253-
return symlinkDir;
254+
return ImmutablePair.of(symlinkDir, targetDir);
254255
}
255256

256257
private Set<String> getFilePathSet(final List<File> files) {
@@ -404,8 +405,7 @@ public void test_openOutputStream_existsButIsDirectory() {
404405
*/
405406
@Test
406407
public void test_openOutputStream_intoExistingSymlinkedDir() throws Exception {
407-
final Path symlinkedDir = createTempSymbolicLinkedRelativeDir();
408-
408+
final Path symlinkedDir = createTempSymbolicLinkedRelativeDir().getLeft();
409409
final File file = symlinkedDir.resolve("test.txt").toFile();
410410
try (FileOutputStream out = FileUtils.openOutputStream(file)) {
411411
out.write(0);
@@ -1549,21 +1549,49 @@ public void testDelete() throws Exception {
15491549

15501550
@Test
15511551
public void testDeleteDirectoryFailsOnFile() {
1552-
// Fail request for a File
1552+
// Fail request to delete a directory for a file
15531553
assertThrows(IllegalArgumentException.class, () -> FileUtils.deleteDirectory(testFile1));
15541554
}
15551555

15561556
@Test
1557-
public void testDeleteDirectoryIsSymLink() throws IOException {
1558-
final Path symlinkedDir = createTempSymbolicLinkedRelativeDir();
1557+
public void testDeleteDirectoryNoopIfAbsent() {
1558+
// Noop on non-existent entry
1559+
assertDoesNotThrow(() -> FileUtils.deleteDirectory(new File("does not exist.nope")));
1560+
}
1561+
1562+
@Test
1563+
public void testDeleteDirectorySymbolicLink() throws IOException {
1564+
final Path symlinkedDir = createTempSymbolicLinkedRelativeDir().getLeft();
15591565
FileUtils.deleteDirectory(symlinkedDir.toFile());
15601566
assertFalse(Files.exists(symlinkedDir));
15611567
}
15621568

15631569
@Test
1564-
public void testDeleteDirectoryNoopIfAbsent() {
1565-
// Noop on non-existent entry
1566-
assertDoesNotThrow(() -> FileUtils.deleteDirectory(new File("does not exist.nope")));
1570+
public void testDeleteDirectorySymbolicLinkAbsent() throws IOException {
1571+
final ImmutablePair<Path, Path> pair = createTempSymbolicLinkedRelativeDir();
1572+
final Path symlinkedDir = pair.getLeft();
1573+
final Path targetDir = pair.getRight();
1574+
assertTrue(Files.exists(symlinkedDir), symlinkedDir::toString);
1575+
Files.delete(symlinkedDir);
1576+
assertTrue(Files.exists(targetDir), targetDir::toString);
1577+
assertFalse(Files.exists(symlinkedDir), symlinkedDir::toString);
1578+
// actual test
1579+
FileUtils.deleteDirectory(symlinkedDir.toFile());
1580+
assertFalse(Files.exists(symlinkedDir), symlinkedDir::toString);
1581+
}
1582+
1583+
@Test
1584+
public void testDeleteDirectorySymbolicLinkAbsentTarget() throws IOException {
1585+
final ImmutablePair<Path, Path> pair = createTempSymbolicLinkedRelativeDir();
1586+
final Path symlinkedDir = pair.getLeft();
1587+
final Path targetDir = pair.getRight();
1588+
assertTrue(Files.exists(symlinkedDir), symlinkedDir::toString);
1589+
Files.delete(targetDir);
1590+
assertFalse(Files.exists(targetDir), targetDir::toString);
1591+
assertFalse(Files.exists(symlinkedDir), symlinkedDir::toString);
1592+
// actual test
1593+
FileUtils.deleteDirectory(symlinkedDir.toFile());
1594+
assertFalse(Files.exists(symlinkedDir), symlinkedDir::toString);
15671595
}
15681596

15691597
@Test
@@ -3453,11 +3481,9 @@ public void testWriteStringToFileIntoNonExistentSubdir() throws Exception {
34533481
*/
34543482
@Test
34553483
public void testWriteStringToFileIntoSymlinkedDir() throws Exception {
3456-
final Path symlinkDir = createTempSymbolicLinkedRelativeDir();
3457-
3484+
final Path symlinkDir = createTempSymbolicLinkedRelativeDir().getLeft();
34583485
final File file = symlinkDir.resolve("file").toFile();
34593486
FileUtils.writeStringToFile(file, "Hello /u1234", StandardCharsets.UTF_8);
3460-
34613487
final byte[] text = "Hello /u1234".getBytes();
34623488
TestUtils.assertEqualContent(text, file);
34633489
}

0 commit comments

Comments
 (0)