• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one
3  * or more contributor license agreements.  See the NOTICE file
4  * distributed with this work for additional information
5  * regarding copyright ownership.  The ASF licenses this file
6  * to you under the Apache License, Version 2.0 (the
7  * "License"); you may not use this file except in compliance
8  * with the License.  You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing,
13  * software distributed under the License is distributed on an
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15  * KIND, either express or implied.  See the License for the
16  * specific language governing permissions and limitations
17  * under the License.
18  */
19 package org.apache.commons.lang3;
20 
21 import static org.junit.jupiter.api.Assertions.assertEquals;
22 import static org.junit.jupiter.api.Assertions.assertFalse;
23 import static org.junit.jupiter.api.Assertions.assertNotEquals;
24 import static org.junit.jupiter.api.Assertions.assertNull;
25 import static org.junit.jupiter.api.Assertions.assertSame;
26 import static org.junit.jupiter.api.Assertions.assertTrue;
27 
28 import java.lang.reflect.Modifier;
29 
30 import org.junit.jupiter.api.Test;
31 
32 /**
33  * Unit tests {@link org.apache.commons.lang3.CharSet}.
34  */
35 public class CharSetTest extends AbstractLangTest {
36 
37     @Test
testClass()38     public void testClass() {
39         assertTrue(Modifier.isPublic(CharSet.class.getModifiers()));
40         assertFalse(Modifier.isFinal(CharSet.class.getModifiers()));
41     }
42 
43     @Test
testGetInstance()44     public void testGetInstance() {
45         assertSame(CharSet.EMPTY, CharSet.getInstance( (String) null));
46         assertSame(CharSet.EMPTY, CharSet.getInstance(""));
47         assertSame(CharSet.ASCII_ALPHA, CharSet.getInstance("a-zA-Z"));
48         assertSame(CharSet.ASCII_ALPHA, CharSet.getInstance("A-Za-z"));
49         assertSame(CharSet.ASCII_ALPHA_LOWER, CharSet.getInstance("a-z"));
50         assertSame(CharSet.ASCII_ALPHA_UPPER, CharSet.getInstance("A-Z"));
51         assertSame(CharSet.ASCII_NUMERIC, CharSet.getInstance("0-9"));
52     }
53 
54     @Test
testGetInstance_Stringarray()55     public void testGetInstance_Stringarray() {
56         assertNull(CharSet.getInstance((String[]) null));
57         assertEquals("[]", CharSet.getInstance(new String[0]).toString());
58         assertEquals("[]", CharSet.getInstance(new String[] {null}).toString());
59         assertEquals("[a-e]", CharSet.getInstance(new String[] {"a-e"}).toString());
60     }
61 
62     @Test
testConstructor_String_simple()63     public void testConstructor_String_simple() {
64         CharSet set;
65         CharRange[] array;
66 
67         set = CharSet.getInstance((String) null);
68         array = set.getCharRanges();
69         assertEquals("[]", set.toString());
70         assertEquals(0, array.length);
71 
72         set = CharSet.getInstance("");
73         array = set.getCharRanges();
74         assertEquals("[]", set.toString());
75         assertEquals(0, array.length);
76 
77         set = CharSet.getInstance("a");
78         array = set.getCharRanges();
79         assertEquals("[a]", set.toString());
80         assertEquals(1, array.length);
81         assertEquals("a", array[0].toString());
82 
83         set = CharSet.getInstance("^a");
84         array = set.getCharRanges();
85         assertEquals("[^a]", set.toString());
86         assertEquals(1, array.length);
87         assertEquals("^a", array[0].toString());
88 
89         set = CharSet.getInstance("a-e");
90         array = set.getCharRanges();
91         assertEquals("[a-e]", set.toString());
92         assertEquals(1, array.length);
93         assertEquals("a-e", array[0].toString());
94 
95         set = CharSet.getInstance("^a-e");
96         array = set.getCharRanges();
97         assertEquals("[^a-e]", set.toString());
98         assertEquals(1, array.length);
99         assertEquals("^a-e", array[0].toString());
100     }
101 
102     @Test
testConstructor_String_combo()103     public void testConstructor_String_combo() {
104         CharSet set;
105         CharRange[] array;
106 
107         set = CharSet.getInstance("abc");
108         array = set.getCharRanges();
109         assertEquals(3, array.length);
110         assertTrue(ArrayUtils.contains(array, CharRange.is('a')));
111         assertTrue(ArrayUtils.contains(array, CharRange.is('b')));
112         assertTrue(ArrayUtils.contains(array, CharRange.is('c')));
113 
114         set = CharSet.getInstance("a-ce-f");
115         array = set.getCharRanges();
116         assertEquals(2, array.length);
117         assertTrue(ArrayUtils.contains(array, CharRange.isIn('a', 'c')));
118         assertTrue(ArrayUtils.contains(array, CharRange.isIn('e', 'f')));
119 
120         set = CharSet.getInstance("ae-f");
121         array = set.getCharRanges();
122         assertEquals(2, array.length);
123         assertTrue(ArrayUtils.contains(array, CharRange.is('a')));
124         assertTrue(ArrayUtils.contains(array, CharRange.isIn('e', 'f')));
125 
126         set = CharSet.getInstance("e-fa");
127         array = set.getCharRanges();
128         assertEquals(2, array.length);
129         assertTrue(ArrayUtils.contains(array, CharRange.is('a')));
130         assertTrue(ArrayUtils.contains(array, CharRange.isIn('e', 'f')));
131 
132         set = CharSet.getInstance("ae-fm-pz");
133         array = set.getCharRanges();
134         assertEquals(4, array.length);
135         assertTrue(ArrayUtils.contains(array, CharRange.is('a')));
136         assertTrue(ArrayUtils.contains(array, CharRange.isIn('e', 'f')));
137         assertTrue(ArrayUtils.contains(array, CharRange.isIn('m', 'p')));
138         assertTrue(ArrayUtils.contains(array, CharRange.is('z')));
139     }
140 
141     @Test
testConstructor_String_comboNegated()142     public void testConstructor_String_comboNegated() {
143         CharSet set;
144         CharRange[] array;
145 
146         set = CharSet.getInstance("^abc");
147         array = set.getCharRanges();
148         assertEquals(3, array.length);
149         assertTrue(ArrayUtils.contains(array, CharRange.isNot('a')));
150         assertTrue(ArrayUtils.contains(array, CharRange.is('b')));
151         assertTrue(ArrayUtils.contains(array, CharRange.is('c')));
152 
153         set = CharSet.getInstance("b^ac");
154         array = set.getCharRanges();
155         assertEquals(3, array.length);
156         assertTrue(ArrayUtils.contains(array, CharRange.is('b')));
157         assertTrue(ArrayUtils.contains(array, CharRange.isNot('a')));
158         assertTrue(ArrayUtils.contains(array, CharRange.is('c')));
159 
160         set = CharSet.getInstance("db^ac");
161         array = set.getCharRanges();
162         assertEquals(4, array.length);
163         assertTrue(ArrayUtils.contains(array, CharRange.is('d')));
164         assertTrue(ArrayUtils.contains(array, CharRange.is('b')));
165         assertTrue(ArrayUtils.contains(array, CharRange.isNot('a')));
166         assertTrue(ArrayUtils.contains(array, CharRange.is('c')));
167 
168         set = CharSet.getInstance("^b^a");
169         array = set.getCharRanges();
170         assertEquals(2, array.length);
171         assertTrue(ArrayUtils.contains(array, CharRange.isNot('b')));
172         assertTrue(ArrayUtils.contains(array, CharRange.isNot('a')));
173 
174         set = CharSet.getInstance("b^a-c^z");
175         array = set.getCharRanges();
176         assertEquals(3, array.length);
177         assertTrue(ArrayUtils.contains(array, CharRange.isNotIn('a', 'c')));
178         assertTrue(ArrayUtils.contains(array, CharRange.isNot('z')));
179         assertTrue(ArrayUtils.contains(array, CharRange.is('b')));
180     }
181 
182     @Test
testConstructor_String_oddDash()183     public void testConstructor_String_oddDash() {
184         CharSet set;
185         CharRange[] array;
186 
187         set = CharSet.getInstance("-");
188         array = set.getCharRanges();
189         assertEquals(1, array.length);
190         assertTrue(ArrayUtils.contains(array, CharRange.is('-')));
191 
192         set = CharSet.getInstance("--");
193         array = set.getCharRanges();
194         assertEquals(1, array.length);
195         assertTrue(ArrayUtils.contains(array, CharRange.is('-')));
196 
197         set = CharSet.getInstance("---");
198         array = set.getCharRanges();
199         assertEquals(1, array.length);
200         assertTrue(ArrayUtils.contains(array, CharRange.is('-')));
201 
202         set = CharSet.getInstance("----");
203         array = set.getCharRanges();
204         assertEquals(1, array.length);
205         assertTrue(ArrayUtils.contains(array, CharRange.is('-')));
206 
207         set = CharSet.getInstance("-a");
208         array = set.getCharRanges();
209         assertEquals(2, array.length);
210         assertTrue(ArrayUtils.contains(array, CharRange.is('-')));
211         assertTrue(ArrayUtils.contains(array, CharRange.is('a')));
212 
213         set = CharSet.getInstance("a-");
214         array = set.getCharRanges();
215         assertEquals(2, array.length);
216         assertTrue(ArrayUtils.contains(array, CharRange.is('a')));
217         assertTrue(ArrayUtils.contains(array, CharRange.is('-')));
218 
219         set = CharSet.getInstance("a--");
220         array = set.getCharRanges();
221         assertEquals(1, array.length);
222         assertTrue(ArrayUtils.contains(array, CharRange.isIn('a', '-')));
223 
224         set = CharSet.getInstance("--a");
225         array = set.getCharRanges();
226         assertEquals(1, array.length);
227         assertTrue(ArrayUtils.contains(array, CharRange.isIn('-', 'a')));
228     }
229 
230     @Test
testConstructor_String_oddNegate()231     public void testConstructor_String_oddNegate() {
232         CharSet set;
233         CharRange[] array;
234         set = CharSet.getInstance("^");
235         array = set.getCharRanges();
236         assertEquals(1, array.length);
237         assertTrue(ArrayUtils.contains(array, CharRange.is('^'))); // "^"
238 
239         set = CharSet.getInstance("^^");
240         array = set.getCharRanges();
241         assertEquals(1, array.length);
242         assertTrue(ArrayUtils.contains(array, CharRange.isNot('^'))); // "^^"
243 
244         set = CharSet.getInstance("^^^");
245         array = set.getCharRanges();
246         assertEquals(2, array.length);
247         assertTrue(ArrayUtils.contains(array, CharRange.isNot('^'))); // "^^"
248         assertTrue(ArrayUtils.contains(array, CharRange.is('^'))); // "^"
249 
250         set = CharSet.getInstance("^^^^");
251         array = set.getCharRanges();
252         assertEquals(1, array.length);
253         assertTrue(ArrayUtils.contains(array, CharRange.isNot('^'))); // "^^" x2
254 
255         set = CharSet.getInstance("a^");
256         array = set.getCharRanges();
257         assertEquals(2, array.length);
258         assertTrue(ArrayUtils.contains(array, CharRange.is('a'))); // "a"
259         assertTrue(ArrayUtils.contains(array, CharRange.is('^'))); // "^"
260 
261         set = CharSet.getInstance("^a-");
262         array = set.getCharRanges();
263         assertEquals(2, array.length);
264         assertTrue(ArrayUtils.contains(array, CharRange.isNot('a'))); // "^a"
265         assertTrue(ArrayUtils.contains(array, CharRange.is('-'))); // "-"
266 
267         set = CharSet.getInstance("^^-c");
268         array = set.getCharRanges();
269         assertEquals(1, array.length);
270         assertTrue(ArrayUtils.contains(array, CharRange.isNotIn('^', 'c'))); // "^^-c"
271 
272         set = CharSet.getInstance("^c-^");
273         array = set.getCharRanges();
274         assertEquals(1, array.length);
275         assertTrue(ArrayUtils.contains(array, CharRange.isNotIn('c', '^'))); // "^c-^"
276 
277         set = CharSet.getInstance("^c-^d");
278         array = set.getCharRanges();
279         assertEquals(2, array.length);
280         assertTrue(ArrayUtils.contains(array, CharRange.isNotIn('c', '^'))); // "^c-^"
281         assertTrue(ArrayUtils.contains(array, CharRange.is('d'))); // "d"
282 
283         set = CharSet.getInstance("^^-");
284         array = set.getCharRanges();
285         assertEquals(2, array.length);
286         assertTrue(ArrayUtils.contains(array, CharRange.isNot('^'))); // "^^"
287         assertTrue(ArrayUtils.contains(array, CharRange.is('-'))); // "-"
288     }
289 
290     @Test
testConstructor_String_oddCombinations()291     public void testConstructor_String_oddCombinations() {
292         CharSet set;
293         CharRange[] array;
294 
295         set = CharSet.getInstance("a-^c");
296         array = set.getCharRanges();
297         assertTrue(ArrayUtils.contains(array, CharRange.isIn('a', '^'))); // "a-^"
298         assertTrue(ArrayUtils.contains(array, CharRange.is('c'))); // "c"
299         assertFalse(set.contains('b'));
300         assertTrue(set.contains('^'));
301         assertTrue(set.contains('_')); // between ^ and a
302         assertTrue(set.contains('c'));
303 
304         set = CharSet.getInstance("^a-^c");
305         array = set.getCharRanges();
306         assertTrue(ArrayUtils.contains(array, CharRange.isNotIn('a', '^'))); // "^a-^"
307         assertTrue(ArrayUtils.contains(array, CharRange.is('c'))); // "c"
308         assertTrue(set.contains('b'));
309         assertFalse(set.contains('^'));
310         assertFalse(set.contains('_')); // between ^ and a
311 
312         set = CharSet.getInstance("a- ^-- "); //contains everything
313         array = set.getCharRanges();
314         assertTrue(ArrayUtils.contains(array, CharRange.isIn('a', ' '))); // "a- "
315         assertTrue(ArrayUtils.contains(array, CharRange.isNotIn('-', ' '))); // "^-- "
316         assertTrue(set.contains('#'));
317         assertTrue(set.contains('^'));
318         assertTrue(set.contains('a'));
319         assertTrue(set.contains('*'));
320         assertTrue(set.contains('A'));
321 
322         set = CharSet.getInstance("^-b");
323         array = set.getCharRanges();
324         assertTrue(ArrayUtils.contains(array, CharRange.isIn('^', 'b'))); // "^-b"
325         assertTrue(set.contains('b'));
326         assertTrue(set.contains('_')); // between ^ and a
327         assertFalse(set.contains('A'));
328         assertTrue(set.contains('^'));
329 
330         set = CharSet.getInstance("b-^");
331         array = set.getCharRanges();
332         assertTrue(ArrayUtils.contains(array, CharRange.isIn('^', 'b'))); // "b-^"
333         assertTrue(set.contains('b'));
334         assertTrue(set.contains('^'));
335         assertTrue(set.contains('a')); // between ^ and b
336         assertFalse(set.contains('c'));
337     }
338 
339     @Test
testEquals_Object()340     public void testEquals_Object() {
341         final CharSet abc = CharSet.getInstance("abc");
342         final CharSet abc2 = CharSet.getInstance("abc");
343         final CharSet atoc = CharSet.getInstance("a-c");
344         final CharSet atoc2 = CharSet.getInstance("a-c");
345         final CharSet notatoc = CharSet.getInstance("^a-c");
346         final CharSet notatoc2 = CharSet.getInstance("^a-c");
347 
348         assertNotEquals(null, abc);
349 
350         assertEquals(abc, abc);
351         assertEquals(abc, abc2);
352         assertNotEquals(abc, atoc);
353         assertNotEquals(abc, notatoc);
354 
355         assertNotEquals(atoc, abc);
356         assertEquals(atoc, atoc);
357         assertEquals(atoc, atoc2);
358         assertNotEquals(atoc, notatoc);
359 
360         assertNotEquals(notatoc, abc);
361         assertNotEquals(notatoc, atoc);
362         assertEquals(notatoc, notatoc);
363         assertEquals(notatoc, notatoc2);
364     }
365 
366     @Test
testHashCode()367     public void testHashCode() {
368         final CharSet abc = CharSet.getInstance("abc");
369         final CharSet abc2 = CharSet.getInstance("abc");
370         final CharSet atoc = CharSet.getInstance("a-c");
371         final CharSet atoc2 = CharSet.getInstance("a-c");
372         final CharSet notatoc = CharSet.getInstance("^a-c");
373         final CharSet notatoc2 = CharSet.getInstance("^a-c");
374 
375         assertEquals(abc.hashCode(), abc.hashCode());
376         assertEquals(abc.hashCode(), abc2.hashCode());
377         assertEquals(atoc.hashCode(), atoc.hashCode());
378         assertEquals(atoc.hashCode(), atoc2.hashCode());
379         assertEquals(notatoc.hashCode(), notatoc.hashCode());
380         assertEquals(notatoc.hashCode(), notatoc2.hashCode());
381     }
382 
383     @Test
testContains_Char()384     public void testContains_Char() {
385         final CharSet btod = CharSet.getInstance("b-d");
386         final CharSet dtob = CharSet.getInstance("d-b");
387         final CharSet bcd = CharSet.getInstance("bcd");
388         final CharSet bd = CharSet.getInstance("bd");
389         final CharSet notbtod = CharSet.getInstance("^b-d");
390 
391         assertFalse(btod.contains('a'));
392         assertTrue(btod.contains('b'));
393         assertTrue(btod.contains('c'));
394         assertTrue(btod.contains('d'));
395         assertFalse(btod.contains('e'));
396 
397         assertFalse(bcd.contains('a'));
398         assertTrue(bcd.contains('b'));
399         assertTrue(bcd.contains('c'));
400         assertTrue(bcd.contains('d'));
401         assertFalse(bcd.contains('e'));
402 
403         assertFalse(bd.contains('a'));
404         assertTrue(bd.contains('b'));
405         assertFalse(bd.contains('c'));
406         assertTrue(bd.contains('d'));
407         assertFalse(bd.contains('e'));
408 
409         assertTrue(notbtod.contains('a'));
410         assertFalse(notbtod.contains('b'));
411         assertFalse(notbtod.contains('c'));
412         assertFalse(notbtod.contains('d'));
413         assertTrue(notbtod.contains('e'));
414 
415         assertFalse(dtob.contains('a'));
416         assertTrue(dtob.contains('b'));
417         assertTrue(dtob.contains('c'));
418         assertTrue(dtob.contains('d'));
419         assertFalse(dtob.contains('e'));
420 
421         final CharRange[] array = dtob.getCharRanges();
422         assertEquals("[b-d]", dtob.toString());
423         assertEquals(1, array.length);
424     }
425 
426     @Test
testSerialization()427     public void testSerialization() {
428         CharSet set = CharSet.getInstance("a");
429         assertEquals(set, SerializationUtils.clone(set));
430         set = CharSet.getInstance("a-e");
431         assertEquals(set, SerializationUtils.clone(set));
432         set = CharSet.getInstance("be-f^a-z");
433         assertEquals(set, SerializationUtils.clone(set));
434     }
435 
436     @Test
testStatics()437     public void testStatics() {
438         CharRange[] array;
439 
440         array = CharSet.EMPTY.getCharRanges();
441         assertEquals(0, array.length);
442 
443         array = CharSet.ASCII_ALPHA.getCharRanges();
444         assertEquals(2, array.length);
445         assertTrue(ArrayUtils.contains(array, CharRange.isIn('a', 'z')));
446         assertTrue(ArrayUtils.contains(array, CharRange.isIn('A', 'Z')));
447 
448         array = CharSet.ASCII_ALPHA_LOWER.getCharRanges();
449         assertEquals(1, array.length);
450         assertTrue(ArrayUtils.contains(array, CharRange.isIn('a', 'z')));
451 
452         array = CharSet.ASCII_ALPHA_UPPER.getCharRanges();
453         assertEquals(1, array.length);
454         assertTrue(ArrayUtils.contains(array, CharRange.isIn('A', 'Z')));
455 
456         array = CharSet.ASCII_NUMERIC.getCharRanges();
457         assertEquals(1, array.length);
458         assertTrue(ArrayUtils.contains(array, CharRange.isIn('0', '9')));
459     }
460 
461     @Test
testJavadocExamples()462     public void testJavadocExamples() {
463         assertFalse(CharSet.getInstance("^a-c").contains('a'));
464         assertTrue(CharSet.getInstance("^a-c").contains('d'));
465         assertTrue(CharSet.getInstance("^^a-c").contains('a'));
466         assertFalse(CharSet.getInstance("^^a-c").contains('^'));
467         assertTrue(CharSet.getInstance("^a-cd-f").contains('d'));
468         assertTrue(CharSet.getInstance("a-c^").contains('^'));
469         assertTrue(CharSet.getInstance("^", "a-c").contains('^'));
470     }
471 }
472