1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.io.filefilter;
18
19 import static org.junit.jupiter.api.Assertions.assertEquals;
20 import static org.junit.jupiter.api.Assertions.assertNotNull;
21
22 import java.io.File;
23 import java.io.IOException;
24 import java.nio.file.FileVisitResult;
25 import java.nio.file.Files;
26 import java.nio.file.Path;
27 import java.nio.file.attribute.BasicFileAttributes;
28
29 import org.apache.commons.io.IOCase;
30 import org.junit.jupiter.api.io.TempDir;
31
32
33
34
35 public class AbstractFilterTest {
36
37
38
39
40 static final String SVN_DIR_NAME = ".svn";
41
42 static final boolean WINDOWS = File.separatorChar == '\\';
43
44 @TempDir
45 public File temporaryFolder;
46
47 void assertFiltering(final IOFileFilter filter, final File file, final boolean expected) throws IOException {
48
49
50 assertEquals(expected, filter.accept(file), "Filter(File) " + filter.getClass().getName() + " not " + expected + " for " + file);
51
52 if (file != null && file.getParentFile() != null) {
53 assertEquals(expected, filter.accept(file.getParentFile(), file.getName()),
54 "Filter(File, String) " + filter.getClass().getName() + " not " + expected + " for " + file);
55 final Path path = file.toPath();
56 assertEquals(expected, filter.accept(path, null) != FileVisitResult.TERMINATE, filter::toString);
57 if (Files.isRegularFile(path)) {
58 assertEquals(expected, filter.accept(path, Files.readAttributes(path, BasicFileAttributes.class)) != FileVisitResult.TERMINATE,
59 filter::toString);
60 }
61 assertEquals(expected, filter.matches(path), filter::toString);
62 } else if (file == null) {
63 assertEquals(expected, filter.accept(null), "Filter(File, String) " + filter.getClass().getName() + " not " + expected + " for null");
64 assertEquals(expected, filter.matches(null), "Filter(File, String) " + filter.getClass().getName() + " not " + expected + " for null");
65 }
66 assertNotNull(filter.toString());
67 }
68
69 void assertFiltering(final IOFileFilter filter, final Path path, final boolean expected) {
70
71
72 final FileVisitResult expectedFileVisitResult = AbstractFileFilter.toDefaultFileVisitResult(expected);
73 assertEquals(expectedFileVisitResult, filter.accept(path, null),
74 "Filter(Path) " + filter.getClass().getName() + " not " + expectedFileVisitResult + " for " + path);
75
76 if (path != null && path.getParent() != null) {
77 assertEquals(expectedFileVisitResult, filter.accept(path, null),
78 "Filter(Path, Path) " + filter.getClass().getName() + " not " + expectedFileVisitResult + " for " + path);
79 assertEquals(expectedFileVisitResult != FileVisitResult.TERMINATE, filter.matches(path),
80 "Filter(Path, Path) " + filter.getClass().getName() + " not " + expectedFileVisitResult + " for " + path);
81 } else if (path == null) {
82 assertEquals(expectedFileVisitResult, filter.accept(path, null),
83 "Filter(Path, Path) " + filter.getClass().getName() + " not " + expectedFileVisitResult + " for null");
84 assertEquals(expectedFileVisitResult != FileVisitResult.TERMINATE, filter.matches(path),
85 "Filter(Path, Path) " + filter.getClass().getName() + " not " + expectedFileVisitResult + " for null");
86 }
87 assertNotNull(filter.toString());
88 }
89
90 void assertFooBarFileFiltering(IOFileFilter filter) throws IOException {
91 assertFiltering(filter, new File("foo"), true);
92 assertFiltering(filter, new File("foo"), true);
93 assertFiltering(filter, new File("bar"), true);
94 assertFiltering(filter, new File("fred"), false);
95 assertFiltering(filter, new File("foo").toPath(), true);
96 assertFiltering(filter, new File("foo").toPath(), true);
97 assertFiltering(filter, new File("bar").toPath(), true);
98 assertFiltering(filter, new File("fred").toPath(), false);
99
100 filter = new NameFileFilter(new String[] { "foo", "bar" }, IOCase.SENSITIVE);
101 assertFiltering(filter, new File("foo"), true);
102 assertFiltering(filter, new File("bar"), true);
103 assertFiltering(filter, new File("FOO"), false);
104 assertFiltering(filter, new File("BAR"), false);
105 assertFiltering(filter, new File("foo").toPath(), true);
106 assertFiltering(filter, new File("bar").toPath(), true);
107 assertFiltering(filter, new File("FOO").toPath(), false);
108 assertFiltering(filter, new File("BAR").toPath(), false);
109
110 filter = new NameFileFilter(new String[] { "foo", "bar" }, IOCase.INSENSITIVE);
111 assertFiltering(filter, new File("foo"), true);
112 assertFiltering(filter, new File("bar"), true);
113 assertFiltering(filter, new File("FOO"), true);
114 assertFiltering(filter, new File("BAR"), true);
115 assertFiltering(filter, new File("foo").toPath(), true);
116 assertFiltering(filter, new File("bar").toPath(), true);
117 assertFiltering(filter, new File("FOO").toPath(), true);
118 assertFiltering(filter, new File("BAR").toPath(), true);
119
120 filter = new NameFileFilter(new String[] { "foo", "bar" }, IOCase.SYSTEM);
121 assertFiltering(filter, new File("foo"), true);
122 assertFiltering(filter, new File("bar"), true);
123 assertFiltering(filter, new File("FOO"), WINDOWS);
124 assertFiltering(filter, new File("BAR"), WINDOWS);
125 assertFiltering(filter, new File("foo").toPath(), true);
126 assertFiltering(filter, new File("bar").toPath(), true);
127 assertFiltering(filter, new File("FOO").toPath(), WINDOWS);
128 assertFiltering(filter, new File("BAR").toPath(), WINDOWS);
129
130 filter = new NameFileFilter(new String[] { "foo", "bar" }, null);
131 assertFiltering(filter, new File("foo"), true);
132 assertFiltering(filter, new File("bar"), true);
133 assertFiltering(filter, new File("FOO"), false);
134 assertFiltering(filter, new File("BAR"), false);
135 assertFiltering(filter, new File("foo").toPath(), true);
136 assertFiltering(filter, new File("bar").toPath(), true);
137 assertFiltering(filter, new File("FOO").toPath(), false);
138 assertFiltering(filter, new File("BAR").toPath(), false);
139
140
141 final java.util.ArrayList<String> list = new java.util.ArrayList<>();
142 list.add("foo");
143 list.add("bar");
144 filter = new NameFileFilter(list);
145 assertFiltering(filter, new File("foo"), true);
146 assertFiltering(filter, new File("bar"), true);
147 assertFiltering(filter, new File("fred"), false);
148 assertFiltering(filter, new File("foo").toPath(), true);
149 assertFiltering(filter, new File("bar").toPath(), true);
150 assertFiltering(filter, new File("fred").toPath(), false);
151
152 filter = new NameFileFilter("foo");
153 assertFiltering(filter, new File("foo"), true);
154 assertFiltering(filter, new File("FOO"), false);
155 assertFiltering(filter, new File("barfoo"), false);
156 assertFiltering(filter, new File("foobar"), false);
157 assertFiltering(filter, new File("fred"), false);
158 assertFiltering(filter, new File("foo").toPath(), true);
159 assertFiltering(filter, new File("FOO").toPath(), false);
160 assertFiltering(filter, new File("barfoo").toPath(), false);
161 assertFiltering(filter, new File("foobar").toPath(), false);
162 assertFiltering(filter, new File("fred").toPath(), false);
163
164
165 filter = FileFilterUtils.nameFileFilter("foo", IOCase.INSENSITIVE);
166 assertFiltering(filter, new File("foo"), true);
167 assertFiltering(filter, new File("FOO"), true);
168 assertFiltering(filter, new File("barfoo"), false);
169 assertFiltering(filter, new File("foobar"), false);
170 assertFiltering(filter, new File("fred"), false);
171 assertFiltering(filter, new File("foo").toPath(), true);
172 assertFiltering(filter, new File("FOO").toPath(), true);
173 assertFiltering(filter, new File("barfoo").toPath(), false);
174 assertFiltering(filter, new File("foobar").toPath(), false);
175 assertFiltering(filter, new File("fred").toPath(), false);
176 }
177
178 boolean equalsLastModified(final File left, final File right) throws IOException {
179 return Files.getLastModifiedTime(left.toPath()).equals(Files.getLastModifiedTime(right.toPath()));
180 }
181
182 }