1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.io;
18
19 import static org.junit.jupiter.api.Assertions.assertEquals;
20 import static org.junit.jupiter.api.Assertions.assertFalse;
21 import static org.junit.jupiter.api.Assertions.assertThrows;
22 import static org.junit.jupiter.api.Assertions.assertTrue;
23
24 import java.io.File;
25 import java.util.ArrayList;
26 import java.util.Collection;
27 import java.util.Iterator;
28 import java.util.stream.Collectors;
29
30 import org.apache.commons.io.filefilter.FileFilterUtils;
31 import org.apache.commons.io.filefilter.IOFileFilter;
32 import org.apache.commons.lang3.function.Consumers;
33 import org.junit.jupiter.api.BeforeEach;
34 import org.junit.jupiter.api.Test;
35 import org.junit.jupiter.api.io.TempDir;
36
37
38
39
40 public class FileUtilsListFilesTest {
41
42 @TempDir
43 public File temporaryFolder;
44
45 private Collection<String> filesToFilenames(final Collection<File> files) {
46 return files.stream().map(File::getName).collect(Collectors.toList());
47 }
48
49
50
51
52
53
54
55 private Collection<String> filesToFilenames(final Iterator<File> files) {
56 final Collection<String> fileNames = new ArrayList<>();
57
58 files.forEachRemaining(f -> fileNames.add(f.getName()));
59 return fileNames;
60 }
61
62 @SuppressWarnings("ResultOfMethodCallIgnored")
63 @BeforeEach
64 public void setUp() throws Exception {
65 File dir = temporaryFolder;
66 File file = new File(dir, "dummy-build.xml");
67 FileUtils.touch(file);
68 file = new File(dir, "README");
69 FileUtils.touch(file);
70
71 dir = new File(dir, "subdir1");
72 dir.mkdirs();
73 file = new File(dir, "dummy-build.xml");
74 FileUtils.touch(file);
75 file = new File(dir, "dummy-readme.txt");
76 FileUtils.touch(file);
77
78 dir = new File(dir, "subsubdir1");
79 dir.mkdirs();
80 file = new File(dir, "dummy-file.txt");
81 FileUtils.touch(file);
82 file = new File(dir, "dummy-index.html");
83 FileUtils.touch(file);
84
85 dir = dir.getParentFile();
86 dir = new File(dir, "CVS");
87 dir.mkdirs();
88 file = new File(dir, "Entries");
89 FileUtils.touch(file);
90 file = new File(dir, "Repository");
91 FileUtils.touch(file);
92 }
93
94 @Test
95 public void testIterateFilesByExtension() {
96 final String[] extensions = { "xml", "txt" };
97
98 Iterator<File> files = FileUtils.iterateFiles(temporaryFolder, extensions, false);
99 try {
100 final Collection<String> fileNames = filesToFilenames(files);
101 assertEquals(1, fileNames.size());
102 assertTrue(fileNames.contains("dummy-build.xml"));
103 assertFalse(fileNames.contains("README"));
104 assertFalse(fileNames.contains("dummy-file.txt"));
105 } finally {
106
107 files.forEachRemaining(Consumers.nop());
108 }
109
110 try {
111 files = FileUtils.iterateFiles(temporaryFolder, extensions, true);
112 final Collection<String> fileNames = filesToFilenames(files);
113 assertEquals(4, fileNames.size());
114 assertTrue(fileNames.contains("dummy-file.txt"));
115 assertFalse(fileNames.contains("dummy-index.html"));
116 } finally {
117
118 files.forEachRemaining(Consumers.nop());
119 }
120
121 files = FileUtils.iterateFiles(temporaryFolder, null, false);
122 try {
123 final Collection<String> fileNames = filesToFilenames(files);
124 assertEquals(2, fileNames.size());
125 assertTrue(fileNames.contains("dummy-build.xml"));
126 assertTrue(fileNames.contains("README"));
127 assertFalse(fileNames.contains("dummy-file.txt"));
128 } finally {
129
130 files.forEachRemaining(Consumers.nop());
131 }
132 }
133
134 @Test
135 public void testListFiles() {
136 Collection<File> files;
137 Collection<String> fileNames;
138 IOFileFilter fileFilter;
139 IOFileFilter dirFilter;
140
141
142 fileFilter = FileFilterUtils.trueFileFilter();
143 files = FileUtils.listFiles(temporaryFolder, fileFilter, null);
144 fileNames = filesToFilenames(files);
145 assertTrue(fileNames.contains("dummy-build.xml"), "'dummy-build.xml' is missing");
146 assertFalse(fileNames.contains("dummy-index.html"), "'dummy-index.html' shouldn't be found");
147 assertFalse(fileNames.contains("Entries"), "'Entries' shouldn't be found");
148
149
150 fileFilter = FileFilterUtils.trueFileFilter();
151 dirFilter = FileFilterUtils.notFileFilter(FileFilterUtils.nameFileFilter("CVS"));
152 files = FileUtils.listFiles(temporaryFolder, fileFilter, dirFilter);
153 fileNames = filesToFilenames(files);
154 assertTrue(fileNames.contains("dummy-build.xml"), "'dummy-build.xml' is missing");
155 assertTrue(fileNames.contains("dummy-index.html"), "'dummy-index.html' is missing");
156 assertFalse(fileNames.contains("Entries"), "'Entries' shouldn't be found");
157
158
159 fileFilter = FileFilterUtils.trueFileFilter();
160 dirFilter = FileFilterUtils.makeCVSAware(null);
161 files = FileUtils.listFiles(temporaryFolder, fileFilter, dirFilter);
162 fileNames = filesToFilenames(files);
163 assertTrue(fileNames.contains("dummy-build.xml"), "'dummy-build.xml' is missing");
164 assertTrue(fileNames.contains("dummy-index.html"), "'dummy-index.html' is missing");
165 assertFalse(fileNames.contains("Entries"), "'Entries' shouldn't be found");
166
167
168 fileFilter = FileFilterUtils.trueFileFilter();
169 dirFilter = FileFilterUtils.prefixFileFilter("sub");
170 dirFilter = FileFilterUtils.makeCVSAware(dirFilter);
171 files = FileUtils.listFiles(temporaryFolder, fileFilter, dirFilter);
172 fileNames = filesToFilenames(files);
173 assertTrue(fileNames.contains("dummy-build.xml"), "'dummy-build.xml' is missing");
174 assertTrue(fileNames.contains("dummy-index.html"), "'dummy-index.html' is missing");
175 assertFalse(fileNames.contains("Entries"), "'Entries' shouldn't be found");
176
177 assertThrows(NullPointerException.class, () -> FileUtils.listFiles(temporaryFolder, null, null));
178 }
179
180 @Test
181 public void testListFilesByExtension() {
182 final String[] extensions = {"xml", "txt"};
183
184 Collection<File> files = FileUtils.listFiles(temporaryFolder, extensions, false);
185 assertEquals(1, files.size());
186 Collection<String> fileNames = filesToFilenames(files);
187 assertTrue(fileNames.contains("dummy-build.xml"));
188 assertFalse(fileNames.contains("README"));
189 assertFalse(fileNames.contains("dummy-file.txt"));
190
191 files = FileUtils.listFiles(temporaryFolder, extensions, true);
192 fileNames = filesToFilenames(files);
193 assertEquals(4, fileNames.size());
194 assertTrue(fileNames.contains("dummy-file.txt"));
195 assertFalse(fileNames.contains("dummy-index.html"));
196
197 files = FileUtils.listFiles(temporaryFolder, null, false);
198 assertEquals(2, files.size());
199 fileNames = filesToFilenames(files);
200 assertTrue(fileNames.contains("dummy-build.xml"));
201 assertTrue(fileNames.contains("README"));
202 assertFalse(fileNames.contains("dummy-file.txt"));
203 }
204
205 }