This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-io.git
The following commit(s) were added to refs/heads/master by this push: new b2ea4fa [IO-632] Add PathUtils for operations on NIO Path. b2ea4fa is described below commit b2ea4fabfc9c749b2e11805300b1cfb45e4289f6 Author: Gary Gregory <gardgreg...@gmail.com> AuthorDate: Sat Oct 12 16:05:35 2019 -0400 [IO-632] Add PathUtils for operations on NIO Path. Add PathUtils.cleanDirectory(Path). --- .../java/org/apache/commons/io/file/Counters.java | 2 +- .../commons/io/file/CountingPathVisitor.java | 2 +- .../java/org/apache/commons/io/file/PathUtils.java | 17 +++++- .../commons/io/file/CleaningPathVisitorTest.java | 10 +-- .../commons/io/file/DeletingPathVisitorTest.java | 10 +-- ...rTest.java => PathUtilsCleanDirectoryTest.java} | 71 ++++++---------------- .../org/apache/commons/io/file/TestArguments.java | 18 +++--- 7 files changed, 52 insertions(+), 78 deletions(-) diff --git a/src/main/java/org/apache/commons/io/file/Counters.java b/src/main/java/org/apache/commons/io/file/Counters.java index f0a32b3..4d1c33a 100644 --- a/src/main/java/org/apache/commons/io/file/Counters.java +++ b/src/main/java/org/apache/commons/io/file/Counters.java @@ -37,7 +37,7 @@ public class Counters { /** * Constructs a new instance. - * + * * @param byteCounter the byte counter. * @param directoryCounter the directory counter. * @param fileCounter the file counter. diff --git a/src/main/java/org/apache/commons/io/file/CountingPathVisitor.java b/src/main/java/org/apache/commons/io/file/CountingPathVisitor.java index 2ca589b..a205dea 100644 --- a/src/main/java/org/apache/commons/io/file/CountingPathVisitor.java +++ b/src/main/java/org/apache/commons/io/file/CountingPathVisitor.java @@ -87,7 +87,7 @@ public class CountingPathVisitor extends SimplePathVisitor { /** * Updates the counters for visiting the given file. - * + * * @param file the visited file. * @param attrs the visited file attributes. */ diff --git a/src/main/java/org/apache/commons/io/file/PathUtils.java b/src/main/java/org/apache/commons/io/file/PathUtils.java index 1dc5705..17b30da 100644 --- a/src/main/java/org/apache/commons/io/file/PathUtils.java +++ b/src/main/java/org/apache/commons/io/file/PathUtils.java @@ -36,6 +36,17 @@ import org.apache.commons.io.file.Counters.PathCounters; public final class PathUtils { /** + * Cleans a directory including sub-directories without deleting directories. + * + * @param directory directory to clean. + * @return The visitor used to clean the given directory. + * @throws IOException if an I/O error is thrown by a visitor method. + */ + public static PathCounters cleanDirectory(final Path directory) throws IOException { + return visitFileTree(CleaningPathVisitor.withLongCounters(), directory).getPathCounters(); + } + + /** * Counts aspects of a directory including sub-directories. * * @param directory directory to delete. @@ -74,7 +85,7 @@ public final class PathUtils { * @throws IOException if an I/O error is thrown by a visitor method. */ public static PathCounters deleteDirectory(final Path directory) throws IOException { - return visitFileTree(new DeletingPathVisitor(Counters.longPathCounters()), directory).getPathCounters(); + return visitFileTree(DeletingPathVisitor.withLongCounters(), directory).getPathCounters(); } /** @@ -168,8 +179,8 @@ public final class PathUtils { * * @throws IOException if an I/O error is thrown by a visitor method */ - public static <T extends FileVisitor<? super Path>> T visitFileTree(final T visitor, final String first, final String... more) - throws IOException { + public static <T extends FileVisitor<? super Path>> T visitFileTree(final T visitor, final String first, + final String... more) throws IOException { return visitFileTree(visitor, Paths.get(first, more)); } diff --git a/src/test/java/org/apache/commons/io/file/CleaningPathVisitorTest.java b/src/test/java/org/apache/commons/io/file/CleaningPathVisitorTest.java index a6dfdcb..62802c8 100644 --- a/src/test/java/org/apache/commons/io/file/CleaningPathVisitorTest.java +++ b/src/test/java/org/apache/commons/io/file/CleaningPathVisitorTest.java @@ -50,6 +50,11 @@ public class CleaningPathVisitorTest extends TestArguments { } } + private void applyCleanEmptyDirectory(final CleaningPathVisitor visitor) throws IOException { + Files.walkFileTree(tempDir, visitor); + assertCounts(1, 0, 0, visitor); + } + @BeforeEach public void beforeEach() throws IOException { tempDir = Files.createTempDirectory(getClass().getCanonicalName()); @@ -64,11 +69,6 @@ public class CleaningPathVisitorTest extends TestArguments { applyCleanEmptyDirectory(visitor); } - private void applyCleanEmptyDirectory(final CleaningPathVisitor visitor) throws IOException { - Files.walkFileTree(tempDir, visitor); - assertCounts(1, 0, 0, visitor); - } - /** * Tests an empty folder. */ 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 b31c614..0a56831 100644 --- a/src/test/java/org/apache/commons/io/file/DeletingPathVisitorTest.java +++ b/src/test/java/org/apache/commons/io/file/DeletingPathVisitorTest.java @@ -47,6 +47,11 @@ public class DeletingPathVisitorTest extends TestArguments { } } + private void applyDeleteEmptyDirectory(final DeletingPathVisitor visitor) throws IOException { + Files.walkFileTree(tempDir, visitor); + assertCounts(1, 0, 0, visitor); + } + @BeforeEach public void beforeEach() throws IOException { tempDir = Files.createTempDirectory(getClass().getCanonicalName()); @@ -63,11 +68,6 @@ public class DeletingPathVisitorTest extends TestArguments { Files.deleteIfExists(tempDir); } - private void applyDeleteEmptyDirectory(final DeletingPathVisitor visitor) throws IOException { - Files.walkFileTree(tempDir, visitor); - assertCounts(1, 0, 0, visitor); - } - /** * Tests an empty folder. */ diff --git a/src/test/java/org/apache/commons/io/file/CleaningPathVisitorTest.java b/src/test/java/org/apache/commons/io/file/PathUtilsCleanDirectoryTest.java similarity index 50% copy from src/test/java/org/apache/commons/io/file/CleaningPathVisitorTest.java copy to src/test/java/org/apache/commons/io/file/PathUtilsCleanDirectoryTest.java index a6dfdcb..dd0cb13 100644 --- a/src/test/java/org/apache/commons/io/file/CleaningPathVisitorTest.java +++ b/src/test/java/org/apache/commons/io/file/PathUtilsCleanDirectoryTest.java @@ -26,17 +26,14 @@ import java.nio.file.Path; import java.nio.file.Paths; import org.apache.commons.io.FileUtils; -import org.apache.commons.io.file.Counters.PathCounters; import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.api.Test; /** * Tests {@link DeletingPathVisitor}. */ -public class CleaningPathVisitorTest extends TestArguments { +public class PathUtilsCleanDirectoryTest { private Path tempDir; @@ -56,74 +53,40 @@ public class CleaningPathVisitorTest extends TestArguments { } /** - * Tests an empty folder. - */ - @ParameterizedTest - @MethodSource("cleaningPathVisitors") - public void testCleanEmptyDirectory(final CleaningPathVisitor visitor) throws IOException { - applyCleanEmptyDirectory(visitor); - } - - private void applyCleanEmptyDirectory(final CleaningPathVisitor visitor) throws IOException { - Files.walkFileTree(tempDir, visitor); - assertCounts(1, 0, 0, visitor); - } - - /** - * Tests an empty folder. - */ - @ParameterizedTest - @MethodSource("pathCounters") - public void testCleanEmptyDirectoryNullCtorArg(final PathCounters pathCounters) throws IOException { - applyCleanEmptyDirectory(new CleaningPathVisitor(pathCounters, (String[]) null)); - } - - /** * Tests a directory with one file of size 0. */ - @ParameterizedTest - @MethodSource("cleaningPathVisitors") - public void testCleanFolders1FileSize0(final CleaningPathVisitor visitor) throws IOException { + @Test + public void testCleanDirectory1FileSize0() throws IOException { FileUtils.copyDirectory(Paths.get("src/test/resources/org/apache/commons/io/dirs-1-file-size-0").toFile(), tempDir.toFile()); - assertCounts(1, 1, 0, PathUtils.visitFileTree(visitor, tempDir)); + assertCounts(1, 1, 0, PathUtils.cleanDirectory(tempDir)); } /** * Tests a directory with one file of size 1. */ - @ParameterizedTest - @MethodSource("cleaningPathVisitors") - public void testCleanFolders1FileSize1(final CleaningPathVisitor visitor) throws IOException { + @Test + public void testCleanDirectory1FileSize1() throws IOException { FileUtils.copyDirectory(Paths.get("src/test/resources/org/apache/commons/io/dirs-1-file-size-1").toFile(), tempDir.toFile()); - assertCounts(1, 1, 1, PathUtils.visitFileTree(visitor, tempDir)); + assertCounts(1, 1, 1, PathUtils.cleanDirectory(tempDir)); } /** - * Tests a directory with one file of size 1 but skip that file. + * Tests a directory with two subdirectorys, each containing one file of size 1. */ - @ParameterizedTest - @MethodSource("pathCounters") - public void testCleanFolders1FileSize1Skip(final PathCounters pathCounters) throws IOException { - FileUtils.copyDirectory(Paths.get("src/test/resources/org/apache/commons/io/dirs-1-file-size-1").toFile(), + @Test + public void testCleanDirectory2FileSize2() throws IOException { + FileUtils.copyDirectory(Paths.get("src/test/resources/org/apache/commons/io/dirs-2-file-size-2").toFile(), tempDir.toFile()); - final String skipFileName = "file-size-1.bin"; - final CountingPathVisitor visitor = new CleaningPathVisitor(pathCounters, skipFileName); - assertCounts(1, 1, 1, PathUtils.visitFileTree(visitor, tempDir)); - final Path skippedFile = tempDir.resolve(skipFileName); - Assertions.assertTrue(Files.exists(skippedFile)); - Files.delete(skippedFile); + assertCounts(3, 2, 2, PathUtils.cleanDirectory(tempDir)); } /** - * Tests a directory with two subdirectorys, each containing one file of size 1. + * Tests an empty folder. */ - @ParameterizedTest - @MethodSource("cleaningPathVisitors") - public void testCleanFolders2FileSize2(final CleaningPathVisitor visitor) throws IOException { - FileUtils.copyDirectory(Paths.get("src/test/resources/org/apache/commons/io/dirs-2-file-size-2").toFile(), - tempDir.toFile()); - assertCounts(3, 2, 2, PathUtils.visitFileTree(visitor, tempDir)); + @Test + public void testCleanEmptyDirectory() throws IOException { + assertCounts(1, 0, 0, PathUtils.cleanDirectory(tempDir)); } } diff --git a/src/test/java/org/apache/commons/io/file/TestArguments.java b/src/test/java/org/apache/commons/io/file/TestArguments.java index 428debb..2b9f210 100644 --- a/src/test/java/org/apache/commons/io/file/TestArguments.java +++ b/src/test/java/org/apache/commons/io/file/TestArguments.java @@ -23,11 +23,11 @@ import org.junit.jupiter.params.provider.Arguments; class TestArguments { - static Stream<Arguments> numberCounters() { + static Stream<Arguments> cleaningPathVisitors() { // @formatter:off return Stream.of( - Arguments.of(Counters.longCounter()), - Arguments.of(Counters.bigIntegerCounter())); + Arguments.of(CleaningPathVisitor.withBigIntegerCounters()), + Arguments.of(CleaningPathVisitor.withLongCounters())); // @formatter:on } @@ -39,19 +39,19 @@ class TestArguments { // @formatter:on } - static Stream<Arguments> cleaningPathVisitors() { + static Stream<Arguments> deletingPathVisitors() { // @formatter:off return Stream.of( - Arguments.of(CleaningPathVisitor.withBigIntegerCounters()), - Arguments.of(CleaningPathVisitor.withLongCounters())); + Arguments.of(DeletingPathVisitor.withBigIntegerCounters()), + Arguments.of(DeletingPathVisitor.withLongCounters())); // @formatter:on } - static Stream<Arguments> deletingPathVisitors() { + static Stream<Arguments> numberCounters() { // @formatter:off return Stream.of( - Arguments.of(DeletingPathVisitor.withBigIntegerCounters()), - Arguments.of(DeletingPathVisitor.withLongCounters())); + Arguments.of(Counters.longCounter()), + Arguments.of(Counters.bigIntegerCounter())); // @formatter:on }