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