1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.io.filefilter;
18
19 import static org.junit.jupiter.api.Assertions.assertEquals;
20 import static org.junit.jupiter.api.Assertions.assertFalse;
21 import static org.junit.jupiter.api.Assertions.assertTrue;
22
23 import java.io.File;
24 import java.util.ArrayList;
25 import java.util.List;
26
27 import org.junit.jupiter.api.BeforeEach;
28 import org.junit.jupiter.api.Test;
29
30 public abstract class AbstractConditionalFileFilterTest extends AbstractIOFileFilterTest {
31
32 private static final String TEST_FILE_NAME_PREFIX = "TestFile";
33 private static final String TEST_FILE_TYPE = ".tst";
34
35 protected TesterTrueFileFilter[] trueFilters;
36 protected TesterFalseFileFilter[] falseFilters;
37
38 private File file;
39 private File workingPath;
40
41 protected abstract IOFileFilter buildFilterUsingAdd(List<IOFileFilter> filters);
42
43 protected abstract IOFileFilter buildFilterUsingConstructor(List<IOFileFilter> filters);
44
45 protected abstract ConditionalFileFilter getConditionalFileFilter();
46
47 protected abstract String getDefaultWorkingPath();
48
49 protected abstract List<boolean[]> getFalseResults();
50
51 protected abstract List<Boolean> getFilenameResults();
52
53 protected abstract List<Boolean> getFileResults();
54
55 protected abstract List<List<IOFileFilter>> getTestFilters();
56
57 protected abstract List<boolean[]> getTrueResults();
58
59 protected abstract String getWorkingPathNamePropertyKey();
60
61 @BeforeEach
62 public void setUp() {
63 this.workingPath = determineWorkingDirectoryPath(this.getWorkingPathNamePropertyKey(), this.getDefaultWorkingPath());
64 this.file = new File(this.workingPath, TEST_FILE_NAME_PREFIX + 1 + TEST_FILE_TYPE);
65 this.trueFilters = new TesterTrueFileFilter[4];
66 this.falseFilters = new TesterFalseFileFilter[4];
67 this.trueFilters[1] = new TesterTrueFileFilter();
68 this.trueFilters[2] = new TesterTrueFileFilter();
69 this.trueFilters[3] = new TesterTrueFileFilter();
70 this.falseFilters[1] = new TesterFalseFileFilter();
71 this.falseFilters[2] = new TesterFalseFileFilter();
72 this.falseFilters[3] = new TesterFalseFileFilter();
73 }
74
75 @Test
76 public void testAdd() {
77 final List<TesterTrueFileFilter> filters = new ArrayList<>();
78 final ConditionalFileFilter fileFilter = this.getConditionalFileFilter();
79 filters.add(new TesterTrueFileFilter());
80 filters.add(new TesterTrueFileFilter());
81 filters.add(new TesterTrueFileFilter());
82 filters.add(new TesterTrueFileFilter());
83 for (int i = 0; i < filters.size(); i++) {
84 assertEquals(i, fileFilter.getFileFilters().size(), "file filters count: ");
85 fileFilter.addFileFilter(filters.get(i));
86 assertEquals(i + 1, fileFilter.getFileFilters().size(), "file filters count: ");
87 }
88 fileFilter.getFileFilters().forEach(filter -> {
89 assertTrue(filters.contains(filter), "found file filter");
90 });
91 assertEquals(filters.size(), fileFilter.getFileFilters().size(), "file filters count");
92 }
93
94 @Test
95 public void testFilterBuiltUsingAdd() {
96 final List<List<IOFileFilter>> testFilters = this.getTestFilters();
97 final List<boolean[]> testTrueResults = this.getTrueResults();
98 final List<boolean[]> testFalseResults = this.getFalseResults();
99 final List<Boolean> testFileResults = this.getFileResults();
100 final List<Boolean> testFilenameResults = this.getFilenameResults();
101
102 for (int i = 1; i < testFilters.size(); i++) {
103 final List<IOFileFilter> filters = testFilters.get(i);
104 final boolean[] trueResults = testTrueResults.get(i);
105 final boolean[] falseResults = testFalseResults.get(i);
106 final boolean fileResults = testFileResults.get(i);
107 final boolean fileNameResults = testFilenameResults.get(i);
108
109
110 final IOFileFilter filter = this.buildFilterUsingAdd(filters);
111
112
113 resetTrueFilters(this.trueFilters);
114 resetFalseFilters(this.falseFilters);
115 assertFileFiltering(i, filter, this.file, fileResults);
116 assertTrueFiltersInvoked(i, trueFilters, trueResults);
117 assertFalseFiltersInvoked(i, falseFilters, falseResults);
118
119
120 resetTrueFilters(this.trueFilters);
121 resetFalseFilters(this.falseFilters);
122 assertFilenameFiltering(i, filter, this.file, fileNameResults);
123 assertTrueFiltersInvoked(i, trueFilters, trueResults);
124 assertFalseFiltersInvoked(i, falseFilters, falseResults);
125 }
126 }
127
128 @Test
129 public void testFilterBuiltUsingConstructor() {
130 final List<List<IOFileFilter>> testFilters = this.getTestFilters();
131 final List<boolean[]> testTrueResults = this.getTrueResults();
132 final List<boolean[]> testFalseResults = this.getFalseResults();
133 final List<Boolean> testFileResults = this.getFileResults();
134 final List<Boolean> testFilenameResults = this.getFilenameResults();
135
136 for (int i = 1; i < testFilters.size(); i++) {
137 final List<IOFileFilter> filters = testFilters.get(i);
138 final boolean[] trueResults = testTrueResults.get(i);
139 final boolean[] falseResults = testFalseResults.get(i);
140 final boolean fileResults = testFileResults.get(i);
141 final boolean fileNameResults = testFilenameResults.get(i);
142
143
144 final IOFileFilter filter = this.buildFilterUsingConstructor(filters);
145
146
147 resetTrueFilters(this.trueFilters);
148 resetFalseFilters(this.falseFilters);
149 assertFileFiltering(i, filter, this.file, fileResults);
150 assertTrueFiltersInvoked(i, trueFilters, trueResults);
151 assertFalseFiltersInvoked(i, falseFilters, falseResults);
152
153
154 resetTrueFilters(this.trueFilters);
155 resetFalseFilters(this.falseFilters);
156 assertFilenameFiltering(i, filter, this.file, fileNameResults);
157 assertTrueFiltersInvoked(i, trueFilters, trueResults);
158 assertFalseFiltersInvoked(i, falseFilters, falseResults);
159 }
160 }
161
162 @Test
163 public void testNoFilters() {
164 final ConditionalFileFilter fileFilter = this.getConditionalFileFilter();
165 final File file = new File(this.workingPath, TEST_FILE_NAME_PREFIX + 1 + TEST_FILE_TYPE);
166 assertFileFiltering(1, (IOFileFilter) fileFilter, file, false);
167 assertFilenameFiltering(1, (IOFileFilter) fileFilter, file, false);
168 }
169
170 @Test
171 public void testRemove() {
172 final List<TesterTrueFileFilter> filters = new ArrayList<>();
173 final ConditionalFileFilter fileFilter = this.getConditionalFileFilter();
174 filters.add(new TesterTrueFileFilter());
175 filters.add(new TesterTrueFileFilter());
176 filters.add(new TesterTrueFileFilter());
177 filters.add(new TesterTrueFileFilter());
178 filters.forEach(filter -> {
179 fileFilter.removeFileFilter(filter);
180 assertFalse(fileFilter.getFileFilters().contains(filter), "file filter removed");
181 });
182 assertEquals(0, fileFilter.getFileFilters().size(), "file filters count");
183 }
184 }