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 = getWorkingDirectoryPath(getWorkingPathNamePropertyKey(), 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 void testAdd() {
77 final List<TesterTrueFileFilter> filters = new ArrayList<>();
78 final ConditionalFileFilter fileFilter = 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 -> assertTrue(filters.contains(filter), "found file filter"));
89 assertEquals(filters.size(), fileFilter.getFileFilters().size(), "file filters count");
90 }
91
92 @Test
93 void testFilterBuiltUsingAdd() {
94 final List<List<IOFileFilter>> testFilters = getTestFilters();
95 final List<boolean[]> testTrueResults = getTrueResults();
96 final List<boolean[]> testFalseResults = getFalseResults();
97 final List<Boolean> testFileResults = getFileResults();
98 final List<Boolean> testFilenameResults = getFilenameResults();
99
100 for (int i = 1; i < testFilters.size(); i++) {
101 final List<IOFileFilter> filters = testFilters.get(i);
102 final boolean[] trueResults = testTrueResults.get(i);
103 final boolean[] falseResults = testFalseResults.get(i);
104 final boolean fileResults = testFileResults.get(i);
105 final boolean fileNameResults = testFilenameResults.get(i);
106
107
108 final IOFileFilter filter = buildFilterUsingAdd(filters);
109
110
111 resetTrueFilters(this.trueFilters);
112 resetFalseFilters(this.falseFilters);
113 assertFileFiltering(i, filter, this.file, fileResults);
114 assertTrueFiltersInvoked(i, trueFilters, trueResults);
115 assertFalseFiltersInvoked(i, falseFilters, falseResults);
116
117
118 resetTrueFilters(this.trueFilters);
119 resetFalseFilters(this.falseFilters);
120 assertFilenameFiltering(i, filter, this.file, fileNameResults);
121 assertTrueFiltersInvoked(i, trueFilters, trueResults);
122 assertFalseFiltersInvoked(i, falseFilters, falseResults);
123 }
124 }
125
126 @Test
127 void testFilterBuiltUsingConstructor() {
128 final List<List<IOFileFilter>> testFilters = getTestFilters();
129 final List<boolean[]> testTrueResults = getTrueResults();
130 final List<boolean[]> testFalseResults = getFalseResults();
131 final List<Boolean> testFileResults = getFileResults();
132 final List<Boolean> testFilenameResults = getFilenameResults();
133
134 for (int i = 1; i < testFilters.size(); i++) {
135 final List<IOFileFilter> filters = testFilters.get(i);
136 final boolean[] trueResults = testTrueResults.get(i);
137 final boolean[] falseResults = testFalseResults.get(i);
138 final boolean fileResults = testFileResults.get(i);
139 final boolean fileNameResults = testFilenameResults.get(i);
140
141
142 final IOFileFilter filter = buildFilterUsingConstructor(filters);
143
144
145 resetTrueFilters(this.trueFilters);
146 resetFalseFilters(this.falseFilters);
147 assertFileFiltering(i, filter, this.file, fileResults);
148 assertTrueFiltersInvoked(i, trueFilters, trueResults);
149 assertFalseFiltersInvoked(i, falseFilters, falseResults);
150
151
152 resetTrueFilters(this.trueFilters);
153 resetFalseFilters(this.falseFilters);
154 assertFilenameFiltering(i, filter, this.file, fileNameResults);
155 assertTrueFiltersInvoked(i, trueFilters, trueResults);
156 assertFalseFiltersInvoked(i, falseFilters, falseResults);
157 }
158 }
159
160 @Test
161 void testNoFilters() {
162 final ConditionalFileFilter fileFilter = getConditionalFileFilter();
163 final File file = new File(this.workingPath, TEST_FILE_NAME_PREFIX + 1 + TEST_FILE_TYPE);
164 assertFileFiltering(1, (IOFileFilter) fileFilter, file, false);
165 assertFilenameFiltering(1, (IOFileFilter) fileFilter, file, false);
166 }
167
168 @Test
169 void testRemove() {
170 final List<TesterTrueFileFilter> filters = new ArrayList<>();
171 final ConditionalFileFilter fileFilter = getConditionalFileFilter();
172 filters.add(new TesterTrueFileFilter());
173 filters.add(new TesterTrueFileFilter());
174 filters.add(new TesterTrueFileFilter());
175 filters.add(new TesterTrueFileFilter());
176 filters.forEach(filter -> {
177 fileFilter.removeFileFilter(filter);
178 assertFalse(fileFilter.getFileFilters().contains(filter), "file filter removed");
179 });
180 assertEquals(0, fileFilter.getFileFilters().size(), "file filters count");
181 }
182 }