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