1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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
28
29 class StringUtilsStripTest extends AbstractLangTest {
30 private static final String FOO = "foo";
31
32 @Test
33 void testStripAccents() {
34 final String cue = "\u00C7\u00FA\u00EA";
35 assertEquals("Cue", StringUtils.stripAccents(cue), "Failed to strip accents from " + cue);
36
37 final String lots = "\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D1\u00D2\u00D3"
38 + "\u00D4\u00D5\u00D6\u00D9\u00DA\u00DB\u00DC\u00DD";
39 assertEquals("AAAAAACEEEEIIIINOOOOOUUUUY", StringUtils.stripAccents(lots), "Failed to strip accents from " + lots);
40
41 assertNull(StringUtils.stripAccents(null), "Failed null safety");
42 assertEquals("", StringUtils.stripAccents(""), "Failed empty String");
43 assertEquals("control", StringUtils.stripAccents("control"), "Failed to handle non-accented text");
44 assertEquals("eclair", StringUtils.stripAccents("\u00E9clair"), "Failed to handle easy example");
45 assertEquals("ALOSZZCND aloszzcnd",
46 StringUtils.stripAccents("\u0104\u0141\u00D3\u015A\u017B\u0179\u0106\u0143\u0110 \u0105\u0142\u00F3\u015B\u017C\u017A\u0107\u0144\u0111"));
47 assertEquals("The cafe\u2019s pinata gave me deja vu.", StringUtils.stripAccents("The caf\u00e9\u2019s pi\u00f1ata gave me d\u00e9j\u00e0 vu."),
48 "Failed to handle accented text");
49 assertEquals("fluid quest", StringUtils.stripAccents("\ufb02uid que\ufb06"), "Failed to handle ligatures");
50 assertEquals("a b c 1 2 3", StringUtils.stripAccents("\u1d43 \u1d47 \u1d9c \u00b9 \u00b2 \u00b3"), "Failed to handle superscript text");
51 assertEquals("math italic",
52 StringUtils.stripAccents("\uD835\uDC5A\uD835\uDC4E\uD835\uDC61\u210E \uD835\uDC56\uD835\uDC61\uD835\uDC4E\uD835\uDC59\uD835\uDC56\uD835\uDC50"),
53 "Failed to handle UTF32 example");
54 assertEquals("\uD83D\uDF01 \uD83D\uDF02 \uD83D\uDF03 \uD83D\uDF04", StringUtils.stripAccents("\uD83D\uDF01 \uD83D\uDF02 \uD83D\uDF03 \uD83D\uDF04"),
55 "Failed to handle non-accented text");
56 }
57
58 @Test
59 void testStripAccentsIWithBar() {
60 assertEquals("I i I i I", StringUtils.stripAccents("\u0197 \u0268 \u1D7B \u1DA4 \u1DA7"));
61 }
62
63 @Test
64 @Disabled
65 void testStripAccentsKorean() {
66
67 final String input = "\uC78A\uC9C0\uB9C8 \uB10C \uD750\uB9B0 \uC5B4\uB460\uC0AC\uC774 \uC67C\uC190\uC73C\uB85C \uADF8\uB9B0 \uBCC4 \uD558\uB098";
68 assertEquals(input, StringUtils.stripAccents(input), "Failed to handle Korean text");
69 }
70
71
72
73
74 @Test
75 void testStripAccentsSymbolMath() {
76
77 final String lt = "<";
78 assertEquals(lt, StringUtils.stripAccents(lt));
79
80 assertEquals(lt, StringUtils.stripAccents("\uFE64"));
81 assertEquals(lt, StringUtils.stripAccents("\uFF1C"));
82 assertEquals(lt, StringUtils.stripAccents("\u226E"));
83
84 final String gt = ">";
85 assertEquals(gt, StringUtils.stripAccents(gt));
86
87 assertEquals(gt, StringUtils.stripAccents("\uFE65"));
88 assertEquals(gt, StringUtils.stripAccents("\uFE65"));
89 assertEquals(gt, StringUtils.stripAccents("\u226F"));
90
91 assertEquals("</script>", StringUtils.stripAccents("\uFF1C\uFF0Fscript\uFF1E"));
92 }
93
94 @Test
95 void testStripAccentsTWithStroke() {
96 assertEquals("T t", StringUtils.stripAccents("\u0166 \u0167"));
97 }
98
99
100
101
102 @Test
103 void testStripAccentsUnicodeVulgarFractions() {
104
105 assertEquals("1â4", StringUtils.stripAccents("\u00BC"));
106
107 assertEquals("1â2", StringUtils.stripAccents("\u00BD"));
108
109 assertEquals("3â4", StringUtils.stripAccents("\u00BE"));
110 }
111
112 @Test
113 void testStripAccentsUWithBar() {
114 assertEquals("U u U u", StringUtils.stripAccents("\u0244 \u0289 \u1D7E \u1DB6"));
115 }
116
117 @Test
118 void testStripAll() {
119
120 final String[] empty = {};
121 final String[] fooSpace = { " " + FOO + " ", " " + FOO, FOO + " " };
122 final String[] fooDots = { ".." + FOO + "..", ".." + FOO, FOO + ".." };
123 final String[] foo = { FOO, FOO, FOO };
124
125 assertNull(StringUtils.stripAll((String[]) null));
126
127 assertArrayEquals(empty, StringUtils.stripAll());
128 assertArrayEquals(new String[] { null }, StringUtils.stripAll((String) null));
129
130 assertArrayEquals(empty, StringUtils.stripAll(empty));
131 assertArrayEquals(foo, StringUtils.stripAll(fooSpace));
132
133 assertNull(StringUtils.stripAll(null, null));
134 assertArrayEquals(foo, StringUtils.stripAll(fooSpace, null));
135 assertArrayEquals(foo, StringUtils.stripAll(fooDots, "."));
136 }
137
138 @Test
139 void testStripEndStringString() {
140
141 assertNull(StringUtils.stripEnd(null, null));
142 assertEquals("", StringUtils.stripEnd("", null));
143 assertEquals("", StringUtils.stripEnd(" ", null));
144 assertEquals(" abc", StringUtils.stripEnd(" abc ", null));
145 assertEquals(StringUtilsTest.WHITESPACE + StringUtilsTest.NON_WHITESPACE,
146 StringUtils.stripEnd(StringUtilsTest.WHITESPACE + StringUtilsTest.NON_WHITESPACE + StringUtilsTest.WHITESPACE, null));
147
148
149 assertNull(StringUtils.stripEnd(null, ""));
150 assertEquals("", StringUtils.stripEnd("", ""));
151 assertEquals(" ", StringUtils.stripEnd(" ", ""));
152 assertEquals(" abc ", StringUtils.stripEnd(" abc ", ""));
153 assertEquals(StringUtilsTest.WHITESPACE, StringUtils.stripEnd(StringUtilsTest.WHITESPACE, ""));
154
155
156 assertNull(StringUtils.stripEnd(null, " "));
157 assertEquals("", StringUtils.stripEnd("", " "));
158 assertEquals("", StringUtils.stripEnd(" ", " "));
159 assertEquals(" abc", StringUtils.stripEnd(" abc ", " "));
160
161
162 assertNull(StringUtils.stripEnd(null, "ab"));
163 assertEquals("", StringUtils.stripEnd("", "ab"));
164 assertEquals(" ", StringUtils.stripEnd(" ", "ab"));
165 assertEquals(" abc ", StringUtils.stripEnd(" abc ", "ab"));
166 assertEquals("abc", StringUtils.stripEnd("abcabab", "ab"));
167 assertEquals(StringUtilsTest.WHITESPACE, StringUtils.stripEnd(StringUtilsTest.WHITESPACE, ""));
168 }
169
170 @Test
171 void testStripStartStringString() {
172
173 assertNull(StringUtils.stripStart(null, null));
174 assertEquals("", StringUtils.stripStart("", null));
175 assertEquals("", StringUtils.stripStart(" ", null));
176 assertEquals("abc ", StringUtils.stripStart(" abc ", null));
177 assertEquals(StringUtilsTest.NON_WHITESPACE + StringUtilsTest.WHITESPACE,
178 StringUtils.stripStart(StringUtilsTest.WHITESPACE + StringUtilsTest.NON_WHITESPACE + StringUtilsTest.WHITESPACE, null));
179
180
181 assertNull(StringUtils.stripStart(null, ""));
182 assertEquals("", StringUtils.stripStart("", ""));
183 assertEquals(" ", StringUtils.stripStart(" ", ""));
184 assertEquals(" abc ", StringUtils.stripStart(" abc ", ""));
185 assertEquals(StringUtilsTest.WHITESPACE, StringUtils.stripStart(StringUtilsTest.WHITESPACE, ""));
186
187
188 assertNull(StringUtils.stripStart(null, " "));
189 assertEquals("", StringUtils.stripStart("", " "));
190 assertEquals("", StringUtils.stripStart(" ", " "));
191 assertEquals("abc ", StringUtils.stripStart(" abc ", " "));
192
193
194 assertNull(StringUtils.stripStart(null, "ab"));
195 assertEquals("", StringUtils.stripStart("", "ab"));
196 assertEquals(" ", StringUtils.stripStart(" ", "ab"));
197 assertEquals(" abc ", StringUtils.stripStart(" abc ", "ab"));
198 assertEquals("cabab", StringUtils.stripStart("abcabab", "ab"));
199 assertEquals(StringUtilsTest.WHITESPACE, StringUtils.stripStart(StringUtilsTest.WHITESPACE, ""));
200 }
201
202 @Test
203 void testStripString() {
204 assertNull(StringUtils.strip(null));
205 assertEquals("", StringUtils.strip(""));
206 assertEquals("", StringUtils.strip(" "));
207 assertEquals("abc", StringUtils.strip(" abc "));
208 assertEquals(StringUtilsTest.NON_WHITESPACE,
209 StringUtils.strip(StringUtilsTest.WHITESPACE + StringUtilsTest.NON_WHITESPACE + StringUtilsTest.WHITESPACE));
210 }
211
212 @Test
213 void testStripStringString() {
214
215 assertNull(StringUtils.strip(null, null));
216 assertEquals("", StringUtils.strip("", null));
217 assertEquals("", StringUtils.strip(" ", null));
218 assertEquals("abc", StringUtils.strip(" abc ", null));
219 assertEquals(StringUtilsTest.NON_WHITESPACE,
220 StringUtils.strip(StringUtilsTest.WHITESPACE + StringUtilsTest.NON_WHITESPACE + StringUtilsTest.WHITESPACE, null));
221
222
223 assertNull(StringUtils.strip(null, ""));
224 assertEquals("", StringUtils.strip("", ""));
225 assertEquals(" ", StringUtils.strip(" ", ""));
226 assertEquals(" abc ", StringUtils.strip(" abc ", ""));
227 assertEquals(StringUtilsTest.WHITESPACE, StringUtils.strip(StringUtilsTest.WHITESPACE, ""));
228
229
230 assertNull(StringUtils.strip(null, " "));
231 assertEquals("", StringUtils.strip("", " "));
232 assertEquals("", StringUtils.strip(" ", " "));
233 assertEquals("abc", StringUtils.strip(" abc ", " "));
234
235
236 assertNull(StringUtils.strip(null, "ab"));
237 assertEquals("", StringUtils.strip("", "ab"));
238 assertEquals(" ", StringUtils.strip(" ", "ab"));
239 assertEquals(" abc ", StringUtils.strip(" abc ", "ab"));
240 assertEquals("c", StringUtils.strip("abcabab", "ab"));
241 assertEquals(StringUtilsTest.WHITESPACE, StringUtils.strip(StringUtilsTest.WHITESPACE, ""));
242 }
243
244 @Test
245 void testStripSupplementaryCodePoints() {
246
247 final String mathA = "\uD835\uDD1E";
248 final String mathB = "\uD835\uDD1F";
249 final String clef = "\uD834\uDD1E";
250
251
252 assertEquals(mathA + "abc", StringUtils.stripStart(mathA + "abc", mathB));
253 assertEquals("abc" + clef, StringUtils.stripEnd("abc" + clef, mathA));
254 assertEquals(mathA + "abc" + mathA, StringUtils.strip(mathA + "abc" + mathA, mathB));
255
256
257 assertEquals("abc", StringUtils.stripStart(mathA + mathA + "abc", mathA));
258 assertEquals("abc", StringUtils.stripEnd("abc" + mathA + mathA, mathA));
259 assertEquals("abc", StringUtils.strip(mathA + "abc" + mathA, mathA));
260 }
261
262 @Test
263 void testStripToEmptyString() {
264 assertEquals("", StringUtils.stripToEmpty(null));
265 assertEquals("", StringUtils.stripToEmpty(""));
266 assertEquals("", StringUtils.stripToEmpty(" "));
267 assertEquals("", StringUtils.stripToEmpty(StringUtilsTest.WHITESPACE));
268 assertEquals("ab c", StringUtils.stripToEmpty(" ab c "));
269 assertEquals(StringUtilsTest.NON_WHITESPACE,
270 StringUtils.stripToEmpty(StringUtilsTest.WHITESPACE + StringUtilsTest.NON_WHITESPACE + StringUtilsTest.WHITESPACE));
271 }
272
273 @Test
274 void testStripToNullString() {
275 assertNull(StringUtils.stripToNull(null));
276 assertNull(StringUtils.stripToNull(""));
277 assertNull(StringUtils.stripToNull(" "));
278 assertNull(StringUtils.stripToNull(StringUtilsTest.WHITESPACE));
279 assertEquals("ab c", StringUtils.stripToNull(" ab c "));
280 assertEquals(StringUtilsTest.NON_WHITESPACE,
281 StringUtils.stripToNull(StringUtilsTest.WHITESPACE + StringUtilsTest.NON_WHITESPACE + StringUtilsTest.WHITESPACE));
282 }
283 }