• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements.  See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License.  You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
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  * Used to test FileFilterUtils.
34  */
35 public class AbstractFilterTest {
36 
37     /**
38      * The subversion directory name.
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 
assertFiltering(final IOFileFilter filter, final File file, final boolean expected)47     void assertFiltering(final IOFileFilter filter, final File file, final boolean expected) throws IOException {
48         // Note. This only tests the (File, String) version if the parent of
49         // the File passed in is not null
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 
assertFiltering(final IOFileFilter filter, final Path path, final boolean expected)69     void assertFiltering(final IOFileFilter filter, final Path path, final boolean expected) {
70         // Note. This only tests the (Path, Path) version if the parent of
71         // the File passed in is not null
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 
assertFooBarFileFiltering(IOFileFilter filter)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         // repeat for a List
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); // case-sensitive
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); // case-sensitive
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         // FileFilterUtils.nameFileFilter(String, IOCase) tests
165         filter = FileFilterUtils.nameFileFilter("foo", IOCase.INSENSITIVE);
166         assertFiltering(filter, new File("foo"), true);
167         assertFiltering(filter, new File("FOO"), true); // case-insensitive
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); // case-insensitive
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 
equalsLastModified(final File left, final File right)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 }
183