View Javadoc
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    *      https://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   * Tests {@link StringUtils} Trim/Strip methods.
28   */
29  class StringUtilsTrimStripTest 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          // LANG-1655
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      @Test
72      void testStripAccentsTWithStroke() {
73          assertEquals("T t", StringUtils.stripAccents("\u0166 \u0167"));
74      }
75  
76      /**
77       * Tests Unicode vulgar fractions.
78       */
79      @Test
80      void testStripAccentsUnicodeVulgarFractions() {
81          // 1/4, note "⁄", not "/".
82          assertEquals("1⁄4", StringUtils.stripAccents("\u00BC"));
83          // 1/2, note "⁄", not "/".
84          assertEquals("1⁄2", StringUtils.stripAccents("\u00BD"));
85          // 3/4, note "⁄", not "/".
86          assertEquals("3⁄4", StringUtils.stripAccents("\u00BE"));
87      }
88  
89      @Test
90      void testStripAccentsUWithBar() {
91          assertEquals("U u U u", StringUtils.stripAccents("\u0244 \u0289 \u1D7E \u1DB6"));
92      }
93  
94      @Test
95      void testStripAll() {
96          // test stripAll method, merely an array version of the above strip
97          final String[] empty = {};
98          final String[] fooSpace = { "  " + FOO + "  ", "  " + FOO, FOO + "  " };
99          final String[] fooDots = { ".." + FOO + "..", ".." + FOO, FOO + ".." };
100         final String[] foo = { FOO, FOO, FOO };
101 
102         assertNull(StringUtils.stripAll((String[]) null));
103         // Additional varargs tests
104         assertArrayEquals(empty, StringUtils.stripAll()); // empty array
105         assertArrayEquals(new String[] { null }, StringUtils.stripAll((String) null)); // == new String[]{null}
106 
107         assertArrayEquals(empty, StringUtils.stripAll(empty));
108         assertArrayEquals(foo, StringUtils.stripAll(fooSpace));
109 
110         assertNull(StringUtils.stripAll(null, null));
111         assertArrayEquals(foo, StringUtils.stripAll(fooSpace, null));
112         assertArrayEquals(foo, StringUtils.stripAll(fooDots, "."));
113     }
114 
115     @Test
116     void testStripEndStringString() {
117         // null stripEnd
118         assertNull(StringUtils.stripEnd(null, null));
119         assertEquals("", StringUtils.stripEnd("", null));
120         assertEquals("", StringUtils.stripEnd("        ", null));
121         assertEquals("  abc", StringUtils.stripEnd("  abc  ", null));
122         assertEquals(StringUtilsTest.WHITESPACE + StringUtilsTest.NON_WHITESPACE,
123                 StringUtils.stripEnd(StringUtilsTest.WHITESPACE + StringUtilsTest.NON_WHITESPACE + StringUtilsTest.WHITESPACE, null));
124 
125         // "" stripEnd
126         assertNull(StringUtils.stripEnd(null, ""));
127         assertEquals("", StringUtils.stripEnd("", ""));
128         assertEquals("        ", StringUtils.stripEnd("        ", ""));
129         assertEquals("  abc  ", StringUtils.stripEnd("  abc  ", ""));
130         assertEquals(StringUtilsTest.WHITESPACE, StringUtils.stripEnd(StringUtilsTest.WHITESPACE, ""));
131 
132         // " " stripEnd
133         assertNull(StringUtils.stripEnd(null, " "));
134         assertEquals("", StringUtils.stripEnd("", " "));
135         assertEquals("", StringUtils.stripEnd("        ", " "));
136         assertEquals("  abc", StringUtils.stripEnd("  abc  ", " "));
137 
138         // "ab" stripEnd
139         assertNull(StringUtils.stripEnd(null, "ab"));
140         assertEquals("", StringUtils.stripEnd("", "ab"));
141         assertEquals("        ", StringUtils.stripEnd("        ", "ab"));
142         assertEquals("  abc  ", StringUtils.stripEnd("  abc  ", "ab"));
143         assertEquals("abc", StringUtils.stripEnd("abcabab", "ab"));
144         assertEquals(StringUtilsTest.WHITESPACE, StringUtils.stripEnd(StringUtilsTest.WHITESPACE, ""));
145     }
146 
147     @Test
148     void testStripStartStringString() {
149         // null stripStart
150         assertNull(StringUtils.stripStart(null, null));
151         assertEquals("", StringUtils.stripStart("", null));
152         assertEquals("", StringUtils.stripStart("        ", null));
153         assertEquals("abc  ", StringUtils.stripStart("  abc  ", null));
154         assertEquals(StringUtilsTest.NON_WHITESPACE + StringUtilsTest.WHITESPACE,
155                 StringUtils.stripStart(StringUtilsTest.WHITESPACE + StringUtilsTest.NON_WHITESPACE + StringUtilsTest.WHITESPACE, null));
156 
157         // "" stripStart
158         assertNull(StringUtils.stripStart(null, ""));
159         assertEquals("", StringUtils.stripStart("", ""));
160         assertEquals("        ", StringUtils.stripStart("        ", ""));
161         assertEquals("  abc  ", StringUtils.stripStart("  abc  ", ""));
162         assertEquals(StringUtilsTest.WHITESPACE, StringUtils.stripStart(StringUtilsTest.WHITESPACE, ""));
163 
164         // " " stripStart
165         assertNull(StringUtils.stripStart(null, " "));
166         assertEquals("", StringUtils.stripStart("", " "));
167         assertEquals("", StringUtils.stripStart("        ", " "));
168         assertEquals("abc  ", StringUtils.stripStart("  abc  ", " "));
169 
170         // "ab" stripStart
171         assertNull(StringUtils.stripStart(null, "ab"));
172         assertEquals("", StringUtils.stripStart("", "ab"));
173         assertEquals("        ", StringUtils.stripStart("        ", "ab"));
174         assertEquals("  abc  ", StringUtils.stripStart("  abc  ", "ab"));
175         assertEquals("cabab", StringUtils.stripStart("abcabab", "ab"));
176         assertEquals(StringUtilsTest.WHITESPACE, StringUtils.stripStart(StringUtilsTest.WHITESPACE, ""));
177     }
178 
179     @Test
180     void testStripString() {
181         assertNull(StringUtils.strip(null));
182         assertEquals("", StringUtils.strip(""));
183         assertEquals("", StringUtils.strip("        "));
184         assertEquals("abc", StringUtils.strip("  abc  "));
185         assertEquals(StringUtilsTest.NON_WHITESPACE,
186                 StringUtils.strip(StringUtilsTest.WHITESPACE + StringUtilsTest.NON_WHITESPACE + StringUtilsTest.WHITESPACE));
187     }
188 
189     @Test
190     void testStripStringString() {
191         // null strip
192         assertNull(StringUtils.strip(null, null));
193         assertEquals("", StringUtils.strip("", null));
194         assertEquals("", StringUtils.strip("        ", null));
195         assertEquals("abc", StringUtils.strip("  abc  ", null));
196         assertEquals(StringUtilsTest.NON_WHITESPACE,
197                 StringUtils.strip(StringUtilsTest.WHITESPACE + StringUtilsTest.NON_WHITESPACE + StringUtilsTest.WHITESPACE, null));
198 
199         // "" strip
200         assertNull(StringUtils.strip(null, ""));
201         assertEquals("", StringUtils.strip("", ""));
202         assertEquals("        ", StringUtils.strip("        ", ""));
203         assertEquals("  abc  ", StringUtils.strip("  abc  ", ""));
204         assertEquals(StringUtilsTest.WHITESPACE, StringUtils.strip(StringUtilsTest.WHITESPACE, ""));
205 
206         // " " strip
207         assertNull(StringUtils.strip(null, " "));
208         assertEquals("", StringUtils.strip("", " "));
209         assertEquals("", StringUtils.strip("        ", " "));
210         assertEquals("abc", StringUtils.strip("  abc  ", " "));
211 
212         // "ab" strip
213         assertNull(StringUtils.strip(null, "ab"));
214         assertEquals("", StringUtils.strip("", "ab"));
215         assertEquals("        ", StringUtils.strip("        ", "ab"));
216         assertEquals("  abc  ", StringUtils.strip("  abc  ", "ab"));
217         assertEquals("c", StringUtils.strip("abcabab", "ab"));
218         assertEquals(StringUtilsTest.WHITESPACE, StringUtils.strip(StringUtilsTest.WHITESPACE, ""));
219     }
220 
221     @Test
222     void testStripToEmptyString() {
223         assertEquals("", StringUtils.stripToEmpty(null));
224         assertEquals("", StringUtils.stripToEmpty(""));
225         assertEquals("", StringUtils.stripToEmpty("        "));
226         assertEquals("", StringUtils.stripToEmpty(StringUtilsTest.WHITESPACE));
227         assertEquals("ab c", StringUtils.stripToEmpty("  ab c  "));
228         assertEquals(StringUtilsTest.NON_WHITESPACE,
229                 StringUtils.stripToEmpty(StringUtilsTest.WHITESPACE + StringUtilsTest.NON_WHITESPACE + StringUtilsTest.WHITESPACE));
230     }
231 
232     @Test
233     void testStripToNullString() {
234         assertNull(StringUtils.stripToNull(null));
235         assertNull(StringUtils.stripToNull(""));
236         assertNull(StringUtils.stripToNull("        "));
237         assertNull(StringUtils.stripToNull(StringUtilsTest.WHITESPACE));
238         assertEquals("ab c", StringUtils.stripToNull("  ab c  "));
239         assertEquals(StringUtilsTest.NON_WHITESPACE,
240                 StringUtils.stripToNull(StringUtilsTest.WHITESPACE + StringUtilsTest.NON_WHITESPACE + StringUtilsTest.WHITESPACE));
241     }
242 
243     @Test
244     void testTrim() {
245         assertEquals(FOO, StringUtils.trim(FOO + "  "));
246         assertEquals(FOO, StringUtils.trim(" " + FOO + "  "));
247         assertEquals(FOO, StringUtils.trim(" " + FOO));
248         assertEquals(FOO, StringUtils.trim(FOO + ""));
249         assertEquals("", StringUtils.trim(" \t\r\n\b "));
250         assertEquals("", StringUtils.trim(StringUtilsTest.TRIMMABLE));
251         assertEquals(StringUtilsTest.NON_TRIMMABLE, StringUtils.trim(StringUtilsTest.NON_TRIMMABLE));
252         assertEquals("", StringUtils.trim(""));
253         assertNull(StringUtils.trim(null));
254     }
255 
256     @Test
257     void testTrimToEmpty() {
258         assertEquals(FOO, StringUtils.trimToEmpty(FOO + "  "));
259         assertEquals(FOO, StringUtils.trimToEmpty(" " + FOO + "  "));
260         assertEquals(FOO, StringUtils.trimToEmpty(" " + FOO));
261         assertEquals(FOO, StringUtils.trimToEmpty(FOO + ""));
262         assertEquals("", StringUtils.trimToEmpty(" \t\r\n\b "));
263         assertEquals("", StringUtils.trimToEmpty(StringUtilsTest.TRIMMABLE));
264         assertEquals(StringUtilsTest.NON_TRIMMABLE, StringUtils.trimToEmpty(StringUtilsTest.NON_TRIMMABLE));
265         assertEquals("", StringUtils.trimToEmpty(""));
266         assertEquals("", StringUtils.trimToEmpty(null));
267     }
268 
269     @Test
270     void testTrimToNull() {
271         assertEquals(FOO, StringUtils.trimToNull(FOO + "  "));
272         assertEquals(FOO, StringUtils.trimToNull(" " + FOO + "  "));
273         assertEquals(FOO, StringUtils.trimToNull(" " + FOO));
274         assertEquals(FOO, StringUtils.trimToNull(FOO + ""));
275         assertNull(StringUtils.trimToNull(" \t\r\n\b "));
276         assertNull(StringUtils.trimToNull(StringUtilsTest.TRIMMABLE));
277         assertEquals(StringUtilsTest.NON_TRIMMABLE, StringUtils.trimToNull(StringUtilsTest.NON_TRIMMABLE));
278         assertNull(StringUtils.trimToNull(""));
279         assertNull(StringUtils.trimToNull(null));
280     }
281 }