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 @ 44421
History | View | Annotate | Download (16.4 KB)
1 | 43512 | jjdelcerro | package org.gvsig.expresionevaluator.impl; |
---|---|---|---|
2 | |||
3 | import junit.framework.TestCase; |
||
4 | import org.gvsig.expressionevaluator.LexicalAnalyzer; |
||
5 | import org.gvsig.expressionevaluator.Compiler; |
||
6 | import org.gvsig.expressionevaluator.SymbolTable; |
||
7 | import org.gvsig.expressionevaluator.Interpreter; |
||
8 | import org.gvsig.expressionevaluator.Code; |
||
9 | 44139 | jjdelcerro | import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator; |
10 | import org.gvsig.expressionevaluator.ExpressionEvaluatorManager; |
||
11 | import org.gvsig.expressionevaluator.MutableSymbolTable; |
||
12 | 44098 | jjdelcerro | import org.gvsig.tools.library.impl.DefaultLibrariesInitializer; |
13 | 43512 | jjdelcerro | |
14 | public class TestInterpreter extends TestCase { |
||
15 | |||
16 | public TestInterpreter(String testName) { |
||
17 | super(testName);
|
||
18 | } |
||
19 | |||
20 | @Override
|
||
21 | protected void setUp() throws Exception { |
||
22 | super.setUp();
|
||
23 | 44098 | jjdelcerro | new DefaultLibrariesInitializer().fullInitialize();
|
24 | 43512 | jjdelcerro | } |
25 | |||
26 | @Override
|
||
27 | protected void tearDown() throws Exception { |
||
28 | super.tearDown();
|
||
29 | } |
||
30 | |||
31 | // TODO add test methods here. The name must begin with 'test'. For example:
|
||
32 | // public void testHello() {}
|
||
33 | |||
34 | 44139 | jjdelcerro | |
35 | 43512 | jjdelcerro | protected LexicalAnalyzer createLexicalAnalyzer() {
|
36 | 44139 | jjdelcerro | ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
37 | LexicalAnalyzer lexer = manager.createLexicalAnalyzer(); |
||
38 | 43512 | jjdelcerro | return lexer;
|
39 | } |
||
40 | 44139 | jjdelcerro | |
41 | protected org.gvsig.expressionevaluator.Compiler createCompiler() {
|
||
42 | ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
||
43 | Compiler compiler = manager.createCompiler();
|
||
44 | 43512 | jjdelcerro | compiler.setLexicalAnalyzer(createLexicalAnalyzer()); |
45 | return compiler;
|
||
46 | } |
||
47 | 44139 | jjdelcerro | |
48 | 43512 | jjdelcerro | |
49 | protected SymbolTable createSymbolTable() {
|
||
50 | 44139 | jjdelcerro | ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
51 | MutableSymbolTable symbolTable = manager.createSymbolTable(); |
||
52 | 43939 | jjdelcerro | symbolTable.setVar("precio", 200); |
53 | symbolTable.setVar("1990", 0.168873933773767); |
||
54 | 43512 | jjdelcerro | return symbolTable;
|
55 | } |
||
56 | |||
57 | protected Interpreter createInterpreter(SymbolTable symbolTable) {
|
||
58 | 44139 | jjdelcerro | ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
59 | Interpreter interpreter = manager.createInterpreter(); |
||
60 | 43512 | jjdelcerro | interpreter.setSymbolTable(symbolTable); |
61 | return interpreter;
|
||
62 | } |
||
63 | |||
64 | public void testIdentifier1() { |
||
65 | SymbolTable symbolTable = createSymbolTable(); |
||
66 | Compiler compiler = createCompiler();
|
||
67 | Interpreter interpreter = createInterpreter(symbolTable); |
||
68 | |||
69 | 44139 | jjdelcerro | String source = "precio"; |
70 | |||
71 | 43512 | jjdelcerro | Code code = compiler.compileExpression(source); |
72 | Object v = interpreter.run(code);
|
||
73 | assertEquals(200, ((Number)v).intValue()); |
||
74 | } |
||
75 | |||
76 | public void testInteger() { |
||
77 | SymbolTable symbolTable = createSymbolTable(); |
||
78 | Compiler compiler = createCompiler();
|
||
79 | Interpreter interpreter = createInterpreter(symbolTable); |
||
80 | |||
81 | 44139 | jjdelcerro | String source = "23"; |
82 | |||
83 | 43512 | jjdelcerro | Code code = compiler.compileExpression(source); |
84 | Object v = interpreter.run(code);
|
||
85 | assertEquals(23, ((Number)v).intValue()); |
||
86 | } |
||
87 | |||
88 | 44421 | jjdelcerro | public void testNumberDMS() { |
89 | SymbolTable symbolTable = createSymbolTable(); |
||
90 | Compiler compiler = createCompiler();
|
||
91 | Interpreter interpreter = createInterpreter(symbolTable); |
||
92 | |||
93 | String source = "@10 30 1.2 N"; |
||
94 | |||
95 | Code code = compiler.compileExpression(source); |
||
96 | Object v = interpreter.run(code);
|
||
97 | assertEquals(-10.5003, Math.round(((Number)v).doubleValue()*10000d)/10000d); |
||
98 | } |
||
99 | |||
100 | 43512 | jjdelcerro | public void testTrue() { |
101 | SymbolTable symbolTable = createSymbolTable(); |
||
102 | Compiler compiler = createCompiler();
|
||
103 | Interpreter interpreter = createInterpreter(symbolTable); |
||
104 | |||
105 | 44139 | jjdelcerro | String source = "true"; |
106 | |||
107 | 43512 | jjdelcerro | Code code = compiler.compileExpression(source); |
108 | assertEquals(Boolean.TRUE, interpreter.run(code));
|
||
109 | } |
||
110 | |||
111 | public void testFalse() { |
||
112 | SymbolTable symbolTable = createSymbolTable(); |
||
113 | Compiler compiler = createCompiler();
|
||
114 | Interpreter interpreter = createInterpreter(symbolTable); |
||
115 | |||
116 | 44139 | jjdelcerro | String source = "false"; |
117 | |||
118 | 43512 | jjdelcerro | Code code = compiler.compileExpression(source); |
119 | assertEquals(Boolean.FALSE, interpreter.run(code));
|
||
120 | } |
||
121 | |||
122 | public void testNull() { |
||
123 | SymbolTable symbolTable = createSymbolTable(); |
||
124 | Compiler compiler = createCompiler();
|
||
125 | Interpreter interpreter = createInterpreter(symbolTable); |
||
126 | |||
127 | 44139 | jjdelcerro | String source = "null"; |
128 | |||
129 | 43512 | jjdelcerro | Code code = compiler.compileExpression(source); |
130 | assertEquals(null, interpreter.run(code));
|
||
131 | } |
||
132 | |||
133 | 44384 | jjdelcerro | public void testIsNull() { |
134 | SymbolTable symbolTable = createSymbolTable(); |
||
135 | Compiler compiler = createCompiler();
|
||
136 | Interpreter interpreter = createInterpreter(symbolTable); |
||
137 | |||
138 | String source = "10 is null"; |
||
139 | |||
140 | Code code = compiler.compileExpression(source); |
||
141 | assertEquals(false, interpreter.run(code));
|
||
142 | } |
||
143 | |||
144 | public void testIsNotNull() { |
||
145 | SymbolTable symbolTable = createSymbolTable(); |
||
146 | Compiler compiler = createCompiler();
|
||
147 | Interpreter interpreter = createInterpreter(symbolTable); |
||
148 | |||
149 | String source = "10 is not null"; |
||
150 | |||
151 | Code code = compiler.compileExpression(source); |
||
152 | assertEquals(true, interpreter.run(code));
|
||
153 | } |
||
154 | |||
155 | 43512 | jjdelcerro | public void testAdd1() { |
156 | SymbolTable symbolTable = createSymbolTable(); |
||
157 | Compiler compiler = createCompiler();
|
||
158 | Interpreter interpreter = createInterpreter(symbolTable); |
||
159 | |||
160 | 44139 | jjdelcerro | String source = "precio + 10"; |
161 | |||
162 | 43512 | jjdelcerro | Code code = compiler.compileExpression(source); |
163 | Object v = interpreter.run(code);
|
||
164 | assertEquals(210, ((Number)v).intValue()); |
||
165 | } |
||
166 | |||
167 | 44098 | jjdelcerro | public void testSimpleAdd1() { |
168 | SymbolTable symbolTable = createSymbolTable(); |
||
169 | Compiler compiler = createCompiler();
|
||
170 | Interpreter interpreter = createInterpreter(symbolTable); |
||
171 | |||
172 | 44139 | jjdelcerro | String source = "5+10"; |
173 | |||
174 | 44098 | jjdelcerro | Code code = compiler.compileExpression(source); |
175 | Object v = interpreter.run(code);
|
||
176 | assertEquals(15, ((Number)v).intValue()); |
||
177 | } |
||
178 | |||
179 | public void testSimpleAdd2() { |
||
180 | SymbolTable symbolTable = createSymbolTable(); |
||
181 | Compiler compiler = createCompiler();
|
||
182 | Interpreter interpreter = createInterpreter(symbolTable); |
||
183 | |||
184 | 44139 | jjdelcerro | String source = "5 + 10"; |
185 | |||
186 | 44098 | jjdelcerro | Code code = compiler.compileExpression(source); |
187 | Object v = interpreter.run(code);
|
||
188 | assertEquals(15, ((Number)v).intValue()); |
||
189 | } |
||
190 | |||
191 | public void testSimpleAdd3() { |
||
192 | SymbolTable symbolTable = createSymbolTable(); |
||
193 | Compiler compiler = createCompiler();
|
||
194 | Interpreter interpreter = createInterpreter(symbolTable); |
||
195 | |||
196 | 44139 | jjdelcerro | String source = "10+-5"; |
197 | |||
198 | 44098 | jjdelcerro | Code code = compiler.compileExpression(source); |
199 | Object v = interpreter.run(code);
|
||
200 | assertEquals(5, ((Number)v).intValue()); |
||
201 | } |
||
202 | |||
203 | public void testSimpleSub1() { |
||
204 | SymbolTable symbolTable = createSymbolTable(); |
||
205 | Compiler compiler = createCompiler();
|
||
206 | Interpreter interpreter = createInterpreter(symbolTable); |
||
207 | |||
208 | 44139 | jjdelcerro | String source = "10-5"; |
209 | |||
210 | 44098 | jjdelcerro | Code code = compiler.compileExpression(source); |
211 | Object v = interpreter.run(code);
|
||
212 | assertEquals(5, ((Number)v).intValue()); |
||
213 | } |
||
214 | |||
215 | public void testSimpleSub2() { |
||
216 | SymbolTable symbolTable = createSymbolTable(); |
||
217 | Compiler compiler = createCompiler();
|
||
218 | Interpreter interpreter = createInterpreter(symbolTable); |
||
219 | |||
220 | 44139 | jjdelcerro | String source = "10 - 5"; |
221 | |||
222 | 44098 | jjdelcerro | Code code = compiler.compileExpression(source); |
223 | Object v = interpreter.run(code);
|
||
224 | assertEquals(5, ((Number)v).intValue()); |
||
225 | } |
||
226 | |||
227 | public void testSimpleNumber() { |
||
228 | SymbolTable symbolTable = createSymbolTable(); |
||
229 | Compiler compiler = createCompiler();
|
||
230 | Interpreter interpreter = createInterpreter(symbolTable); |
||
231 | |||
232 | 44139 | jjdelcerro | String source = "23"; |
233 | |||
234 | 44098 | jjdelcerro | Code code = compiler.compileExpression(source); |
235 | Object v = interpreter.run(code);
|
||
236 | assertEquals(23, ((Number)v).intValue()); |
||
237 | } |
||
238 | |||
239 | public void testSimpleNegativeNumber() { |
||
240 | SymbolTable symbolTable = createSymbolTable(); |
||
241 | Compiler compiler = createCompiler();
|
||
242 | Interpreter interpreter = createInterpreter(symbolTable); |
||
243 | |||
244 | 44139 | jjdelcerro | String source = "-23"; |
245 | |||
246 | 44098 | jjdelcerro | Code code = compiler.compileExpression(source); |
247 | Object v = interpreter.run(code);
|
||
248 | assertEquals(-23, ((Number)v).intValue()); |
||
249 | } |
||
250 | |||
251 | public void testNegateFunction() { |
||
252 | SymbolTable symbolTable = createSymbolTable(); |
||
253 | Compiler compiler = createCompiler();
|
||
254 | Interpreter interpreter = createInterpreter(symbolTable); |
||
255 | |||
256 | 44139 | jjdelcerro | String source = "-PI()"; |
257 | |||
258 | 44098 | jjdelcerro | Code code = compiler.compileExpression(source); |
259 | Object v = interpreter.run(code);
|
||
260 | assertEquals(-Math.PI, ((Number)v).doubleValue()); |
||
261 | } |
||
262 | |||
263 | 43512 | jjdelcerro | public void testSub1() { |
264 | SymbolTable symbolTable = createSymbolTable(); |
||
265 | Compiler compiler = createCompiler();
|
||
266 | Interpreter interpreter = createInterpreter(symbolTable); |
||
267 | |||
268 | 44139 | jjdelcerro | String source = "precio - 10"; |
269 | |||
270 | 43512 | jjdelcerro | Code code = compiler.compileExpression(source); |
271 | Object v = interpreter.run(code);
|
||
272 | assertEquals(190, ((Number)v).intValue()); |
||
273 | } |
||
274 | |||
275 | public void testMul1() { |
||
276 | SymbolTable symbolTable = createSymbolTable(); |
||
277 | Compiler compiler = createCompiler();
|
||
278 | Interpreter interpreter = createInterpreter(symbolTable); |
||
279 | |||
280 | 44139 | jjdelcerro | String source = "precio * 10"; |
281 | |||
282 | 43512 | jjdelcerro | Code code = compiler.compileExpression(source); |
283 | Object v = interpreter.run(code);
|
||
284 | assertEquals(2000, ((Number)v).intValue()); |
||
285 | } |
||
286 | |||
287 | public void testDiv1() { |
||
288 | SymbolTable symbolTable = createSymbolTable(); |
||
289 | Compiler compiler = createCompiler();
|
||
290 | Interpreter interpreter = createInterpreter(symbolTable); |
||
291 | |||
292 | 44139 | jjdelcerro | String source = "precio / 10"; |
293 | |||
294 | 43512 | jjdelcerro | Code code = compiler.compileExpression(source); |
295 | Object v = interpreter.run(code);
|
||
296 | assertEquals(20, ((Number)v).intValue()); |
||
297 | } |
||
298 | |||
299 | public void testAdd2() { |
||
300 | SymbolTable symbolTable = createSymbolTable(); |
||
301 | Compiler compiler = createCompiler();
|
||
302 | Interpreter interpreter = createInterpreter(symbolTable); |
||
303 | |||
304 | 44139 | jjdelcerro | String source = "precio + 10 + 20 + 30"; |
305 | |||
306 | 43512 | jjdelcerro | Code code = compiler.compileExpression(source); |
307 | Object v = interpreter.run(code);
|
||
308 | assertEquals(260, ((Number)v).intValue()); |
||
309 | } |
||
310 | |||
311 | public void testAddMul() { |
||
312 | SymbolTable symbolTable = createSymbolTable(); |
||
313 | Compiler compiler = createCompiler();
|
||
314 | Interpreter interpreter = createInterpreter(symbolTable); |
||
315 | |||
316 | 44139 | jjdelcerro | String source = "precio + 10 * 2 + 20 + 30"; |
317 | |||
318 | 43512 | jjdelcerro | Code code = compiler.compileExpression(source); |
319 | Object v = interpreter.run(code);
|
||
320 | assertEquals(270, ((Number)v).intValue()); |
||
321 | } |
||
322 | |||
323 | 43519 | jjdelcerro | public void testAddMulPar() { |
324 | SymbolTable symbolTable = createSymbolTable(); |
||
325 | Compiler compiler = createCompiler();
|
||
326 | Interpreter interpreter = createInterpreter(symbolTable); |
||
327 | |||
328 | 44139 | jjdelcerro | String source = "(precio + 10) * 2 + 20 + 30"; |
329 | |||
330 | 43519 | jjdelcerro | Code code = compiler.compileExpression(source); |
331 | Object v = interpreter.run(code);
|
||
332 | assertEquals(470, ((Number)v).intValue()); |
||
333 | } |
||
334 | |||
335 | public void testAbs() { |
||
336 | SymbolTable symbolTable = createSymbolTable(); |
||
337 | Compiler compiler = createCompiler();
|
||
338 | Interpreter interpreter = createInterpreter(symbolTable); |
||
339 | |||
340 | 44139 | jjdelcerro | String source = "precio + abs(10)"; |
341 | |||
342 | 43519 | jjdelcerro | Code code = compiler.compileExpression(source); |
343 | Object v = interpreter.run(code);
|
||
344 | assertEquals(210, ((Number)v).intValue()); |
||
345 | } |
||
346 | |||
347 | public void testAbs2() { |
||
348 | SymbolTable symbolTable = createSymbolTable(); |
||
349 | Compiler compiler = createCompiler();
|
||
350 | Interpreter interpreter = createInterpreter(symbolTable); |
||
351 | |||
352 | 44139 | jjdelcerro | String source = "precio + abs(-10)"; |
353 | |||
354 | 43519 | jjdelcerro | Code code = compiler.compileExpression(source); |
355 | Object v = interpreter.run(code);
|
||
356 | assertEquals(210, ((Number)v).intValue()); |
||
357 | } |
||
358 | |||
359 | public void testCeil() { |
||
360 | SymbolTable symbolTable = createSymbolTable(); |
||
361 | Compiler compiler = createCompiler();
|
||
362 | Interpreter interpreter = createInterpreter(symbolTable); |
||
363 | |||
364 | 44139 | jjdelcerro | String source = "precio + CEIL(PI())"; |
365 | |||
366 | 43519 | jjdelcerro | Code code = compiler.compileExpression(source); |
367 | Object v = interpreter.run(code);
|
||
368 | assertEquals(204, ((Number)v).intValue()); |
||
369 | } |
||
370 | |||
371 | public void testConcat() { |
||
372 | SymbolTable symbolTable = createSymbolTable(); |
||
373 | Compiler compiler = createCompiler();
|
||
374 | Interpreter interpreter = createInterpreter(symbolTable); |
||
375 | |||
376 | 44139 | jjdelcerro | String source = "CONCAT(precio,' euros')"; |
377 | |||
378 | 43519 | jjdelcerro | Code code = compiler.compileExpression(source); |
379 | Object v = interpreter.run(code);
|
||
380 | assertEquals("200 euros", (String)v); |
||
381 | } |
||
382 | 43521 | jjdelcerro | |
383 | public void testAccuracy() { |
||
384 | |||
385 | SymbolTable symbolTable = createSymbolTable(); |
||
386 | Compiler compiler = createCompiler();
|
||
387 | Interpreter interpreter = createInterpreter(symbolTable); |
||
388 | Code code; |
||
389 | Object v;
|
||
390 | |||
391 | 44139 | jjdelcerro | compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true);
|
392 | |||
393 | 43521 | jjdelcerro | code = compiler.compileExpression("[1990] = 0.168873933773767");
|
394 | v = interpreter.run(code); |
||
395 | assertEquals(true, ((Boolean)v).booleanValue()); |
||
396 | |||
397 | code = compiler.compileExpression("[1990] = 0.1688739");
|
||
398 | v = interpreter.run(code); |
||
399 | assertEquals(false, ((Boolean)v).booleanValue()); |
||
400 | |||
401 | interpreter.setAccuracy(0.0000001);
|
||
402 | v = interpreter.run(code); |
||
403 | assertEquals(true, ((Boolean)v).booleanValue()); |
||
404 | 43532 | jjdelcerro | } |
405 | |||
406 | public void test2fields() { |
||
407 | SymbolTable symbolTable = createSymbolTable(); |
||
408 | Compiler compiler = createCompiler();
|
||
409 | Interpreter interpreter = createInterpreter(symbolTable); |
||
410 | |||
411 | 44139 | jjdelcerro | compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true);
|
412 | |||
413 | String source = "[1990] = [precio]"; |
||
414 | |||
415 | compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true);
|
||
416 | 43532 | jjdelcerro | Code code = compiler.compileExpression(source); |
417 | Object v = interpreter.run(code);
|
||
418 | assertEquals(false, ((Boolean)v).booleanValue()); |
||
419 | 43939 | jjdelcerro | } |
420 | |||
421 | |||
422 | public void testInvokeMethod1() { |
||
423 | SymbolTable symbolTable = createSymbolTable(); |
||
424 | Compiler compiler = createCompiler();
|
||
425 | Interpreter interpreter = createInterpreter(symbolTable); |
||
426 | |||
427 | 44139 | jjdelcerro | String source = "'hola'.length()"; |
428 | |||
429 | 43939 | jjdelcerro | Code code = compiler.compileExpression(source); |
430 | Object v = interpreter.run(code);
|
||
431 | |||
432 | assertEquals(4, ((Number)v).intValue()); |
||
433 | } |
||
434 | |||
435 | |||
436 | public void testInvokeMethod2() { |
||
437 | 44139 | jjdelcerro | SymbolTable symbolTable = createSymbolTable(); |
438 | Compiler compiler = createCompiler();
|
||
439 | Interpreter interpreter = createInterpreter(symbolTable); |
||
440 | |||
441 | 43939 | jjdelcerro | String source = "'hola'.indexOf('l')"; |
442 | |||
443 | 44139 | jjdelcerro | Code code = compiler.compileExpression(source); |
444 | Object v = interpreter.run(code);
|
||
445 | |||
446 | assertEquals(2, ((Number)v).intValue()); |
||
447 | } |
||
448 | |||
449 | public void testAlias() { |
||
450 | 43939 | jjdelcerro | SymbolTable symbolTable = createSymbolTable(); |
451 | Compiler compiler = createCompiler();
|
||
452 | Interpreter interpreter = createInterpreter(symbolTable); |
||
453 | |||
454 | 44139 | jjdelcerro | String source = "UPPER('hola')"; |
455 | 43939 | jjdelcerro | Code code = compiler.compileExpression(source); |
456 | Object v = interpreter.run(code);
|
||
457 | 44139 | jjdelcerro | assertEquals("HOLA", (String)v); |
458 | 43939 | jjdelcerro | |
459 | 44139 | jjdelcerro | |
460 | source = "UCASE('hola')";
|
||
461 | code = compiler.compileExpression(source); |
||
462 | v = interpreter.run(code); |
||
463 | assertEquals("HOLA", (String)v); |
||
464 | 43939 | jjdelcerro | } |
465 | 44139 | jjdelcerro | |
466 | public void testRegexp1() { |
||
467 | SymbolTable symbolTable = createSymbolTable(); |
||
468 | Compiler compiler = createCompiler();
|
||
469 | Interpreter interpreter = createInterpreter(symbolTable); |
||
470 | |||
471 | String source = "'Hola' ~ '[Hh]ola'" ; |
||
472 | Code code = compiler.compileExpression(source); |
||
473 | Object v = interpreter.run(code);
|
||
474 | assertTrue((Boolean)v);
|
||
475 | } |
||
476 | 43939 | jjdelcerro | |
477 | 44139 | jjdelcerro | public void testGetitem1() { |
478 | SymbolTable symbolTable = createSymbolTable(); |
||
479 | Compiler compiler = createCompiler();
|
||
480 | Interpreter interpreter = createInterpreter(symbolTable); |
||
481 | compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(false);
|
||
482 | |||
483 | String source = "LIST('uno','dos','tres')[1]" ; |
||
484 | |||
485 | Code code = compiler.compileExpression(source); |
||
486 | Object v = interpreter.run(code);
|
||
487 | assertEquals("dos", (String)v); |
||
488 | } |
||
489 | 43939 | jjdelcerro | |
490 | } |