1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.configuration2.convert;
18
19 import static org.junit.jupiter.api.Assertions.assertEquals;
20 import static org.junit.jupiter.api.Assertions.assertIterableEquals;
21 import static org.mockito.Mockito.mock;
22 import static org.mockito.Mockito.verify;
23 import static org.mockito.Mockito.verifyNoMoreInteractions;
24 import static org.mockito.Mockito.when;
25
26 import java.util.Arrays;
27 import java.util.Collection;
28 import java.util.List;
29
30 import org.junit.jupiter.api.BeforeEach;
31 import org.junit.jupiter.api.Test;
32
33
34
35
36 public class TestDefaultListDelimiterHandler {
37
38
39 private DefaultListDelimiterHandler handler;
40
41
42
43
44
45
46
47
48
49 private void checkSplit(final String value, final boolean trim, final String... expectedElements) {
50 final Collection<String> elems = handler.split(value, trim);
51 assertIterableEquals(Arrays.asList(expectedElements), elems);
52 }
53
54 @BeforeEach
55 public void setUp() throws Exception {
56 handler = new DefaultListDelimiterHandler(',');
57 }
58
59 @Test
60 void testEscapeIntegerList() {
61 final ValueTransformer trans = ListDelimiterHandler.NOOP_TRANSFORMER;
62 final List<Integer> data = Arrays.asList(1, 2, 3, 4);
63 assertEquals("1,2,3,4", handler.escapeList(data, trans));
64 }
65
66
67
68
69 @Test
70 void testEscapeList() {
71 final ValueTransformer trans = value -> String.valueOf(value) + "_trans";
72 final List<String> data = Arrays.asList("simple", "Hello,world!", "\\,\\", "end");
73 assertEquals("simple_trans,Hello\\,world!_trans,\\\\\\,\\\\_trans,end_trans", handler.escapeList(data, trans));
74 }
75
76
77
78
79 @Test
80 void testEscapeStringBackslash() {
81 assertEquals("C:\\\\Temp\\\\", handler.escapeString("C:\\Temp\\"));
82 }
83
84
85
86
87 @Test
88 void testEscapeStringListDelimiter() {
89 assertEquals("3\\,1415", handler.escapeString("3,1415"));
90 }
91
92
93
94
95 @Test
96 void testEscapeStringListDelimiterAndBackslash() {
97 assertEquals("C:\\\\Temp\\\\\\,\\\\\\\\Share\\,/root", handler.escapeString("C:\\Temp\\,\\\\Share,/root"));
98 }
99
100
101
102
103 @Test
104 void testEscapeStringNoSpecialCharacter() {
105 assertEquals("test", handler.escapeString("test"));
106 }
107
108
109
110
111 @Test
112 void testEscapeWithTransformer() {
113 final ValueTransformer trans = mock(ValueTransformer.class);
114
115 when(trans.transformValue("a\\,b")).thenReturn("ok");
116
117 assertEquals("ok", handler.escape("a,b", trans));
118
119 verify(trans).transformValue("a\\,b");
120 verifyNoMoreInteractions(trans);
121 }
122
123
124
125
126 @Test
127 void testSplitEscapeBackslash() {
128 checkSplit("C:\\\\Temp\\\\", true, "C:\\Temp\\");
129 }
130
131
132
133
134 @Test
135 void testSplitEscapeLineDelimiter() {
136 checkSplit("3\\,1415", true, "3,1415");
137 }
138
139
140
141
142 @Test
143 void testSplitEscapeListDelimiterAndBackslashes() {
144 checkSplit("C:\\\\Temp\\\\\\,\\\\\\\\Share\\\\,/root", false, "C:\\Temp\\,\\\\Share\\", "/root");
145 }
146
147
148
149
150 @Test
151 void testSplitList() {
152 checkSplit("a, b,c , d", true, "a", "b", "c", "d");
153 }
154
155
156
157
158 @Test
159 void testSplitNoTrim() {
160 checkSplit("a , b, c ,d", false, "a ", " b", " c ", "d");
161 }
162
163
164
165
166 @Test
167 void testSplitSingleElement() {
168 checkSplit("test", true, "test");
169 }
170
171
172
173
174 @Test
175 void testSplitUnexpectedEscape() {
176 checkSplit("\\x, \\,y, \\", true, "\\x", ",y", "\\");
177 }
178 }