View Javadoc
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.vfs2.filter;
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.io.IOException;
25  
26  import org.apache.commons.io.FileUtils;
27  import org.apache.commons.io.IOUtils;
28  import org.apache.commons.vfs2.FileFilterSelector;
29  import org.apache.commons.vfs2.FileObject;
30  import org.apache.commons.vfs2.FileSelectInfo;
31  import org.apache.commons.vfs2.FileSystemException;
32  import org.junit.jupiter.api.AfterAll;
33  import org.junit.jupiter.api.BeforeAll;
34  import org.junit.jupiter.api.Test;
35  
36  /**
37   * Test for {@link SizeFileFilter}.
38   */
39  // CHECKSTYLE:OFF Test code
40  public class SizeFileFilterTest extends BaseFilterTest {
41  
42      private static File testDir;
43  
44      private static File minFile;
45  
46      private static FileSelectInfo minFileInfo;
47  
48      private static File optFile;
49  
50      private static FileSelectInfo optFileInfo;
51  
52      private static File maxFile;
53  
54      private static FileSelectInfo maxFileInfo;
55  
56      private static File zipFile;
57  
58      private static FileObject zipFileObj;
59  
60      @AfterAll
61      public static void afterClass() throws IOException {
62  
63          minFileInfo = null;
64          minFile = null;
65  
66          optFileInfo = null;
67          optFile = null;
68  
69          maxFileInfo = null;
70          maxFile = null;
71  
72          IOUtils.close(zipFileObj);
73          FileUtils.deleteQuietly(zipFile);
74          zipFile = null;
75  
76          FileUtils.deleteDirectory(testDir);
77          testDir = null;
78      }
79  
80      @BeforeAll
81      public static void beforeClass() throws IOException {
82          testDir = getTestDir(SizeFileFilterTest.class.getName());
83  
84          // 2 characters
85          minFile = new File(testDir, "min.txt");
86          FileUtils.write(minFile, "12");
87          minFileInfo = createFileSelectInfo(minFile);
88  
89          // 4 characters
90          optFile = new File(testDir, "opt.txt");
91          FileUtils.write(optFile, "1234");
92          optFileInfo = createFileSelectInfo(optFile);
93  
94          // 6 characters
95          maxFile = new File(testDir, "max.txt");
96          FileUtils.write(maxFile, "123456");
97          maxFileInfo = createFileSelectInfo(maxFile);
98  
99          // Zip the test directory
100         zipFile = new File(getTempDir(), SizeFileFilterTest.class.getName() + ".zip");
101         zipDir(testDir, "", zipFile);
102         zipFileObj = getZipFileObject(zipFile);
103     }
104 
105     @Test
106     public void testSizeFileFilterLong() throws FileSystemException {
107 
108         final SizeFileFilter testee = new SizeFileFilter(4);
109         assertFalse(testee.accept(minFileInfo));
110         assertTrue(testee.accept(optFileInfo));
111         assertTrue(testee.accept(maxFileInfo));
112     }
113 
114     @Test
115     public void testSizeFileFilterLongBoolean() throws FileSystemException {
116 
117         SizeFileFilter testee;
118 
119         testee = new SizeFileFilter(4, true);
120         assertFalse(testee.accept(minFileInfo));
121         assertTrue(testee.accept(optFileInfo));
122         assertTrue(testee.accept(maxFileInfo));
123 
124         testee = new SizeFileFilter(4, false);
125         assertTrue(testee.accept(minFileInfo));
126         assertFalse(testee.accept(optFileInfo));
127         assertFalse(testee.accept(maxFileInfo));
128     }
129 
130     @Test
131     public void testSizeFileFilterZipDir() throws FileSystemException {
132 
133         // Same test with ZIP file
134         FileObject[] files;
135 
136         files = zipFileObj.findFiles(new FileFilterSelector(new SizeFileFilter(4, true)));
137         assertContains(files, optFile.getName(), maxFile.getName());
138         assertEquals(2, files.length);
139 
140         files = zipFileObj.findFiles(new FileFilterSelector(new SizeFileFilter(4, false)));
141         assertContains(files, minFile.getName());
142         assertEquals(1, files.length);
143 
144         files = zipFileObj.findFiles(new FileFilterSelector(new SizeRangeFileFilter(2, 6)));
145         assertContains(files, minFile.getName(), optFile.getName(), maxFile.getName());
146         assertEquals(3, files.length);
147 
148         files = zipFileObj.findFiles(new FileFilterSelector(new SizeRangeFileFilter(3, 6)));
149         assertContains(files, optFile.getName(), maxFile.getName());
150         assertEquals(2, files.length);
151 
152         files = zipFileObj.findFiles(new FileFilterSelector(new SizeRangeFileFilter(2, 5)));
153         assertContains(files, minFile.getName(), optFile.getName());
154         assertEquals(2, files.length);
155 
156         files = zipFileObj.findFiles(new FileFilterSelector(new SizeRangeFileFilter(3, 5)));
157         assertContains(files, optFile.getName());
158         assertEquals(1, files.length);
159 
160         files = zipFileObj.findFiles(new FileFilterSelector(new SizeRangeFileFilter(4, 4)));
161         assertContains(files, optFile.getName());
162         assertEquals(1, files.length);
163     }
164 
165     @Test
166     public void testSizeRangeFileFilter() throws FileSystemException {
167 
168         SizeRangeFileFilter testee;
169 
170         testee = new SizeRangeFileFilter(2, 6);
171         assertTrue(testee.accept(minFileInfo));
172         assertTrue(testee.accept(optFileInfo));
173         assertTrue(testee.accept(maxFileInfo));
174 
175         testee = new SizeRangeFileFilter(3, 6);
176         assertFalse(testee.accept(minFileInfo));
177         assertTrue(testee.accept(optFileInfo));
178         assertTrue(testee.accept(maxFileInfo));
179 
180         testee = new SizeRangeFileFilter(2, 5);
181         assertTrue(testee.accept(minFileInfo));
182         assertTrue(testee.accept(optFileInfo));
183         assertFalse(testee.accept(maxFileInfo));
184 
185         testee = new SizeRangeFileFilter(3, 5);
186         assertFalse(testee.accept(minFileInfo));
187         assertTrue(testee.accept(optFileInfo));
188         assertFalse(testee.accept(maxFileInfo));
189 
190         testee = new SizeRangeFileFilter(4, 4);
191         assertFalse(testee.accept(minFileInfo));
192         assertTrue(testee.accept(optFileInfo));
193         assertFalse(testee.accept(maxFileInfo));
194     }
195 
196 }
197 // CHECKSTYLE:ON