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