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  package org.apache.commons.io.filefilter;
18  
19  import static org.junit.jupiter.api.Assertions.assertEquals;
20  
21  import java.util.ArrayList;
22  import java.util.Collections;
23  import java.util.List;
24  
25  import org.junit.jupiter.api.BeforeEach;
26  import org.junit.jupiter.api.Test;
27  
28  /**
29   * Tests {@link AndFileFilter}.
30   */
31  public class AndFileFilterTest extends AbstractConditionalFileFilterTest {
32  
33    private static final String DEFAULT_WORKING_PATH = "./AndFileFilterTestCase/";
34    private static final String WORKING_PATH_NAME_PROPERTY_KEY = AndFileFilterTest.class.getName() + ".workingDirectory";
35  
36    private List<List<IOFileFilter>> testFilters;
37    private List<boolean[]> testTrueResults;
38    private List<boolean[]> testFalseResults;
39    private List<Boolean> testFileResults;
40    private List<Boolean> testFilenameResults;
41  
42    @Override
43    protected IOFileFilter buildFilterUsingAdd(final List<IOFileFilter> filters) {
44      final AndFileFilter filter = new AndFileFilter();
45      filters.forEach(filter::addFileFilter);
46      return filter;
47    }
48  
49    @Override
50    protected IOFileFilter buildFilterUsingConstructor(final List<IOFileFilter> filters) {
51      return new AndFileFilter(filters);
52    }
53  
54    @Override
55    protected ConditionalFileFilter getConditionalFileFilter() {
56      return new AndFileFilter();
57    }
58  
59    @Override
60    protected String getDefaultWorkingPath() {
61      return DEFAULT_WORKING_PATH;
62    }
63  
64    @Override
65    protected List<boolean[]> getFalseResults() {
66      return this.testFalseResults;
67    }
68  
69    @Override
70    protected List<Boolean> getFilenameResults() {
71      return this.testFilenameResults;
72    }
73  
74    @Override
75    protected List<Boolean> getFileResults() {
76      return this.testFileResults;
77    }
78  
79    @Override
80    protected List<List<IOFileFilter>> getTestFilters() {
81      return this.testFilters;
82    }
83  
84    @Override
85    protected List<boolean[]> getTrueResults() {
86      return this.testTrueResults;
87    }
88  
89    @Override
90    protected String getWorkingPathNamePropertyKey() {
91      return WORKING_PATH_NAME_PROPERTY_KEY;
92    }
93  
94    @BeforeEach
95    public void setUpTestFilters() {
96      // filters
97      //tests
98      this.testFilters = new ArrayList<>();
99      this.testTrueResults = new ArrayList<>();
100     this.testFalseResults = new ArrayList<>();
101     this.testFileResults = new ArrayList<>();
102     this.testFilenameResults = new ArrayList<>();
103 
104     // test 0 - add empty elements
105     {
106       testFilters.add(0, null);
107       testTrueResults.add(0, null);
108       testFalseResults.add(0, null);
109       testFileResults.add(0, null);
110       testFilenameResults.add(0, null);
111     }
112 
113     // test 1 - Test conditional and with all filters returning true
114     {
115       // test 1 filters
116       final List<IOFileFilter> filters = new ArrayList<>();
117       filters.add(trueFilters[1]);
118       filters.add(trueFilters[2]);
119       filters.add(trueFilters[3]);
120       // test 1 true results
121       final boolean[] trueResults = {true, true, true};
122       // test 1 false results
123       final boolean[] falseResults = {false, false, false};
124 
125       testFilters.add(1, filters);
126       testTrueResults.add(1, trueResults);
127       testFalseResults.add(1, falseResults);
128       testFileResults.add(1, Boolean.TRUE);
129       testFilenameResults.add(1, Boolean.TRUE);
130     }
131 
132     // test 2 - Test conditional and with first filter returning false
133     {
134       // test 2 filters
135       final List<IOFileFilter> filters = new ArrayList<>();
136       filters.add(falseFilters[1]);
137       filters.add(trueFilters[1]);
138       filters.add(trueFilters[2]);
139       filters.add(trueFilters[3]);
140       filters.add(falseFilters[2]);
141       filters.add(falseFilters[3]);
142       // test 2 true results
143       final boolean[] trueResults = {false, false, false};
144       // test 2 false results
145       final boolean[] falseResults = {true, false, false};
146 
147       testFilters.add(2, filters);
148       testTrueResults.add(2, trueResults);
149       testFalseResults.add(2, falseResults);
150       testFileResults.add(2, Boolean.FALSE);
151       testFilenameResults.add(2, Boolean.FALSE);
152     }
153 
154     // test 3 - Test conditional and with second filter returning false
155     {
156       // test 3 filters
157       final List<IOFileFilter> filters = new ArrayList<>();
158       filters.add(trueFilters[1]);
159       filters.add(falseFilters[1]);
160       filters.add(trueFilters[2]);
161       filters.add(trueFilters[3]);
162       filters.add(falseFilters[2]);
163       filters.add(falseFilters[3]);
164       // test 3 true results
165       final boolean[] trueResults = {true, false, false};
166       // test 3 false results
167       final boolean[] falseResults = {true, false, false};
168 
169       testFilters.add(3, filters);
170       testTrueResults.add(3, trueResults);
171       testFalseResults.add(3, falseResults);
172       testFileResults.add(3, Boolean.FALSE);
173       testFilenameResults.add(3, Boolean.FALSE);
174     }
175 
176     // test 4 - Test conditional and with third filter returning false
177     {
178       // test 4 filters
179       final List<IOFileFilter> filters = new ArrayList<>();
180       filters.add(trueFilters[1]);
181       filters.add(trueFilters[2]);
182       filters.add(falseFilters[1]);
183       filters.add(trueFilters[3]);
184       filters.add(falseFilters[2]);
185       filters.add(falseFilters[3]);
186       // test 4 true results
187       final boolean[] trueResults = {true, true, false};
188       // test 4 false results
189       final boolean[] falseResults = {true, false, false};
190 
191       testFilters.add(4, filters);
192       testTrueResults.add(4, trueResults);
193       testFalseResults.add(4, falseResults);
194       testFileResults.add(4, Boolean.FALSE);
195       testFilenameResults.add(4, Boolean.FALSE);
196     }
197 
198     // test 5 - Test conditional and with first and third filters returning false
199     {
200       // test 5 filters
201       final List<IOFileFilter> filters = new ArrayList<>();
202       filters.add(falseFilters[1]);
203       filters.add(trueFilters[1]);
204       filters.add(falseFilters[2]);
205       filters.add(falseFilters[3]);
206       filters.add(trueFilters[2]);
207       filters.add(trueFilters[3]);
208       // test 5 true results
209       final boolean[] trueResults = {false, false, false};
210       // test 5 false results
211       final boolean[] falseResults = {true, false, false};
212 
213       testFilters.add(5, filters);
214       testTrueResults.add(5, trueResults);
215       testFalseResults.add(5, falseResults);
216       testFileResults.add(5, Boolean.FALSE);
217       testFilenameResults.add(5, Boolean.FALSE);
218     }
219 
220     // test 6 - Test conditional and with second and third filters returning false
221     {
222       final List<IOFileFilter> filters = new ArrayList<>();
223       filters.add(trueFilters[1]);
224       filters.add(falseFilters[1]);
225       filters.add(falseFilters[2]);
226       filters.add(trueFilters[2]);
227       filters.add(trueFilters[3]);
228       filters.add(falseFilters[3]);
229       // test 6 true results
230       final boolean[] trueResults = {true, false, false};
231       // test 6 false results
232       final boolean[] falseResults = {true, false, false};
233 
234       testFilters.add(6, filters);
235       testTrueResults.add(6, trueResults);
236       testFalseResults.add(6, falseResults);
237       testFileResults.add(6, Boolean.FALSE);
238       testFilenameResults.add(6, Boolean.FALSE);
239     }
240 
241     // test 7 - Test conditional and with first and second filters returning false
242     {
243       final List<IOFileFilter> filters = new ArrayList<>();
244       filters.add(falseFilters[1]);
245       filters.add(falseFilters[2]);
246       filters.add(trueFilters[3]);
247       filters.add(falseFilters[3]);
248       filters.add(trueFilters[2]);
249       filters.add(trueFilters[3]);
250       // test 7 true results
251       final boolean[] trueResults = {false, false, false};
252       // test 7 false results
253       final boolean[] falseResults = {true, false, false};
254 
255       testFilters.add(7, filters);
256       testTrueResults.add(7, trueResults);
257       testFalseResults.add(7, falseResults);
258       testFileResults.add(7, Boolean.FALSE);
259       testFilenameResults.add(7, Boolean.FALSE);
260     }
261 
262     // test 8 - Test conditional and with fourth filters returning false
263     {
264       final List<IOFileFilter> filters = new ArrayList<>();
265       filters.add(trueFilters[1]);
266       filters.add(trueFilters[2]);
267       filters.add(trueFilters[3]);
268       filters.add(falseFilters[1]);
269       // test 8 true results
270       final boolean[] trueResults = {true, true, true};
271       // test 8 false results
272       final boolean[] falseResults = {true, false, false};
273 
274       testFilters.add(8, filters);
275       testTrueResults.add(8, trueResults);
276       testFalseResults.add(8, falseResults);
277       testFileResults.add(8, Boolean.FALSE);
278       testFilenameResults.add(8, Boolean.FALSE);
279     }
280 
281     // test 9 - Test conditional and with all filters returning false
282     {
283       final List<IOFileFilter> filters = new ArrayList<>();
284       filters.add(falseFilters[1]);
285       filters.add(falseFilters[2]);
286       filters.add(falseFilters[3]);
287       // test 9 true results
288       final boolean[] trueResults = {false, false, false};
289       // test 9 false results
290       final boolean[] falseResults = {true, false, false};
291 
292       testFilters.add(9, filters);
293       testTrueResults.add(9, trueResults);
294       testFalseResults.add(9, falseResults);
295       testFileResults.add(9, Boolean.FALSE);
296       testFilenameResults.add(9, Boolean.FALSE);
297     }
298   }
299 
300   @Test
301   public void testSetTestFiltersClearsOld() {
302     // test that new filters correctly clear old filters
303     final List<IOFileFilter> simpleEmptyFileFilter = Collections.singletonList(EmptyFileFilter.EMPTY);
304     final AndFileFilter andFileFilter = new AndFileFilter(simpleEmptyFileFilter);
305     // make sure the filters at this point are the same
306     assertEquals(simpleEmptyFileFilter, andFileFilter.getFileFilters());
307 
308     final List<IOFileFilter> simpleNonEmptyFilter = Collections.singletonList(EmptyFileFilter.NOT_EMPTY);
309     // when calling the setter the filters should reference the new filters
310     andFileFilter.setFileFilters(simpleNonEmptyFilter);
311     assertEquals(simpleNonEmptyFilter, andFileFilter.getFileFilters());
312   }
313 }