1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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
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
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
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
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
200 assertEquals(-1, IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 0, "DED"));
201
202
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 }