1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.lang3.util;
19
20 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
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.assertTrue;
24
25 import java.util.ArrayList;
26 import java.util.Arrays;
27 import java.util.Iterator;
28 import java.util.List;
29 import java.util.StringTokenizer;
30 import java.util.stream.Collectors;
31
32 import org.apache.commons.lang3.StringUtils;
33 import org.junit.jupiter.api.Test;
34 import org.junit.jupiter.params.ParameterizedTest;
35 import org.junit.jupiter.params.provider.MethodSource;
36
37
38
39
40 class IterableStringTokenizerTest {
41
42
43
44
45 private static final String[] DELIMITERS_ARRAY = { " ", "\t", "\n", "\r", "\f" };
46
47 private static final String DELIMITERS_STRING = String.join("", DELIMITERS_ARRAY);
48
49 private static final String[] DATA = { "a", "b", "c" };
50
51 public static String[] delimiters() {
52 return DELIMITERS_ARRAY;
53 }
54
55 @Test
56 void testConstructorArguments1ForEach() {
57 final List<String> list = new ArrayList<>();
58 new IterableStringTokenizer("a,b,c").forEach(list::add);
59 assertEquals(Arrays.asList("a,b,c"), list);
60 }
61
62 @Test
63 void testConstructorArguments1ToList() {
64 assertEquals(Arrays.asList("a,b,c"), new IterableStringTokenizer("a,b,c").toList());
65 }
66
67 void testConstructorArguments2AllDelimsToList(final String singleDelim) {
68 final String data = String.join(singleDelim, DATA);
69 assertEquals(Arrays.asList(DATA), new IterableStringTokenizer(data, DELIMITERS_STRING).toList());
70 }
71
72 @ParameterizedTest
73 @MethodSource("delimiters")
74 void testConstructorArguments2ForEach(final String singleDelim) {
75 final List<String> list = new ArrayList<>();
76 new IterableStringTokenizer(String.join(singleDelim, DATA), singleDelim).forEach(list::add);
77 assertEquals(Arrays.asList(DATA), list);
78 }
79
80 @ParameterizedTest
81 @MethodSource("delimiters")
82 void testConstructorArguments2ToList(final String singleDelim) {
83 assertEquals(Arrays.asList(DATA), new IterableStringTokenizer(String.join(singleDelim, DATA), singleDelim).toList());
84 }
85
86 @ParameterizedTest
87 @MethodSource("delimiters")
88 void testConstructorArguments3AllDelimsToList(final String singleDelim) {
89 final String data = String.join(singleDelim, DATA);
90 assertEquals(Arrays.asList("a", singleDelim, "b", singleDelim, "c"), new IterableStringTokenizer(data, DELIMITERS_STRING, true).toList());
91 assertEquals(Arrays.asList(DATA), new IterableStringTokenizer(data, DELIMITERS_STRING, false).toList());
92 }
93
94 @ParameterizedTest
95 @MethodSource("delimiters")
96 void testConstructorArguments3ToList(final String singleDelim) {
97 final String data = String.join(singleDelim, DATA);
98 assertEquals(Arrays.asList("a", singleDelim, "b", singleDelim, "c"), new IterableStringTokenizer(data, singleDelim, true).toList());
99 assertEquals(Arrays.asList(DATA), new IterableStringTokenizer(data, singleDelim, false).toList());
100 }
101
102 @Test
103 void testEmptyString() {
104 assertTrue(new IterableStringTokenizer(StringUtils.EMPTY).toList().isEmpty());
105 }
106
107 @Test
108 void testIterator() {
109 final IterableStringTokenizer tokenizer = new IterableStringTokenizer("a,b,c", ",");
110 final Iterator<String> iterator = tokenizer.iterator();
111 assertTrue(iterator.hasNext());
112 assertEquals("a", iterator.next());
113 assertTrue(iterator.hasNext());
114 assertEquals("b", iterator.next());
115 assertTrue(iterator.hasNext());
116 assertEquals("c", iterator.next());
117 assertFalse(iterator.hasNext());
118 }
119
120 @Test
121 void testNonDefaultDelimiterToArray() {
122 assertArrayEquals(new String[] {}, new IterableStringTokenizer("", "|").toArray());
123 assertArrayEquals(new String[] { "a" }, new IterableStringTokenizer("a", "|").toArray());
124 assertArrayEquals(new String[] { "a", "b" }, new IterableStringTokenizer("a|b", "|").toArray());
125 assertArrayEquals(new String[] { "a", "b", "c" }, new IterableStringTokenizer("a|b|c", "|").toArray());
126 }
127
128 @Test
129 void testNonDefaultDelimiterToList() {
130 assertEquals(Arrays.asList(DATA), new IterableStringTokenizer("a|b|c", "|").toList());
131 assertEquals(Arrays.asList(DATA), new IterableStringTokenizer("a!b!c", "!").toList());
132 assertEquals(Arrays.asList(DATA), new IterableStringTokenizer("a^!b^!c", "^!").toList());
133 }
134
135 @Test
136 void testToArray() {
137
138 assertArrayEquals(new String[] {}, new IterableStringTokenizer("").toArray());
139
140 assertArrayEquals(new String[] { "a" }, new IterableStringTokenizer("a").toArray());
141 assertArrayEquals(new String[] { "a,b" }, new IterableStringTokenizer("a,b").toArray());
142 assertArrayEquals(new String[] { "a,b,c" }, new IterableStringTokenizer("a,b,c").toArray());
143
144 assertArrayEquals(new String[] { "a", "b" }, new IterableStringTokenizer("a b").toArray());
145 }
146
147 @Test
148 void testToList() {
149
150 assertEquals(Arrays.asList(), new IterableStringTokenizer("").toList());
151
152 assertEquals(Arrays.asList("a"), new IterableStringTokenizer("a").toList());
153 assertEquals(Arrays.asList("a,b"), new IterableStringTokenizer("a,b").toList());
154 assertEquals(Arrays.asList("a,b,c"), new IterableStringTokenizer("a,b,c").toList());
155
156 assertEquals(Arrays.asList("a", "b"), new IterableStringTokenizer("a b").toList());
157 }
158
159 @Test
160 void testToStream() {
161
162 assertEquals(Arrays.asList(), new IterableStringTokenizer("").toList());
163
164 assertEquals(Arrays.asList("a"), new IterableStringTokenizer("a").toList());
165 assertEquals(Arrays.asList("a,b"), new IterableStringTokenizer("a,b").toStream().collect(Collectors.toList()));
166 assertEquals(Arrays.asList("a,b,c"), new IterableStringTokenizer("a,b,c").toStream().collect(Collectors.toList()));
167
168 assertEquals(Arrays.asList("a", "b"), new IterableStringTokenizer("a b").toStream().collect(Collectors.toList()));
169 }
170 }