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.lang3; 18 19 import static org.junit.jupiter.api.Assertions.assertFalse; 20 import static org.junit.jupiter.api.Assertions.assertTrue; 21 22 import org.junit.jupiter.api.Test; 23 24 25 /** 26 * Unit tests {@link org.apache.commons.lang3.StringUtils} - StartsWith/EndsWith methods 27 */ 28 public class StringUtilsStartsEndsWithTest extends AbstractLangTest { 29 private static final String foo = "foo"; 30 private static final String bar = "bar"; 31 private static final String foobar = "foobar"; 32 private static final String FOO = "FOO"; 33 private static final String BAR = "BAR"; 34 private static final String FOOBAR = "FOOBAR"; 35 36 37 /** 38 * Test StringUtils.startsWith() 39 */ 40 @Test testStartsWith()41 public void testStartsWith() { 42 assertTrue(StringUtils.startsWith(null, null), "startsWith(null, null)"); 43 assertFalse(StringUtils.startsWith(FOOBAR, null), "startsWith(FOOBAR, null)"); 44 assertFalse(StringUtils.startsWith(null, FOO), "startsWith(null, FOO)"); 45 assertTrue(StringUtils.startsWith(FOOBAR, ""), "startsWith(FOOBAR, \"\")"); 46 47 assertTrue(StringUtils.startsWith(foobar, foo), "startsWith(foobar, foo)"); 48 assertTrue(StringUtils.startsWith(FOOBAR, FOO), "startsWith(FOOBAR, FOO)"); 49 assertFalse(StringUtils.startsWith(foobar, FOO), "startsWith(foobar, FOO)"); 50 assertFalse(StringUtils.startsWith(FOOBAR, foo), "startsWith(FOOBAR, foo)"); 51 52 assertFalse(StringUtils.startsWith(foo, foobar), "startsWith(foo, foobar)"); 53 assertFalse(StringUtils.startsWith(bar, foobar), "startsWith(foo, foobar)"); 54 55 assertFalse(StringUtils.startsWith(foobar, bar), "startsWith(foobar, bar)"); 56 assertFalse(StringUtils.startsWith(FOOBAR, BAR), "startsWith(FOOBAR, BAR)"); 57 assertFalse(StringUtils.startsWith(foobar, BAR), "startsWith(foobar, BAR)"); 58 assertFalse(StringUtils.startsWith(FOOBAR, bar), "startsWith(FOOBAR, bar)"); 59 } 60 61 /** 62 * Test StringUtils.testStartsWithIgnoreCase() 63 */ 64 @Test testStartsWithIgnoreCase()65 public void testStartsWithIgnoreCase() { 66 assertTrue(StringUtils.startsWithIgnoreCase(null, null), "startsWithIgnoreCase(null, null)"); 67 assertFalse(StringUtils.startsWithIgnoreCase(FOOBAR, null), "startsWithIgnoreCase(FOOBAR, null)"); 68 assertFalse(StringUtils.startsWithIgnoreCase(null, FOO), "startsWithIgnoreCase(null, FOO)"); 69 assertTrue(StringUtils.startsWithIgnoreCase(FOOBAR, ""), "startsWithIgnoreCase(FOOBAR, \"\")"); 70 71 assertTrue(StringUtils.startsWithIgnoreCase(foobar, foo), "startsWithIgnoreCase(foobar, foo)"); 72 assertTrue(StringUtils.startsWithIgnoreCase(FOOBAR, FOO), "startsWithIgnoreCase(FOOBAR, FOO)"); 73 assertTrue(StringUtils.startsWithIgnoreCase(foobar, FOO), "startsWithIgnoreCase(foobar, FOO)"); 74 assertTrue(StringUtils.startsWithIgnoreCase(FOOBAR, foo), "startsWithIgnoreCase(FOOBAR, foo)"); 75 76 assertFalse(StringUtils.startsWithIgnoreCase(foo, foobar), "startsWithIgnoreCase(foo, foobar)"); 77 assertFalse(StringUtils.startsWithIgnoreCase(bar, foobar), "startsWithIgnoreCase(foo, foobar)"); 78 79 assertFalse(StringUtils.startsWithIgnoreCase(foobar, bar), "startsWithIgnoreCase(foobar, bar)"); 80 assertFalse(StringUtils.startsWithIgnoreCase(FOOBAR, BAR), "startsWithIgnoreCase(FOOBAR, BAR)"); 81 assertFalse(StringUtils.startsWithIgnoreCase(foobar, BAR), "startsWithIgnoreCase(foobar, BAR)"); 82 assertFalse(StringUtils.startsWithIgnoreCase(FOOBAR, bar), "startsWithIgnoreCase(FOOBAR, bar)"); 83 } 84 85 @Test testStartsWithAny()86 public void testStartsWithAny() { 87 assertFalse(StringUtils.startsWithAny(null, (String[]) null)); 88 assertFalse(StringUtils.startsWithAny(null, "abc")); 89 assertFalse(StringUtils.startsWithAny("abcxyz", (String[]) null)); 90 assertFalse(StringUtils.startsWithAny("abcxyz")); 91 assertTrue(StringUtils.startsWithAny("abcxyz", "abc")); 92 assertTrue(StringUtils.startsWithAny("abcxyz", null, "xyz", "abc")); 93 assertFalse(StringUtils.startsWithAny("abcxyz", null, "xyz", "abcd")); 94 assertTrue(StringUtils.startsWithAny("abcxyz", "")); 95 assertFalse(StringUtils.startsWithAny("abcxyz", null, "xyz", "ABCX")); 96 assertFalse(StringUtils.startsWithAny("ABCXYZ", null, "xyz", "abc")); 97 98 assertTrue(StringUtils.startsWithAny("abcxyz", new StringBuilder("xyz"), new StringBuffer("abc")), "StringUtils.startsWithAny(abcxyz, StringBuilder(xyz), StringBuffer(abc))"); 99 assertTrue(StringUtils.startsWithAny(new StringBuffer("abcxyz"), new StringBuilder("xyz"), new StringBuffer("abc")), "StringUtils.startsWithAny(StringBuffer(abcxyz), StringBuilder(xyz), StringBuffer(abc))"); 100 } 101 102 103 /** 104 * Test StringUtils.endsWith() 105 */ 106 @Test testEndsWith()107 public void testEndsWith() { 108 assertTrue(StringUtils.endsWith(null, null), "endsWith(null, null)"); 109 assertFalse(StringUtils.endsWith(FOOBAR, null), "endsWith(FOOBAR, null)"); 110 assertFalse(StringUtils.endsWith(null, FOO), "endsWith(null, FOO)"); 111 assertTrue(StringUtils.endsWith(FOOBAR, ""), "endsWith(FOOBAR, \"\")"); 112 113 assertFalse(StringUtils.endsWith(foobar, foo), "endsWith(foobar, foo)"); 114 assertFalse(StringUtils.endsWith(FOOBAR, FOO), "endsWith(FOOBAR, FOO)"); 115 assertFalse(StringUtils.endsWith(foobar, FOO), "endsWith(foobar, FOO)"); 116 assertFalse(StringUtils.endsWith(FOOBAR, foo), "endsWith(FOOBAR, foo)"); 117 118 assertFalse(StringUtils.endsWith(foo, foobar), "endsWith(foo, foobar)"); 119 assertFalse(StringUtils.endsWith(bar, foobar), "endsWith(foo, foobar)"); 120 121 assertTrue(StringUtils.endsWith(foobar, bar), "endsWith(foobar, bar)"); 122 assertTrue(StringUtils.endsWith(FOOBAR, BAR), "endsWith(FOOBAR, BAR)"); 123 assertFalse(StringUtils.endsWith(foobar, BAR), "endsWith(foobar, BAR)"); 124 assertFalse(StringUtils.endsWith(FOOBAR, bar), "endsWith(FOOBAR, bar)"); 125 126 // "alpha, beta, gamma, delta".endsWith("delta") 127 assertTrue(StringUtils.endsWith("\u03B1\u03B2\u03B3\u03B4", "\u03B4"), 128 "endsWith(\u03B1\u03B2\u03B3\u03B4, \u03B4)"); 129 // "alpha, beta, gamma, delta".endsWith("gamma, DELTA") 130 assertFalse(StringUtils.endsWith("\u03B1\u03B2\u03B3\u03B4", "\u03B3\u0394"), 131 "endsWith(\u03B1\u03B2\u03B3\u03B4, \u03B3\u0394)"); 132 } 133 134 /** 135 * Test StringUtils.endsWithIgnoreCase() 136 */ 137 @Test testEndsWithIgnoreCase()138 public void testEndsWithIgnoreCase() { 139 assertTrue(StringUtils.endsWithIgnoreCase(null, null), "endsWithIgnoreCase(null, null)"); 140 assertFalse(StringUtils.endsWithIgnoreCase(FOOBAR, null), "endsWithIgnoreCase(FOOBAR, null)"); 141 assertFalse(StringUtils.endsWithIgnoreCase(null, FOO), "endsWithIgnoreCase(null, FOO)"); 142 assertTrue(StringUtils.endsWithIgnoreCase(FOOBAR, ""), "endsWithIgnoreCase(FOOBAR, \"\")"); 143 144 assertFalse(StringUtils.endsWithIgnoreCase(foobar, foo), "endsWithIgnoreCase(foobar, foo)"); 145 assertFalse(StringUtils.endsWithIgnoreCase(FOOBAR, FOO), "endsWithIgnoreCase(FOOBAR, FOO)"); 146 assertFalse(StringUtils.endsWithIgnoreCase(foobar, FOO), "endsWithIgnoreCase(foobar, FOO)"); 147 assertFalse(StringUtils.endsWithIgnoreCase(FOOBAR, foo), "endsWithIgnoreCase(FOOBAR, foo)"); 148 149 assertFalse(StringUtils.endsWithIgnoreCase(foo, foobar), "endsWithIgnoreCase(foo, foobar)"); 150 assertFalse(StringUtils.endsWithIgnoreCase(bar, foobar), "endsWithIgnoreCase(foo, foobar)"); 151 152 assertTrue(StringUtils.endsWithIgnoreCase(foobar, bar), "endsWithIgnoreCase(foobar, bar)"); 153 assertTrue(StringUtils.endsWithIgnoreCase(FOOBAR, BAR), "endsWithIgnoreCase(FOOBAR, BAR)"); 154 assertTrue(StringUtils.endsWithIgnoreCase(foobar, BAR), "endsWithIgnoreCase(foobar, BAR)"); 155 assertTrue(StringUtils.endsWithIgnoreCase(FOOBAR, bar), "endsWithIgnoreCase(FOOBAR, bar)"); 156 157 // javadoc 158 assertTrue(StringUtils.endsWithIgnoreCase("abcdef", "def")); 159 assertTrue(StringUtils.endsWithIgnoreCase("ABCDEF", "def")); 160 assertFalse(StringUtils.endsWithIgnoreCase("ABCDEF", "cde")); 161 162 // "alpha, beta, gamma, delta".endsWith("DELTA") 163 assertTrue(StringUtils.endsWithIgnoreCase("\u03B1\u03B2\u03B3\u03B4", "\u0394"), 164 "endsWith(\u03B1\u03B2\u03B3\u03B4, \u0394)"); 165 // "alpha, beta, gamma, delta".endsWith("GAMMA") 166 assertFalse(StringUtils.endsWithIgnoreCase("\u03B1\u03B2\u03B3\u03B4", "\u0393"), 167 "endsWith(\u03B1\u03B2\u03B3\u03B4, \u0393)"); 168 } 169 170 @Test testEndsWithAny()171 public void testEndsWithAny() { 172 assertFalse(StringUtils.endsWithAny(null, (String) null), "StringUtils.endsWithAny(null, null)"); 173 assertFalse(StringUtils.endsWithAny(null, "abc"), "StringUtils.endsWithAny(null, new String[] {abc})"); 174 assertFalse(StringUtils.endsWithAny("abcxyz", (String) null), "StringUtils.endsWithAny(abcxyz, null)"); 175 assertTrue(StringUtils.endsWithAny("abcxyz", ""), "StringUtils.endsWithAny(abcxyz, new String[] {\"\"})"); 176 assertTrue(StringUtils.endsWithAny("abcxyz", "xyz"), "StringUtils.endsWithAny(abcxyz, new String[] {xyz})"); 177 assertTrue(StringUtils.endsWithAny("abcxyz", null, "xyz", "abc"), "StringUtils.endsWithAny(abcxyz, new String[] {null, xyz, abc})"); 178 assertFalse(StringUtils.endsWithAny("defg", null, "xyz", "abc"), "StringUtils.endsWithAny(defg, new String[] {null, xyz, abc})"); 179 assertTrue(StringUtils.endsWithAny("abcXYZ", "def", "XYZ")); 180 assertFalse(StringUtils.endsWithAny("abcXYZ", "def", "xyz")); 181 assertTrue(StringUtils.endsWithAny("abcXYZ", "def", "YZ")); 182 183 /* 184 * Type null of the last argument to method endsWithAny(CharSequence, CharSequence...) 185 * doesn't exactly match the vararg parameter type. 186 * Cast to CharSequence[] to confirm the non-varargs invocation, 187 * or pass individual arguments of type CharSequence for a varargs invocation. 188 * 189 * assertFalse(StringUtils.endsWithAny("abcXYZ", null)); // replace with specific types to avoid warning 190 */ 191 assertFalse(StringUtils.endsWithAny("abcXYZ", (CharSequence) null)); 192 assertFalse(StringUtils.endsWithAny("abcXYZ", (CharSequence[]) null)); 193 assertTrue(StringUtils.endsWithAny("abcXYZ", "")); 194 195 assertTrue(StringUtils.endsWithAny("abcxyz", new StringBuilder("abc"), new StringBuffer("xyz")), "StringUtils.endsWithAny(abcxyz, StringBuilder(abc), StringBuffer(xyz))"); 196 assertTrue(StringUtils.endsWithAny(new StringBuffer("abcxyz"), new StringBuilder("abc"), new StringBuffer("xyz")), "StringUtils.endsWithAny(StringBuffer(abcxyz), StringBuilder(abc), StringBuffer(xyz))"); 197 } 198 199 200 } 201