1 package org.codehaus.plexus.interpolation.object;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 import java.util.ArrayList;
20 import java.util.Collections;
21 import java.util.HashMap;
22 import java.util.List;
23 import java.util.Map;
24 import java.util.Properties;
25
26 import org.codehaus.plexus.interpolation.PropertiesBasedValueSource;
27 import org.codehaus.plexus.interpolation.StringSearchInterpolator;
28 import org.junit.jupiter.api.Test;
29
30 import static org.junit.jupiter.api.Assertions.assertEquals;
31
32 public class FieldBasedObjectInterpolatorTest {
33
34 @Test
35 public void testInterpolateStringArray() throws Exception {
36 Properties p = new Properties();
37 p.setProperty("key", "value");
38 p.setProperty("key2", "value2");
39
40 String[] values = {"${key}", "${key2}"};
41
42 StringSearchInterpolator interpolator = new StringSearchInterpolator();
43 interpolator.addValueSource(new PropertiesBasedValueSource(p));
44
45 new FieldBasedObjectInterpolator().interpolate(values, interpolator);
46
47 assertEquals("value", values[0]);
48 assertEquals("value2", values[1]);
49 }
50
51 @Test
52 public void testInterpolateObjectWithStringArrayField() throws Exception {
53 Properties p = new Properties();
54 p.setProperty("key", "value");
55 p.setProperty("key2", "value2");
56
57 String[] values = {"${key}", "${key2}"};
58
59 ObjectWithStringArrayField obj = new ObjectWithStringArrayField(values);
60
61 StringSearchInterpolator interpolator = new StringSearchInterpolator();
62 interpolator.addValueSource(new PropertiesBasedValueSource(p));
63
64 new FieldBasedObjectInterpolator().interpolate(obj, interpolator);
65
66 assertEquals("value", obj.values[0]);
67 assertEquals("value2", obj.values[1]);
68 }
69
70 @Test
71 public void testInterpolateObjectWithStringListField() throws Exception {
72 Properties p = new Properties();
73 p.setProperty("key", "value");
74 p.setProperty("key2", "value2");
75
76 List<String> values = new ArrayList<String>();
77 values.add("${key}");
78 values.add("${key2}");
79
80 ObjectWithListField obj = new ObjectWithListField(values);
81
82 StringSearchInterpolator interpolator = new StringSearchInterpolator();
83 interpolator.addValueSource(new PropertiesBasedValueSource(p));
84
85 new FieldBasedObjectInterpolator().interpolate(obj, interpolator);
86
87 assertEquals("value", obj.values.get(0));
88 assertEquals("value2", obj.values.get(1));
89 }
90
91 @Test
92 public void testInterpolateObjectWithStringListFieldAndOneLiteralValue() throws Exception {
93 Properties p = new Properties();
94 p.setProperty("key", "value");
95 p.setProperty("key2", "value2");
96
97 List<String> values = new ArrayList<String>();
98 values.add("key");
99 values.add("${key2}");
100
101 ObjectWithListField obj = new ObjectWithListField(values);
102
103 StringSearchInterpolator interpolator = new StringSearchInterpolator();
104 interpolator.addValueSource(new PropertiesBasedValueSource(p));
105
106 new FieldBasedObjectInterpolator().interpolate(obj, interpolator);
107
108 assertEquals("key", obj.values.get(0));
109 assertEquals("value2", obj.values.get(1));
110 }
111
112 @Test
113 public void testInterpolateObjectWithUnmodifiableStringListField() throws Exception {
114 Properties p = new Properties();
115 p.setProperty("key", "value");
116 p.setProperty("key2", "value2");
117
118 List values = Collections.unmodifiableList(Collections.singletonList("${key}"));
119
120 ObjectWithListField obj = new ObjectWithListField(values);
121
122 StringSearchInterpolator interpolator = new StringSearchInterpolator();
123 interpolator.addValueSource(new PropertiesBasedValueSource(p));
124
125 new FieldBasedObjectInterpolator().interpolate(obj, interpolator);
126
127 assertEquals("${key}", obj.values.get(0));
128 }
129
130 @Test
131 public void testInterpolateObjectWithStringArrayListField() throws Exception {
132 Properties p = new Properties();
133 p.setProperty("key", "value");
134 p.setProperty("key2", "value2");
135 p.setProperty("key3", "value3");
136 p.setProperty("key4", "value4");
137
138 List<String[]> values = new ArrayList<String[]>();
139 values.add(new String[] {"${key}", "${key2}"});
140 values.add(new String[] {"${key3}", "${key4}"});
141
142 ObjectWithListField obj = new ObjectWithListField(values);
143
144 StringSearchInterpolator interpolator = new StringSearchInterpolator();
145 interpolator.addValueSource(new PropertiesBasedValueSource(p));
146
147 new FieldBasedObjectInterpolator().interpolate(obj, interpolator);
148
149 assertEquals("value", ((String[]) obj.values.get(0))[0]);
150 assertEquals("value2", ((String[]) obj.values.get(0))[1]);
151 assertEquals("value3", ((String[]) obj.values.get(1))[0]);
152 assertEquals("value4", ((String[]) obj.values.get(1))[1]);
153 }
154
155 @Test
156 public void testInterpolateObjectWithStringToStringMapField() throws Exception {
157 Properties p = new Properties();
158 p.setProperty("key", "value");
159 p.setProperty("key2", "value2");
160
161 Map<String, String> values = new HashMap<String, String>();
162 values.put("key", "${key}");
163 values.put("key2", "${key2}");
164
165 ObjectWithMapField obj = new ObjectWithMapField(values);
166
167 StringSearchInterpolator interpolator = new StringSearchInterpolator();
168 interpolator.addValueSource(new PropertiesBasedValueSource(p));
169
170 new FieldBasedObjectInterpolator().interpolate(obj, interpolator);
171
172 assertEquals("value", obj.values.get("key"));
173 assertEquals("value2", obj.values.get("key2"));
174 }
175
176 @Test
177 public void testInterpolateObjectWithStringToStringMapFieldAndOneLiteralValue() throws Exception {
178 Properties p = new Properties();
179 p.setProperty("key", "value");
180 p.setProperty("key2", "value2");
181
182 Map<String, String> values = new HashMap<String, String>();
183 values.put("key", "val");
184 values.put("key2", "${key2}");
185
186 ObjectWithMapField obj = new ObjectWithMapField(values);
187
188 StringSearchInterpolator interpolator = new StringSearchInterpolator();
189 interpolator.addValueSource(new PropertiesBasedValueSource(p));
190
191 new FieldBasedObjectInterpolator().interpolate(obj, interpolator);
192
193 assertEquals("val", obj.values.get("key"));
194 assertEquals("value2", obj.values.get("key2"));
195 }
196
197 @Test
198 public void testInterpolateObjectWithUnmodifiableStringToStringMapField() throws Exception {
199 Properties p = new Properties();
200 p.setProperty("key", "value");
201 p.setProperty("key2", "value2");
202
203 Map values = Collections.unmodifiableMap(Collections.singletonMap("key", "${key}"));
204
205 ObjectWithMapField obj = new ObjectWithMapField(values);
206
207 StringSearchInterpolator interpolator = new StringSearchInterpolator();
208 interpolator.addValueSource(new PropertiesBasedValueSource(p));
209
210 new FieldBasedObjectInterpolator().interpolate(obj, interpolator);
211
212 assertEquals("${key}", obj.values.get("key"));
213 }
214
215 @Test
216 public void testInterpolateObjectWithStringToStringArrayMapField() throws Exception {
217 Properties p = new Properties();
218 p.setProperty("key", "value");
219 p.setProperty("key2", "value2");
220 p.setProperty("key3", "value3");
221 p.setProperty("key4", "value4");
222
223 Map<String, String[]> values = new HashMap<String, String[]>();
224 values.put("key", new String[] {"${key}", "${key2}"});
225 values.put("key2", new String[] {"${key3}", "${key4}"});
226
227 ObjectWithMapField obj = new ObjectWithMapField(values);
228
229 StringSearchInterpolator interpolator = new StringSearchInterpolator();
230 interpolator.addValueSource(new PropertiesBasedValueSource(p));
231
232 new FieldBasedObjectInterpolator().interpolate(obj, interpolator);
233
234 assertEquals("value", ((String[]) obj.values.get("key"))[0]);
235 assertEquals("value2", ((String[]) obj.values.get("key"))[1]);
236 assertEquals("value3", ((String[]) obj.values.get("key2"))[0]);
237 assertEquals("value4", ((String[]) obj.values.get("key2"))[1]);
238 }
239
240 private static final class ObjectWithStringArrayField {
241 private final String[] values;
242
243 public ObjectWithStringArrayField(String[] values) {
244 this.values = values;
245 }
246 }
247
248 private static final class ObjectWithListField {
249 private final List values;
250
251 public ObjectWithListField(List values) {
252 this.values = values;
253 }
254 }
255
256 private static final class ObjectWithMapField {
257 private final Map values;
258
259 public ObjectWithMapField(Map values) {
260 this.values = values;
261 }
262 }
263 }