svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.library / org.gvsig.expressionevaluator / org.gvsig.expressionevaluator.lib / org.gvsig.expressionevaluator.lib.impl / src / test / java / org / gvsig / expresionevaluator / impl / TestInterpreter.java @ 45213
History | View | Annotate | Download (20.7 KB)
1 | 43512 | jjdelcerro | package org.gvsig.expresionevaluator.impl; |
---|---|---|---|
2 | |||
3 | 45025 | jjdelcerro | import java.util.Map; |
4 | 43512 | jjdelcerro | import junit.framework.TestCase; |
5 | 44855 | jjdelcerro | import org.apache.commons.lang3.StringUtils; |
6 | import org.gvsig.expressionevaluator.AttributeHandler; |
||
7 | 43512 | jjdelcerro | import org.gvsig.expressionevaluator.LexicalAnalyzer; |
8 | import org.gvsig.expressionevaluator.Compiler; |
||
9 | import org.gvsig.expressionevaluator.SymbolTable; |
||
10 | import org.gvsig.expressionevaluator.Interpreter; |
||
11 | import org.gvsig.expressionevaluator.Code; |
||
12 | 44139 | jjdelcerro | import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator; |
13 | import org.gvsig.expressionevaluator.ExpressionEvaluatorManager; |
||
14 | import org.gvsig.expressionevaluator.MutableSymbolTable; |
||
15 | 44098 | jjdelcerro | import org.gvsig.tools.library.impl.DefaultLibrariesInitializer; |
16 | 43512 | jjdelcerro | |
17 | public class TestInterpreter extends TestCase { |
||
18 | |||
19 | public TestInterpreter(String testName) { |
||
20 | super(testName);
|
||
21 | } |
||
22 | |||
23 | @Override
|
||
24 | protected void setUp() throws Exception { |
||
25 | super.setUp();
|
||
26 | 44098 | jjdelcerro | new DefaultLibrariesInitializer().fullInitialize();
|
27 | 43512 | jjdelcerro | } |
28 | |||
29 | @Override
|
||
30 | protected void tearDown() throws Exception { |
||
31 | super.tearDown();
|
||
32 | } |
||
33 | |||
34 | // TODO add test methods here. The name must begin with 'test'. For example:
|
||
35 | // public void testHello() {}
|
||
36 | |||
37 | 44139 | jjdelcerro | |
38 | 43512 | jjdelcerro | protected LexicalAnalyzer createLexicalAnalyzer() {
|
39 | 44139 | jjdelcerro | ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
40 | LexicalAnalyzer lexer = manager.createLexicalAnalyzer(); |
||
41 | 43512 | jjdelcerro | return lexer;
|
42 | } |
||
43 | 44139 | jjdelcerro | |
44 | protected org.gvsig.expressionevaluator.Compiler createCompiler() {
|
||
45 | ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
||
46 | Compiler compiler = manager.createCompiler();
|
||
47 | 43512 | jjdelcerro | compiler.setLexicalAnalyzer(createLexicalAnalyzer()); |
48 | return compiler;
|
||
49 | } |
||
50 | 44139 | jjdelcerro | |
51 | 43512 | jjdelcerro | |
52 | 44855 | jjdelcerro | protected MutableSymbolTable createSymbolTable() {
|
53 | 44139 | jjdelcerro | ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
54 | MutableSymbolTable symbolTable = manager.createSymbolTable(); |
||
55 | 43939 | jjdelcerro | symbolTable.setVar("precio", 200); |
56 | symbolTable.setVar("1990", 0.168873933773767); |
||
57 | 43512 | jjdelcerro | return symbolTable;
|
58 | } |
||
59 | |||
60 | protected Interpreter createInterpreter(SymbolTable symbolTable) {
|
||
61 | 44139 | jjdelcerro | ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
62 | Interpreter interpreter = manager.createInterpreter(); |
||
63 | 43512 | jjdelcerro | interpreter.setSymbolTable(symbolTable); |
64 | return interpreter;
|
||
65 | } |
||
66 | |||
67 | public void testIdentifier1() { |
||
68 | SymbolTable symbolTable = createSymbolTable(); |
||
69 | Compiler compiler = createCompiler();
|
||
70 | Interpreter interpreter = createInterpreter(symbolTable); |
||
71 | |||
72 | 44139 | jjdelcerro | String source = "precio"; |
73 | |||
74 | 43512 | jjdelcerro | Code code = compiler.compileExpression(source); |
75 | Object v = interpreter.run(code);
|
||
76 | assertEquals(200, ((Number)v).intValue()); |
||
77 | } |
||
78 | |||
79 | public void testInteger() { |
||
80 | SymbolTable symbolTable = createSymbolTable(); |
||
81 | Compiler compiler = createCompiler();
|
||
82 | Interpreter interpreter = createInterpreter(symbolTable); |
||
83 | |||
84 | 44139 | jjdelcerro | String source = "23"; |
85 | |||
86 | 43512 | jjdelcerro | Code code = compiler.compileExpression(source); |
87 | Object v = interpreter.run(code);
|
||
88 | assertEquals(23, ((Number)v).intValue()); |
||
89 | } |
||
90 | |||
91 | 44421 | jjdelcerro | public void testNumberDMS() { |
92 | SymbolTable symbolTable = createSymbolTable(); |
||
93 | Compiler compiler = createCompiler();
|
||
94 | Interpreter interpreter = createInterpreter(symbolTable); |
||
95 | |||
96 | String source = "@10 30 1.2 N"; |
||
97 | |||
98 | Code code = compiler.compileExpression(source); |
||
99 | Object v = interpreter.run(code);
|
||
100 | 44430 | jjdelcerro | assertEquals(10.5003, Math.round(((Number)v).doubleValue()*10000d)/10000d); |
101 | |||
102 | source = "@10 30 0.09 N";
|
||
103 | |||
104 | code = compiler.compileExpression(source); |
||
105 | v = interpreter.run(code); |
||
106 | assertEquals(10.500025, Math.round(((Number)v).doubleValue()*1000000d)/1000000d); |
||
107 | |||
108 | source = "@10 30 0.09 S";
|
||
109 | |||
110 | code = compiler.compileExpression(source); |
||
111 | v = interpreter.run(code); |
||
112 | assertEquals(-10.500025, Math.round(((Number)v).doubleValue()*1000000d)/1000000d); |
||
113 | |||
114 | source = "@+10 30 0.09";
|
||
115 | |||
116 | code = compiler.compileExpression(source); |
||
117 | v = interpreter.run(code); |
||
118 | assertEquals(10.500025, Math.round(((Number)v).doubleValue()*1000000d)/1000000d); |
||
119 | |||
120 | source = "@-10 30 0.09";
|
||
121 | |||
122 | code = compiler.compileExpression(source); |
||
123 | v = interpreter.run(code); |
||
124 | assertEquals(-10.500025, Math.round(((Number)v).doubleValue()*1000000d)/1000000d); |
||
125 | |||
126 | 44421 | jjdelcerro | } |
127 | |||
128 | 43512 | jjdelcerro | public void testTrue() { |
129 | SymbolTable symbolTable = createSymbolTable(); |
||
130 | Compiler compiler = createCompiler();
|
||
131 | Interpreter interpreter = createInterpreter(symbolTable); |
||
132 | |||
133 | 44139 | jjdelcerro | String source = "true"; |
134 | |||
135 | 43512 | jjdelcerro | Code code = compiler.compileExpression(source); |
136 | assertEquals(Boolean.TRUE, interpreter.run(code));
|
||
137 | } |
||
138 | |||
139 | public void testFalse() { |
||
140 | SymbolTable symbolTable = createSymbolTable(); |
||
141 | Compiler compiler = createCompiler();
|
||
142 | Interpreter interpreter = createInterpreter(symbolTable); |
||
143 | |||
144 | 44139 | jjdelcerro | String source = "false"; |
145 | |||
146 | 43512 | jjdelcerro | Code code = compiler.compileExpression(source); |
147 | assertEquals(Boolean.FALSE, interpreter.run(code));
|
||
148 | } |
||
149 | |||
150 | public void testNull() { |
||
151 | SymbolTable symbolTable = createSymbolTable(); |
||
152 | Compiler compiler = createCompiler();
|
||
153 | Interpreter interpreter = createInterpreter(symbolTable); |
||
154 | |||
155 | 44139 | jjdelcerro | String source = "null"; |
156 | |||
157 | 43512 | jjdelcerro | Code code = compiler.compileExpression(source); |
158 | assertEquals(null, interpreter.run(code));
|
||
159 | } |
||
160 | |||
161 | 44384 | jjdelcerro | public void testIsNull() { |
162 | SymbolTable symbolTable = createSymbolTable(); |
||
163 | Compiler compiler = createCompiler();
|
||
164 | Interpreter interpreter = createInterpreter(symbolTable); |
||
165 | |||
166 | String source = "10 is null"; |
||
167 | |||
168 | Code code = compiler.compileExpression(source); |
||
169 | assertEquals(false, interpreter.run(code));
|
||
170 | } |
||
171 | |||
172 | public void testIsNotNull() { |
||
173 | SymbolTable symbolTable = createSymbolTable(); |
||
174 | Compiler compiler = createCompiler();
|
||
175 | Interpreter interpreter = createInterpreter(symbolTable); |
||
176 | |||
177 | String source = "10 is not null"; |
||
178 | |||
179 | Code code = compiler.compileExpression(source); |
||
180 | assertEquals(true, interpreter.run(code));
|
||
181 | } |
||
182 | |||
183 | 43512 | jjdelcerro | public void testAdd1() { |
184 | SymbolTable symbolTable = createSymbolTable(); |
||
185 | Compiler compiler = createCompiler();
|
||
186 | Interpreter interpreter = createInterpreter(symbolTable); |
||
187 | |||
188 | 44139 | jjdelcerro | String source = "precio + 10"; |
189 | |||
190 | 43512 | jjdelcerro | Code code = compiler.compileExpression(source); |
191 | Object v = interpreter.run(code);
|
||
192 | assertEquals(210, ((Number)v).intValue()); |
||
193 | } |
||
194 | |||
195 | 44098 | jjdelcerro | public void testSimpleAdd1() { |
196 | SymbolTable symbolTable = createSymbolTable(); |
||
197 | Compiler compiler = createCompiler();
|
||
198 | Interpreter interpreter = createInterpreter(symbolTable); |
||
199 | |||
200 | 44139 | jjdelcerro | String source = "5+10"; |
201 | |||
202 | 44098 | jjdelcerro | Code code = compiler.compileExpression(source); |
203 | Object v = interpreter.run(code);
|
||
204 | assertEquals(15, ((Number)v).intValue()); |
||
205 | } |
||
206 | |||
207 | public void testSimpleAdd2() { |
||
208 | SymbolTable symbolTable = createSymbolTable(); |
||
209 | Compiler compiler = createCompiler();
|
||
210 | Interpreter interpreter = createInterpreter(symbolTable); |
||
211 | |||
212 | 44139 | jjdelcerro | String source = "5 + 10"; |
213 | |||
214 | 44098 | jjdelcerro | Code code = compiler.compileExpression(source); |
215 | Object v = interpreter.run(code);
|
||
216 | assertEquals(15, ((Number)v).intValue()); |
||
217 | } |
||
218 | |||
219 | public void testSimpleAdd3() { |
||
220 | SymbolTable symbolTable = createSymbolTable(); |
||
221 | Compiler compiler = createCompiler();
|
||
222 | Interpreter interpreter = createInterpreter(symbolTable); |
||
223 | |||
224 | 44139 | jjdelcerro | String source = "10+-5"; |
225 | |||
226 | 44098 | jjdelcerro | Code code = compiler.compileExpression(source); |
227 | Object v = interpreter.run(code);
|
||
228 | assertEquals(5, ((Number)v).intValue()); |
||
229 | } |
||
230 | |||
231 | public void testSimpleSub1() { |
||
232 | SymbolTable symbolTable = createSymbolTable(); |
||
233 | Compiler compiler = createCompiler();
|
||
234 | Interpreter interpreter = createInterpreter(symbolTable); |
||
235 | |||
236 | 44139 | jjdelcerro | String source = "10-5"; |
237 | |||
238 | 44098 | jjdelcerro | Code code = compiler.compileExpression(source); |
239 | Object v = interpreter.run(code);
|
||
240 | assertEquals(5, ((Number)v).intValue()); |
||
241 | } |
||
242 | |||
243 | public void testSimpleSub2() { |
||
244 | SymbolTable symbolTable = createSymbolTable(); |
||
245 | Compiler compiler = createCompiler();
|
||
246 | Interpreter interpreter = createInterpreter(symbolTable); |
||
247 | |||
248 | 44139 | jjdelcerro | String source = "10 - 5"; |
249 | |||
250 | 44098 | jjdelcerro | Code code = compiler.compileExpression(source); |
251 | Object v = interpreter.run(code);
|
||
252 | assertEquals(5, ((Number)v).intValue()); |
||
253 | } |
||
254 | |||
255 | public void testSimpleNumber() { |
||
256 | SymbolTable symbolTable = createSymbolTable(); |
||
257 | Compiler compiler = createCompiler();
|
||
258 | Interpreter interpreter = createInterpreter(symbolTable); |
||
259 | |||
260 | 44139 | jjdelcerro | String source = "23"; |
261 | |||
262 | 44098 | jjdelcerro | Code code = compiler.compileExpression(source); |
263 | Object v = interpreter.run(code);
|
||
264 | assertEquals(23, ((Number)v).intValue()); |
||
265 | } |
||
266 | |||
267 | public void testSimpleNegativeNumber() { |
||
268 | SymbolTable symbolTable = createSymbolTable(); |
||
269 | Compiler compiler = createCompiler();
|
||
270 | Interpreter interpreter = createInterpreter(symbolTable); |
||
271 | |||
272 | 44139 | jjdelcerro | String source = "-23"; |
273 | |||
274 | 44098 | jjdelcerro | Code code = compiler.compileExpression(source); |
275 | Object v = interpreter.run(code);
|
||
276 | assertEquals(-23, ((Number)v).intValue()); |
||
277 | } |
||
278 | |||
279 | public void testNegateFunction() { |
||
280 | SymbolTable symbolTable = createSymbolTable(); |
||
281 | Compiler compiler = createCompiler();
|
||
282 | Interpreter interpreter = createInterpreter(symbolTable); |
||
283 | |||
284 | 44139 | jjdelcerro | String source = "-PI()"; |
285 | |||
286 | 44098 | jjdelcerro | Code code = compiler.compileExpression(source); |
287 | Object v = interpreter.run(code);
|
||
288 | assertEquals(-Math.PI, ((Number)v).doubleValue()); |
||
289 | } |
||
290 | |||
291 | 43512 | jjdelcerro | public void testSub1() { |
292 | SymbolTable symbolTable = createSymbolTable(); |
||
293 | Compiler compiler = createCompiler();
|
||
294 | Interpreter interpreter = createInterpreter(symbolTable); |
||
295 | |||
296 | 44139 | jjdelcerro | String source = "precio - 10"; |
297 | |||
298 | 43512 | jjdelcerro | Code code = compiler.compileExpression(source); |
299 | Object v = interpreter.run(code);
|
||
300 | assertEquals(190, ((Number)v).intValue()); |
||
301 | } |
||
302 | |||
303 | public void testMul1() { |
||
304 | SymbolTable symbolTable = createSymbolTable(); |
||
305 | Compiler compiler = createCompiler();
|
||
306 | Interpreter interpreter = createInterpreter(symbolTable); |
||
307 | |||
308 | 44139 | jjdelcerro | String source = "precio * 10"; |
309 | |||
310 | 43512 | jjdelcerro | Code code = compiler.compileExpression(source); |
311 | Object v = interpreter.run(code);
|
||
312 | assertEquals(2000, ((Number)v).intValue()); |
||
313 | } |
||
314 | |||
315 | public void testDiv1() { |
||
316 | SymbolTable symbolTable = createSymbolTable(); |
||
317 | Compiler compiler = createCompiler();
|
||
318 | Interpreter interpreter = createInterpreter(symbolTable); |
||
319 | |||
320 | 44139 | jjdelcerro | String source = "precio / 10"; |
321 | |||
322 | 43512 | jjdelcerro | Code code = compiler.compileExpression(source); |
323 | Object v = interpreter.run(code);
|
||
324 | assertEquals(20, ((Number)v).intValue()); |
||
325 | } |
||
326 | |||
327 | 44885 | jjdelcerro | public void testMod1() { |
328 | SymbolTable symbolTable = createSymbolTable(); |
||
329 | Compiler compiler = createCompiler();
|
||
330 | Interpreter interpreter = createInterpreter(symbolTable); |
||
331 | |||
332 | String source = "4 % 3"; |
||
333 | |||
334 | Code code = compiler.compileExpression(source); |
||
335 | Object v = interpreter.run(code);
|
||
336 | assertEquals(1, ((Number)v).intValue()); |
||
337 | } |
||
338 | |||
339 | public void testMod2() { |
||
340 | SymbolTable symbolTable = createSymbolTable(); |
||
341 | Compiler compiler = createCompiler();
|
||
342 | Interpreter interpreter = createInterpreter(symbolTable); |
||
343 | |||
344 | String source = "MOD(4, 3)"; |
||
345 | |||
346 | Code code = compiler.compileExpression(source); |
||
347 | Object v = interpreter.run(code);
|
||
348 | assertEquals(1, ((Number)v).intValue()); |
||
349 | } |
||
350 | |||
351 | 43512 | jjdelcerro | public void testAdd2() { |
352 | SymbolTable symbolTable = createSymbolTable(); |
||
353 | Compiler compiler = createCompiler();
|
||
354 | Interpreter interpreter = createInterpreter(symbolTable); |
||
355 | |||
356 | 44139 | jjdelcerro | String source = "precio + 10 + 20 + 30"; |
357 | |||
358 | 43512 | jjdelcerro | Code code = compiler.compileExpression(source); |
359 | Object v = interpreter.run(code);
|
||
360 | assertEquals(260, ((Number)v).intValue()); |
||
361 | } |
||
362 | |||
363 | public void testAddMul() { |
||
364 | SymbolTable symbolTable = createSymbolTable(); |
||
365 | Compiler compiler = createCompiler();
|
||
366 | Interpreter interpreter = createInterpreter(symbolTable); |
||
367 | |||
368 | 44139 | jjdelcerro | String source = "precio + 10 * 2 + 20 + 30"; |
369 | |||
370 | 43512 | jjdelcerro | Code code = compiler.compileExpression(source); |
371 | Object v = interpreter.run(code);
|
||
372 | assertEquals(270, ((Number)v).intValue()); |
||
373 | } |
||
374 | |||
375 | 43519 | jjdelcerro | public void testAddMulPar() { |
376 | SymbolTable symbolTable = createSymbolTable(); |
||
377 | Compiler compiler = createCompiler();
|
||
378 | Interpreter interpreter = createInterpreter(symbolTable); |
||
379 | |||
380 | 44139 | jjdelcerro | String source = "(precio + 10) * 2 + 20 + 30"; |
381 | |||
382 | 43519 | jjdelcerro | Code code = compiler.compileExpression(source); |
383 | Object v = interpreter.run(code);
|
||
384 | assertEquals(470, ((Number)v).intValue()); |
||
385 | } |
||
386 | |||
387 | public void testAbs() { |
||
388 | SymbolTable symbolTable = createSymbolTable(); |
||
389 | Compiler compiler = createCompiler();
|
||
390 | Interpreter interpreter = createInterpreter(symbolTable); |
||
391 | |||
392 | 44139 | jjdelcerro | String source = "precio + abs(10)"; |
393 | |||
394 | 43519 | jjdelcerro | Code code = compiler.compileExpression(source); |
395 | Object v = interpreter.run(code);
|
||
396 | assertEquals(210, ((Number)v).intValue()); |
||
397 | } |
||
398 | |||
399 | public void testAbs2() { |
||
400 | SymbolTable symbolTable = createSymbolTable(); |
||
401 | Compiler compiler = createCompiler();
|
||
402 | Interpreter interpreter = createInterpreter(symbolTable); |
||
403 | |||
404 | 44139 | jjdelcerro | String source = "precio + abs(-10)"; |
405 | |||
406 | 43519 | jjdelcerro | Code code = compiler.compileExpression(source); |
407 | Object v = interpreter.run(code);
|
||
408 | assertEquals(210, ((Number)v).intValue()); |
||
409 | } |
||
410 | |||
411 | public void testCeil() { |
||
412 | SymbolTable symbolTable = createSymbolTable(); |
||
413 | Compiler compiler = createCompiler();
|
||
414 | Interpreter interpreter = createInterpreter(symbolTable); |
||
415 | |||
416 | 44139 | jjdelcerro | String source = "precio + CEIL(PI())"; |
417 | |||
418 | 43519 | jjdelcerro | Code code = compiler.compileExpression(source); |
419 | Object v = interpreter.run(code);
|
||
420 | assertEquals(204, ((Number)v).intValue()); |
||
421 | } |
||
422 | |||
423 | public void testConcat() { |
||
424 | SymbolTable symbolTable = createSymbolTable(); |
||
425 | Compiler compiler = createCompiler();
|
||
426 | Interpreter interpreter = createInterpreter(symbolTable); |
||
427 | |||
428 | 44139 | jjdelcerro | String source = "CONCAT(precio,' euros')"; |
429 | |||
430 | 43519 | jjdelcerro | Code code = compiler.compileExpression(source); |
431 | Object v = interpreter.run(code);
|
||
432 | assertEquals("200 euros", (String)v); |
||
433 | } |
||
434 | 43521 | jjdelcerro | |
435 | public void testAccuracy() { |
||
436 | |||
437 | SymbolTable symbolTable = createSymbolTable(); |
||
438 | Compiler compiler = createCompiler();
|
||
439 | Interpreter interpreter = createInterpreter(symbolTable); |
||
440 | Code code; |
||
441 | Object v;
|
||
442 | |||
443 | 44139 | jjdelcerro | compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true);
|
444 | |||
445 | 43521 | jjdelcerro | code = compiler.compileExpression("[1990] = 0.168873933773767");
|
446 | v = interpreter.run(code); |
||
447 | assertEquals(true, ((Boolean)v).booleanValue()); |
||
448 | |||
449 | code = compiler.compileExpression("[1990] = 0.1688739");
|
||
450 | v = interpreter.run(code); |
||
451 | assertEquals(false, ((Boolean)v).booleanValue()); |
||
452 | |||
453 | interpreter.setAccuracy(0.0000001);
|
||
454 | v = interpreter.run(code); |
||
455 | assertEquals(true, ((Boolean)v).booleanValue()); |
||
456 | 43532 | jjdelcerro | } |
457 | |||
458 | public void test2fields() { |
||
459 | SymbolTable symbolTable = createSymbolTable(); |
||
460 | Compiler compiler = createCompiler();
|
||
461 | Interpreter interpreter = createInterpreter(symbolTable); |
||
462 | |||
463 | 44139 | jjdelcerro | compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true);
|
464 | |||
465 | String source = "[1990] = [precio]"; |
||
466 | |||
467 | compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true);
|
||
468 | 43532 | jjdelcerro | Code code = compiler.compileExpression(source); |
469 | Object v = interpreter.run(code);
|
||
470 | assertEquals(false, ((Boolean)v).booleanValue()); |
||
471 | 43939 | jjdelcerro | } |
472 | |||
473 | |||
474 | public void testInvokeMethod1() { |
||
475 | SymbolTable symbolTable = createSymbolTable(); |
||
476 | Compiler compiler = createCompiler();
|
||
477 | Interpreter interpreter = createInterpreter(symbolTable); |
||
478 | |||
479 | 44139 | jjdelcerro | String source = "'hola'.length()"; |
480 | |||
481 | 43939 | jjdelcerro | Code code = compiler.compileExpression(source); |
482 | Object v = interpreter.run(code);
|
||
483 | |||
484 | assertEquals(4, ((Number)v).intValue()); |
||
485 | } |
||
486 | |||
487 | |||
488 | public void testInvokeMethod2() { |
||
489 | 44139 | jjdelcerro | SymbolTable symbolTable = createSymbolTable(); |
490 | Compiler compiler = createCompiler();
|
||
491 | Interpreter interpreter = createInterpreter(symbolTable); |
||
492 | |||
493 | 43939 | jjdelcerro | String source = "'hola'.indexOf('l')"; |
494 | |||
495 | 44139 | jjdelcerro | Code code = compiler.compileExpression(source); |
496 | Object v = interpreter.run(code);
|
||
497 | |||
498 | assertEquals(2, ((Number)v).intValue()); |
||
499 | } |
||
500 | |||
501 | public void testAlias() { |
||
502 | 43939 | jjdelcerro | SymbolTable symbolTable = createSymbolTable(); |
503 | Compiler compiler = createCompiler();
|
||
504 | Interpreter interpreter = createInterpreter(symbolTable); |
||
505 | |||
506 | 44139 | jjdelcerro | String source = "UPPER('hola')"; |
507 | 43939 | jjdelcerro | Code code = compiler.compileExpression(source); |
508 | Object v = interpreter.run(code);
|
||
509 | 44139 | jjdelcerro | assertEquals("HOLA", (String)v); |
510 | 43939 | jjdelcerro | |
511 | 44139 | jjdelcerro | |
512 | source = "UCASE('hola')";
|
||
513 | code = compiler.compileExpression(source); |
||
514 | v = interpreter.run(code); |
||
515 | assertEquals("HOLA", (String)v); |
||
516 | 43939 | jjdelcerro | } |
517 | 44139 | jjdelcerro | |
518 | public void testRegexp1() { |
||
519 | SymbolTable symbolTable = createSymbolTable(); |
||
520 | Compiler compiler = createCompiler();
|
||
521 | Interpreter interpreter = createInterpreter(symbolTable); |
||
522 | |||
523 | String source = "'Hola' ~ '[Hh]ola'" ; |
||
524 | Code code = compiler.compileExpression(source); |
||
525 | Object v = interpreter.run(code);
|
||
526 | assertTrue((Boolean)v);
|
||
527 | } |
||
528 | 43939 | jjdelcerro | |
529 | 44139 | jjdelcerro | public void testGetitem1() { |
530 | SymbolTable symbolTable = createSymbolTable(); |
||
531 | Compiler compiler = createCompiler();
|
||
532 | Interpreter interpreter = createInterpreter(symbolTable); |
||
533 | compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(false);
|
||
534 | |||
535 | String source = "LIST('uno','dos','tres')[1]" ; |
||
536 | |||
537 | Code code = compiler.compileExpression(source); |
||
538 | Object v = interpreter.run(code);
|
||
539 | assertEquals("dos", (String)v); |
||
540 | } |
||
541 | 43939 | jjdelcerro | |
542 | 44855 | jjdelcerro | public void testGetattr1() { |
543 | MutableSymbolTable symbolTable = createSymbolTable(); |
||
544 | Compiler compiler = createCompiler();
|
||
545 | Interpreter interpreter = createInterpreter(symbolTable); |
||
546 | compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(false);
|
||
547 | |||
548 | symbolTable.setVar( |
||
549 | "PARCELA",
|
||
550 | (AttributeHandler) (String key) -> StringUtils.equalsIgnoreCase(key, "MASA")? "100":null |
||
551 | ); |
||
552 | String source = "PARCELA.MASA" ; |
||
553 | |||
554 | Code code = compiler.compileExpression(source); |
||
555 | assertEquals("GETATTR(\"PARCELA\", 'MASA')", code.toString());
|
||
556 | |||
557 | Object v = interpreter.run(code);
|
||
558 | assertEquals("100", (String)v); |
||
559 | } |
||
560 | 45025 | jjdelcerro | |
561 | public void testDict1() { |
||
562 | MutableSymbolTable symbolTable = createSymbolTable(); |
||
563 | Compiler compiler = createCompiler();
|
||
564 | Interpreter interpreter = createInterpreter(symbolTable); |
||
565 | |||
566 | String source = "dict()" ; |
||
567 | |||
568 | Code code = compiler.compileExpression(source); |
||
569 | assertEquals("dict()", code.toString());
|
||
570 | |||
571 | Object v = interpreter.run(code);
|
||
572 | assertTrue("Map expected", v instanceof Map); |
||
573 | assertEquals(0, ((Map)v).size()); |
||
574 | } |
||
575 | |||
576 | public void testDict2() { |
||
577 | MutableSymbolTable symbolTable = createSymbolTable(); |
||
578 | Compiler compiler = createCompiler();
|
||
579 | Interpreter interpreter = createInterpreter(symbolTable); |
||
580 | |||
581 | String source = "dict(diez=10, veinte:20)" ; |
||
582 | |||
583 | Code code = compiler.compileExpression(source); |
||
584 | assertEquals("DICT('diez', 10, 'veinte', 20)", code.toString());
|
||
585 | |||
586 | Object v = interpreter.run(code);
|
||
587 | assertTrue("Map expected", v instanceof Map); |
||
588 | assertEquals(2, ((Map)v).size()); |
||
589 | assertEquals(10, ((Number)((Map)v).get("diez")).intValue()); |
||
590 | assertEquals(20, ((Number)((Map)v).get("veinte")).intValue()); |
||
591 | } |
||
592 | |||
593 | public void testDict3() { |
||
594 | MutableSymbolTable symbolTable = createSymbolTable(); |
||
595 | Compiler compiler = createCompiler();
|
||
596 | Interpreter interpreter = createInterpreter(symbolTable); |
||
597 | |||
598 | String source = "dict('diez', 10, 'veinte', 20)" ; |
||
599 | |||
600 | Code code = compiler.compileExpression(source); |
||
601 | assertEquals("dict('diez', 10, 'veinte', 20)", code.toString());
|
||
602 | |||
603 | Object v = interpreter.run(code);
|
||
604 | assertTrue("Map expected", v instanceof Map); |
||
605 | assertEquals(2, ((Map)v).size()); |
||
606 | assertEquals(10, ((Number)((Map)v).get("diez")).intValue()); |
||
607 | assertEquals(20, ((Number)((Map)v).get("veinte")).intValue()); |
||
608 | } |
||
609 | |||
610 | 43939 | jjdelcerro | } |