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.io.File;
20  import junit.framework.TestCase;
21  
22  public abstract class IOFileFilterAbstractTestCase extends TestCase {
23    
24    /**
25     * Constructs a new instance of
26     * <code>IOFileFilterAbstractTestCase</code>.
27     */
28    public IOFileFilterAbstractTestCase(final String name) {
29      super(name);
30    }
31    
32    public boolean assertFileFiltering(final int testNumber, final IOFileFilter filter, final File file, final boolean expected)
33    throws Exception {
34      assertTrue(
35      "test " + testNumber + " Filter(File) " + filter.getClass().getName() + " not " + expected + " for " + file,
36      (filter.accept(file) == expected));
37      return true; // return is irrelevant
38    }
39  
40    public boolean assertFilenameFiltering(final int testNumber, final IOFileFilter filter, final File file, final boolean expected)
41    throws Exception {
42      // Assumes file has parent and is not passed as null
43      assertTrue(
44      "test " + testNumber + " Filter(File, String) " + filter.getClass().getName() + " not " + expected + " for " + file,
45      (filter.accept(file.getParentFile(), file.getName()) == expected));
46      return true; // return is irrelevant
47    }
48  
49    public void assertFiltering(final int testNumber, final IOFileFilter filter, final File file, final boolean expected)
50    throws Exception {
51      // Note. This only tests the (File, String) version if the parent of
52      //       the File passed in is not null
53      assertTrue(
54      "test " + testNumber + " Filter(File) " + filter.getClass().getName() + " not " + expected + " for " + file,
55      (filter.accept(file) == expected));
56  
57      if (file != null && file.getParentFile() != null) {
58        assertTrue(
59        "test " + testNumber + " Filter(File, String) " + filter.getClass().getName() + " not " + expected + " for " + file,
60        (filter.accept(file.getParentFile(), file.getName()) == expected));
61      } 
62      else if (file == null) {
63        assertTrue(
64        "test " + testNumber + " Filter(File, String) " + filter.getClass().getName() + " not " + expected + " for null",
65        filter.accept(file) == expected);
66      }
67    }
68  
69    public void assertTrueFiltersInvoked(final int testNumber, final TesterTrueFileFilter[] filters, final boolean[] invoked) {
70      for(int i = 1; i < filters.length; i++) {
71        assertEquals("test " + testNumber + " filter " + i + " invoked", invoked[i-1], filters[i].isInvoked());
72      }
73    }
74    
75    public void assertFalseFiltersInvoked(final int testNumber, final TesterFalseFileFilter[] filters, final boolean[] invoked) {
76      for(int i = 1; i < filters.length; i++) {
77        assertEquals("test " + testNumber + " filter " + i + " invoked", invoked[i-1], filters[i].isInvoked());
78      }
79    }
80    
81    public File determineWorkingDirectoryPath(final String key, final String defaultPath) {
82      // Look for a system property to specify the working directory
83      String workingPathName = System.getProperty(key, defaultPath);
84      return new File(workingPathName);
85    }
86  
87    public void resetFalseFilters(TesterFalseFileFilter[] filters) {
88      for(int i = 0; i < filters.length; i++) {
89        if(filters[i] != null) {
90          filters[i].reset();
91        }
92      }
93    }
94    
95    public void resetTrueFilters(TesterTrueFileFilter[] filters) {
96      for(int i = 0; i < filters.length; i++) {
97        if(filters[i] != null) {
98          filters[i].reset();
99        }
100     }
101   }
102   
103   class TesterTrueFileFilter extends TrueFileFilter {
104 
105     private boolean invoked;
106     
107     public boolean accept(File file) {
108       setInvoked(true);
109       return super.accept(file);
110     }
111     
112     public boolean accept(File file, String str) {
113       setInvoked(true);
114       return super.accept(file, str);
115     }
116     
117     public boolean isInvoked() {
118       return this.invoked;
119     }
120 
121     public void setInvoked(boolean invoked) {
122       this.invoked = invoked;
123     }
124     
125     public void reset() {
126       setInvoked(false);
127     }
128   }
129   
130   class TesterFalseFileFilter extends FalseFileFilter {
131     
132     private boolean invoked;
133     
134     public boolean accept(File file) {
135       setInvoked(true);
136       return super.accept(file);
137     }
138     
139     public boolean accept(File file, String str) {
140       setInvoked(true);
141       return super.accept(file, str);
142     }
143     
144     public boolean isInvoked() {
145       return this.invoked;
146     }
147 
148     public void setInvoked(boolean invoked) {
149       this.invoked = invoked;
150     }
151     
152     public void reset() {
153       setInvoked(false);
154     }
155   }
156 }