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.assertArrayEquals; 20 import static org.junit.jupiter.api.Assertions.assertEquals; 21 import static org.junit.jupiter.api.Assertions.assertNull; 22 23 import org.junit.jupiter.api.Disabled; 24 import org.junit.jupiter.api.Test; 25 26 /** 27 * Unit tests {@link org.apache.commons.lang3.StringUtils} - Trim/Strip methods 28 */ 29 public class StringUtilsTrimStripTest extends AbstractLangTest { 30 private static final String FOO = "foo"; 31 32 @Test testTrim()33 public void testTrim() { 34 assertEquals(FOO, StringUtils.trim(FOO + " ")); 35 assertEquals(FOO, StringUtils.trim(" " + FOO + " ")); 36 assertEquals(FOO, StringUtils.trim(" " + FOO)); 37 assertEquals(FOO, StringUtils.trim(FOO + "")); 38 assertEquals("", StringUtils.trim(" \t\r\n\b ")); 39 assertEquals("", StringUtils.trim(StringUtilsTest.TRIMMABLE)); 40 assertEquals(StringUtilsTest.NON_TRIMMABLE, StringUtils.trim(StringUtilsTest.NON_TRIMMABLE)); 41 assertEquals("", StringUtils.trim("")); 42 assertNull(StringUtils.trim(null)); 43 } 44 45 @Test testTrimToNull()46 public void testTrimToNull() { 47 assertEquals(FOO, StringUtils.trimToNull(FOO + " ")); 48 assertEquals(FOO, StringUtils.trimToNull(" " + FOO + " ")); 49 assertEquals(FOO, StringUtils.trimToNull(" " + FOO)); 50 assertEquals(FOO, StringUtils.trimToNull(FOO + "")); 51 assertNull(StringUtils.trimToNull(" \t\r\n\b ")); 52 assertNull(StringUtils.trimToNull(StringUtilsTest.TRIMMABLE)); 53 assertEquals(StringUtilsTest.NON_TRIMMABLE, StringUtils.trimToNull(StringUtilsTest.NON_TRIMMABLE)); 54 assertNull(StringUtils.trimToNull("")); 55 assertNull(StringUtils.trimToNull(null)); 56 } 57 58 @Test testTrimToEmpty()59 public void testTrimToEmpty() { 60 assertEquals(FOO, StringUtils.trimToEmpty(FOO + " ")); 61 assertEquals(FOO, StringUtils.trimToEmpty(" " + FOO + " ")); 62 assertEquals(FOO, StringUtils.trimToEmpty(" " + FOO)); 63 assertEquals(FOO, StringUtils.trimToEmpty(FOO + "")); 64 assertEquals("", StringUtils.trimToEmpty(" \t\r\n\b ")); 65 assertEquals("", StringUtils.trimToEmpty(StringUtilsTest.TRIMMABLE)); 66 assertEquals(StringUtilsTest.NON_TRIMMABLE, StringUtils.trimToEmpty(StringUtilsTest.NON_TRIMMABLE)); 67 assertEquals("", StringUtils.trimToEmpty("")); 68 assertEquals("", StringUtils.trimToEmpty(null)); 69 } 70 71 @Test testStrip_String()72 public void testStrip_String() { 73 assertNull(StringUtils.strip(null)); 74 assertEquals("", StringUtils.strip("")); 75 assertEquals("", StringUtils.strip(" ")); 76 assertEquals("abc", StringUtils.strip(" abc ")); 77 assertEquals(StringUtilsTest.NON_WHITESPACE, 78 StringUtils.strip(StringUtilsTest.WHITESPACE + StringUtilsTest.NON_WHITESPACE + StringUtilsTest.WHITESPACE)); 79 } 80 81 @Test testStripToNull_String()82 public void testStripToNull_String() { 83 assertNull(StringUtils.stripToNull(null)); 84 assertNull(StringUtils.stripToNull("")); 85 assertNull(StringUtils.stripToNull(" ")); 86 assertNull(StringUtils.stripToNull(StringUtilsTest.WHITESPACE)); 87 assertEquals("ab c", StringUtils.stripToNull(" ab c ")); 88 assertEquals(StringUtilsTest.NON_WHITESPACE, 89 StringUtils.stripToNull(StringUtilsTest.WHITESPACE + StringUtilsTest.NON_WHITESPACE + StringUtilsTest.WHITESPACE)); 90 } 91 92 @Test testStripToEmpty_String()93 public void testStripToEmpty_String() { 94 assertEquals("", StringUtils.stripToEmpty(null)); 95 assertEquals("", StringUtils.stripToEmpty("")); 96 assertEquals("", StringUtils.stripToEmpty(" ")); 97 assertEquals("", StringUtils.stripToEmpty(StringUtilsTest.WHITESPACE)); 98 assertEquals("ab c", StringUtils.stripToEmpty(" ab c ")); 99 assertEquals(StringUtilsTest.NON_WHITESPACE, 100 StringUtils.stripToEmpty(StringUtilsTest.WHITESPACE + StringUtilsTest.NON_WHITESPACE + StringUtilsTest.WHITESPACE)); 101 } 102 103 @Test testStrip_StringString()104 public void testStrip_StringString() { 105 // null strip 106 assertNull(StringUtils.strip(null, null)); 107 assertEquals("", StringUtils.strip("", null)); 108 assertEquals("", StringUtils.strip(" ", null)); 109 assertEquals("abc", StringUtils.strip(" abc ", null)); 110 assertEquals(StringUtilsTest.NON_WHITESPACE, 111 StringUtils.strip(StringUtilsTest.WHITESPACE + StringUtilsTest.NON_WHITESPACE + StringUtilsTest.WHITESPACE, null)); 112 113 // "" strip 114 assertNull(StringUtils.strip(null, "")); 115 assertEquals("", StringUtils.strip("", "")); 116 assertEquals(" ", StringUtils.strip(" ", "")); 117 assertEquals(" abc ", StringUtils.strip(" abc ", "")); 118 assertEquals(StringUtilsTest.WHITESPACE, StringUtils.strip(StringUtilsTest.WHITESPACE, "")); 119 120 // " " strip 121 assertNull(StringUtils.strip(null, " ")); 122 assertEquals("", StringUtils.strip("", " ")); 123 assertEquals("", StringUtils.strip(" ", " ")); 124 assertEquals("abc", StringUtils.strip(" abc ", " ")); 125 126 // "ab" strip 127 assertNull(StringUtils.strip(null, "ab")); 128 assertEquals("", StringUtils.strip("", "ab")); 129 assertEquals(" ", StringUtils.strip(" ", "ab")); 130 assertEquals(" abc ", StringUtils.strip(" abc ", "ab")); 131 assertEquals("c", StringUtils.strip("abcabab", "ab")); 132 assertEquals(StringUtilsTest.WHITESPACE, StringUtils.strip(StringUtilsTest.WHITESPACE, "")); 133 } 134 135 @Test testStripStart_StringString()136 public void testStripStart_StringString() { 137 // null stripStart 138 assertNull(StringUtils.stripStart(null, null)); 139 assertEquals("", StringUtils.stripStart("", null)); 140 assertEquals("", StringUtils.stripStart(" ", null)); 141 assertEquals("abc ", StringUtils.stripStart(" abc ", null)); 142 assertEquals(StringUtilsTest.NON_WHITESPACE + StringUtilsTest.WHITESPACE, 143 StringUtils.stripStart(StringUtilsTest.WHITESPACE + StringUtilsTest.NON_WHITESPACE + StringUtilsTest.WHITESPACE, null)); 144 145 // "" stripStart 146 assertNull(StringUtils.stripStart(null, "")); 147 assertEquals("", StringUtils.stripStart("", "")); 148 assertEquals(" ", StringUtils.stripStart(" ", "")); 149 assertEquals(" abc ", StringUtils.stripStart(" abc ", "")); 150 assertEquals(StringUtilsTest.WHITESPACE, StringUtils.stripStart(StringUtilsTest.WHITESPACE, "")); 151 152 // " " stripStart 153 assertNull(StringUtils.stripStart(null, " ")); 154 assertEquals("", StringUtils.stripStart("", " ")); 155 assertEquals("", StringUtils.stripStart(" ", " ")); 156 assertEquals("abc ", StringUtils.stripStart(" abc ", " ")); 157 158 // "ab" stripStart 159 assertNull(StringUtils.stripStart(null, "ab")); 160 assertEquals("", StringUtils.stripStart("", "ab")); 161 assertEquals(" ", StringUtils.stripStart(" ", "ab")); 162 assertEquals(" abc ", StringUtils.stripStart(" abc ", "ab")); 163 assertEquals("cabab", StringUtils.stripStart("abcabab", "ab")); 164 assertEquals(StringUtilsTest.WHITESPACE, StringUtils.stripStart(StringUtilsTest.WHITESPACE, "")); 165 } 166 167 @Test testStripEnd_StringString()168 public void testStripEnd_StringString() { 169 // null stripEnd 170 assertNull(StringUtils.stripEnd(null, null)); 171 assertEquals("", StringUtils.stripEnd("", null)); 172 assertEquals("", StringUtils.stripEnd(" ", null)); 173 assertEquals(" abc", StringUtils.stripEnd(" abc ", null)); 174 assertEquals(StringUtilsTest.WHITESPACE + StringUtilsTest.NON_WHITESPACE, 175 StringUtils.stripEnd(StringUtilsTest.WHITESPACE + StringUtilsTest.NON_WHITESPACE + StringUtilsTest.WHITESPACE, null)); 176 177 // "" stripEnd 178 assertNull(StringUtils.stripEnd(null, "")); 179 assertEquals("", StringUtils.stripEnd("", "")); 180 assertEquals(" ", StringUtils.stripEnd(" ", "")); 181 assertEquals(" abc ", StringUtils.stripEnd(" abc ", "")); 182 assertEquals(StringUtilsTest.WHITESPACE, StringUtils.stripEnd(StringUtilsTest.WHITESPACE, "")); 183 184 // " " stripEnd 185 assertNull(StringUtils.stripEnd(null, " ")); 186 assertEquals("", StringUtils.stripEnd("", " ")); 187 assertEquals("", StringUtils.stripEnd(" ", " ")); 188 assertEquals(" abc", StringUtils.stripEnd(" abc ", " ")); 189 190 // "ab" stripEnd 191 assertNull(StringUtils.stripEnd(null, "ab")); 192 assertEquals("", StringUtils.stripEnd("", "ab")); 193 assertEquals(" ", StringUtils.stripEnd(" ", "ab")); 194 assertEquals(" abc ", StringUtils.stripEnd(" abc ", "ab")); 195 assertEquals("abc", StringUtils.stripEnd("abcabab", "ab")); 196 assertEquals(StringUtilsTest.WHITESPACE, StringUtils.stripEnd(StringUtilsTest.WHITESPACE, "")); 197 } 198 199 @Test testStripAll()200 public void testStripAll() { 201 // test stripAll method, merely an array version of the above strip 202 final String[] empty = {}; 203 final String[] fooSpace = { " "+FOO+" ", " "+FOO, FOO+" " }; 204 final String[] fooDots = { ".."+FOO+"..", ".."+FOO, FOO+".." }; 205 final String[] foo = { FOO, FOO, FOO }; 206 207 assertNull(StringUtils.stripAll((String[]) null)); 208 // Additional varargs tests 209 assertArrayEquals(empty, StringUtils.stripAll()); // empty array 210 assertArrayEquals(new String[]{null}, StringUtils.stripAll((String) null)); // == new String[]{null} 211 212 assertArrayEquals(empty, StringUtils.stripAll(empty)); 213 assertArrayEquals(foo, StringUtils.stripAll(fooSpace)); 214 215 assertNull(StringUtils.stripAll(null, null)); 216 assertArrayEquals(foo, StringUtils.stripAll(fooSpace, null)); 217 assertArrayEquals(foo, StringUtils.stripAll(fooDots, ".")); 218 } 219 220 @Test testStripAccents()221 public void testStripAccents() { 222 final String cue = "\u00C7\u00FA\u00EA"; 223 assertEquals("Cue", StringUtils.stripAccents(cue), "Failed to strip accents from " + cue); 224 225 final String lots = "\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C7\u00C8\u00C9" + 226 "\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D1\u00D2\u00D3" + 227 "\u00D4\u00D5\u00D6\u00D9\u00DA\u00DB\u00DC\u00DD"; 228 assertEquals("AAAAAACEEEEIIIINOOOOOUUUUY", 229 StringUtils.stripAccents(lots), 230 "Failed to strip accents from " + lots); 231 232 assertNull(StringUtils.stripAccents(null), "Failed null safety"); 233 assertEquals("", StringUtils.stripAccents(""), "Failed empty String"); 234 assertEquals("control", StringUtils.stripAccents("control"), "Failed to handle non-accented text"); 235 assertEquals("eclair", StringUtils.stripAccents("\u00E9clair"), "Failed to handle easy example"); 236 assertEquals("ALOSZZCN aloszzcn", StringUtils.stripAccents("\u0104\u0141\u00D3\u015A\u017B\u0179\u0106\u0143 " 237 + "\u0105\u0142\u00F3\u015B\u017C\u017A\u0107\u0144")); 238 } 239 240 @Test 241 @Disabled testStripAccents_Korean()242 public void testStripAccents_Korean() { 243 // LANG-1655 244 final String input = "잊지마 넌 흐린 어둠사이 왼손으로 그린 별 하나"; 245 assertEquals(input, StringUtils.stripAccents(input), "Failed to handle non-accented text"); 246 247 } 248 } 249