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