1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.juneau.utils;
18
19 import static org.apache.juneau.common.utils.Utils.*;
20 import static org.junit.jupiter.api.Assertions.*;
21
22 import org.apache.juneau.*;
23 import org.apache.juneau.common.utils.*;
24 import org.apache.juneau.svl.*;
25 import org.junit.jupiter.api.*;
26
27 class StringVarResolver_Test extends TestBase {
28
29
30
31
32 @Test void a06_test() {
33 var vr = VarResolver.create().vars(XVar.class).build();
34
35 var t = (String)null;
36 assertEquals(null, vr.resolve(t));
37
38 t = "";
39 assertEquals("", vr.resolve(t));
40
41 t = "foo";
42 assertEquals("foo", vr.resolve(t));
43
44 t = "$X{y}";
45 assertEquals("xyx", vr.resolve(t));
46
47 t = "$X{y}x";
48 assertEquals("xyxx", vr.resolve(t));
49
50 t = "x$X{y}";
51 assertEquals("xxyx", vr.resolve(t));
52
53 t = "$X{y}$X{y}";
54 assertEquals("xyxxyx", vr.resolve(t));
55
56 t = "z$X{y}z$X{y}z";
57 assertEquals("zxyxzxyxz", vr.resolve(t));
58
59 t = "$X{$X{y}}";
60 assertEquals("xxyxx", vr.resolve(t));
61
62 t = "$X{z$X{y}z}";
63 assertEquals("xzxyxzx", vr.resolve(t));
64
65 t = "$X.{y}";
66 assertEquals("$X.{y}", vr.resolve(t));
67
68 t = "z$X.{y}z";
69 assertEquals("z$X.{y}z", vr.resolve(t));
70
71 t = "z$X.{$X.{z}}z";
72 assertEquals("z$X.{$X.{z}}z", vr.resolve(t));
73
74
75 t = "$Y{y}";
76 assertEquals("$Y{y}", vr.resolve(t));
77
78 t = "$Y{y}x";
79 assertEquals("$Y{y}x", vr.resolve(t));
80
81 t = "x$Y{y}";
82 assertEquals("x$Y{y}", vr.resolve(t));
83 }
84
85 public static class XVar extends SimpleVar {
86 public XVar() {
87 super("X");
88 }
89 @Override
90 public String resolve(VarResolverSession session, String arg) {
91 return "x" + arg + "x";
92 }
93 }
94
95
96
97
98 @Test void a01_test2() {
99 var vr = VarResolver.create().vars(BlankVar.class).build();
100 var t = "${y}";
101
102 assertEquals("xyx", vr.resolve(t));
103
104 t = "${${y}}";
105 assertEquals("xxyxx", vr.resolve(t));
106
107 t = "${${y}${y}}";
108 assertEquals("xxyxxyxx", vr.resolve(t));
109
110 t = "z${z${y}z}z";
111 assertEquals("zxzxyxzxz", vr.resolve(t));
112 }
113
114 public static class BlankVar extends SimpleVar {
115 public BlankVar() {
116 super("");
117 }
118 @Override
119 public String resolve(VarResolverSession session, String arg) {
120 return "x" + arg + "x";
121 }
122 }
123
124
125
126
127 @Test void a02_escaped$() {
128 var vr = VarResolver.create().vars(BlankVar.class).build();
129 var t = "${y}";
130
131 assertEquals("xyx", vr.resolve(t));
132 t = "\\${y}";
133 assertEquals("${y}", vr.resolve(t));
134
135 t = "foo\\${y}foo";
136 assertEquals("foo${y}foo", vr.resolve(t));
137 }
138
139
140
141
142 @Test void a03_escapedSequences() {
143 var vr = VarResolver.create().vars(XVar.class).build();
144 var b = '\\';
145 var t = "A|A".replace('|',b);
146
147 assertEquals("A|A".replace('|',b), vr.resolve(t));
148 t = "A||A".replace('|',b);
149 assertEquals("A|A".replace('|',b), vr.resolve(t));
150 t = "A|A$X{B}".replace('|',b);
151 assertEquals("A|AxBx".replace('|',b), vr.resolve(t));
152 t = "A||A$X{B}".replace('|',b);
153 assertEquals("A|AxBx".replace('|',b), vr.resolve(t));
154 t = "A|$X{B}".replace('|',b);
155 assertEquals("A$X{B}".replace('|',b), vr.resolve(t));
156 t = "A||$X{B}".replace('|',b);
157 assertEquals("A|xBx".replace('|',b), vr.resolve(t));
158 t = "A$X|{B}".replace('|',b);
159 assertEquals("A$X{B}".replace('|',b), vr.resolve(t));
160 t = "A$X{B|}".replace('|',b);
161 assertEquals("A$X{B}".replace('|',b), vr.resolve(t));
162 t = "A$X{B}|".replace('|',b);
163 assertEquals("AxBx|".replace('|',b), vr.resolve(t));
164 }
165
166
167
168
169 @Test void a07_test$E() {
170 var t = "$E{PATH}";
171
172 assertFalse(Utils.isEmpty(VarResolver.DEFAULT.resolve(t)));
173 }
174
175
176
177
178 @Test void a04_parent() {
179 var vr = VarResolver.create().defaultVars().vars(XMultipartVar.class).build();
180 System.setProperty("a", "a1");
181 System.setProperty("b", "b1");
182
183 var t = "$X{$S{a},$S{b}}";
184 assertEquals("a1+b1", vr.resolve(t));
185 t = "$X{$S{a}}";
186 assertEquals("a1", vr.resolve(t));
187 }
188
189 public static class XMultipartVar extends MultipartVar {
190 public XMultipartVar() {
191 super("X");
192 }
193 @Override
194 public String resolve(VarResolverSession session, String[] args) {
195 return Utils.join(args, '+');
196 }
197 }
198
199
200
201
202 @Test void a05_falseTriggers() {
203 var vrb = VarResolver.create().defaultVars();
204
205
206 for (Class<? extends Var> c : a(InvalidVar1.class, InvalidVar2.class, InvalidVar3.class, InvalidVar4.class, InvalidVar5.class)) {
207 assertThrows(Exception.class, ()->VarResolver.create().vars(c).build());
208 }
209
210 var vr = vrb.build();
211
212
213 var in = "$@{foobar}";
214 assertEquals(in, vr.resolve(in));
215 in = "$[{foobar}";
216 assertEquals(in, vr.resolve(in));
217 in = "$`{foobar}";
218 assertEquals(in, vr.resolve(in));
219 in = "$|{foobar}";
220 assertEquals(in, vr.resolve(in));
221 in = "${{foobar}";
222 assertEquals(in, vr.resolve(in));
223 in = "${$foobar}";
224 assertEquals(in, vr.resolve(in));
225
226 System.setProperty("foobar", "baz");
227
228 in = "$";
229 assertEquals(in, vr.resolve(in));
230
231 in = "$S";
232 assertEquals(in, vr.resolve(in));
233
234 in = "$S{";
235 assertEquals(in, vr.resolve(in));
236
237 in = "$S{foobar";
238
239 assertEquals(in, vr.resolve(in));
240 in = "$S{foobar}$";
241 assertEquals("baz$", vr.resolve(in));
242
243 in = "$S{foobar}$S";
244 assertEquals("baz$S", vr.resolve(in));
245
246 in = "$S{foobar}$S{";
247 assertEquals("baz$S{", vr.resolve(in));
248
249 in = "$S{foobar}$S{foobar";
250 assertEquals("baz$S{foobar", vr.resolve(in));
251
252 System.clearProperty("foobar");
253
254
255
256 vrb.vars(AlwaysNullVar.class);
257
258 vr = vrb.build();
259
260 in = "$A{xxx}";
261 assertEquals("", vr.resolve(in));
262 in = "x$A{xxx}";
263 assertEquals("x", vr.resolve(in));
264 in = "$A{xxx}x";
265 assertEquals("x", vr.resolve(in));
266 }
267
268 public static class AlwaysNullVar extends SimpleVar {
269 public AlwaysNullVar() {
270 super("A");
271 }
272 @Override
273 public String resolve(VarResolverSession session, String key) {
274 return null;
275 }
276 }
277
278 public static class InvalidVar extends SimpleVar {
279 public InvalidVar(String c) {
280 super(c);
281 }
282 @Override
283 public String resolve(VarResolverSession session, String key) {
284 return null;
285 }
286 }
287
288 public static class InvalidVar1 extends InvalidVar {
289 public InvalidVar1() {
290 super(null);
291 }
292 }
293 public static class InvalidVar2 extends InvalidVar {
294 public InvalidVar2() {
295 super("@");
296 }
297 }
298 public static class InvalidVar3 extends InvalidVar {
299 public InvalidVar3() {
300 super("[");
301 }
302 }
303 public static class InvalidVar4 extends InvalidVar {
304 public InvalidVar4() {
305 super("`");
306 }
307 }
308 public static class InvalidVar5 extends InvalidVar {
309 public InvalidVar5() {
310 super("|");
311 }
312 }
313 }