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