/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.commons.io; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertSame; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.Arrays; import org.junit.jupiter.api.Test; /** * Tests {@link IOCase}. */ public class IOCaseTest { private static final boolean WINDOWS = File.separatorChar == '\\'; private void assert0(final byte[] arr) { for (final byte e : arr) { assertEquals(0, e); } } private void assert0(final char[] arr) { for (final char e : arr) { assertEquals(0, e); } } private IOCase serialize(final IOCase value) throws Exception { final ByteArrayOutputStream buf = new ByteArrayOutputStream(); try (final ObjectOutputStream out = new ObjectOutputStream(buf)) { out.writeObject(value); out.flush(); } final ByteArrayInputStream bufin = new ByteArrayInputStream(buf.toByteArray()); final ObjectInputStream in = new ObjectInputStream(bufin); return (IOCase) in.readObject(); } @Test public void test_checkCompare_case() { assertEquals(0, IOCase.SENSITIVE.checkCompareTo("ABC", "ABC")); assertTrue(IOCase.SENSITIVE.checkCompareTo("ABC", "abc") < 0); assertTrue(IOCase.SENSITIVE.checkCompareTo("abc", "ABC") > 0); assertEquals(0, IOCase.INSENSITIVE.checkCompareTo("ABC", "ABC")); assertEquals(0, IOCase.INSENSITIVE.checkCompareTo("ABC", "abc")); assertEquals(0, IOCase.INSENSITIVE.checkCompareTo("abc", "ABC")); assertEquals(0, IOCase.SYSTEM.checkCompareTo("ABC", "ABC")); assertEquals(WINDOWS, IOCase.SYSTEM.checkCompareTo("ABC", "abc") == 0); assertEquals(WINDOWS, IOCase.SYSTEM.checkCompareTo("abc", "ABC") == 0); } @Test public void test_checkCompare_functionality() { assertTrue(IOCase.SENSITIVE.checkCompareTo("ABC", "") > 0); assertTrue(IOCase.SENSITIVE.checkCompareTo("", "ABC") < 0); assertTrue(IOCase.SENSITIVE.checkCompareTo("ABC", "DEF") < 0); assertTrue(IOCase.SENSITIVE.checkCompareTo("DEF", "ABC") > 0); assertEquals(0, IOCase.SENSITIVE.checkCompareTo("ABC", "ABC")); assertEquals(0, IOCase.SENSITIVE.checkCompareTo("", "")); assertThrows(NullPointerException.class, () -> IOCase.SENSITIVE.checkCompareTo("ABC", null)); assertThrows(NullPointerException.class, () -> IOCase.SENSITIVE.checkCompareTo(null, "ABC")); assertThrows(NullPointerException.class, () -> IOCase.SENSITIVE.checkCompareTo(null, null)); } @Test public void test_checkEndsWith_case() { assertTrue(IOCase.SENSITIVE.checkEndsWith("ABC", "BC")); assertFalse(IOCase.SENSITIVE.checkEndsWith("ABC", "Bc")); assertTrue(IOCase.INSENSITIVE.checkEndsWith("ABC", "BC")); assertTrue(IOCase.INSENSITIVE.checkEndsWith("ABC", "Bc")); assertTrue(IOCase.SYSTEM.checkEndsWith("ABC", "BC")); assertEquals(WINDOWS, IOCase.SYSTEM.checkEndsWith("ABC", "Bc")); } @Test public void test_checkEndsWith_functionality() { assertTrue(IOCase.SENSITIVE.checkEndsWith("ABC", "")); assertFalse(IOCase.SENSITIVE.checkEndsWith("ABC", "A")); assertFalse(IOCase.SENSITIVE.checkEndsWith("ABC", "AB")); assertTrue(IOCase.SENSITIVE.checkEndsWith("ABC", "ABC")); assertTrue(IOCase.SENSITIVE.checkEndsWith("ABC", "BC")); assertTrue(IOCase.SENSITIVE.checkEndsWith("ABC", "C")); assertFalse(IOCase.SENSITIVE.checkEndsWith("ABC", "ABCD")); assertFalse(IOCase.SENSITIVE.checkEndsWith("", "ABC")); assertTrue(IOCase.SENSITIVE.checkEndsWith("", "")); assertFalse(IOCase.SENSITIVE.checkEndsWith("ABC", null)); assertFalse(IOCase.SENSITIVE.checkEndsWith(null, "ABC")); assertFalse(IOCase.SENSITIVE.checkEndsWith(null, null)); } @Test public void test_checkEquals_case() { assertTrue(IOCase.SENSITIVE.checkEquals("ABC", "ABC")); assertFalse(IOCase.SENSITIVE.checkEquals("ABC", "Abc")); assertTrue(IOCase.INSENSITIVE.checkEquals("ABC", "ABC")); assertTrue(IOCase.INSENSITIVE.checkEquals("ABC", "Abc")); assertTrue(IOCase.SYSTEM.checkEquals("ABC", "ABC")); assertEquals(WINDOWS, IOCase.SYSTEM.checkEquals("ABC", "Abc")); } @Test public void test_checkEquals_functionality() { assertFalse(IOCase.SENSITIVE.checkEquals("ABC", "")); assertFalse(IOCase.SENSITIVE.checkEquals("ABC", "A")); assertFalse(IOCase.SENSITIVE.checkEquals("ABC", "AB")); assertTrue(IOCase.SENSITIVE.checkEquals("ABC", "ABC")); assertFalse(IOCase.SENSITIVE.checkEquals("ABC", "BC")); assertFalse(IOCase.SENSITIVE.checkEquals("ABC", "C")); assertFalse(IOCase.SENSITIVE.checkEquals("ABC", "ABCD")); assertFalse(IOCase.SENSITIVE.checkEquals("", "ABC")); assertTrue(IOCase.SENSITIVE.checkEquals("", "")); assertThrows(NullPointerException.class, () -> IOCase.SENSITIVE.checkEquals("ABC", null)); assertThrows(NullPointerException.class, () -> IOCase.SENSITIVE.checkEquals(null, "ABC")); assertThrows(NullPointerException.class, () -> IOCase.SENSITIVE.checkEquals(null, null)); } @Test public void test_checkIndexOf_case() { assertEquals(1, IOCase.SENSITIVE.checkIndexOf("ABC", 0, "BC")); assertEquals(-1, IOCase.SENSITIVE.checkIndexOf("ABC", 0, "Bc")); assertEquals(1, IOCase.INSENSITIVE.checkIndexOf("ABC", 0, "BC")); assertEquals(1, IOCase.INSENSITIVE.checkIndexOf("ABC", 0, "Bc")); assertEquals(1, IOCase.SYSTEM.checkIndexOf("ABC", 0, "BC")); assertEquals(WINDOWS ? 1 : -1, IOCase.SYSTEM.checkIndexOf("ABC", 0, "Bc")); } @Test public void test_checkIndexOf_functionality() { // start assertEquals(0, IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 0, "A")); assertEquals(-1, IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 1, "A")); assertEquals(0, IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 0, "AB")); assertEquals(-1, IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 1, "AB")); assertEquals(0, IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 0, "ABC")); assertEquals(-1, IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 1, "ABC")); // middle assertEquals(3, IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 0, "D")); assertEquals(3, IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 3, "D")); assertEquals(-1, IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 4, "D")); assertEquals(3, IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 0, "DE")); assertEquals(3, IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 3, "DE")); assertEquals(-1, IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 4, "DE")); assertEquals(3, IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 0, "DEF")); assertEquals(3, IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 3, "DEF")); assertEquals(-1, IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 4, "DEF")); // end assertEquals(9, IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 0, "J")); assertEquals(9, IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 8, "J")); assertEquals(9, IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 9, "J")); assertEquals(8, IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 0, "IJ")); assertEquals(8, IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 8, "IJ")); assertEquals(-1, IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 9, "IJ")); assertEquals(7, IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 6, "HIJ")); assertEquals(7, IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 7, "HIJ")); assertEquals(-1, IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 8, "HIJ")); // not found assertEquals(-1, IOCase.SENSITIVE.checkIndexOf("ABCDEFGHIJ", 0, "DED")); // too long assertEquals(-1, IOCase.SENSITIVE.checkIndexOf("DEF", 0, "ABCDEFGHIJ")); assertThrows(NullPointerException.class, () -> IOCase.SENSITIVE.checkIndexOf("ABC", 0, null)); assertThrows(NullPointerException.class, () -> IOCase.SENSITIVE.checkIndexOf(null, 0, "ABC")); assertThrows(NullPointerException.class, () -> IOCase.SENSITIVE.checkIndexOf(null, 0, null)); } @Test public void test_checkRegionMatches_case() { assertTrue(IOCase.SENSITIVE.checkRegionMatches("ABC", 0, "AB")); assertFalse(IOCase.SENSITIVE.checkRegionMatches("ABC", 0, "Ab")); assertTrue(IOCase.INSENSITIVE.checkRegionMatches("ABC", 0, "AB")); assertTrue(IOCase.INSENSITIVE.checkRegionMatches("ABC", 0, "Ab")); assertTrue(IOCase.SYSTEM.checkRegionMatches("ABC", 0, "AB")); assertEquals(WINDOWS, IOCase.SYSTEM.checkRegionMatches("ABC", 0, "Ab")); } @Test public void test_checkRegionMatches_functionality() { assertTrue(IOCase.SENSITIVE.checkRegionMatches("ABC", 0, "")); assertTrue(IOCase.SENSITIVE.checkRegionMatches("ABC", 0, "A")); assertTrue(IOCase.SENSITIVE.checkRegionMatches("ABC", 0, "AB")); assertTrue(IOCase.SENSITIVE.checkRegionMatches("ABC", 0, "ABC")); assertFalse(IOCase.SENSITIVE.checkRegionMatches("ABC", 0, "BC")); assertFalse(IOCase.SENSITIVE.checkRegionMatches("ABC", 0, "C")); assertFalse(IOCase.SENSITIVE.checkRegionMatches("ABC", 0, "ABCD")); assertFalse(IOCase.SENSITIVE.checkRegionMatches("", 0, "ABC")); assertTrue(IOCase.SENSITIVE.checkRegionMatches("", 0, "")); assertTrue(IOCase.SENSITIVE.checkRegionMatches("ABC", 1, "")); assertFalse(IOCase.SENSITIVE.checkRegionMatches("ABC", 1, "A")); assertFalse(IOCase.SENSITIVE.checkRegionMatches("ABC", 1, "AB")); assertFalse(IOCase.SENSITIVE.checkRegionMatches("ABC", 1, "ABC")); assertTrue(IOCase.SENSITIVE.checkRegionMatches("ABC", 1, "BC")); assertFalse(IOCase.SENSITIVE.checkRegionMatches("ABC", 1, "C")); assertFalse(IOCase.SENSITIVE.checkRegionMatches("ABC", 1, "ABCD")); assertFalse(IOCase.SENSITIVE.checkRegionMatches("", 1, "ABC")); assertFalse(IOCase.SENSITIVE.checkRegionMatches("", 1, "")); assertThrows(NullPointerException.class, () -> IOCase.SENSITIVE.checkRegionMatches("ABC", 0, null)); assertThrows(NullPointerException.class, () -> IOCase.SENSITIVE.checkRegionMatches(null, 0, "ABC")); assertThrows(NullPointerException.class, () -> IOCase.SENSITIVE.checkRegionMatches(null, 0, null)); assertThrows(NullPointerException.class, () -> IOCase.SENSITIVE.checkRegionMatches("ABC", 1, null)); assertThrows(NullPointerException.class, () -> IOCase.SENSITIVE.checkRegionMatches(null, 1, "ABC")); assertThrows(NullPointerException.class, () -> IOCase.SENSITIVE.checkRegionMatches(null, 1, null)); } @Test public void test_checkStartsWith_case() { assertTrue(IOCase.SENSITIVE.checkStartsWith("ABC", "AB")); assertFalse(IOCase.SENSITIVE.checkStartsWith("ABC", "Ab")); assertTrue(IOCase.INSENSITIVE.checkStartsWith("ABC", "AB")); assertTrue(IOCase.INSENSITIVE.checkStartsWith("ABC", "Ab")); assertTrue(IOCase.SYSTEM.checkStartsWith("ABC", "AB")); assertEquals(WINDOWS, IOCase.SYSTEM.checkStartsWith("ABC", "Ab")); } @Test public void test_checkStartsWith_functionality() { assertTrue(IOCase.SENSITIVE.checkStartsWith("ABC", "")); assertTrue(IOCase.SENSITIVE.checkStartsWith("ABC", "A")); assertTrue(IOCase.SENSITIVE.checkStartsWith("ABC", "AB")); assertTrue(IOCase.SENSITIVE.checkStartsWith("ABC", "ABC")); assertFalse(IOCase.SENSITIVE.checkStartsWith("ABC", "BC")); assertFalse(IOCase.SENSITIVE.checkStartsWith("ABC", "C")); assertFalse(IOCase.SENSITIVE.checkStartsWith("ABC", "ABCD")); assertFalse(IOCase.SENSITIVE.checkStartsWith("", "ABC")); assertTrue(IOCase.SENSITIVE.checkStartsWith("", "")); assertFalse(IOCase.SENSITIVE.checkStartsWith("ABC", null)); assertFalse(IOCase.SENSITIVE.checkStartsWith(null, "ABC")); assertFalse(IOCase.SENSITIVE.checkStartsWith(null, null)); } @Test public void test_forName() { assertEquals(IOCase.SENSITIVE, IOCase.forName("Sensitive")); assertEquals(IOCase.INSENSITIVE, IOCase.forName("Insensitive")); assertEquals(IOCase.SYSTEM, IOCase.forName("System")); assertThrows(IllegalArgumentException.class, () -> IOCase.forName("Blah")); assertThrows(IllegalArgumentException.class, () -> IOCase.forName(null)); } @Test public void test_getName() { assertEquals("Sensitive", IOCase.SENSITIVE.getName()); assertEquals("Insensitive", IOCase.INSENSITIVE.getName()); assertEquals("System", IOCase.SYSTEM.getName()); } @Test public void test_getScratchByteArray() { final byte[] array = IOUtils.getScratchByteArray(); assert0(array); Arrays.fill(array, (byte) 1); assert0(IOUtils.getScratchCharArray()); } @Test public void test_getScratchByteArrayWriteOnly() { final byte[] array = IOUtils.getScratchByteArrayWriteOnly(); assert0(array); Arrays.fill(array, (byte) 1); assert0(IOUtils.getScratchCharArray()); } @Test public void test_getScratchCharArray() { final char[] array = IOUtils.getScratchCharArray(); assert0(array); Arrays.fill(array, (char) 1); assert0(IOUtils.getScratchCharArray()); } @Test public void test_getScratchCharArrayWriteOnly() { final char[] array = IOUtils.getScratchCharArrayWriteOnly(); assert0(array); Arrays.fill(array, (char) 1); assert0(IOUtils.getScratchCharArray()); } @Test public void test_isCaseSensitive() { assertTrue(IOCase.SENSITIVE.isCaseSensitive()); assertFalse(IOCase.INSENSITIVE.isCaseSensitive()); assertEquals(!WINDOWS, IOCase.SYSTEM.isCaseSensitive()); } @Test public void test_isCaseSensitive_static() { assertTrue(IOCase.isCaseSensitive(IOCase.SENSITIVE)); assertFalse(IOCase.isCaseSensitive(IOCase.INSENSITIVE)); assertEquals(!WINDOWS, IOCase.isCaseSensitive(IOCase.SYSTEM)); } @Test public void test_serialization() throws Exception { assertSame(IOCase.SENSITIVE, serialize(IOCase.SENSITIVE)); assertSame(IOCase.INSENSITIVE, serialize(IOCase.INSENSITIVE)); assertSame(IOCase.SYSTEM, serialize(IOCase.SYSTEM)); } @Test public void test_toString() { assertEquals("Sensitive", IOCase.SENSITIVE.toString()); assertEquals("Insensitive", IOCase.INSENSITIVE.toString()); assertEquals("System", IOCase.SYSTEM.toString()); } }