• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
assert0(final byte[] arr)41     private void assert0(final byte[] arr) {
42         for (final byte e : arr) {
43             assertEquals(0, e);
44         }
45     }
46 
assert0(final char[] arr)47     private void assert0(final char[] arr) {
48         for (final char e : arr) {
49             assertEquals(0, e);
50         }
51     }
52 
serialize(final IOCase value)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
test_checkCompare_case()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
test_checkCompare_functionality()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
test_checkEndsWith_case()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
test_checkEndsWith_functionality()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 
123     @Test
test_checkEquals_case()124     public void test_checkEquals_case() {
125         assertTrue(IOCase.SENSITIVE.checkEquals("ABC", "ABC"));
126         assertFalse(IOCase.SENSITIVE.checkEquals("ABC", "Abc"));
127 
128         assertTrue(IOCase.INSENSITIVE.checkEquals("ABC", "ABC"));
129         assertTrue(IOCase.INSENSITIVE.checkEquals("ABC", "Abc"));
130 
131         assertTrue(IOCase.SYSTEM.checkEquals("ABC", "ABC"));
132         assertEquals(WINDOWS, IOCase.SYSTEM.checkEquals("ABC", "Abc"));
133     }
134 
135     @Test
test_checkEquals_functionality()136     public void test_checkEquals_functionality() {
137         assertFalse(IOCase.SENSITIVE.checkEquals("ABC", ""));
138         assertFalse(IOCase.SENSITIVE.checkEquals("ABC", "A"));
139         assertFalse(IOCase.SENSITIVE.checkEquals("ABC", "AB"));
140         assertTrue(IOCase.SENSITIVE.checkEquals("ABC", "ABC"));
141         assertFalse(IOCase.SENSITIVE.checkEquals("ABC", "BC"));
142         assertFalse(IOCase.SENSITIVE.checkEquals("ABC", "C"));
143         assertFalse(IOCase.SENSITIVE.checkEquals("ABC", "ABCD"));
144         assertFalse(IOCase.SENSITIVE.checkEquals("", "ABC"));
145         assertTrue(IOCase.SENSITIVE.checkEquals("", ""));
146 
147         assertThrows(NullPointerException.class, () -> IOCase.SENSITIVE.checkEquals("ABC", null));
148         assertThrows(NullPointerException.class, () -> IOCase.SENSITIVE.checkEquals(null, "ABC"));
149         assertThrows(NullPointerException.class, () -> IOCase.SENSITIVE.checkEquals(null, null));
150     }
151 
152     @Test
test_checkIndexOf_case()153     public void test_checkIndexOf_case() {
154         assertEquals(1,  IOCase.SENSITIVE.checkIndexOf("ABC", 0, "BC"));
155         assertEquals(-1, IOCase.SENSITIVE.checkIndexOf("ABC", 0, "Bc"));
156 
157         assertEquals(1, IOCase.INSENSITIVE.checkIndexOf("ABC", 0, "BC"));
158         assertEquals(1, IOCase.INSENSITIVE.checkIndexOf("ABC", 0, "Bc"));
159 
160         assertEquals(1, IOCase.SYSTEM.checkIndexOf("ABC", 0, "BC"));
161         assertEquals(WINDOWS ? 1 : -1, IOCase.SYSTEM.checkIndexOf("ABC", 0, "Bc"));
162     }
163 
164     @Test
test_checkIndexOf_functionality()165     public void test_checkIndexOf_functionality() {
166 
167         // start
168         assertEquals(0,   IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 0, "A"));
169         assertEquals(-1,  IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 1, "A"));
170         assertEquals(0,   IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 0, "AB"));
171         assertEquals(-1,  IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 1, "AB"));
172         assertEquals(0,   IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 0, "ABC"));
173         assertEquals(-1,  IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 1, "ABC"));
174 
175         // middle
176         assertEquals(3,   IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 0, "D"));
177         assertEquals(3,   IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 3, "D"));
178         assertEquals(-1,  IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 4, "D"));
179         assertEquals(3,   IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 0, "DE"));
180         assertEquals(3,   IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 3, "DE"));
181         assertEquals(-1,  IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 4, "DE"));
182         assertEquals(3,   IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 0, "DEF"));
183         assertEquals(3,   IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 3, "DEF"));
184         assertEquals(-1,  IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 4, "DEF"));
185 
186         // end
187         assertEquals(9,   IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 0, "J"));
188         assertEquals(9,   IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 8, "J"));
189         assertEquals(9,   IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 9, "J"));
190         assertEquals(8,   IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 0, "IJ"));
191         assertEquals(8,   IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 8, "IJ"));
192         assertEquals(-1,  IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 9, "IJ"));
193         assertEquals(7,   IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 6, "HIJ"));
194         assertEquals(7,   IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 7, "HIJ"));
195         assertEquals(-1,  IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 8, "HIJ"));
196 
197         // not found
198         assertEquals(-1,   IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 0, "DED"));
199 
200         // too long
201         assertEquals(-1,   IOCase.SENSITIVE.checkIndexOf("DEF", 0, "ABCDEFGHIJ"));
202 
203         assertThrows(NullPointerException.class, () -> IOCase.SENSITIVE.checkIndexOf("ABC", 0, null));
204         assertThrows(NullPointerException.class, () -> IOCase.SENSITIVE.checkIndexOf(null, 0, "ABC"));
205         assertThrows(NullPointerException.class, () -> IOCase.SENSITIVE.checkIndexOf(null, 0, null));
206     }
207 
208     @Test
test_checkRegionMatches_case()209     public void test_checkRegionMatches_case() {
210         assertTrue(IOCase.SENSITIVE.checkRegionMatches("ABC", 0, "AB"));
211         assertFalse(IOCase.SENSITIVE.checkRegionMatches("ABC", 0, "Ab"));
212 
213         assertTrue(IOCase.INSENSITIVE.checkRegionMatches("ABC", 0, "AB"));
214         assertTrue(IOCase.INSENSITIVE.checkRegionMatches("ABC", 0, "Ab"));
215 
216         assertTrue(IOCase.SYSTEM.checkRegionMatches("ABC", 0, "AB"));
217         assertEquals(WINDOWS, IOCase.SYSTEM.checkRegionMatches("ABC", 0, "Ab"));
218     }
219 
220     @Test
test_checkRegionMatches_functionality()221     public void test_checkRegionMatches_functionality() {
222         assertTrue(IOCase.SENSITIVE.checkRegionMatches("ABC", 0, ""));
223         assertTrue(IOCase.SENSITIVE.checkRegionMatches("ABC", 0, "A"));
224         assertTrue(IOCase.SENSITIVE.checkRegionMatches("ABC", 0, "AB"));
225         assertTrue(IOCase.SENSITIVE.checkRegionMatches("ABC", 0, "ABC"));
226         assertFalse(IOCase.SENSITIVE.checkRegionMatches("ABC", 0, "BC"));
227         assertFalse(IOCase.SENSITIVE.checkRegionMatches("ABC", 0, "C"));
228         assertFalse(IOCase.SENSITIVE.checkRegionMatches("ABC", 0, "ABCD"));
229         assertFalse(IOCase.SENSITIVE.checkRegionMatches("", 0, "ABC"));
230         assertTrue(IOCase.SENSITIVE.checkRegionMatches("", 0, ""));
231 
232         assertTrue(IOCase.SENSITIVE.checkRegionMatches("ABC", 1, ""));
233         assertFalse(IOCase.SENSITIVE.checkRegionMatches("ABC", 1, "A"));
234         assertFalse(IOCase.SENSITIVE.checkRegionMatches("ABC", 1, "AB"));
235         assertFalse(IOCase.SENSITIVE.checkRegionMatches("ABC", 1, "ABC"));
236         assertTrue(IOCase.SENSITIVE.checkRegionMatches("ABC", 1, "BC"));
237         assertFalse(IOCase.SENSITIVE.checkRegionMatches("ABC", 1, "C"));
238         assertFalse(IOCase.SENSITIVE.checkRegionMatches("ABC", 1, "ABCD"));
239         assertFalse(IOCase.SENSITIVE.checkRegionMatches("", 1, "ABC"));
240         assertFalse(IOCase.SENSITIVE.checkRegionMatches("", 1, ""));
241 
242         assertThrows(NullPointerException.class, () -> IOCase.SENSITIVE.checkRegionMatches("ABC", 0, null));
243         assertThrows(NullPointerException.class, () -> IOCase.SENSITIVE.checkRegionMatches(null, 0, "ABC"));
244         assertThrows(NullPointerException.class, () -> IOCase.SENSITIVE.checkRegionMatches(null, 0, null));
245         assertThrows(NullPointerException.class, () -> IOCase.SENSITIVE.checkRegionMatches("ABC", 1, null));
246         assertThrows(NullPointerException.class, () -> IOCase.SENSITIVE.checkRegionMatches(null, 1, "ABC"));
247         assertThrows(NullPointerException.class, () -> IOCase.SENSITIVE.checkRegionMatches(null, 1, null));
248     }
249 
250     @Test
test_checkStartsWith_case()251     public void test_checkStartsWith_case() {
252         assertTrue(IOCase.SENSITIVE.checkStartsWith("ABC", "AB"));
253         assertFalse(IOCase.SENSITIVE.checkStartsWith("ABC", "Ab"));
254 
255         assertTrue(IOCase.INSENSITIVE.checkStartsWith("ABC", "AB"));
256         assertTrue(IOCase.INSENSITIVE.checkStartsWith("ABC", "Ab"));
257 
258         assertTrue(IOCase.SYSTEM.checkStartsWith("ABC", "AB"));
259         assertEquals(WINDOWS, IOCase.SYSTEM.checkStartsWith("ABC", "Ab"));
260     }
261 
262     @Test
test_checkStartsWith_functionality()263     public void test_checkStartsWith_functionality() {
264         assertTrue(IOCase.SENSITIVE.checkStartsWith("ABC", ""));
265         assertTrue(IOCase.SENSITIVE.checkStartsWith("ABC", "A"));
266         assertTrue(IOCase.SENSITIVE.checkStartsWith("ABC", "AB"));
267         assertTrue(IOCase.SENSITIVE.checkStartsWith("ABC", "ABC"));
268         assertFalse(IOCase.SENSITIVE.checkStartsWith("ABC", "BC"));
269         assertFalse(IOCase.SENSITIVE.checkStartsWith("ABC", "C"));
270         assertFalse(IOCase.SENSITIVE.checkStartsWith("ABC", "ABCD"));
271         assertFalse(IOCase.SENSITIVE.checkStartsWith("", "ABC"));
272         assertTrue(IOCase.SENSITIVE.checkStartsWith("", ""));
273 
274         assertFalse(IOCase.SENSITIVE.checkStartsWith("ABC", null));
275         assertFalse(IOCase.SENSITIVE.checkStartsWith(null, "ABC"));
276         assertFalse(IOCase.SENSITIVE.checkStartsWith(null, null));
277     }
278 
279     @Test
test_forName()280     public void test_forName() {
281         assertEquals(IOCase.SENSITIVE, IOCase.forName("Sensitive"));
282         assertEquals(IOCase.INSENSITIVE, IOCase.forName("Insensitive"));
283         assertEquals(IOCase.SYSTEM, IOCase.forName("System"));
284         assertThrows(IllegalArgumentException.class, () -> IOCase.forName("Blah"));
285         assertThrows(IllegalArgumentException.class, () -> IOCase.forName(null));
286     }
287 
288     @Test
test_getName()289     public void test_getName() {
290         assertEquals("Sensitive", IOCase.SENSITIVE.getName());
291         assertEquals("Insensitive", IOCase.INSENSITIVE.getName());
292         assertEquals("System", IOCase.SYSTEM.getName());
293     }
294 
295     @Test
test_getScratchByteArray()296     public void test_getScratchByteArray() {
297         final byte[] array = IOUtils.getScratchByteArray();
298         assert0(array);
299         Arrays.fill(array, (byte) 1);
300         assert0(IOUtils.getScratchCharArray());
301     }
302 
303     @Test
test_getScratchByteArrayWriteOnly()304     public void test_getScratchByteArrayWriteOnly() {
305         final byte[] array = IOUtils.getScratchByteArrayWriteOnly();
306         assert0(array);
307         Arrays.fill(array, (byte) 1);
308         assert0(IOUtils.getScratchCharArray());
309     }
310 
311     @Test
test_getScratchCharArray()312     public void test_getScratchCharArray() {
313         final char[] array = IOUtils.getScratchCharArray();
314         assert0(array);
315         Arrays.fill(array, (char) 1);
316         assert0(IOUtils.getScratchCharArray());
317     }
318 
319     @Test
test_getScratchCharArrayWriteOnly()320     public void test_getScratchCharArrayWriteOnly() {
321         final char[] array = IOUtils.getScratchCharArrayWriteOnly();
322         assert0(array);
323         Arrays.fill(array, (char) 1);
324         assert0(IOUtils.getScratchCharArray());
325     }
326 
327     @Test
test_isCaseSensitive()328     public void test_isCaseSensitive() {
329         assertTrue(IOCase.SENSITIVE.isCaseSensitive());
330         assertFalse(IOCase.INSENSITIVE.isCaseSensitive());
331         assertEquals(!WINDOWS, IOCase.SYSTEM.isCaseSensitive());
332     }
333 
334     @Test
test_isCaseSensitive_static()335     public void test_isCaseSensitive_static() {
336         assertTrue(IOCase.isCaseSensitive(IOCase.SENSITIVE));
337         assertFalse(IOCase.isCaseSensitive(IOCase.INSENSITIVE));
338         assertEquals(!WINDOWS, IOCase.isCaseSensitive(IOCase.SYSTEM));
339     }
340 
341     @Test
test_serialization()342     public void test_serialization() throws Exception {
343         assertSame(IOCase.SENSITIVE, serialize(IOCase.SENSITIVE));
344         assertSame(IOCase.INSENSITIVE, serialize(IOCase.INSENSITIVE));
345         assertSame(IOCase.SYSTEM, serialize(IOCase.SYSTEM));
346     }
347 
348     @Test
test_toString()349     public void test_toString() {
350         assertEquals("Sensitive", IOCase.SENSITIVE.toString());
351         assertEquals("Insensitive", IOCase.INSENSITIVE.toString());
352         assertEquals("System", IOCase.SYSTEM.toString());
353     }
354 
355 }
356