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.