View Javadoc
1   package org.codehaus.plexus.interpolation.object;
2   
3   /*
4    * Copyright 2001-2008 Codehaus Foundation.
5    *
6    * Licensed under the Apache License, Version 2.0 (the "License");
7    * you may not use this file except in compliance with the License.
8    * You may obtain a copy of the License at
9    *
10   *      http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
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 }