diff --git a/src/test/java/org/apache/commons/io/file/AbstractTempDirTest.java b/src/test/java/org/apache/commons/io/file/AbstractTempDirTest.java
index 38c0a34..e76f025 100644
--- a/src/test/java/org/apache/commons/io/file/AbstractTempDirTest.java
+++ b/src/test/java/org/apache/commons/io/file/AbstractTempDirTest.java
@@ -31,22 +31,24 @@
  */
 public abstract class AbstractTempDirTest {
 
+    protected static final String SUB_DIR = "subdir";
+    protected static final String SYMLINKED_DIR = "symlinked-dir";
+
     /**
-     * Creates directory test fixtures.
+     * Creates directory test fixtures in the given directory {@code rootDir}.
      * <ol>
-     * <li>tempDirPath/subdir</li>
-     * <li>tempDirPath/symlinked-dir -> tempDirPath/subdir</li>
+     * <li>{@code rootDir/subdir}</li>
+     * <li>{@code rootDir/symlinked-dir} -> {@code rootDir/subdir}</li>
      * </ol>
      * @param rootDir Root for directory entries.
-     * @return Path to tempDirPath/subdir.
+     * @return Path for {@code tempDirPath/subdir}.
      * @throws IOException if an I/O error occurs or the parent directory does not exist.
      */
     protected static Path createTempSymlinkedRelativeDir(final Path rootDir) throws IOException {
-        final Path targetDir = rootDir.resolve("subdir");
-        final Path symlinkDir = rootDir.resolve("symlinked-dir");
+        final Path targetDir = rootDir.resolve(SUB_DIR);
+        final Path symlinkDir = rootDir.resolve(SYMLINKED_DIR);
         Files.createDirectory(targetDir);
-        Files.createSymbolicLink(symlinkDir, targetDir);
-        return symlinkDir;
+        return Files.createSymbolicLink(symlinkDir, targetDir);
     }
 
     /**
@@ -56,15 +58,15 @@
     public Path managedTempDirPath;
 
     /**
-     * A temporary directory managed by each test so we can optionally fiddle with its permissions independently.
-     */
-    public Path tempDirPath;
-
-    /**
      * A File version of this test's Path object.
      */
     public File tempDirFile;
 
+    /**
+     * A temporary directory managed by each test so we can optionally fiddle with its permissions independently.
+     */
+    public Path tempDirPath;
+
     @BeforeEach
     public void beforeEachCreateTempDirs() throws IOException {
         tempDirPath = Files.createTempDirectory(managedTempDirPath, getClass().getSimpleName());
diff --git a/src/test/java/org/apache/commons/io/file/DeletingPathVisitorTest.java b/src/test/java/org/apache/commons/io/file/DeletingPathVisitorTest.java
index 8570d4a..a0e3b3f 100644
--- a/src/test/java/org/apache/commons/io/file/DeletingPathVisitorTest.java
+++ b/src/test/java/org/apache/commons/io/file/DeletingPathVisitorTest.java
@@ -18,14 +18,18 @@
 package org.apache.commons.io.file;
 
 import static org.apache.commons.io.file.CounterAssertions.assertCounts;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 
 import org.apache.commons.io.file.Counters.PathCounters;
 import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.MethodSource;
 
@@ -113,4 +117,42 @@
         // This will throw if not empty.
         Files.deleteIfExists(tempDirPath);
     }
+
+    /**
+     * Tests https://issues.apache.org/jira/browse/IO-850
+     */
+    @Test
+    public void testIO850DirectoriesOnly() throws IOException {
+        final Path rootDir = Files.createDirectory(managedTempDirPath.resolve("IO850"));
+        createTempSymlinkedRelativeDir(rootDir);
+        final Path targetDir = rootDir.resolve(SUB_DIR);
+        final Path symlinkDir = rootDir.resolve(SYMLINKED_DIR);
+        final DeletingPathVisitor visitor = DeletingPathVisitor.withLongCounters();
+        Files.walkFileTree(rootDir, visitor);
+        assertFalse(Files.exists(targetDir));
+        assertFalse(Files.exists(symlinkDir));
+        assertFalse(Files.exists(rootDir));
+        assertTrue(visitor.getPathCounters().getDirectoryCounter().get() > 0);
+    }
+
+    /**
+     * Tests https://issues.apache.org/jira/browse/IO-850
+     */
+    @Test
+    public void testIO850DirectoriesAndFiles() throws IOException {
+        final Path rootDir = Files.createDirectory(managedTempDirPath.resolve("IO850"));
+        createTempSymlinkedRelativeDir(rootDir);
+        final Path targetDir = rootDir.resolve(SUB_DIR);
+        final Path symlinkDir = rootDir.resolve(SYMLINKED_DIR);
+        Files.write(targetDir.resolve("file0.txt"), "Hello".getBytes(StandardCharsets.UTF_8));
+        final Path subDir0 = Files.createDirectory(targetDir.resolve("subDir0"));
+        Files.write(subDir0.resolve("file1.txt"), "Hello".getBytes(StandardCharsets.UTF_8));
+        final DeletingPathVisitor visitor = DeletingPathVisitor.withLongCounters();
+        Files.walkFileTree(rootDir, visitor);
+        assertFalse(Files.exists(targetDir));
+        assertFalse(Files.exists(symlinkDir));
+        assertFalse(Files.exists(rootDir));
+        assertTrue(visitor.getPathCounters().getDirectoryCounter().get() > 0);
+        assertTrue(visitor.getPathCounters().getFileCounter().get() > 0);
+    }
 }
