• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.assertEquals;
20 import static org.junit.jupiter.api.Assertions.assertFalse;
21 import static org.junit.jupiter.api.Assertions.assertNotNull;
22 import static org.junit.jupiter.api.Assertions.assertNotSame;
23 import static org.junit.jupiter.api.Assertions.assertNull;
24 import static org.junit.jupiter.api.Assertions.assertSame;
25 import static org.junit.jupiter.api.Assertions.assertThrows;
26 import static org.junit.jupiter.api.Assertions.assertTrue;
27 
28 import java.lang.reflect.Constructor;
29 import java.lang.reflect.Modifier;
30 
31 import org.junit.jupiter.api.Test;
32 
33 /**
34  * Unit tests {@link org.apache.commons.lang3.CharUtils}.
35  */
36 public class CharUtilsTest extends AbstractLangTest {
37 
38     private static final char CHAR_COPY = '\u00a9';
39     private static final Character CHARACTER_A = Character.valueOf('A');
40     private static final Character CHARACTER_B = Character.valueOf('B');
41 
42     @Test
testCompare()43     public void testCompare() {
44         assertTrue(CharUtils.compare('a', 'b') < 0);
45         assertEquals(0, CharUtils.compare('c', 'c'));
46         assertTrue(CharUtils.compare('c', 'a') > 0);
47     }
48 
49     @Test
testConstructor()50     public void testConstructor() {
51         assertNotNull(new CharUtils());
52         final Constructor<?>[] cons = CharUtils.class.getDeclaredConstructors();
53         assertEquals(1, cons.length);
54         assertTrue(Modifier.isPublic(cons[0].getModifiers()));
55         assertTrue(Modifier.isPublic(CharUtils.class.getModifiers()));
56         assertFalse(Modifier.isFinal(CharUtils.class.getModifiers()));
57     }
58 
59     @Test
testIsAscii_char()60     public void testIsAscii_char() {
61         assertTrue(CharUtils.isAscii('a'));
62         assertTrue(CharUtils.isAscii('A'));
63         assertTrue(CharUtils.isAscii('3'));
64         assertTrue(CharUtils.isAscii('-'));
65         assertTrue(CharUtils.isAscii('\n'));
66         assertFalse(CharUtils.isAscii(CHAR_COPY));
67 
68         for (int i = 0; i < 255; i++) {
69             assertEquals(i < 128, CharUtils.isAscii((char) i));
70         }
71     }
72 
73     @Test
74     public void testIsAsciiAlpha_char() {
75         assertTrue(CharUtils.isAsciiAlpha('a'));
76         assertTrue(CharUtils.isAsciiAlpha('A'));
77         assertFalse(CharUtils.isAsciiAlpha('3'));
78         assertFalse(CharUtils.isAsciiAlpha('-'));
79         assertFalse(CharUtils.isAsciiAlpha('\n'));
80         assertFalse(CharUtils.isAsciiAlpha(CHAR_COPY));
81 
82         for (int i = 0; i < 196; i++) {
83             if ((i >= 'A' && i <= 'Z') || (i >= 'a' && i <= 'z')) {
84                 assertTrue(CharUtils.isAsciiAlpha((char) i));
85             } else {
86                 assertFalse(CharUtils.isAsciiAlpha((char) i));
87             }
88         }
89     }
90 
91     @Test
92     public void testIsAsciiAlphaLower_char() {
93         assertTrue(CharUtils.isAsciiAlphaLower('a'));
94         assertFalse(CharUtils.isAsciiAlphaLower('A'));
95         assertFalse(CharUtils.isAsciiAlphaLower('3'));
96         assertFalse(CharUtils.isAsciiAlphaLower('-'));
97         assertFalse(CharUtils.isAsciiAlphaLower('\n'));
98         assertFalse(CharUtils.isAsciiAlphaLower(CHAR_COPY));
99 
100         for (int i = 0; i < 196; i++) {
101             if (i >= 'a' && i <= 'z') {
102                 assertTrue(CharUtils.isAsciiAlphaLower((char) i));
103             } else {
104                 assertFalse(CharUtils.isAsciiAlphaLower((char) i));
105             }
106         }
107     }
108 
109     @Test
110     public void testIsAsciiAlphanumeric_char() {
111         assertTrue(CharUtils.isAsciiAlphanumeric('a'));
112         assertTrue(CharUtils.isAsciiAlphanumeric('A'));
113         assertTrue(CharUtils.isAsciiAlphanumeric('3'));
114         assertFalse(CharUtils.isAsciiAlphanumeric('-'));
115         assertFalse(CharUtils.isAsciiAlphanumeric('\n'));
116         assertFalse(CharUtils.isAsciiAlphanumeric(CHAR_COPY));
117 
118         for (int i = 0; i < 196; i++) {
119             if ((i >= 'A' && i <= 'Z') || (i >= 'a' && i <= 'z') || (i >= '0' && i <= '9')) {
120                 assertTrue(CharUtils.isAsciiAlphanumeric((char) i));
121             } else {
122                 assertFalse(CharUtils.isAsciiAlphanumeric((char) i));
123             }
124         }
125     }
126 
127     @Test
128     public void testIsAsciiAlphaUpper_char() {
129         assertFalse(CharUtils.isAsciiAlphaUpper('a'));
130         assertTrue(CharUtils.isAsciiAlphaUpper('A'));
131         assertFalse(CharUtils.isAsciiAlphaUpper('3'));
132         assertFalse(CharUtils.isAsciiAlphaUpper('-'));
133         assertFalse(CharUtils.isAsciiAlphaUpper('\n'));
134         assertFalse(CharUtils.isAsciiAlphaUpper(CHAR_COPY));
135 
136         for (int i = 0; i < 196; i++) {
137             if (i >= 'A' && i <= 'Z') {
138                 assertTrue(CharUtils.isAsciiAlphaUpper((char) i));
139             } else {
140                 assertFalse(CharUtils.isAsciiAlphaUpper((char) i));
141             }
142         }
143     }
144 
145     @Test
146     public void testIsAsciiControl_char() {
147         assertFalse(CharUtils.isAsciiControl('a'));
148         assertFalse(CharUtils.isAsciiControl('A'));
149         assertFalse(CharUtils.isAsciiControl('3'));
150         assertFalse(CharUtils.isAsciiControl('-'));
151         assertTrue(CharUtils.isAsciiControl('\n'));
152         assertFalse(CharUtils.isAsciiControl(CHAR_COPY));
153 
154         for (int i = 0; i < 196; i++) {
155             if (i < 32 || i == 127) {
156                 assertTrue(CharUtils.isAsciiControl((char) i));
157             } else {
158                 assertFalse(CharUtils.isAsciiControl((char) i));
159             }
160         }
161     }
162 
163     @Test
164     public void testIsAsciiNumeric_char() {
165         assertFalse(CharUtils.isAsciiNumeric('a'));
166         assertFalse(CharUtils.isAsciiNumeric('A'));
167         assertTrue(CharUtils.isAsciiNumeric('3'));
168         assertFalse(CharUtils.isAsciiNumeric('-'));
169         assertFalse(CharUtils.isAsciiNumeric('\n'));
170         assertFalse(CharUtils.isAsciiNumeric(CHAR_COPY));
171 
172         for (int i = 0; i < 196; i++) {
173             if (i >= '0' && i <= '9') {
174                 assertTrue(CharUtils.isAsciiNumeric((char) i));
175             } else {
176                 assertFalse(CharUtils.isAsciiNumeric((char) i));
177             }
178         }
179     }
180 
181     @Test
182     public void testIsAsciiPrintable_char() {
183         assertTrue(CharUtils.isAsciiPrintable('a'));
184         assertTrue(CharUtils.isAsciiPrintable('A'));
185         assertTrue(CharUtils.isAsciiPrintable('3'));
186         assertTrue(CharUtils.isAsciiPrintable('-'));
187         assertFalse(CharUtils.isAsciiPrintable('\n'));
188         assertFalse(CharUtils.isAsciiPrintable(CHAR_COPY));
189 
190         for (int i = 0; i < 196; i++) {
191             if (i >= 32 && i <= 126) {
192                 assertTrue(CharUtils.isAsciiPrintable((char) i));
193             } else {
194                 assertFalse(CharUtils.isAsciiPrintable((char) i));
195             }
196         }
197     }
198 
199     @Test
200     public void testToChar_Character() {
201         assertEquals('A', CharUtils.toChar(CHARACTER_A));
202         assertEquals('B', CharUtils.toChar(CHARACTER_B));
203         assertThrows(NullPointerException.class, () -> CharUtils.toChar((Character) null));
204     }
205 
206     @Test
207     public void testToChar_Character_char() {
208         assertEquals('A', CharUtils.toChar(CHARACTER_A, 'X'));
209         assertEquals('B', CharUtils.toChar(CHARACTER_B, 'X'));
210         assertEquals('X', CharUtils.toChar((Character) null, 'X'));
211     }
212 
213     @Test
214     public void testToChar_String() {
215         assertEquals('A', CharUtils.toChar("A"));
216         assertEquals('B', CharUtils.toChar("BA"));
217         assertThrows(NullPointerException.class, () -> CharUtils.toChar((String) null));
218         assertThrows(IllegalArgumentException.class, () -> CharUtils.toChar(""));
219     }
220 
221     @Test
222     public void testToChar_String_char() {
223         assertEquals('A', CharUtils.toChar("A", 'X'));
224         assertEquals('B', CharUtils.toChar("BA", 'X'));
225         assertEquals('X', CharUtils.toChar("", 'X'));
226         assertEquals('X', CharUtils.toChar((String) null, 'X'));
227     }
228 
229     @SuppressWarnings("deprecation") // intentional test of deprecated method
230     @Test
231     public void testToCharacterObject_char() {
232         assertEquals(Character.valueOf('a'), CharUtils.toCharacterObject('a'));
233         assertSame(CharUtils.toCharacterObject('a'), CharUtils.toCharacterObject('a'));
234 
235         for (int i = 0; i < 128; i++) {
236             final Character ch = CharUtils.toCharacterObject((char) i);
237             final Character ch2 = CharUtils.toCharacterObject((char) i);
238             assertSame(ch, ch2);
239             assertEquals(i, ch.charValue());
240         }
241         for (int i = 128; i < 196; i++) {
242             final Character ch = CharUtils.toCharacterObject((char) i);
243             final Character ch2 = CharUtils.toCharacterObject((char) i);
244             assertEquals(ch, ch2);
245             assertNotSame(ch, ch2);
246             assertEquals(i, ch.charValue());
247             assertEquals(i, ch2.charValue());
248         }
249         assertSame(CharUtils.toCharacterObject("a"), CharUtils.toCharacterObject('a'));
250     }
251 
252     @Test
253     public void testToCharacterObject_String() {
254         assertNull(CharUtils.toCharacterObject(null));
255         assertNull(CharUtils.toCharacterObject(""));
256         assertEquals(Character.valueOf('a'), CharUtils.toCharacterObject("a"));
257         assertEquals(Character.valueOf('a'), CharUtils.toCharacterObject("abc"));
258         assertSame(CharUtils.toCharacterObject("a"), CharUtils.toCharacterObject("a"));
259     }
260 
261     @Test
262     public void testToIntValue_char() {
263         assertEquals(0, CharUtils.toIntValue('0'));
264         assertEquals(1, CharUtils.toIntValue('1'));
265         assertEquals(2, CharUtils.toIntValue('2'));
266         assertEquals(3, CharUtils.toIntValue('3'));
267         assertEquals(4, CharUtils.toIntValue('4'));
268         assertEquals(5, CharUtils.toIntValue('5'));
269         assertEquals(6, CharUtils.toIntValue('6'));
270         assertEquals(7, CharUtils.toIntValue('7'));
271         assertEquals(8, CharUtils.toIntValue('8'));
272         assertEquals(9, CharUtils.toIntValue('9'));
273         assertThrows(IllegalArgumentException.class, () -> CharUtils.toIntValue('a'));
274     }
275 
276     @Test
277     public void testToIntValue_char_int() {
278         assertEquals(0, CharUtils.toIntValue('0', -1));
279         assertEquals(3, CharUtils.toIntValue('3', -1));
280         assertEquals(-1, CharUtils.toIntValue('a', -1));
281     }
282 
283     @Test
284     public void testToIntValue_Character() {
285         assertEquals(0, CharUtils.toIntValue(Character.valueOf('0')));
286         assertEquals(3, CharUtils.toIntValue(Character.valueOf('3')));
287         assertThrows(NullPointerException.class, () -> CharUtils.toIntValue(null));
288         assertThrows(IllegalArgumentException.class, () -> CharUtils.toIntValue(CHARACTER_A));
289     }
290 
291     @Test
292     public void testToIntValue_Character_int() {
293         assertEquals(0, CharUtils.toIntValue(Character.valueOf('0'), -1));
294         assertEquals(3, CharUtils.toIntValue(Character.valueOf('3'), -1));
295         assertEquals(-1, CharUtils.toIntValue(Character.valueOf('A'), -1));
296         assertEquals(-1, CharUtils.toIntValue(null, -1));
297     }
298 
299     @Test
300     public void testToString_char() {
301         assertEquals("a", CharUtils.toString('a'));
302         assertSame(CharUtils.toString('a'), CharUtils.toString('a'));
303 
304         for (int i = 0; i < 128; i++) {
305             final String str = CharUtils.toString((char) i);
306             final String str2 = CharUtils.toString((char) i);
307             assertSame(str, str2);
308             assertEquals(1, str.length());
309             assertEquals(i, str.charAt(0));
310         }
311         for (int i = 128; i < 196; i++) {
312             final String str = CharUtils.toString((char) i);
313             final String str2 = CharUtils.toString((char) i);
314             assertEquals(str, str2);
315             assertNotSame(str, str2);
316             assertEquals(1, str.length());
317             assertEquals(i, str.charAt(0));
318             assertEquals(1, str2.length());
319             assertEquals(i, str2.charAt(0));
320         }
321     }
322 
323     @Test
324     public void testToString_Character() {
325         assertNull(CharUtils.toString(null));
326         assertEquals("A", CharUtils.toString(CHARACTER_A));
327         assertSame(CharUtils.toString(CHARACTER_A), CharUtils.toString(CHARACTER_A));
328     }
329 
330     @Test
331     public void testToUnicodeEscaped_char() {
332         assertEquals("\\u0041", CharUtils.unicodeEscaped('A'));
333         assertEquals("\\u004c", CharUtils.unicodeEscaped('L'));
334 
335         for (int i = 0; i < 196; i++) {
336             final String str = CharUtils.unicodeEscaped((char) i);
337             assertEquals(6, str.length());
338             final int val = Integer.parseInt(str.substring(2), 16);
339             assertEquals(i, val);
340         }
341         assertEquals("\\u0999", CharUtils.unicodeEscaped((char) 0x999));
342         assertEquals("\\u1001", CharUtils.unicodeEscaped((char) 0x1001));
343     }
344 
345     @Test
346     public void testToUnicodeEscaped_Character() {
347         assertNull(CharUtils.unicodeEscaped(null));
348         assertEquals("\\u0041", CharUtils.unicodeEscaped(CHARACTER_A));
349     }
350 }
351