View Javadoc
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  
18  package org.apache.commons.io.filefilter;
19  
20  import static org.junit.jupiter.api.Assertions.assertEquals;
21  import static org.junit.jupiter.api.Assertions.assertFalse;
22  import static org.junit.jupiter.api.Assertions.assertThrows;
23  import static org.junit.jupiter.api.Assertions.assertTrue;
24  
25  import java.io.File;
26  import java.io.IOException;
27  import java.nio.file.FileVisitResult;
28  import java.nio.file.Path;
29  import java.util.Arrays;
30  import java.util.List;
31  
32  import org.apache.commons.io.IOCase;
33  import org.junit.jupiter.api.Test;
34  
35  public class WildcardFileFilterTest extends AbstractFilterTest {
36  
37      @Test
38      public void testWildcard() throws IOException {
39          IOFileFilter filter = new WildcardFileFilter("*.txt");
40          assertFiltering(filter, new File("log.txt"), true);
41          assertFiltering(filter, new File("log.TXT"), false);
42          //
43          assertFiltering(filter, new File("log.txt").toPath(), true);
44          assertFiltering(filter, new File("log.TXT").toPath(), false);
45  
46          filter = new WildcardFileFilter("*.txt", IOCase.SENSITIVE);
47          assertFiltering(filter, new File("log.txt"), true);
48          assertFiltering(filter, new File("log.TXT"), false);
49          //
50          filter = WildcardFileFilter.builder().setWildcards("*.txt").setIoCase(IOCase.SENSITIVE).get();
51          assertFiltering(filter, new File("log.txt"), true);
52          assertFiltering(filter, new File("log.TXT"), false);
53          //
54          assertFiltering(filter, new File("log.txt").toPath(), true);
55          assertFiltering(filter, new File("log.TXT").toPath(), false);
56  
57          filter = WildcardFileFilter.builder().setWildcards("*.txt").setIoCase(IOCase.INSENSITIVE).get();
58          assertFiltering(filter, new File("log.txt"), true);
59          assertFiltering(filter, new File("log.TXT"), true);
60          //
61          assertFiltering(filter, new File("log.txt").toPath(), true);
62          assertFiltering(filter, new File("log.TXT").toPath(), true);
63  
64          filter = WildcardFileFilter.builder().setWildcards("*.txt").setIoCase(IOCase.SYSTEM).get();
65          assertFiltering(filter, new File("log.txt"), true);
66          assertFiltering(filter, new File("log.TXT"), WINDOWS);
67          //
68          assertFiltering(filter, new File("log.txt").toPath(), true);
69          assertFiltering(filter, new File("log.TXT").toPath(), WINDOWS);
70  
71          filter = WildcardFileFilter.builder().setWildcards("*.txt").setIoCase(null).get();
72          assertFiltering(filter, new File("log.txt"), true);
73          assertFiltering(filter, new File("log.TXT"), false);
74          //
75          assertFiltering(filter, new File("log.txt").toPath(), true);
76          assertFiltering(filter, new File("log.TXT").toPath(), false);
77  
78          filter = new WildcardFileFilter("*.java", "*.class");
79          assertFiltering(filter, new File("Test.java"), true);
80          assertFiltering(filter, new File("Test.class"), true);
81          assertFiltering(filter, new File("Test.jsp"), false);
82          //
83          assertFiltering(filter, new File("Test.java").toPath(), true);
84          assertFiltering(filter, new File("Test.class").toPath(), true);
85          assertFiltering(filter, new File("Test.jsp").toPath(), false);
86          //
87          filter = WildcardFileFilter.builder().setWildcards("*.java", "*.class").get();
88          assertFiltering(filter, new File("Test.java"), true);
89          assertFiltering(filter, new File("Test.class"), true);
90          assertFiltering(filter, new File("Test.jsp"), false);
91          //
92          assertFiltering(filter, new File("Test.java").toPath(), true);
93          assertFiltering(filter, new File("Test.class").toPath(), true);
94          assertFiltering(filter, new File("Test.jsp").toPath(), false);
95  
96          filter = WildcardFileFilter.builder().setWildcards("*.java", "*.class").setIoCase(IOCase.SENSITIVE).get();
97          assertFiltering(filter, new File("Test.java"), true);
98          assertFiltering(filter, new File("Test.JAVA"), false);
99          //
100         assertFiltering(filter, new File("Test.java").toPath(), true);
101         assertFiltering(filter, new File("Test.JAVA").toPath(), false);
102 
103         filter = WildcardFileFilter.builder().setWildcards("*.java", "*.class").setIoCase(IOCase.INSENSITIVE).get();
104         assertFiltering(filter, new File("Test.java"), true);
105         assertFiltering(filter, new File("Test.JAVA"), true);
106         //
107         assertFiltering(filter, new File("Test.java").toPath(), true);
108         assertFiltering(filter, new File("Test.JAVA").toPath(), true);
109 
110         filter = WildcardFileFilter.builder().setWildcards("*.java", "*.class").setIoCase(IOCase.SYSTEM).get();
111         assertFiltering(filter, new File("Test.java"), true);
112         assertFiltering(filter, new File("Test.JAVA"), WINDOWS);
113         //
114         assertFiltering(filter, new File("Test.java").toPath(), true);
115         assertFiltering(filter, new File("Test.JAVA").toPath(), WINDOWS);
116 
117         filter = WildcardFileFilter.builder().setWildcards("*.java", "*.class").setIoCase(null).get();
118         assertFiltering(filter, new File("Test.java"), true);
119         assertFiltering(filter, new File("Test.JAVA"), false);
120         //
121         assertFiltering(filter, new File("Test.java").toPath(), true);
122         assertFiltering(filter, new File("Test.JAVA").toPath(), false);
123 
124         final List<String> patternList = Arrays.asList("*.txt", "*.xml", "*.gif");
125         final IOFileFilter listFilter = WildcardFileFilter.builder().setWildcards(patternList).get();
126         assertFiltering(listFilter, new File("Test.txt"), true);
127         assertFiltering(listFilter, new File("Test.xml"), true);
128         assertFiltering(listFilter, new File("Test.gif"), true);
129         assertFiltering(listFilter, new File("Test.bmp"), false);
130         //
131         assertFiltering(listFilter, new File("Test.txt").toPath(), true);
132         assertFiltering(listFilter, new File("Test.xml").toPath(), true);
133         assertFiltering(listFilter, new File("Test.gif").toPath(), true);
134         assertFiltering(listFilter, new File("Test.bmp").toPath(), false);
135 
136         final File txtFile = new File("test.txt");
137         final Path txtPath = txtFile.toPath();
138         final File bmpFile = new File("test.bmp");
139         final Path bmpPath = bmpFile.toPath();
140         final File dirFile = new File("src/java");
141         final Path dirPath = dirFile.toPath();
142         // File
143         assertTrue(listFilter.accept(txtFile));
144         assertFalse(listFilter.accept(bmpFile));
145         assertFalse(listFilter.accept(dirFile));
146         // Path
147         assertTrue(listFilter.matches(txtPath));
148         assertFalse(listFilter.matches(bmpPath));
149         assertFalse(listFilter.matches(dirPath));
150         //
151         assertEquals(FileVisitResult.CONTINUE, listFilter.accept(txtPath, null));
152         assertEquals(FileVisitResult.TERMINATE, listFilter.accept(bmpPath, null));
153         assertEquals(FileVisitResult.TERMINATE, listFilter.accept(dirPath, null));
154 
155         assertTrue(listFilter.accept(txtFile.getParentFile(), txtFile.getName()));
156         assertFalse(listFilter.accept(bmpFile.getParentFile(), bmpFile.getName()));
157         assertFalse(listFilter.accept(dirFile.getParentFile(), dirFile.getName()));
158         //
159         assertEquals(FileVisitResult.CONTINUE, listFilter.accept(txtPath, null));
160         assertEquals(FileVisitResult.TERMINATE, listFilter.accept(bmpPath, null));
161         assertEquals(FileVisitResult.TERMINATE, listFilter.accept(dirPath, null));
162 
163         assertThrows(NullPointerException.class, () -> new WildcardFileFilter((String) null));
164         assertThrows(NullPointerException.class, () -> new WildcardFileFilter((String[]) null));
165         assertThrows(NullPointerException.class, () -> new WildcardFileFilter((List<String>) null));
166     }
167 }