Skip to content

Commit b375ca5

Browse files
author
Gary Gregory
committed
Add missing CopyDirectoryVisitor tests
1 parent 00bf113 commit b375ca5

3 files changed

Lines changed: 84 additions & 17 deletions

File tree

src/main/java/org/apache/commons/io/file/CopyDirectoryVisitor.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@
3636
*/
3737
public class CopyDirectoryVisitor extends CountingPathVisitor {
3838

39+
private static CopyOption[] toCopyOption(final CopyOption... copyOptions) {
40+
return copyOptions == null ? PathUtils.EMPTY_COPY_OPTIONS : copyOptions.clone();
41+
}
42+
3943
private final CopyOption[] copyOptions;
4044
private final Path sourceDirectory;
4145
private final Path targetDirectory;
@@ -52,7 +56,7 @@ public CopyDirectoryVisitor(final PathCounters pathCounter, final Path sourceDir
5256
super(pathCounter);
5357
this.sourceDirectory = sourceDirectory;
5458
this.targetDirectory = targetDirectory;
55-
this.copyOptions = copyOptions == null ? PathUtils.EMPTY_COPY_OPTIONS : copyOptions.clone();
59+
this.copyOptions = toCopyOption(copyOptions);
5660
}
5761

5862
/**
@@ -71,7 +75,7 @@ public CopyDirectoryVisitor(final PathCounters pathCounter, final PathFilter fil
7175
super(pathCounter, fileFilter, dirFilter);
7276
this.sourceDirectory = sourceDirectory;
7377
this.targetDirectory = targetDirectory;
74-
this.copyOptions = copyOptions == null ? PathUtils.EMPTY_COPY_OPTIONS : copyOptions.clone();
78+
this.copyOptions = toCopyOption(copyOptions);
7579
}
7680

7781
/**

src/test/java/org/apache/commons/io/file/CopyDirectoryVisitorTest.java

Lines changed: 68 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,18 @@
1818
package org.apache.commons.io.file;
1919

2020
import static org.apache.commons.io.file.CounterAssertions.assertCounts;
21-
21+
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
22+
import static org.junit.jupiter.api.Assertions.assertEquals;
23+
import static org.junit.jupiter.api.Assertions.assertNotEquals;
2224
import java.io.IOException;
25+
import java.nio.file.CopyOption;
2326
import java.nio.file.Path;
2427
import java.nio.file.Paths;
2528
import java.nio.file.StandardCopyOption;
29+
import java.util.function.Supplier;
2630

2731
import org.apache.commons.io.file.Counters.PathCounters;
32+
import org.apache.commons.io.filefilter.TrueFileFilter;
2833
import org.junit.jupiter.api.io.TempDir;
2934
import org.junit.jupiter.params.ParameterizedTest;
3035
import org.junit.jupiter.params.provider.MethodSource;
@@ -34,6 +39,8 @@
3439
*/
3540
public class CopyDirectoryVisitorTest extends TestArguments {
3641

42+
private static final CopyOption[] EXPECTED_COPY_OPTIONS = {StandardCopyOption.REPLACE_EXISTING};
43+
3744
@TempDir
3845
private Path targetDir;
3946

@@ -44,8 +51,43 @@ public class CopyDirectoryVisitorTest extends TestArguments {
4451
@MethodSource("pathCounters")
4552
public void testCopyDirectoryEmptyFolder(final PathCounters pathCounters) throws IOException {
4653
try (TempDirectory sourceDir = TempDirectory.create(getClass().getSimpleName())) {
47-
assertCounts(1, 0, 0, PathUtils
48-
.visitFileTree(new CopyDirectoryVisitor(pathCounters, sourceDir, targetDir, StandardCopyOption.REPLACE_EXISTING), sourceDir.get()));
54+
final Supplier<CopyDirectoryVisitor> supplier = () -> new CopyDirectoryVisitor(pathCounters, sourceDir, targetDir, EXPECTED_COPY_OPTIONS);
55+
final CopyDirectoryVisitor visitFileTree = PathUtils.visitFileTree(supplier.get(), sourceDir.get());
56+
assertCounts(1, 0, 0, visitFileTree);
57+
assertArrayEquals(EXPECTED_COPY_OPTIONS, visitFileTree.getCopyOptions());
58+
assertEquals(sourceDir.get(), ((PathWrapper) visitFileTree.getSourceDirectory()).get());
59+
assertEquals(sourceDir, visitFileTree.getSourceDirectory());
60+
assertEquals(targetDir, visitFileTree.getTargetDirectory());
61+
assertEquals(targetDir, visitFileTree.getTargetDirectory());
62+
//
63+
assertEquals(visitFileTree, supplier.get());
64+
assertEquals(visitFileTree.hashCode(), supplier.get().hashCode());
65+
assertEquals(visitFileTree, visitFileTree);
66+
assertEquals(visitFileTree.hashCode(), visitFileTree.hashCode());
67+
assertNotEquals(visitFileTree, "not");
68+
assertNotEquals(visitFileTree, CountingPathVisitor.withLongCounters());
69+
}
70+
}
71+
72+
/**
73+
* Tests an empty folder.
74+
*/
75+
@ParameterizedTest
76+
@MethodSource("pathCounters")
77+
public void testCopyDirectoryEmptyFolderFilters(final PathCounters pathCounters) throws IOException {
78+
try (TempDirectory sourceDir = TempDirectory.create(getClass().getSimpleName())) {
79+
final Supplier<CopyDirectoryVisitor> supplier = () -> new CopyDirectoryVisitor(pathCounters, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE,
80+
sourceDir, targetDir, EXPECTED_COPY_OPTIONS);
81+
final CopyDirectoryVisitor visitFileTree = PathUtils.visitFileTree(supplier.get(), sourceDir.get());
82+
assertCounts(1, 0, 0, visitFileTree);
83+
assertArrayEquals(EXPECTED_COPY_OPTIONS, visitFileTree.getCopyOptions());
84+
assertEquals(sourceDir, visitFileTree.getSourceDirectory());
85+
assertEquals(targetDir, visitFileTree.getTargetDirectory());
86+
//
87+
assertEquals(visitFileTree, supplier.get());
88+
assertEquals(visitFileTree.hashCode(), supplier.get().hashCode());
89+
assertEquals(visitFileTree, visitFileTree);
90+
assertEquals(visitFileTree.hashCode(), visitFileTree.hashCode());
4991
}
5092
}
5193

@@ -56,9 +98,17 @@ public void testCopyDirectoryEmptyFolder(final PathCounters pathCounters) throws
5698
@MethodSource("pathCounters")
5799
public void testCopyDirectoryFolders1FileSize0(final PathCounters pathCounters) throws IOException {
58100
final Path sourceDir = Paths.get("src/test/resources/org/apache/commons/io/dirs-1-file-size-0");
59-
assertCounts(1, 1, 0, PathUtils.visitFileTree(
60-
new CopyDirectoryVisitor(pathCounters, sourceDir, targetDir, StandardCopyOption.REPLACE_EXISTING),
61-
sourceDir));
101+
final Supplier<CopyDirectoryVisitor> supplier = () -> new CopyDirectoryVisitor(pathCounters, sourceDir, targetDir, EXPECTED_COPY_OPTIONS);
102+
final CopyDirectoryVisitor visitFileTree = PathUtils.visitFileTree(supplier.get(), sourceDir);
103+
assertCounts(1, 1, 0, visitFileTree);
104+
assertArrayEquals(EXPECTED_COPY_OPTIONS, visitFileTree.getCopyOptions());
105+
assertEquals(sourceDir, visitFileTree.getSourceDirectory());
106+
assertEquals(targetDir, visitFileTree.getTargetDirectory());
107+
//
108+
assertEquals(visitFileTree, supplier.get());
109+
assertEquals(visitFileTree.hashCode(), supplier.get().hashCode());
110+
assertEquals(visitFileTree, visitFileTree);
111+
assertEquals(visitFileTree.hashCode(), visitFileTree.hashCode());
62112
}
63113

64114
/**
@@ -68,9 +118,12 @@ public void testCopyDirectoryFolders1FileSize0(final PathCounters pathCounters)
68118
@MethodSource("pathCounters")
69119
public void testCopyDirectoryFolders1FileSize1(final PathCounters pathCounters) throws IOException {
70120
final Path sourceDir = Paths.get("src/test/resources/org/apache/commons/io/dirs-1-file-size-1");
71-
assertCounts(1, 1, 1, PathUtils.visitFileTree(
72-
new CopyDirectoryVisitor(pathCounters, sourceDir, targetDir, StandardCopyOption.REPLACE_EXISTING),
73-
sourceDir));
121+
final CopyDirectoryVisitor visitFileTree = PathUtils.visitFileTree(new CopyDirectoryVisitor(pathCounters, sourceDir, targetDir, EXPECTED_COPY_OPTIONS),
122+
sourceDir);
123+
assertCounts(1, 1, 1, visitFileTree);
124+
assertArrayEquals(EXPECTED_COPY_OPTIONS, visitFileTree.getCopyOptions());
125+
assertEquals(sourceDir, visitFileTree.getSourceDirectory());
126+
assertEquals(targetDir, visitFileTree.getTargetDirectory());
74127
}
75128

76129
/**
@@ -80,9 +133,12 @@ public void testCopyDirectoryFolders1FileSize1(final PathCounters pathCounters)
80133
@MethodSource("pathCounters")
81134
public void testCopyDirectoryFolders2FileSize2(final PathCounters pathCounters) throws IOException {
82135
final Path sourceDir = Paths.get("src/test/resources/org/apache/commons/io/dirs-2-file-size-2");
83-
assertCounts(3, 2, 2, PathUtils.visitFileTree(
84-
new CopyDirectoryVisitor(pathCounters, sourceDir, targetDir, StandardCopyOption.REPLACE_EXISTING),
85-
sourceDir));
136+
final CopyDirectoryVisitor visitFileTree = PathUtils.visitFileTree(new CopyDirectoryVisitor(pathCounters, sourceDir, targetDir, EXPECTED_COPY_OPTIONS),
137+
sourceDir);
138+
assertCounts(3, 2, 2, visitFileTree);
139+
assertArrayEquals(EXPECTED_COPY_OPTIONS, visitFileTree.getCopyOptions());
140+
assertEquals(sourceDir, visitFileTree.getSourceDirectory());
141+
assertEquals(targetDir, visitFileTree.getTargetDirectory());
86142
}
87143

88144
}

src/test/java/org/apache/commons/io/file/PathWrapper.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,15 @@ public boolean endsWith(final String other) {
6969
}
7070

7171
@Override
72-
public boolean equals(final Object other) {
73-
return path.equals(other);
72+
public boolean equals(final Object obj) {
73+
if (this == obj) {
74+
return true;
75+
}
76+
if (!(obj instanceof PathWrapper)) {
77+
return false;
78+
}
79+
final PathWrapper other = (PathWrapper) obj;
80+
return Objects.equals(path, other.path);
7481
}
7582

7683
@Override
@@ -119,7 +126,7 @@ public Path getRoot() {
119126

120127
@Override
121128
public int hashCode() {
122-
return path.hashCode();
129+
return Objects.hash(path);
123130
}
124131

125132
@Override

0 commit comments

Comments
 (0)