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