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 */ 017package org.apache.commons.io.filefilter; 018 019import java.io.File; 020import java.util.ArrayList; 021import java.util.List; 022 023public abstract class ConditionalFileFilterAbstractTestCase 024 extends IOFileFilterAbstractTestCase { 025 026 private static final String TEST_FILE_NAME_PREFIX = "TestFile"; 027 private static final String TEST_FILE_TYPE = ".tst"; 028 029 protected TesterTrueFileFilter[] trueFilters; 030 protected TesterFalseFileFilter[] falseFilters; 031 032 private File file; 033 private File workingPath; 034 035 public ConditionalFileFilterAbstractTestCase(final String name) { 036 super(name); 037 } 038 039 @Override 040 public void setUp() throws Exception { 041 this.workingPath = this.determineWorkingDirectoryPath(this.getWorkingPathNamePropertyKey(), this.getDefaultWorkingPath()); 042 this.file = new File(this.workingPath, TEST_FILE_NAME_PREFIX + 1 + TEST_FILE_TYPE); 043 this.trueFilters = new TesterTrueFileFilter[4]; 044 this.falseFilters = new TesterFalseFileFilter[4]; 045 this.trueFilters[1] = new TesterTrueFileFilter(); 046 this.trueFilters[2] = new TesterTrueFileFilter(); 047 this.trueFilters[3] = new TesterTrueFileFilter(); 048 this.falseFilters[1] = new TesterFalseFileFilter(); 049 this.falseFilters[2] = new TesterFalseFileFilter(); 050 this.falseFilters[3] = new TesterFalseFileFilter(); 051 } 052 053 public void testAdd() { 054 final List<TesterTrueFileFilter> filters = new ArrayList<TesterTrueFileFilter>(); 055 final ConditionalFileFilter fileFilter = this.getConditionalFileFilter(); 056 filters.add(new TesterTrueFileFilter()); 057 filters.add(new TesterTrueFileFilter()); 058 filters.add(new TesterTrueFileFilter()); 059 filters.add(new TesterTrueFileFilter()); 060 for(int i = 0; i < filters.size(); i++) { 061 assertEquals("file filters count: ", i, fileFilter.getFileFilters().size()); 062 fileFilter.addFileFilter(filters.get(i)); 063 assertEquals("file filters count: ", i+1, fileFilter.getFileFilters().size()); 064 } 065 for (final IOFileFilter filter : fileFilter.getFileFilters()) { 066 assertTrue("found file filter", filters.contains(filter)); 067 } 068 assertEquals("file filters count", filters.size(), fileFilter.getFileFilters().size()); 069 } 070 071 public void testRemove() { 072 final List<TesterTrueFileFilter> filters = new ArrayList<TesterTrueFileFilter>(); 073 final ConditionalFileFilter fileFilter = this.getConditionalFileFilter(); 074 filters.add(new TesterTrueFileFilter()); 075 filters.add(new TesterTrueFileFilter()); 076 filters.add(new TesterTrueFileFilter()); 077 filters.add(new TesterTrueFileFilter()); 078 for(int i = 0; i < filters.size(); i++) { 079 fileFilter.removeFileFilter(filters.get(i)); 080 assertTrue("file filter removed", !fileFilter.getFileFilters().contains(filters.get(i))); 081 } 082 assertEquals("file filters count", 0, fileFilter.getFileFilters().size()); 083 } 084 085 public void testNoFilters() throws Exception { 086 final ConditionalFileFilter fileFilter = this.getConditionalFileFilter(); 087 final File file = new File(this.workingPath, TEST_FILE_NAME_PREFIX + 1 + TEST_FILE_TYPE); 088 assertFileFiltering(1, (IOFileFilter) fileFilter, file, false); 089 assertFilenameFiltering(1, (IOFileFilter) fileFilter, file, false); 090 } 091 092 public void testFilterBuiltUsingConstructor() throws Exception { 093 final List<List<IOFileFilter>> testFilters = this.getTestFilters(); 094 final List<boolean []> testTrueResults = this.getTrueResults(); 095 final List<boolean []> testFalseResults = this.getFalseResults(); 096 final List<Boolean> testFileResults = this.getFileResults(); 097 final List<Boolean> testFilenameResults = this.getFilenameResults(); 098 099 for(int i = 1; i < testFilters.size(); i++) { 100 final List<IOFileFilter> filters = testFilters.get(i); 101 final boolean[] trueResults = testTrueResults.get(i); 102 final boolean[] falseResults = testFalseResults.get(i); 103 final boolean fileResults = testFileResults.get(i).booleanValue(); 104 final boolean filenameResults = testFilenameResults.get(i).booleanValue(); 105 106 // Test conditional AND filter created by passing filters to the constructor 107 final IOFileFilter filter = this.buildFilterUsingConstructor(filters); 108 109 // Test as a file filter 110 this.resetTrueFilters(this.trueFilters); 111 this.resetFalseFilters(this.falseFilters); 112 this.assertFileFiltering(i, filter, this.file, fileResults); 113 this.assertTrueFiltersInvoked(i, trueFilters, trueResults); 114 this.assertFalseFiltersInvoked(i, falseFilters, falseResults); 115 116 // Test as a filename filter 117 this.resetTrueFilters(this.trueFilters); 118 this.resetFalseFilters(this.falseFilters); 119 this.assertFilenameFiltering(i, filter, this.file, filenameResults); 120 this.assertTrueFiltersInvoked(i, trueFilters, trueResults); 121 this.assertFalseFiltersInvoked(i, falseFilters, falseResults); 122 } 123 } 124 125 public void testFilterBuiltUsingAdd() throws Exception { 126 final List<List<IOFileFilter>> testFilters = this.getTestFilters(); 127 final List<boolean[]> testTrueResults = this.getTrueResults(); 128 final List<boolean[]> testFalseResults = this.getFalseResults(); 129 final List<Boolean> testFileResults = this.getFileResults(); 130 final List<Boolean> testFilenameResults = this.getFilenameResults(); 131 132 for(int i = 1; i < testFilters.size(); i++) { 133 final List<IOFileFilter> filters = testFilters.get(i); 134 final boolean[] trueResults = testTrueResults.get(i); 135 final boolean[] falseResults = testFalseResults.get(i); 136 final boolean fileResults = testFileResults.get(i).booleanValue(); 137 final boolean filenameResults = testFilenameResults.get(i).booleanValue(); 138 139 // Test conditional AND filter created by passing filters to the constructor 140 final IOFileFilter filter = this.buildFilterUsingAdd(filters); 141 142 // Test as a file filter 143 this.resetTrueFilters(this.trueFilters); 144 this.resetFalseFilters(this.falseFilters); 145 this.assertFileFiltering(i, filter, this.file, fileResults); 146 this.assertTrueFiltersInvoked(i, trueFilters, trueResults); 147 this.assertFalseFiltersInvoked(i, falseFilters, falseResults); 148 149 // Test as a filename filter 150 this.resetTrueFilters(this.trueFilters); 151 this.resetFalseFilters(this.falseFilters); 152 this.assertFilenameFiltering(i, filter, this.file, filenameResults); 153 this.assertTrueFiltersInvoked(i, trueFilters, trueResults); 154 this.assertFalseFiltersInvoked(i, falseFilters, falseResults); 155 } 156 } 157 158 protected abstract ConditionalFileFilter getConditionalFileFilter(); 159 protected abstract IOFileFilter buildFilterUsingAdd(List<IOFileFilter> filters); 160 protected abstract IOFileFilter buildFilterUsingConstructor(List<IOFileFilter> filters); 161 protected abstract List<List<IOFileFilter>> getTestFilters(); 162 protected abstract List<boolean[]> getTrueResults(); 163 protected abstract List<boolean[]> getFalseResults(); 164 protected abstract List<Boolean> getFileResults(); 165 protected abstract List<Boolean> getFilenameResults(); 166 protected abstract String getWorkingPathNamePropertyKey(); 167 protected abstract String getDefaultWorkingPath(); 168}