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.io;
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.assertSame;
22  import static org.junit.jupiter.api.Assertions.assertThrows;
23  import static org.junit.jupiter.api.Assertions.assertTrue;
24  
25  import java.io.ByteArrayInputStream;
26  import java.io.ByteArrayOutputStream;
27  import java.io.File;
28  import java.io.ObjectInputStream;
29  import java.io.ObjectOutputStream;
30  import java.util.Arrays;
31  
32  import org.junit.jupiter.api.Test;
33  
34  /**
35   * Tests {@link IOCase}.
36   */
37  public class IOCaseTest {
38  
39      private static final boolean WINDOWS = File.separatorChar == '\\';
40  
41      private void assert0(final byte[] arr) {
42          for (final byte e : arr) {
43              assertEquals(0, e);
44          }
45      }
46  
47      private void assert0(final char[] arr) {
48          for (final char e : arr) {
49              assertEquals(0, e);
50          }
51      }
52  
53      private IOCase serialize(final IOCase value) throws Exception {
54          final ByteArrayOutputStream buf = new ByteArrayOutputStream();
55          try (final ObjectOutputStream out = new ObjectOutputStream(buf)) {
56              out.writeObject(value);
57              out.flush();
58          }
59  
60          final ByteArrayInputStream bufin = new ByteArrayInputStream(buf.toByteArray());
61          final ObjectInputStream in = new ObjectInputStream(bufin);
62          return (IOCase) in.readObject();
63      }
64  
65      @Test
66      public void test_checkCompare_case() {
67          assertEquals(0, IOCase.SENSITIVE.checkCompareTo("ABC", "ABC"));
68          assertTrue(IOCase.SENSITIVE.checkCompareTo("ABC", "abc") < 0);
69          assertTrue(IOCase.SENSITIVE.checkCompareTo("abc", "ABC") > 0);
70  
71          assertEquals(0, IOCase.INSENSITIVE.checkCompareTo("ABC", "ABC"));
72          assertEquals(0, IOCase.INSENSITIVE.checkCompareTo("ABC", "abc"));
73          assertEquals(0, IOCase.INSENSITIVE.checkCompareTo("abc", "ABC"));
74  
75          assertEquals(0, IOCase.SYSTEM.checkCompareTo("ABC", "ABC"));
76          assertEquals(WINDOWS, IOCase.SYSTEM.checkCompareTo("ABC", "abc") == 0);
77          assertEquals(WINDOWS, IOCase.SYSTEM.checkCompareTo("abc", "ABC") == 0);
78      }
79  
80      @Test
81      public void test_checkCompare_functionality() {
82          assertTrue(IOCase.SENSITIVE.checkCompareTo("ABC", "") > 0);
83          assertTrue(IOCase.SENSITIVE.checkCompareTo("", "ABC") < 0);
84          assertTrue(IOCase.SENSITIVE.checkCompareTo("ABC", "DEF") < 0);
85          assertTrue(IOCase.SENSITIVE.checkCompareTo("DEF", "ABC") > 0);
86          assertEquals(0, IOCase.SENSITIVE.checkCompareTo("ABC", "ABC"));
87          assertEquals(0, IOCase.SENSITIVE.checkCompareTo("", ""));
88  
89          assertThrows(NullPointerException.class, () -> IOCase.SENSITIVE.checkCompareTo("ABC", null));
90          assertThrows(NullPointerException.class, () -> IOCase.SENSITIVE.checkCompareTo(null, "ABC"));
91          assertThrows(NullPointerException.class, () -> IOCase.SENSITIVE.checkCompareTo(null, null));
92      }
93      @Test
94      public void test_checkEndsWith_case() {
95          assertTrue(IOCase.SENSITIVE.checkEndsWith("ABC", "BC"));
96          assertFalse(IOCase.SENSITIVE.checkEndsWith("ABC", "Bc"));
97  
98          assertTrue(IOCase.INSENSITIVE.checkEndsWith("ABC", "BC"));
99          assertTrue(IOCase.INSENSITIVE.checkEndsWith("ABC", "Bc"));
100 
101         assertTrue(IOCase.SYSTEM.checkEndsWith("ABC", "BC"));
102         assertEquals(WINDOWS, IOCase.SYSTEM.checkEndsWith("ABC", "Bc"));
103     }
104 
105     @Test
106     public void test_checkEndsWith_functionality() {
107         assertTrue(IOCase.SENSITIVE.checkEndsWith("ABC", ""));
108         assertFalse(IOCase.SENSITIVE.checkEndsWith("ABC", "A"));
109         assertFalse(IOCase.SENSITIVE.checkEndsWith("ABC", "AB"));
110         assertTrue(IOCase.SENSITIVE.checkEndsWith("ABC", "ABC"));
111         assertTrue(IOCase.SENSITIVE.checkEndsWith("ABC", "BC"));
112         assertTrue(IOCase.SENSITIVE.checkEndsWith("ABC", "C"));
113         assertFalse(IOCase.SENSITIVE.checkEndsWith("ABC", "ABCD"));
114         assertFalse(IOCase.SENSITIVE.checkEndsWith("", "ABC"));
115         assertTrue(IOCase.SENSITIVE.checkEndsWith("", ""));
116 
117         assertFalse(IOCase.SENSITIVE.checkEndsWith("ABC", null));
118         assertFalse(IOCase.SENSITIVE.checkEndsWith(null, "ABC"));
119         assertFalse(IOCase.SENSITIVE.checkEndsWith(null, null));
120     }
121 
122     @Test
123     public void test_checkEquals_case() {
124         assertTrue(IOCase.SENSITIVE.checkEquals("ABC", "ABC"));
125         assertFalse(IOCase.SENSITIVE.checkEquals("ABC", "Abc"));
126 
127         assertTrue(IOCase.INSENSITIVE.checkEquals("ABC", "ABC"));
128         assertTrue(IOCase.INSENSITIVE.checkEquals("ABC", "Abc"));
129 
130         assertTrue(IOCase.SYSTEM.checkEquals("ABC", "ABC"));
131         assertEquals(WINDOWS, IOCase.SYSTEM.checkEquals("ABC", "Abc"));
132     }
133 
134     @Test
135     public void test_checkEquals_functionality() {
136         assertFalse(IOCase.SENSITIVE.checkEquals("ABC", ""));
137         assertFalse(IOCase.SENSITIVE.checkEquals("ABC", "A"));
138         assertFalse(IOCase.SENSITIVE.checkEquals("ABC", "AB"));
139         assertTrue(IOCase.SENSITIVE.checkEquals("ABC", "ABC"));
140         assertFalse(IOCase.SENSITIVE.checkEquals("ABC", "BC"));
141         assertFalse(IOCase.SENSITIVE.checkEquals("ABC", "C"));
142         assertFalse(IOCase.SENSITIVE.checkEquals("ABC", "ABCD"));
143         assertFalse(IOCase.SENSITIVE.checkEquals("", "ABC"));
144         assertTrue(IOCase.SENSITIVE.checkEquals("", ""));
145 
146         assertFalse(IOCase.SENSITIVE.checkEquals("ABC", null));
147         assertFalse(IOCase.SENSITIVE.checkEquals(null, "ABC"));
148         assertTrue(IOCase.SENSITIVE.checkEquals(null, null));
149     }
150 
151     @Test
152     public void test_checkIndexOf_case() {
153         assertEquals(1,  IOCase.SENSITIVE.checkIndexOf("ABC", 0, "BC"));
154         assertEquals(-1, IOCase.SENSITIVE.checkIndexOf("ABC", 0, "Bc"));
155         assertEquals(-1, IOCase.SENSITIVE.checkIndexOf(null, 0, "Bc"));
156         assertEquals(-1, IOCase.SENSITIVE.checkIndexOf(null, 0, null));
157         assertEquals(-1, IOCase.SENSITIVE.checkIndexOf("ABC", 0, null));
158 
159         assertEquals(1, IOCase.INSENSITIVE.checkIndexOf("ABC", 0, "BC"));
160         assertEquals(1, IOCase.INSENSITIVE.checkIndexOf("ABC", 0, "Bc"));
161 
162         assertEquals(1, IOCase.SYSTEM.checkIndexOf("ABC", 0, "BC"));
163         assertEquals(WINDOWS ? 1 : -1, IOCase.SYSTEM.checkIndexOf("ABC", 0, "Bc"));
164     }
165 
166     @Test
167     public void test_checkIndexOf_functionality() {
168 
169         // start
170         assertEquals(0,   IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 0, "A"));
171         assertEquals(-1,  IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 1, "A"));
172         assertEquals(0,   IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 0, "AB"));
173         assertEquals(-1,  IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 1, "AB"));
174         assertEquals(0,   IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 0, "ABC"));
175         assertEquals(-1,  IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 1, "ABC"));
176 
177         // middle
178         assertEquals(3,   IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 0, "D"));
179         assertEquals(3,   IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 3, "D"));
180         assertEquals(-1,  IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 4, "D"));
181         assertEquals(3,   IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 0, "DE"));
182         assertEquals(3,   IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 3, "DE"));
183         assertEquals(-1,  IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 4, "DE"));
184         assertEquals(3,   IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 0, "DEF"));
185         assertEquals(3,   IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 3, "DEF"));
186         assertEquals(-1,  IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 4, "DEF"));
187 
188         // end
189         assertEquals(9,   IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 0, "J"));
190         assertEquals(9,   IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 8, "J"));
191         assertEquals(9,   IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 9, "J"));
192         assertEquals(8,   IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 0, "IJ"));
193         assertEquals(8,   IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 8, "IJ"));
194         assertEquals(-1,  IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 9, "IJ"));
195         assertEquals(7,   IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 6, "HIJ"));
196         assertEquals(7,   IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 7, "HIJ"));
197         assertEquals(-1,  IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 8, "HIJ"));
198 
199         // not found
200         assertEquals(-1,   IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 0, "DED"));
201 
202         // too long
203         assertEquals(-1,   IOCase.SENSITIVE.checkIndexOf("DEF", 0, "ABCDEFGHIJ"));
204 
205         assertEquals(-1, IOCase.SENSITIVE.checkIndexOf("ABC", 0, null));
206         assertEquals(-1, IOCase.SENSITIVE.checkIndexOf(null, 0, "ABC"));
207         assertEquals(-1, IOCase.SENSITIVE.checkIndexOf(null, 0, null));
208     }
209 
210     @Test
211     public void test_checkRegionMatches_case() {
212         assertTrue(IOCase.SENSITIVE.checkRegionMatches("ABC", 0, "AB"));
213         assertFalse(IOCase.SENSITIVE.checkRegionMatches("ABC", 0, "Ab"));
214 
215         assertTrue(IOCase.INSENSITIVE.checkRegionMatches("ABC", 0, "AB"));
216         assertTrue(IOCase.INSENSITIVE.checkRegionMatches("ABC", 0, "Ab"));
217 
218         assertTrue(IOCase.SYSTEM.checkRegionMatches("ABC", 0, "AB"));
219         assertEquals(WINDOWS, IOCase.SYSTEM.checkRegionMatches("ABC", 0, "Ab"));
220     }
221 
222     @Test
223     public void test_checkRegionMatches_functionality() {
224         assertTrue(IOCase.SENSITIVE.checkRegionMatches("ABC", 0, ""));
225         assertTrue(IOCase.SENSITIVE.checkRegionMatches("ABC", 0, "A"));
226         assertTrue(IOCase.SENSITIVE.checkRegionMatches("ABC", 0, "AB"));
227         assertTrue(IOCase.SENSITIVE.checkRegionMatches("ABC", 0, "ABC"));
228         assertFalse(IOCase.SENSITIVE.checkRegionMatches("ABC", 0, "BC"));
229         assertFalse(IOCase.SENSITIVE.checkRegionMatches("ABC", 0, "C"));
230         assertFalse(IOCase.SENSITIVE.checkRegionMatches("ABC", 0, "ABCD"));
231         assertFalse(IOCase.SENSITIVE.checkRegionMatches("", 0, "ABC"));
232         assertTrue(IOCase.SENSITIVE.checkRegionMatches("", 0, ""));
233 
234         assertTrue(IOCase.SENSITIVE.checkRegionMatches("ABC", 1, ""));
235         assertFalse(IOCase.SENSITIVE.checkRegionMatches("ABC", 1, "A"));
236         assertFalse(IOCase.SENSITIVE.checkRegionMatches("ABC", 1, "AB"));
237         assertFalse(IOCase.SENSITIVE.checkRegionMatches("ABC", 1, "ABC"));
238         assertTrue(IOCase.SENSITIVE.checkRegionMatches("ABC", 1, "BC"));
239         assertFalse(IOCase.SENSITIVE.checkRegionMatches("ABC", 1, "C"));
240         assertFalse(IOCase.SENSITIVE.checkRegionMatches("ABC", 1, "ABCD"));
241         assertFalse(IOCase.SENSITIVE.checkRegionMatches("", 1, "ABC"));
242         assertFalse(IOCase.SENSITIVE.checkRegionMatches("", 1, ""));
243 
244         assertFalse(IOCase.SENSITIVE.checkRegionMatches("ABC", 0, null));
245         assertFalse(IOCase.SENSITIVE.checkRegionMatches(null, 0, "ABC"));
246         assertFalse(IOCase.SENSITIVE.checkRegionMatches(null, 0, null));
247         assertFalse(IOCase.SENSITIVE.checkRegionMatches("ABC", 1, null));
248         assertFalse(IOCase.SENSITIVE.checkRegionMatches(null, 1, "ABC"));
249         assertFalse(IOCase.SENSITIVE.checkRegionMatches(null, 1, null));
250     }
251 
252     @Test
253     public void test_checkStartsWith_case() {
254         assertTrue(IOCase.SENSITIVE.checkStartsWith("ABC", "AB"));
255         assertFalse(IOCase.SENSITIVE.checkStartsWith("ABC", "Ab"));
256 
257         assertTrue(IOCase.INSENSITIVE.checkStartsWith("ABC", "AB"));
258         assertTrue(IOCase.INSENSITIVE.checkStartsWith("ABC", "Ab"));
259 
260         assertTrue(IOCase.SYSTEM.checkStartsWith("ABC", "AB"));
261         assertEquals(WINDOWS, IOCase.SYSTEM.checkStartsWith("ABC", "Ab"));
262     }
263 
264     @Test
265     public void test_checkStartsWith_functionality() {
266         assertTrue(IOCase.SENSITIVE.checkStartsWith("ABC", ""));
267         assertTrue(IOCase.SENSITIVE.checkStartsWith("ABC", "A"));
268         assertTrue(IOCase.SENSITIVE.checkStartsWith("ABC", "AB"));
269         assertTrue(IOCase.SENSITIVE.checkStartsWith("ABC", "ABC"));
270         assertFalse(IOCase.SENSITIVE.checkStartsWith("ABC", "BC"));
271         assertFalse(IOCase.SENSITIVE.checkStartsWith("ABC", "C"));
272         assertFalse(IOCase.SENSITIVE.checkStartsWith("ABC", "ABCD"));
273         assertFalse(IOCase.SENSITIVE.checkStartsWith("", "ABC"));
274         assertTrue(IOCase.SENSITIVE.checkStartsWith("", ""));
275 
276         assertFalse(IOCase.SENSITIVE.checkStartsWith("ABC", null));
277         assertFalse(IOCase.SENSITIVE.checkStartsWith(null, "ABC"));
278         assertFalse(IOCase.SENSITIVE.checkStartsWith(null, null));
279     }
280 
281     @Test
282     public void test_forName() {
283         assertEquals(IOCase.SENSITIVE, IOCase.forName("Sensitive"));
284         assertEquals(IOCase.INSENSITIVE, IOCase.forName("Insensitive"));
285         assertEquals(IOCase.SYSTEM, IOCase.forName("System"));
286         assertThrows(IllegalArgumentException.class, () -> IOCase.forName("Blah"));
287         assertThrows(IllegalArgumentException.class, () -> IOCase.forName(null));
288     }
289 
290     @Test
291     public void test_getName() {
292         assertEquals("Sensitive", IOCase.SENSITIVE.getName());
293         assertEquals("Insensitive", IOCase.INSENSITIVE.getName());
294         assertEquals("System", IOCase.SYSTEM.getName());
295     }
296 
297     @Test
298     public void test_getScratchByteArray() {
299         final byte[] array = IOUtils.getScratchByteArray();
300         assert0(array);
301         Arrays.fill(array, (byte) 1);
302         assert0(IOUtils.getScratchCharArray());
303     }
304 
305     @Test
306     public void test_getScratchByteArrayWriteOnly() {
307         final byte[] array = IOUtils.getScratchByteArrayWriteOnly();
308         assert0(array);
309         Arrays.fill(array, (byte) 1);
310         assert0(IOUtils.getScratchCharArray());
311     }
312 
313     @Test
314     public void test_getScratchCharArray() {
315         final char[] array = IOUtils.getScratchCharArray();
316         assert0(array);
317         Arrays.fill(array, (char) 1);
318         assert0(IOUtils.getScratchCharArray());
319     }
320 
321     @Test
322     public void test_getScratchCharArrayWriteOnly() {
323         final char[] array = IOUtils.getScratchCharArrayWriteOnly();
324         assert0(array);
325         Arrays.fill(array, (char) 1);
326         assert0(IOUtils.getScratchCharArray());
327     }
328 
329     @Test
330     public void test_isCaseSensitive() {
331         assertTrue(IOCase.SENSITIVE.isCaseSensitive());
332         assertFalse(IOCase.INSENSITIVE.isCaseSensitive());
333         assertEquals(!WINDOWS, IOCase.SYSTEM.isCaseSensitive());
334     }
335 
336     @Test
337     public void test_isCaseSensitive_static() {
338         assertTrue(IOCase.isCaseSensitive(IOCase.SENSITIVE));
339         assertFalse(IOCase.isCaseSensitive(IOCase.INSENSITIVE));
340         assertEquals(!WINDOWS, IOCase.isCaseSensitive(IOCase.SYSTEM));
341     }
342 
343     @Test
344     public void test_serialization() throws Exception {
345         assertSame(IOCase.SENSITIVE, serialize(IOCase.SENSITIVE));
346         assertSame(IOCase.INSENSITIVE, serialize(IOCase.INSENSITIVE));
347         assertSame(IOCase.SYSTEM, serialize(IOCase.SYSTEM));
348     }
349 
350     @Test
351     public void test_toString() {
352         assertEquals("Sensitive", IOCase.SENSITIVE.toString());
353         assertEquals("Insensitive", IOCase.INSENSITIVE.toString());
354         assertEquals("System", IOCase.SYSTEM.toString());
355     }
356 
357 }