001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: package org.apache.commons.io.filefilter;
018:
019: import java.io.File;
020: import java.util.ArrayList;
021: import java.util.Iterator;
022: import java.util.List;
023:
024: public abstract class ConditionalFileFilterAbstractTestCase extends
025: IOFileFilterAbstractTestCase {
026:
027: private static final String TEST_FILE_NAME_PREFIX = "TestFile";
028: private static final String TEST_FILE_TYPE = ".tst";
029:
030: protected TesterTrueFileFilter[] trueFilters;
031: protected TesterFalseFileFilter[] falseFilters;
032:
033: private File file;
034: private File workingPath;
035:
036: public ConditionalFileFilterAbstractTestCase(final String name) {
037: super (name);
038: }
039:
040: public void setUp() throws Exception {
041: this .workingPath = this .determineWorkingDirectoryPath(this
042: .getWorkingPathNamePropertyKey(), this
043: .getDefaultWorkingPath());
044: this .file = new File(this .workingPath, TEST_FILE_NAME_PREFIX
045: + 1 + TEST_FILE_TYPE);
046: this .trueFilters = new TesterTrueFileFilter[4];
047: this .falseFilters = new TesterFalseFileFilter[4];
048: this .trueFilters[1] = new TesterTrueFileFilter();
049: this .trueFilters[2] = new TesterTrueFileFilter();
050: this .trueFilters[3] = new TesterTrueFileFilter();
051: this .falseFilters[1] = new TesterFalseFileFilter();
052: this .falseFilters[2] = new TesterFalseFileFilter();
053: this .falseFilters[3] = new TesterFalseFileFilter();
054: }
055:
056: public void testAdd() {
057: List filters = new ArrayList();
058: ConditionalFileFilter fileFilter = this
059: .getConditionalFileFilter();
060: filters.add(new TesterTrueFileFilter());
061: filters.add(new TesterTrueFileFilter());
062: filters.add(new TesterTrueFileFilter());
063: filters.add(new TesterTrueFileFilter());
064: for (int i = 0; i < filters.size(); i++) {
065: assertEquals("file filters count: ", i, fileFilter
066: .getFileFilters().size());
067: fileFilter.addFileFilter((IOFileFilter) filters.get(i));
068: assertEquals("file filters count: ", i + 1, fileFilter
069: .getFileFilters().size());
070: }
071: for (Iterator iter = fileFilter.getFileFilters().iterator(); iter
072: .hasNext();) {
073: IOFileFilter filter = (IOFileFilter) iter.next();
074: assertTrue("found file filter", filters.contains(filter));
075: }
076: assertEquals("file filters count", filters.size(), fileFilter
077: .getFileFilters().size());
078: }
079:
080: public void testRemove() {
081: List filters = new ArrayList();
082: ConditionalFileFilter fileFilter = this
083: .getConditionalFileFilter();
084: filters.add(new TesterTrueFileFilter());
085: filters.add(new TesterTrueFileFilter());
086: filters.add(new TesterTrueFileFilter());
087: filters.add(new TesterTrueFileFilter());
088: for (int i = 0; i < filters.size(); i++) {
089: fileFilter.removeFileFilter((IOFileFilter) filters.get(i));
090: assertTrue("file filter removed", !fileFilter
091: .getFileFilters().contains(
092: (IOFileFilter) filters.get(i)));
093: }
094: assertEquals("file filters count", 0, fileFilter
095: .getFileFilters().size());
096: }
097:
098: public void testNoFilters() throws Exception {
099: ConditionalFileFilter fileFilter = this
100: .getConditionalFileFilter();
101: File file = new File(this .workingPath, TEST_FILE_NAME_PREFIX
102: + 1 + TEST_FILE_TYPE);
103: assertFileFiltering(1, (IOFileFilter) fileFilter, file, false);
104: assertFilenameFiltering(1, (IOFileFilter) fileFilter, file,
105: false);
106: }
107:
108: public void testFilterBuiltUsingConstructor() throws Exception {
109: List testFilters = this .getTestFilters();
110: List testTrueResults = this .getTrueResults();
111: List testFalseResults = this .getFalseResults();
112: List testFileResults = this .getFileResults();
113: List testFilenameResults = this .getFilenameResults();
114:
115: for (int i = 1; i < testFilters.size(); i++) {
116: List filters = (List) testFilters.get(i);
117: boolean[] trueResults = (boolean[]) testTrueResults.get(i);
118: boolean[] falseResults = (boolean[]) testFalseResults
119: .get(i);
120: boolean fileResults = ((Boolean) testFileResults.get(i))
121: .booleanValue();
122: boolean filenameResults = ((Boolean) testFilenameResults
123: .get(i)).booleanValue();
124:
125: // Test conditional AND filter created by passing filters to the constructor
126: IOFileFilter filter = this
127: .buildFilterUsingConstructor(filters);
128:
129: // Test as a file filter
130: this .resetTrueFilters(this .trueFilters);
131: this .resetFalseFilters(this .falseFilters);
132: this .assertFileFiltering(i, filter, this .file, fileResults);
133: this .assertTrueFiltersInvoked(i, trueFilters, trueResults);
134: this .assertFalseFiltersInvoked(i, falseFilters,
135: falseResults);
136:
137: // Test as a filename filter
138: this .resetTrueFilters(this .trueFilters);
139: this .resetFalseFilters(this .falseFilters);
140: this .assertFilenameFiltering(i, filter, this .file,
141: filenameResults);
142: this .assertTrueFiltersInvoked(i, trueFilters, trueResults);
143: this .assertFalseFiltersInvoked(i, falseFilters,
144: falseResults);
145: }
146: }
147:
148: public void testFilterBuiltUsingAdd() throws Exception {
149: List testFilters = this .getTestFilters();
150: List testTrueResults = this .getTrueResults();
151: List testFalseResults = this .getFalseResults();
152: List testFileResults = this .getFileResults();
153: List testFilenameResults = this .getFilenameResults();
154:
155: for (int i = 1; i < testFilters.size(); i++) {
156: List filters = (List) testFilters.get(i);
157: boolean[] trueResults = (boolean[]) testTrueResults.get(i);
158: boolean[] falseResults = (boolean[]) testFalseResults
159: .get(i);
160: boolean fileResults = ((Boolean) testFileResults.get(i))
161: .booleanValue();
162: boolean filenameResults = ((Boolean) testFilenameResults
163: .get(i)).booleanValue();
164:
165: // Test conditional AND filter created by passing filters to the constructor
166: IOFileFilter filter = this .buildFilterUsingAdd(filters);
167:
168: // Test as a file filter
169: this .resetTrueFilters(this .trueFilters);
170: this .resetFalseFilters(this .falseFilters);
171: this .assertFileFiltering(i, filter, this .file, fileResults);
172: this .assertTrueFiltersInvoked(i, trueFilters, trueResults);
173: this .assertFalseFiltersInvoked(i, falseFilters,
174: falseResults);
175:
176: // Test as a filename filter
177: this .resetTrueFilters(this .trueFilters);
178: this .resetFalseFilters(this .falseFilters);
179: this .assertFilenameFiltering(i, filter, this .file,
180: filenameResults);
181: this .assertTrueFiltersInvoked(i, trueFilters, trueResults);
182: this .assertFalseFiltersInvoked(i, falseFilters,
183: falseResults);
184: }
185: }
186:
187: protected abstract ConditionalFileFilter getConditionalFileFilter();
188:
189: protected abstract IOFileFilter buildFilterUsingAdd(List filters);
190:
191: protected abstract IOFileFilter buildFilterUsingConstructor(
192: List filters);
193:
194: protected abstract List getTestFilters();
195:
196: protected abstract List getTrueResults();
197:
198: protected abstract List getFalseResults();
199:
200: protected abstract List getFileResults();
201:
202: protected abstract List getFilenameResults();
203:
204: protected abstract String getWorkingPathNamePropertyKey();
205:
206: protected abstract String getDefaultWorkingPath();
207: }
|