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