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;
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.util.Arrays;
24  import java.util.Collection;
25  import java.util.HashSet;
26  import java.util.Set;
27  
28  import org.junit.jupiter.api.AfterAll;
29  import org.junit.jupiter.api.BeforeAll;
30  import org.junit.jupiter.api.Test;
31  
32  /**
33   * Tests FileExtensionSelector.
34   */
35  public class FileExtensionSelectorTest {
36  
37      private static FileObject baseFolder;
38  
39      private static final int FILE_COUNT = 9;
40  
41      private static final int EXTENSION_COUNT = 3;
42  
43      private static final int FILES_PER_EXTENSION_COUNT = 3;
44  
45      /**
46       * Creates a RAM FS.
47       *
48       * @throws Exception
49       */
50      @BeforeAll
51      public static void setUpClass() throws Exception {
52          baseFolder = VFS.getManager().resolveFile("ram://" + FileExtensionSelectorTest.class.getName());
53          baseFolder.deleteAll();
54          baseFolder.createFolder();
55          baseFolder.resolveFile("a.htm").createFile();
56          baseFolder.resolveFile("a.html").createFile();
57          baseFolder.resolveFile("a.xhtml").createFile();
58          baseFolder.resolveFile("b.htm").createFile();
59          baseFolder.resolveFile("b.html").createFile();
60          baseFolder.resolveFile("b.xhtml").createFile();
61          baseFolder.resolveFile("c.htm").createFile();
62          baseFolder.resolveFile("c.html").createFile();
63          baseFolder.resolveFile("c.xhtml").createFile();
64      }
65  
66      /**
67       * Deletes RAM FS files.
68       *
69       * @throws Exception
70       */
71      @AfterAll
72      public static void tearDownClass() throws Exception {
73          if (baseFolder != null) {
74              baseFolder.deleteAll();
75          }
76      }
77  
78      /**
79       * Tests an empty selector.
80       *
81       * @throws Exception
82       */
83      @Test
84      public void testEmpty() throws Exception {
85          final FileSelector selector = new FileExtensionSelector();
86          final FileObject[] foList = baseFolder.findFiles(selector);
87          assertEquals(0, foList.length);
88      }
89  
90      /**
91       * Tests many extensions at once.
92       *
93       * @throws Exception
94       */
95      @Test
96      public void testManyExtensions() throws Exception {
97          final FileObject[] foArray = baseFolder.findFiles(Selectors.SELECT_FILES);
98          assertTrue(foArray.length > 0);
99          // gather file extensions.
100         final Set<String> extensionSet = new HashSet<>();
101         for (final FileObject fo : foArray) {
102             extensionSet.add(fo.getName().getExtension());
103         }
104         final String message = String.format("Extensions: %s; files: %s", extensionSet.toString(),
105                 Arrays.asList(foArray).toString());
106         assertFalse(extensionSet.isEmpty(), message);
107         assertEquals(EXTENSION_COUNT, extensionSet.size(), message);
108         // check all unique extensions
109         final FileSelector selector = new FileExtensionSelector(extensionSet);
110         final FileObject[] list = baseFolder.findFiles(selector);
111         assertEquals(FILE_COUNT, list.length);
112     }
113 
114     /**
115      * Tests a null selector.
116      *
117      * @throws Exception
118      */
119     @Test
120     public void testNullCollection() throws Exception {
121         final FileSelector selector0 = new FileExtensionSelector((Collection<String>) null);
122         final FileObject[] foList = baseFolder.findFiles(selector0);
123         assertEquals(0, foList.length);
124     }
125 
126     /**
127      * Tests a null selector.
128      *
129      * @throws Exception
130      */
131     @Test
132     public void testNullString() throws Exception {
133         final FileSelector selector0 = new FileExtensionSelector((String) null);
134         final FileObject[] foList = baseFolder.findFiles(selector0);
135         assertEquals(0, foList.length);
136     }
137 
138     /**
139      * Tests a one extension selector.
140      *
141      * @throws Exception
142      */
143     @Test
144     public void testOneExtension() throws Exception {
145         final FileObject[] foArray = baseFolder.findFiles(Selectors.SELECT_FILES);
146         assertTrue(foArray.length > 0);
147         // gather file extensions.
148         final Set<String> extensionSet = new HashSet<>();
149         for (final FileObject fo : foArray) {
150             extensionSet.add(fo.getName().getExtension());
151         }
152         final String message = String.format("Extensions: %s; files: %s", extensionSet.toString(),
153                 Arrays.asList(foArray).toString());
154         assertEquals(EXTENSION_COUNT, extensionSet.size(), message);
155         // check each extension
156         for (final String extension : extensionSet) {
157             final FileSelector selector = new FileExtensionSelector(extension);
158             final FileObject[] list = baseFolder.findFiles(selector);
159             assertEquals(FILES_PER_EXTENSION_COUNT, list.length);
160         }
161         // check each file against itself
162         for (final FileObject fo : foArray) {
163             final FileSelector selector = new FileExtensionSelector(fo.getName().getExtension());
164             final FileObject[] list = baseFolder.findFiles(selector);
165             assertEquals(FILES_PER_EXTENSION_COUNT, list.length);
166         }
167     }
168 
169 }