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 / TestCompiler.java @ 47734
History | View | Annotate | Download (24 KB)
1 |
package org.gvsig.expresionevaluator.impl; |
---|---|
2 |
|
3 |
import java.util.Objects; |
4 |
import junit.framework.TestCase; |
5 |
import static junit.framework.TestCase.assertEquals; |
6 |
import org.gvsig.expressionevaluator.LexicalAnalyzer; |
7 |
import org.gvsig.expressionevaluator.Compiler; |
8 |
import org.gvsig.expressionevaluator.Code; |
9 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator; |
10 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager; |
11 |
import org.gvsig.expressionevaluator.ExpressionSyntaxException; |
12 |
import org.gvsig.expressionevaluator.Formatter; |
13 |
import org.gvsig.expressionevaluator.MutableSymbolTable; |
14 |
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer; |
15 |
|
16 |
|
17 |
public class TestCompiler extends TestCase { |
18 |
|
19 |
public TestCompiler(String testName) { |
20 |
super(testName);
|
21 |
} |
22 |
|
23 |
@Override
|
24 |
protected void setUp() throws Exception { |
25 |
super.setUp();
|
26 |
new DefaultLibrariesInitializer().fullInitialize();
|
27 |
} |
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 |
|
38 |
protected LexicalAnalyzer createLexicalAnalyzer() {
|
39 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
40 |
LexicalAnalyzer lexer = manager.createLexicalAnalyzer(); |
41 |
return lexer;
|
42 |
} |
43 |
|
44 |
protected org.gvsig.expressionevaluator.Compiler createCompiler() {
|
45 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
46 |
Compiler compiler = manager.createCompiler();
|
47 |
compiler.setLexicalAnalyzer(createLexicalAnalyzer()); |
48 |
return compiler;
|
49 |
} |
50 |
|
51 |
protected MutableSymbolTable createSymbolTable() {
|
52 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
53 |
MutableSymbolTable symbolTable = manager.createSymbolTable(); |
54 |
symbolTable.setVar("precio", 200); |
55 |
symbolTable.setVar("1990", 0.168873933773767); |
56 |
return symbolTable;
|
57 |
} |
58 |
|
59 |
private void dump(String testname, Object expected, Object actual) { |
60 |
System.out.println("### ---------------------"); |
61 |
System.out.println("### "+testname); |
62 |
System.out.println("### expected: ["+Objects.toString(expected)+"]"); |
63 |
System.out.println("### actual : ["+Objects.toString(actual)+"]"); |
64 |
} |
65 |
|
66 |
private void checkEquals(String testname, Object expected, Object actual) { |
67 |
dump(testname,expected,actual); |
68 |
assertEquals(expected, actual); |
69 |
} |
70 |
|
71 |
private void checkEquals(Object expected, Object actual) { |
72 |
try {
|
73 |
throw new RuntimeException(); |
74 |
} catch(Throwable t) { |
75 |
String testname = t.getStackTrace()[1].getMethodName(); |
76 |
dump(testname,expected,actual); |
77 |
assertEquals(expected, actual); |
78 |
} |
79 |
} |
80 |
|
81 |
public void testIdentifier1() { |
82 |
String source = "precio"; |
83 |
|
84 |
Compiler compiler = createCompiler();
|
85 |
Code code = compiler.compileExpression(source); |
86 |
checkEquals("\"precio\"", code.toString());
|
87 |
} |
88 |
|
89 |
public void testIdentifier2() { |
90 |
Compiler compiler = createCompiler();
|
91 |
compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true);
|
92 |
|
93 |
String source = "[precio]"; |
94 |
|
95 |
Code code = compiler.compileExpression(source); |
96 |
checkEquals("\"precio\"", code.toString());
|
97 |
} |
98 |
|
99 |
public void testIdentifier3() { |
100 |
Compiler compiler = createCompiler();
|
101 |
|
102 |
String source = "\"precio\""; |
103 |
|
104 |
Code code = compiler.compileExpression(source); |
105 |
checkEquals("\"precio\"", code.toString());
|
106 |
} |
107 |
|
108 |
|
109 |
public void testTrue() { |
110 |
String source = "true"; |
111 |
|
112 |
Compiler compiler = createCompiler();
|
113 |
Code code = compiler.compileExpression(source); |
114 |
checkEquals("TRUE", code.toString());
|
115 |
} |
116 |
|
117 |
public void testLet1() { |
118 |
String source = "LET a = 23"; |
119 |
|
120 |
Compiler compiler = createCompiler();
|
121 |
Code code = compiler.compileExpression(source); |
122 |
checkEquals("LET('a', 23)", code.toString());
|
123 |
} |
124 |
|
125 |
public void testLet2() { |
126 |
String source = "a := 23"; |
127 |
|
128 |
Compiler compiler = createCompiler();
|
129 |
Code code = compiler.compileExpression(source); |
130 |
checkEquals("LET('a', 23)", code.toString());
|
131 |
} |
132 |
|
133 |
public void testLet3() { |
134 |
String source = "SET a TO 23"; |
135 |
|
136 |
Compiler compiler = createCompiler();
|
137 |
Code code = compiler.compileExpression(source); |
138 |
checkEquals("LET('a', 23)", code.toString());
|
139 |
} |
140 |
|
141 |
public void testFalse() { |
142 |
String source = "false"; |
143 |
|
144 |
Compiler compiler = createCompiler();
|
145 |
Code code = compiler.compileExpression(source); |
146 |
checkEquals("FALSE", code.toString());
|
147 |
} |
148 |
|
149 |
public void testNull() { |
150 |
String source = "null"; |
151 |
|
152 |
Compiler compiler = createCompiler();
|
153 |
Code code = compiler.compileExpression(source); |
154 |
checkEquals("NULL", code.toString());
|
155 |
} |
156 |
|
157 |
public void testIsNull() { |
158 |
String source = "10 is null"; |
159 |
|
160 |
Compiler compiler = createCompiler();
|
161 |
Code code = compiler.compileExpression(source); |
162 |
checkEquals("(10 IS NULL)", code.toString());
|
163 |
} |
164 |
|
165 |
public void testIsNotNull() { |
166 |
try {
|
167 |
String source = "10 is not null"; |
168 |
|
169 |
Compiler compiler = createCompiler();
|
170 |
Code code = compiler.compileExpression(source); |
171 |
checkEquals("NOT((10 IS NULL))", code.toString());
|
172 |
} catch(Throwable t) { |
173 |
t.printStackTrace(); |
174 |
throw t;
|
175 |
} |
176 |
} |
177 |
|
178 |
public void testNotTrue() { |
179 |
String source = "not true"; |
180 |
|
181 |
Compiler compiler = createCompiler();
|
182 |
Code code = compiler.compileExpression(source); |
183 |
checkEquals("NOT(TRUE)", code.toString());
|
184 |
} |
185 |
|
186 |
public void testInteger() { |
187 |
String source = "23"; |
188 |
|
189 |
Compiler compiler = createCompiler();
|
190 |
Code code = compiler.compileExpression(source); |
191 |
checkEquals("23", code.toString());
|
192 |
} |
193 |
|
194 |
public void operator(String operatorName) { |
195 |
String source = "precio " + operatorName + " 23"; |
196 |
|
197 |
Compiler compiler = createCompiler();
|
198 |
Code code = compiler.compileExpression(source); |
199 |
checkEquals("(\"precio\" "+ operatorName + " 23)", code.toString()); |
200 |
} |
201 |
|
202 |
public void testOperatorMod() { |
203 |
String source = "precio % 23"; |
204 |
Compiler compiler = createCompiler();
|
205 |
Code code = compiler.compileExpression(source); |
206 |
checkEquals("MOD(\"precio\", 23)", code.toString());
|
207 |
} |
208 |
|
209 |
public void testOperators() { |
210 |
|
211 |
operator("=");
|
212 |
operator("<>");
|
213 |
operator(">");
|
214 |
operator(">=");
|
215 |
operator("<");
|
216 |
operator("<=");
|
217 |
operator("LIKE");
|
218 |
operator("ILIKE");
|
219 |
operator("||");
|
220 |
operator("+");
|
221 |
operator("-");
|
222 |
operator("*");
|
223 |
operator("OR");
|
224 |
operator("AND");
|
225 |
// operator("IS");
|
226 |
|
227 |
operator("~");
|
228 |
} |
229 |
|
230 |
public void testAddMul() { |
231 |
String source = "precio + 10 * 2 + 20 + 30"; |
232 |
|
233 |
Compiler compiler = createCompiler();
|
234 |
|
235 |
Code code = compiler.compileExpression(source); |
236 |
checkEquals("(((\"precio\" + (10 * 2)) + 20) + 30)", code.toString());
|
237 |
} |
238 |
|
239 |
public void testAddMulPar() { |
240 |
String source = "(precio + 10) * 2 + 20 + 30"; |
241 |
|
242 |
Compiler compiler = createCompiler();
|
243 |
|
244 |
Code code = compiler.compileExpression(source); |
245 |
checkEquals("((((\"precio\" + 10) * 2) + 20) + 30)", code.toString());
|
246 |
} |
247 |
|
248 |
public void testAbs() { |
249 |
String source = "precio + abs(10)"; |
250 |
|
251 |
Compiler compiler = createCompiler();
|
252 |
|
253 |
Code code = compiler.compileExpression(source); |
254 |
checkEquals("(\"precio\" + abs(10))", code.toString());
|
255 |
} |
256 |
|
257 |
public void testMod1() { |
258 |
String source = "4 % 3"; |
259 |
|
260 |
Compiler compiler = createCompiler();
|
261 |
|
262 |
Code code = compiler.compileExpression(source); |
263 |
checkEquals("MOD(4, 3)", code.toString());
|
264 |
} |
265 |
|
266 |
public void testMod2() { |
267 |
String source = "MOD(4, 3)"; |
268 |
|
269 |
Compiler compiler = createCompiler();
|
270 |
|
271 |
Code code = compiler.compileExpression(source); |
272 |
checkEquals("MOD(4, 3)", code.toString());
|
273 |
} |
274 |
|
275 |
public void testAbs2() { |
276 |
String source = "precio + abs(-10)"; |
277 |
|
278 |
Compiler compiler = createCompiler();
|
279 |
|
280 |
Code code = compiler.compileExpression(source); |
281 |
checkEquals("(\"precio\" + abs(-10))", code.toString());
|
282 |
} |
283 |
|
284 |
public void testPI() { |
285 |
String source = "precio + PI()"; |
286 |
|
287 |
Compiler compiler = createCompiler();
|
288 |
|
289 |
Code code = compiler.compileExpression(source); |
290 |
checkEquals("(\"precio\" + PI())", code.toString());
|
291 |
} |
292 |
|
293 |
public void testCeil() { |
294 |
String source = "precio + CEIL(PI())"; |
295 |
|
296 |
Compiler compiler = createCompiler();
|
297 |
|
298 |
Code code = compiler.compileExpression(source); |
299 |
checkEquals("(\"precio\" + CEIL(PI()))", code.toString());
|
300 |
} |
301 |
|
302 |
public void testGetitem1() { |
303 |
String source = "LIST('uno','dos','tres')[1]" ; |
304 |
|
305 |
Compiler compiler = createCompiler();
|
306 |
|
307 |
Code code = compiler.compileExpression(source); |
308 |
checkEquals("GETITEM(LIST('uno', 'dos', 'tres'), 1)", code.toString());
|
309 |
} |
310 |
|
311 |
public void testConcat() { |
312 |
String source = "CONCAT(precio,' euros')"; |
313 |
|
314 |
Compiler compiler = createCompiler();
|
315 |
|
316 |
Code code = compiler.compileExpression(source); |
317 |
checkEquals("CONCAT(\"precio\", ' euros')", code.toString());
|
318 |
} |
319 |
|
320 |
public void test1() { |
321 |
String source = "NOMBRE03 = 'Torre d''En Besora (la)'"; |
322 |
|
323 |
Compiler compiler = createCompiler();
|
324 |
|
325 |
Code code = compiler.compileExpression(source); |
326 |
checkEquals("(\"NOMBRE03\" = 'Torre d''En Besora (la)')", code.toString());
|
327 |
} |
328 |
|
329 |
public void test2() { |
330 |
Compiler compiler = createCompiler();
|
331 |
compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true);
|
332 |
|
333 |
String source = "[1990] = 0.168873933773767"; |
334 |
|
335 |
Code code = compiler.compileExpression(source); |
336 |
checkEquals("(\"1990\" = 0.168873933773767)", code.toString());
|
337 |
} |
338 |
|
339 |
public void test2fields() { |
340 |
Compiler compiler = createCompiler();
|
341 |
compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true);
|
342 |
|
343 |
String source = "[1990] = [precio]"; |
344 |
|
345 |
Code code = compiler.compileExpression(source); |
346 |
checkEquals("(\"1990\" = \"precio\")", code.toString());
|
347 |
} |
348 |
|
349 |
|
350 |
public void testInvokeFunction1() { |
351 |
String source = "ST_Area(GEOMETRY)"; |
352 |
|
353 |
Compiler compiler = createCompiler();
|
354 |
|
355 |
Code code = compiler.compileExpression(source); |
356 |
checkEquals("ST_Area(\"GEOMETRY\")", code.toString());
|
357 |
} |
358 |
|
359 |
public void testInvokeMethod1() { |
360 |
String source = "'hola'.length()"; |
361 |
|
362 |
Compiler compiler = createCompiler();
|
363 |
|
364 |
Code code = compiler.compileExpression(source); |
365 |
checkEquals("'hola'.length()", code.toString());
|
366 |
} |
367 |
|
368 |
|
369 |
public void testInvokeMethod1b() { |
370 |
String source = "'hola'->length()"; |
371 |
|
372 |
Compiler compiler = createCompiler();
|
373 |
|
374 |
Code code = compiler.compileExpression(source); |
375 |
checkEquals("'hola'.length()", code.toString());
|
376 |
} |
377 |
|
378 |
|
379 |
public void testInvokeMethod2() { |
380 |
String source = "'hola'.indexOf('l') "; |
381 |
|
382 |
Compiler compiler = createCompiler();
|
383 |
|
384 |
Code code = compiler.compileExpression(source); |
385 |
checkEquals("'hola'.indexOf('l')", code.toString());
|
386 |
} |
387 |
|
388 |
public void testSyntaxError1() { |
389 |
Compiler compiler = createCompiler();
|
390 |
String source;
|
391 |
|
392 |
source = "3 + (2*)";
|
393 |
try {
|
394 |
compiler.compileExpression(source); |
395 |
assertTrue("A syntax exception should have been thrown compiling '"+source+"'.", false); |
396 |
} catch(ExpressionSyntaxException ex) {
|
397 |
// Ok
|
398 |
} |
399 |
source = "3 + 2*";
|
400 |
try {
|
401 |
compiler.compileExpression(source); |
402 |
assertTrue("A syntax exception should have been thrown compiling '"+source+"'.", false); |
403 |
} catch(ExpressionSyntaxException ex) {
|
404 |
// Ok
|
405 |
} |
406 |
source = "3 + (2*2))";
|
407 |
try {
|
408 |
compiler.compileExpression(source); |
409 |
assertTrue("A syntax exception should have been thrown compiling '"+source+"'.", false); |
410 |
} catch(ExpressionSyntaxException ex) {
|
411 |
// Ok
|
412 |
} |
413 |
source = "3 and or 2";
|
414 |
try {
|
415 |
compiler.compileExpression(source); |
416 |
assertTrue("A syntax exception should have been thrown compiling '"+source+"'.", false); |
417 |
} catch(ExpressionSyntaxException ex) {
|
418 |
// Ok
|
419 |
} |
420 |
source = "3*/2";
|
421 |
try {
|
422 |
compiler.compileExpression(source); |
423 |
assertTrue("A syntax exception should have been thrown compiling '"+source+"'.", false); |
424 |
} catch(ExpressionSyntaxException ex) {
|
425 |
// Ok
|
426 |
} |
427 |
} |
428 |
|
429 |
public void testInvokeFunction2paramters1() { |
430 |
String source = "LEFT('NOMBRE', 2)"; |
431 |
|
432 |
Compiler compiler = createCompiler();
|
433 |
|
434 |
Code code = compiler.compileExpression(source); |
435 |
checkEquals("LEFT('NOMBRE', 2)", code.toString());
|
436 |
} |
437 |
|
438 |
public void testInvokeFunction2paramters2() { |
439 |
String source = "LEFT('NOMBRE',2)"; |
440 |
|
441 |
Compiler compiler = createCompiler();
|
442 |
|
443 |
Code code = compiler.compileExpression(source); |
444 |
checkEquals("LEFT('NOMBRE', 2)", code.toString());
|
445 |
} |
446 |
|
447 |
public void testInvokeFunction3paramters1() { |
448 |
String source = "MID('NOMBRE', 2, 2)"; |
449 |
|
450 |
Compiler compiler = createCompiler();
|
451 |
|
452 |
Code code = compiler.compileExpression(source); |
453 |
checkEquals("MID('NOMBRE', 2, 2)", code.toString());
|
454 |
} |
455 |
|
456 |
public void testInvokeFunction3paramters2() { |
457 |
String source = "MID('NOMBRE', 2,2)"; |
458 |
|
459 |
Compiler compiler = createCompiler();
|
460 |
|
461 |
Code code = compiler.compileExpression(source); |
462 |
checkEquals("MID('NOMBRE', 2, 2)", code.toString());
|
463 |
} |
464 |
|
465 |
public void testDecimal1() { |
466 |
String source = "23.1"; |
467 |
|
468 |
Compiler compiler = createCompiler();
|
469 |
Code code = compiler.compileExpression(source); |
470 |
checkEquals("23.1", code.toString());
|
471 |
} |
472 |
|
473 |
public void testDecimal2() { |
474 |
String source = "23,1"; |
475 |
|
476 |
Compiler compiler = createCompiler();
|
477 |
try {
|
478 |
Code code = compiler.compileExpression(source); |
479 |
fail("I expected 23,1 to be erroneous.");
|
480 |
} catch(ExpressionSyntaxException ex) {
|
481 |
// This is OK.
|
482 |
} |
483 |
} |
484 |
public void testDecimal3() { |
485 |
String source = "1.23E4"; |
486 |
|
487 |
Compiler compiler = createCompiler();
|
488 |
Code code = compiler.compileExpression(source); |
489 |
checkEquals("12300", code.toString());
|
490 |
} |
491 |
|
492 |
public void testDecimal4() { |
493 |
String source = "1.23E-2"; |
494 |
|
495 |
Compiler compiler = createCompiler();
|
496 |
Code code = compiler.compileExpression(source); |
497 |
checkEquals("0.0123", code.toString());
|
498 |
} |
499 |
|
500 |
public void testDecimal5() { |
501 |
String source = "1.23E-4"; |
502 |
|
503 |
Compiler compiler = createCompiler();
|
504 |
Code code = compiler.compileExpression(source); |
505 |
checkEquals("0.000123", code.toString());
|
506 |
} |
507 |
|
508 |
public void testDecimal6() { |
509 |
String source = "-23.1"; |
510 |
|
511 |
Compiler compiler = createCompiler();
|
512 |
Code code = compiler.compileExpression(source); |
513 |
checkEquals("-23.1", code.toString());
|
514 |
} |
515 |
|
516 |
public void testDecimal7() { |
517 |
String source = "-1.23E-2"; |
518 |
|
519 |
Compiler compiler = createCompiler();
|
520 |
Code code = compiler.compileExpression(source); |
521 |
checkEquals("-0.0123", code.toString());
|
522 |
} |
523 |
|
524 |
public void testDecimal8() { |
525 |
String source = "-1.23E-4"; |
526 |
|
527 |
Compiler compiler = createCompiler();
|
528 |
Code code = compiler.compileExpression(source); |
529 |
checkEquals("-0.000123", code.toString());
|
530 |
} |
531 |
|
532 |
public void testGetAttr1() { |
533 |
String source = "ARENA2_VEHICULOS.ID_ACCIDENTE"; |
534 |
|
535 |
Compiler compiler = createCompiler();
|
536 |
|
537 |
Code code = compiler.compileExpression(source); |
538 |
checkEquals( "GETATTR(\"ARENA2_VEHICULOS\", 'ID_ACCIDENTE')", code.toString());
|
539 |
} |
540 |
|
541 |
public void testGetAttr1b() { |
542 |
String source = "ARENA2_VEHICULOS.ID_ACCIDENTE"; |
543 |
|
544 |
Compiler compiler = createCompiler();
|
545 |
|
546 |
Code code = compiler.compileExpression(source); |
547 |
code.link(this.createSymbolTable());
|
548 |
checkEquals( "\"ARENA2_VEHICULOS\".\"ID_ACCIDENTE\"", code.toString());
|
549 |
} |
550 |
|
551 |
public void testGetAttr2a() { |
552 |
String source = "GETATTR(ARENA2_VEHICULOS,'ID_ACCIDENTE')"; |
553 |
|
554 |
Compiler compiler = createCompiler();
|
555 |
|
556 |
Code code = compiler.compileExpression(source); |
557 |
code.link(this.createSymbolTable());
|
558 |
checkEquals( "\"ARENA2_VEHICULOS\".\"ID_ACCIDENTE\"", code.toString());
|
559 |
} |
560 |
|
561 |
public void testGetAttr2b() { |
562 |
String source = "GETATTR(ARENA2_VEHICULOS,\"ID_ACCIDENTE\")"; |
563 |
|
564 |
Compiler compiler = createCompiler();
|
565 |
|
566 |
Code code = compiler.compileExpression(source); |
567 |
code.link(this.createSymbolTable());
|
568 |
checkEquals( "GETATTR(\"ARENA2_VEHICULOS\", \"ID_ACCIDENTE\")", code.toString());
|
569 |
} |
570 |
|
571 |
public void testGetAttr2c() { |
572 |
String source = "GETATTR(ARENA2_VEHICULOS,'ID_ACCIDENTE'||3)"; |
573 |
|
574 |
Compiler compiler = createCompiler();
|
575 |
|
576 |
Code code = compiler.compileExpression(source); |
577 |
code.link(this.createSymbolTable());
|
578 |
checkEquals( "GETATTR(\"ARENA2_VEHICULOS\", ('ID_ACCIDENTE' || 3))", code.toString());
|
579 |
} |
580 |
|
581 |
public void testJson1() { |
582 |
String source = "[\n" + |
583 |
" [2,'Val','2018'],\n" +
|
584 |
" [3,'ali','2018'],\n" +
|
585 |
" [5,'Val','2020'],\n" +
|
586 |
" [7,'ali','2020']\n" +
|
587 |
" ]";
|
588 |
|
589 |
Compiler compiler = createCompiler();
|
590 |
|
591 |
Code code = compiler.compileExpression(source); |
592 |
code.link(this.createSymbolTable());
|
593 |
checkEquals( "ARRAY[ ARRAY[ 2, 'Val', '2018' ], ARRAY[ 3, 'ali', '2018' ], ARRAY[ 5, 'Val', '2020' ], ARRAY[ 7, 'ali', '2020' ] ]", code.toString());
|
594 |
} |
595 |
|
596 |
public void testListAdd() { |
597 |
String source = "list().add(10)"; |
598 |
|
599 |
Compiler compiler = createCompiler();
|
600 |
|
601 |
Code code = compiler.compileExpression(source); |
602 |
code.link(this.createSymbolTable());
|
603 |
checkEquals( "list().add(10)", code.toString());
|
604 |
} |
605 |
|
606 |
public void testListSet() { |
607 |
String source = "list(1,2,3).set(1,20)"; |
608 |
|
609 |
Compiler compiler = createCompiler();
|
610 |
|
611 |
Code code = compiler.compileExpression(source); |
612 |
code.link(this.createSymbolTable());
|
613 |
checkEquals( "list(1, 2, 3).set(1, 20)", code.toString());
|
614 |
} |
615 |
|
616 |
public void testColon1() { |
617 |
String source = ":a+b"; |
618 |
|
619 |
Compiler compiler = createCompiler();
|
620 |
|
621 |
Code code = compiler.compileExpression(source); |
622 |
code.link(this.createSymbolTable());
|
623 |
checkEquals( "(:IN (\"a\") + \"b\")", code.toString());
|
624 |
} |
625 |
|
626 |
public void testColon2() { |
627 |
String source = ":IN (a+b)+c"; |
628 |
|
629 |
Compiler compiler = createCompiler();
|
630 |
|
631 |
Code code = compiler.compileExpression(source); |
632 |
code.link(this.createSymbolTable());
|
633 |
checkEquals( "(:IN ((\"a\" + \"b\")) + \"c\")", code.toString());
|
634 |
} |
635 |
|
636 |
|
637 |
public void testColon3() { |
638 |
String source = ":a.c"; |
639 |
|
640 |
Compiler compiler = createCompiler();
|
641 |
|
642 |
Code code = compiler.compileExpression(source); |
643 |
code.link(this.createSymbolTable());
|
644 |
checkEquals( "GETATTR(:IN (\"a\"), 'c')", code.toString());
|
645 |
} |
646 |
|
647 |
public void testColon4() { |
648 |
try {
|
649 |
String source = ":IN a.c"; |
650 |
|
651 |
Compiler compiler = createCompiler();
|
652 |
|
653 |
Code code = compiler.compileExpression(source); |
654 |
code.link(this.createSymbolTable());
|
655 |
checkEquals( "GETATTR(:IN (\"a\"), 'c')", code.toString());
|
656 |
} catch(Throwable t) { |
657 |
t.printStackTrace(); |
658 |
throw t;
|
659 |
} |
660 |
} |
661 |
|
662 |
public void testColon5() { |
663 |
try {
|
664 |
String source = ":IN (a.c)"; |
665 |
|
666 |
Compiler compiler = createCompiler();
|
667 |
|
668 |
Code code = compiler.compileExpression(source); |
669 |
code.link(this.createSymbolTable());
|
670 |
checkEquals( ":IN (\"a\".\"c\")", code.toString());
|
671 |
} catch(Throwable t) { |
672 |
t.printStackTrace(); |
673 |
throw t;
|
674 |
} |
675 |
} |
676 |
|
677 |
public void testHostexpression1() { |
678 |
String source = "BEGIN v1 := 10; v2 := :v1; END"; |
679 |
|
680 |
Compiler compiler = createCompiler();
|
681 |
|
682 |
Code code = compiler.compileExpression(source); |
683 |
code.link(this.createSymbolTable());
|
684 |
checkEquals("testHostexpression1", "BEGIN \"v1\" := 10; \"v2\" := :IN (\"v1\"); END ", code.toString()); |
685 |
} |
686 |
|
687 |
public void testNotLike1() { |
688 |
String source = "NOT ( FIELD LIKE '%||%' )"; |
689 |
|
690 |
Compiler compiler = createCompiler();
|
691 |
|
692 |
Code code = compiler.compileExpression(source); |
693 |
code.link(this.createSymbolTable());
|
694 |
checkEquals( "NOT((\"FIELD\" LIKE '%||%'))", code.toString());
|
695 |
} |
696 |
|
697 |
public void testVar1() { |
698 |
String source = "VAR a DEFAULT 23"; |
699 |
|
700 |
Compiler compiler = createCompiler();
|
701 |
Code code = compiler.compileExpression(source); |
702 |
checkEquals("VAR(\"a\", 23)", code.toString());
|
703 |
} |
704 |
|
705 |
public void testVar2() { |
706 |
String source = "VAR(\"a\",23)"; |
707 |
|
708 |
Compiler compiler = createCompiler();
|
709 |
Code code = compiler.compileExpression(source); |
710 |
checkEquals("VAR(\"a\", 23)", code.toString());
|
711 |
} |
712 |
|
713 |
public void testIn1() { |
714 |
String source = "\"a\" in ( 1, 2, 3)"; |
715 |
|
716 |
Compiler compiler = createCompiler();
|
717 |
Code code = compiler.compileExpression(source); |
718 |
code.link(); |
719 |
checkEquals("(\"a\" IN ( 1, 2, 3 ))", code.toString());
|
720 |
} |
721 |
|
722 |
public void testIn2() { |
723 |
String source = "\"a\" in iterator"; |
724 |
|
725 |
Compiler compiler = createCompiler();
|
726 |
Code code = compiler.compileExpression(source); |
727 |
code.link(); |
728 |
checkEquals("(\"a\" IN \"iterator\")", code.toString());
|
729 |
} |
730 |
|
731 |
public void testBetween1() { |
732 |
String source = "\"a\" between 10 and 20"; |
733 |
|
734 |
Compiler compiler = createCompiler();
|
735 |
Code code = compiler.compileExpression(source); |
736 |
code.link(); |
737 |
checkEquals("(\"a\" BETWEEN 10 AND 20)", code.toString());
|
738 |
} |
739 |
|
740 |
public void testBetween2() { |
741 |
String source = "\"a\"+3 between b+10 and b+20"; |
742 |
|
743 |
Compiler compiler = createCompiler();
|
744 |
Code code = compiler.compileExpression(source); |
745 |
code.link(); |
746 |
checkEquals("((\"a\" + 3) BETWEEN (\"b\" + 10) AND (\"b\" + 20))", code.toString());
|
747 |
} |
748 |
|
749 |
public void testBlockExcept1a() { |
750 |
String source = "BEGIN LET V1 = 11; LET V2 = 22; EXCEPT print('Hola'); TRUE; END"; |
751 |
|
752 |
Compiler compiler = createCompiler();
|
753 |
Code code = compiler.compileExpression(source); |
754 |
code.link(); |
755 |
checkEquals("BEGIN \"V1\" := 11; \"V2\" := 22; EXCEPT print('Hola'); TRUE; END ", code.toString());
|
756 |
} |
757 |
|
758 |
public void testBlockExcept1b() { |
759 |
String source = "BEGIN LET V1 = 11; LET V2 = 22; EXCEPT print('Hola'); TRUE; END"; |
760 |
|
761 |
Formatter formatter = new Code.EmptyFormatter(true, 4); |
762 |
|
763 |
Compiler compiler = createCompiler();
|
764 |
Code code = compiler.compileExpression(source); |
765 |
code.link(); |
766 |
checkEquals("BEGIN \n \"V1\" := 11; \n \"V2\" := 22; \nEXCEPT \n print('Hola'); \n TRUE; \nEND \n", code.toString(formatter));
|
767 |
} |
768 |
|
769 |
public void testBlockExcept2b() { |
770 |
String source = "DECLARE V1 := 0; V2 := 0; BEGIN V1 := 11; V2 := 22; EXCEPT print('Hola'); TRUE; END"; |
771 |
|
772 |
Formatter formatter = new Code.EmptyFormatter(true, 4); |
773 |
|
774 |
Compiler compiler = createCompiler();
|
775 |
Code code = compiler.compileExpression(source); |
776 |
code.link(); |
777 |
checkEquals("DECLARE \n \"V1\" := 0; \n \"V2\" := 0; \nBEGIN \n \"V1\" := 11; \n \"V2\" := 22; \nEXCEPT \n print('Hola'); \n TRUE; \nEND \n", code.toString(formatter));
|
778 |
} |
779 |
|
780 |
} |