Add FileUtilsTest.testForceDeleteReadOnlyDirectory()
diff --git a/src/test/java/org/apache/commons/io/FileUtilsTest.java b/src/test/java/org/apache/commons/io/FileUtilsTest.java
index c2bddc3..ccad1b1 100644
--- a/src/test/java/org/apache/commons/io/FileUtilsTest.java
+++ b/src/test/java/org/apache/commons/io/FileUtilsTest.java
@@ -79,6 +79,7 @@
import java.util.zip.Checksum;
import org.apache.commons.io.file.AbstractTempDirTest;
+import org.apache.commons.io.file.Counters.PathCounters;
import org.apache.commons.io.file.PathUtils;
import org.apache.commons.io.file.TempDirectory;
import org.apache.commons.io.file.TempFile;
@@ -1663,6 +1664,36 @@
}
@Test
+ public void testForceDeleteReadOnlyDirectory() throws Exception {
+ try (TempDirectory destDir = TempDirectory.create("dir-");
+ TempFile destination = TempFile.create(destDir, "test-", ".txt")) {
+ final File file = destination.toFile();
+ assertTrue(file.setReadOnly());
+ assertTrue(file.canRead());
+ assertFalse(file.canWrite());
+ // sanity check that File.delete() deletes a read-only directory.
+ final PathCounters delete = destDir.delete();
+ assertEquals(1, delete.getDirectoryCounter().get());
+ assertEquals(1, delete.getFileCounter().get());
+ assertFalse(file.exists());
+ assertFalse(destDir.exists());
+ }
+ try (TempDirectory destDir = TempDirectory.create("dir-");
+ TempFile destination = TempFile.create(destDir, "test-", ".txt")) {
+ final File dir = destDir.toFile();
+ // real test
+ assertTrue(dir.setReadOnly());
+ assertTrue(dir.canRead());
+ assertFalse(dir.canWrite());
+ assertTrue(dir.exists(), "File doesn't exist to delete");
+ FileUtils.forceDelete(dir);
+ assertFalse(destination.exists(), "Check deletion");
+ assertFalse(dir.exists(), "Check deletion");
+ assertFalse(destDir.exists(), "Check deletion");
+ }
+ }
+
+ @Test
public void testForceDeleteReadOnlyFile() throws Exception {
try (TempFile destination = TempFile.create("test-", ".txt")) {
final File file = destination.toFile();
diff --git a/src/test/java/org/apache/commons/io/file/AbstractPathWrapper.java b/src/test/java/org/apache/commons/io/file/AbstractPathWrapper.java
index 674ee3d..4c5857c 100644
--- a/src/test/java/org/apache/commons/io/file/AbstractPathWrapper.java
+++ b/src/test/java/org/apache/commons/io/file/AbstractPathWrapper.java
@@ -21,6 +21,7 @@
import java.io.IOException;
import java.net.URI;
import java.nio.file.FileSystem;
+import java.nio.file.Files;
import java.nio.file.LinkOption;
import java.nio.file.Path;
import java.nio.file.WatchEvent.Kind;
@@ -86,6 +87,16 @@
}
/**
+ * Delegates to {@link Files#exists(Path, LinkOption...)}.
+ *
+ * @param options See {@link Files#exists(Path, LinkOption...)}.
+ * @return See {@link Files#exists(Path, LinkOption...)}.
+ */
+ public boolean exists(final LinkOption... options) {
+ return Files.exists(path, options);
+ }
+
+ /**
* Gets the delegate Path.
*
* @return the delegate Path.