Statistics
| Revision:

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 @ 46056

History | View | Annotate | Download (23.5 KB)

1
package org.gvsig.expresionevaluator.impl;
2

    
3
import java.util.List;
4
import java.util.Map;
5
import junit.framework.TestCase;
6
import org.apache.commons.lang3.StringUtils;
7
import org.gvsig.expressionevaluator.AttributeHandler;
8
import org.gvsig.expressionevaluator.LexicalAnalyzer;
9
import org.gvsig.expressionevaluator.Compiler;
10
import org.gvsig.expressionevaluator.SymbolTable;
11
import org.gvsig.expressionevaluator.Interpreter;
12
import org.gvsig.expressionevaluator.Code;
13
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
14
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
15
import org.gvsig.expressionevaluator.MutableSymbolTable;
16
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
17

    
18
public class TestInterpreter extends TestCase {
19
    
20
    public TestInterpreter(String testName) {
21
        super(testName);
22
    }
23
    
24
    @Override
25
    protected void setUp() throws Exception {
26
        super.setUp();
27
        new DefaultLibrariesInitializer().fullInitialize();
28
    }
29
    
30
    @Override
31
    protected void tearDown() throws Exception {
32
        super.tearDown();
33
    }
34

    
35
    // TODO add test methods here. The name must begin with 'test'. For example:
36
    // public void testHello() {}
37

    
38
    
39
    protected LexicalAnalyzer createLexicalAnalyzer() {
40
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
41
        LexicalAnalyzer lexer = manager.createLexicalAnalyzer();
42
        return lexer;
43
    }
44

    
45
    protected org.gvsig.expressionevaluator.Compiler createCompiler() {
46
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
47
        Compiler compiler = manager.createCompiler();
48
        compiler.setLexicalAnalyzer(createLexicalAnalyzer());
49
        return compiler;
50
    }
51

    
52
    
53
    protected MutableSymbolTable createSymbolTable() {
54
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
55
        MutableSymbolTable symbolTable = manager.createSymbolTable();
56
        symbolTable.setVar("precio", 200);
57
        symbolTable.setVar("1990", 0.168873933773767);
58
        return symbolTable;
59
    }
60
    
61
    protected Interpreter createInterpreter(SymbolTable symbolTable) {
62
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
63
        Interpreter interpreter = manager.createInterpreter();
64
        interpreter.setSymbolTable(symbolTable);
65
        return interpreter;
66
    }
67
    
68
    public void testIdentifier1() {
69
        SymbolTable symbolTable = createSymbolTable();
70
        Compiler compiler = createCompiler();
71
        Interpreter interpreter = createInterpreter(symbolTable);
72
        
73
        String source = "precio";
74

    
75
        Code code = compiler.compileExpression(source);
76
        Object v = interpreter.run(code);
77
        assertEquals(200, ((Number)v).intValue());
78
    }
79
    
80
    public void testInteger() {
81
        SymbolTable symbolTable = createSymbolTable();
82
        Compiler compiler = createCompiler();
83
        Interpreter interpreter = createInterpreter(symbolTable);
84
        
85
        String source = "23";
86

    
87
        Code code = compiler.compileExpression(source);
88
        Object v = interpreter.run(code);
89
        assertEquals(23, ((Number)v).intValue());
90
    }
91
    
92
    public void testNumberDMS() {
93
        SymbolTable symbolTable = createSymbolTable();
94
        Compiler compiler = createCompiler();
95
        Interpreter interpreter = createInterpreter(symbolTable);
96
        
97
        String source = "@10 30 1.2 N";
98

    
99
        Code code = compiler.compileExpression(source);
100
        Object v = interpreter.run(code);
101
        assertEquals(10.5003, Math.round(((Number)v).doubleValue()*10000d)/10000d);
102

    
103
        source = "@10 30 0.09 N";
104

    
105
        code = compiler.compileExpression(source);
106
        v = interpreter.run(code);
107
        assertEquals(10.500025, Math.round(((Number)v).doubleValue()*1000000d)/1000000d);
108

    
109
        source = "@10 30 0.09 S";
110

    
111
        code = compiler.compileExpression(source);
112
        v = interpreter.run(code);
113
        assertEquals(-10.500025, Math.round(((Number)v).doubleValue()*1000000d)/1000000d);
114

    
115
        source = "@+10 30 0.09";
116

    
117
        code = compiler.compileExpression(source);
118
        v = interpreter.run(code);
119
        assertEquals(10.500025, Math.round(((Number)v).doubleValue()*1000000d)/1000000d);
120

    
121
        source = "@-10 30 0.09";
122

    
123
        code = compiler.compileExpression(source);
124
        v = interpreter.run(code);
125
        assertEquals(-10.500025, Math.round(((Number)v).doubleValue()*1000000d)/1000000d);
126

    
127
    }
128
    
129
    public void testTrue() {
130
        SymbolTable symbolTable = createSymbolTable();
131
        Compiler compiler = createCompiler();
132
        Interpreter interpreter = createInterpreter(symbolTable);
133
        
134
        String source = "true";
135

    
136
        Code code = compiler.compileExpression(source);
137
        assertEquals(Boolean.TRUE, interpreter.run(code));
138
    }
139
    
140
    public void testFalse() {
141
        SymbolTable symbolTable = createSymbolTable();
142
        Compiler compiler = createCompiler();
143
        Interpreter interpreter = createInterpreter(symbolTable);
144
        
145
        String source = "false";
146

    
147
        Code code = compiler.compileExpression(source);
148
        assertEquals(Boolean.FALSE, interpreter.run(code));
149
    }
150
    
151
    public void testNull() {
152
        SymbolTable symbolTable = createSymbolTable();
153
        Compiler compiler = createCompiler();
154
        Interpreter interpreter = createInterpreter(symbolTable);
155
        
156
        String source = "null";
157

    
158
        Code code = compiler.compileExpression(source);
159
        assertEquals(null, interpreter.run(code));
160
    }
161
    
162
    public void testIsNull() {
163
        SymbolTable symbolTable = createSymbolTable();
164
        Compiler compiler = createCompiler();
165
        Interpreter interpreter = createInterpreter(symbolTable);
166
        
167
        String source = "10 is null";
168

    
169
        Code code = compiler.compileExpression(source);
170
        assertEquals(false, interpreter.run(code));
171
    }
172
    
173
    public void testIsNotNull() {
174
        SymbolTable symbolTable = createSymbolTable();
175
        Compiler compiler = createCompiler();
176
        Interpreter interpreter = createInterpreter(symbolTable);
177
        
178
        String source = "10 is not null";
179

    
180
        Code code = compiler.compileExpression(source);
181
        assertEquals(true, interpreter.run(code));
182
    }
183
    
184
    public void testAdd1() {
185
        SymbolTable symbolTable = createSymbolTable();
186
        Compiler compiler = createCompiler();
187
        Interpreter interpreter = createInterpreter(symbolTable);
188
        
189
        String source = "precio + 10";
190

    
191
        Code code = compiler.compileExpression(source);
192
        Object v = interpreter.run(code);
193
        assertEquals(210, ((Number)v).intValue());
194
    }
195
    
196
    public void testSimpleAdd1() {
197
        SymbolTable symbolTable = createSymbolTable();
198
        Compiler compiler = createCompiler();
199
        Interpreter interpreter = createInterpreter(symbolTable);
200
        
201
        String source = "5+10";
202

    
203
        Code code = compiler.compileExpression(source);
204
        Object v = interpreter.run(code);
205
        assertEquals(15, ((Number)v).intValue());
206
    }
207
    
208
    public void testSimpleAdd2() {
209
        SymbolTable symbolTable = createSymbolTable();
210
        Compiler compiler = createCompiler();
211
        Interpreter interpreter = createInterpreter(symbolTable);
212
        
213
        String source = "5 + 10";
214

    
215
        Code code = compiler.compileExpression(source);
216
        Object v = interpreter.run(code);
217
        assertEquals(15, ((Number)v).intValue());
218
    }
219
    
220
    public void testSimpleAdd3() {
221
        SymbolTable symbolTable = createSymbolTable();
222
        Compiler compiler = createCompiler();
223
        Interpreter interpreter = createInterpreter(symbolTable);
224
        
225
        String source = "10+-5";
226

    
227
        Code code = compiler.compileExpression(source);
228
        Object v = interpreter.run(code);
229
        assertEquals(5, ((Number)v).intValue());
230
    }
231
    
232
    public void testSimpleSub1() {
233
        SymbolTable symbolTable = createSymbolTable();
234
        Compiler compiler = createCompiler();
235
        Interpreter interpreter = createInterpreter(symbolTable);
236
        
237
        String source = "10-5";
238

    
239
        Code code = compiler.compileExpression(source);
240
        Object v = interpreter.run(code);
241
        assertEquals(5, ((Number)v).intValue());
242
    }
243
    
244
    public void testSimpleSub2() {
245
        SymbolTable symbolTable = createSymbolTable();
246
        Compiler compiler = createCompiler();
247
        Interpreter interpreter = createInterpreter(symbolTable);
248
        
249
        String source = "10 - 5";
250

    
251
        Code code = compiler.compileExpression(source);
252
        Object v = interpreter.run(code);
253
        assertEquals(5, ((Number)v).intValue());
254
    }
255
    
256
    public void testSimpleNumber() {
257
        SymbolTable symbolTable = createSymbolTable();
258
        Compiler compiler = createCompiler();
259
        Interpreter interpreter = createInterpreter(symbolTable);
260
        
261
        String source = "23";
262

    
263
        Code code = compiler.compileExpression(source);
264
        Object v = interpreter.run(code);
265
        assertEquals(23, ((Number)v).intValue());
266
    }
267
    
268
    public void testSimpleNegativeNumber() {
269
        SymbolTable symbolTable = createSymbolTable();
270
        Compiler compiler = createCompiler();
271
        Interpreter interpreter = createInterpreter(symbolTable);
272
        
273
        String source = "-23";
274

    
275
        Code code = compiler.compileExpression(source);
276
        Object v = interpreter.run(code);
277
        assertEquals(-23, ((Number)v).intValue());
278
    }
279
    
280
    public void testNegateFunction() {
281
        SymbolTable symbolTable = createSymbolTable();
282
        Compiler compiler = createCompiler();
283
        Interpreter interpreter = createInterpreter(symbolTable);
284
        
285
        String source = "-PI()";
286

    
287
        Code code = compiler.compileExpression(source);
288
        Object v = interpreter.run(code);
289
        assertEquals(-Math.PI, ((Number)v).doubleValue());
290
    }
291
    
292
    public void testSub1() {
293
        SymbolTable symbolTable = createSymbolTable();
294
        Compiler compiler = createCompiler();
295
        Interpreter interpreter = createInterpreter(symbolTable);
296
        
297
        String source = "precio - 10";
298

    
299
        Code code = compiler.compileExpression(source);
300
        Object v = interpreter.run(code);
301
        assertEquals(190, ((Number)v).intValue());
302
    }
303
    
304
    public void testMul1() {
305
        SymbolTable symbolTable = createSymbolTable();
306
        Compiler compiler = createCompiler();
307
        Interpreter interpreter = createInterpreter(symbolTable);
308
        
309
        String source = "precio * 10";
310

    
311
        Code code = compiler.compileExpression(source);
312
        Object v = interpreter.run(code);
313
        assertEquals(2000, ((Number)v).intValue());
314
    }
315

    
316
    public void testDiv1() {
317
        SymbolTable symbolTable = createSymbolTable();
318
        Compiler compiler = createCompiler();
319
        Interpreter interpreter = createInterpreter(symbolTable);
320
        
321
        String source = "precio / 10";
322

    
323
        Code code = compiler.compileExpression(source);
324
        Object v = interpreter.run(code);
325
        assertEquals(20, ((Number)v).intValue());
326
    }
327
    
328
    public void testMod1() {
329
        SymbolTable symbolTable = createSymbolTable();
330
        Compiler compiler = createCompiler();
331
        Interpreter interpreter = createInterpreter(symbolTable);
332
        
333
        String source = "4 % 3";
334

    
335
        Code code = compiler.compileExpression(source);
336
        Object v = interpreter.run(code);
337
        assertEquals(1, ((Number)v).intValue());
338
    }
339
    
340
    public void testMod2() {
341
        SymbolTable symbolTable = createSymbolTable();
342
        Compiler compiler = createCompiler();
343
        Interpreter interpreter = createInterpreter(symbolTable);
344
        
345
        String source = "MOD(4, 3)";
346

    
347
        Code code = compiler.compileExpression(source);
348
        Object v = interpreter.run(code);
349
        assertEquals(1, ((Number)v).intValue());
350
    }
351
    
352
    public void testAdd2() {
353
        SymbolTable symbolTable = createSymbolTable();
354
        Compiler compiler = createCompiler();
355
        Interpreter interpreter = createInterpreter(symbolTable);
356
        
357
        String source = "precio + 10 + 20 + 30";
358

    
359
        Code code = compiler.compileExpression(source);
360
        Object v = interpreter.run(code);
361
        assertEquals(260, ((Number)v).intValue());
362
    }
363
    
364
    public void testAddMul() {
365
        SymbolTable symbolTable = createSymbolTable();
366
        Compiler compiler = createCompiler();
367
        Interpreter interpreter = createInterpreter(symbolTable);
368
        
369
        String source = "precio + 10 * 2 + 20 + 30";
370

    
371
        Code code = compiler.compileExpression(source);
372
        Object v = interpreter.run(code);
373
        assertEquals(270, ((Number)v).intValue());
374
    }
375
    
376
    public void testAddMulPar() {
377
        SymbolTable symbolTable = createSymbolTable();
378
        Compiler compiler = createCompiler();
379
        Interpreter interpreter = createInterpreter(symbolTable);
380
        
381
        String source = "(precio + 10) * 2 + 20 + 30";
382

    
383
        Code code = compiler.compileExpression(source);
384
        Object v = interpreter.run(code);
385
        assertEquals(470, ((Number)v).intValue());
386
    }    
387

    
388
    public void testAbs() {
389
        SymbolTable symbolTable = createSymbolTable();
390
        Compiler compiler = createCompiler();
391
        Interpreter interpreter = createInterpreter(symbolTable);
392
        
393
        String source = "precio + abs(10)";
394

    
395
        Code code = compiler.compileExpression(source);
396
        Object v = interpreter.run(code);
397
        assertEquals(210, ((Number)v).intValue());
398
    }
399

    
400
    public void testAbs2() {
401
        SymbolTable symbolTable = createSymbolTable();
402
        Compiler compiler = createCompiler();
403
        Interpreter interpreter = createInterpreter(symbolTable);
404
        
405
        String source = "precio + abs(-10)";
406

    
407
        Code code = compiler.compileExpression(source);
408
        Object v = interpreter.run(code);
409
        assertEquals(210, ((Number)v).intValue());
410
    }
411
    
412
    public void testCeil() {
413
        SymbolTable symbolTable = createSymbolTable();
414
        Compiler compiler = createCompiler();
415
        Interpreter interpreter = createInterpreter(symbolTable);
416
        
417
        String source = "precio + CEIL(PI())";
418

    
419
        Code code = compiler.compileExpression(source);
420
        Object v = interpreter.run(code);
421
        assertEquals(204, ((Number)v).intValue());
422
    }
423
    
424
    public void testConcat() {
425
        SymbolTable symbolTable = createSymbolTable();
426
        Compiler compiler = createCompiler();
427
        Interpreter interpreter = createInterpreter(symbolTable);
428
        
429
        String source = "CONCAT(precio,' euros')";
430

    
431
        Code code = compiler.compileExpression(source);
432
        Object v = interpreter.run(code);
433
        assertEquals("200 euros", (String)v);
434
    }
435

    
436
    public void testAccuracy() {
437
 
438
        SymbolTable symbolTable = createSymbolTable();
439
        Compiler compiler = createCompiler();
440
        Interpreter interpreter = createInterpreter(symbolTable);
441
        Code code;
442
        Object v;
443
        
444
        compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true);
445

    
446
        code = compiler.compileExpression("[1990] = 0.168873933773767");
447
        v = interpreter.run(code);
448
        assertEquals(true, ((Boolean)v).booleanValue());
449

    
450
        code = compiler.compileExpression("[1990] = 0.1688739");
451
        v = interpreter.run(code);
452
        assertEquals(false, ((Boolean)v).booleanValue());
453

    
454
        interpreter.setAccuracy(0.0000001);
455
        v = interpreter.run(code);
456
        assertEquals(true, ((Boolean)v).booleanValue());
457
    }    
458

    
459
    public void test2fields() {
460
        SymbolTable symbolTable = createSymbolTable();
461
        Compiler compiler = createCompiler();
462
        Interpreter interpreter = createInterpreter(symbolTable);
463
        
464
        compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true);
465

    
466
        String source = "[1990] = [precio]";
467

    
468
        compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true);
469
        Code code = compiler.compileExpression(source);
470
        Object v = interpreter.run(code);
471
        assertEquals(false, ((Boolean)v).booleanValue());
472
    }
473

    
474

    
475
    public void testInvokeMethod1() {
476
        SymbolTable symbolTable = createSymbolTable();
477
        Compiler compiler = createCompiler();
478
        Interpreter interpreter = createInterpreter(symbolTable);
479
        
480
        String source = "'hola'.length()";
481

    
482
        Code code = compiler.compileExpression(source);
483
        Object v = interpreter.run(code);
484

    
485
        assertEquals(4, ((Number)v).intValue());
486
    }
487
    
488
    
489
    public void testInvokeMethod2() {
490
        SymbolTable symbolTable = createSymbolTable();
491
        Compiler compiler = createCompiler();
492
        Interpreter interpreter = createInterpreter(symbolTable);
493
        
494
        String source = "'hola'.indexOf('l')";
495
        
496
        Code code = compiler.compileExpression(source);
497
        Object v = interpreter.run(code);
498

    
499
        assertEquals(2, ((Number)v).intValue());
500
    }
501

    
502
    public void testAlias() {
503
        SymbolTable symbolTable = createSymbolTable();
504
        Compiler compiler = createCompiler();
505
        Interpreter interpreter = createInterpreter(symbolTable);
506
        
507
        String source = "UPPER('hola')";
508
        Code code = compiler.compileExpression(source);
509
        Object v = interpreter.run(code);
510
        assertEquals("HOLA", (String)v);
511

    
512
        
513
        source = "UCASE('hola')";
514
        code = compiler.compileExpression(source);
515
        v = interpreter.run(code);
516
        assertEquals("HOLA", (String)v);
517
    }
518
    
519
    public void testRegexp1() {
520
        SymbolTable symbolTable = createSymbolTable();
521
        Compiler compiler = createCompiler();
522
        Interpreter interpreter = createInterpreter(symbolTable);
523
        
524
        String source = "'Hola' ~ '[Hh]ola'" ;
525
        Code code = compiler.compileExpression(source);
526
        Object v = interpreter.run(code);
527
        assertTrue((Boolean)v);
528
    }
529

    
530
    public void testGetitem1() {
531
        SymbolTable symbolTable = createSymbolTable();
532
        Compiler compiler = createCompiler();
533
        Interpreter interpreter = createInterpreter(symbolTable);
534
        compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(false);
535
        
536
        String source = "LIST('uno','dos','tres')[1]" ;
537
        
538
        Code code = compiler.compileExpression(source);
539
        Object v = interpreter.run(code);
540
        assertEquals("dos", (String)v);
541
    }
542

    
543
    public void testGetattr1() {
544
        MutableSymbolTable symbolTable = createSymbolTable();
545
        Compiler compiler = createCompiler();
546
        Interpreter interpreter = createInterpreter(symbolTable);
547
        compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(false);
548

    
549
        symbolTable.setVar(
550
          "PARCELA", 
551
          (AttributeHandler) (String key) -> StringUtils.equalsIgnoreCase(key, "MASA")? "100":null
552
        );
553
        String source = "PARCELA.MASA" ;
554
        
555
        Code code = compiler.compileExpression(source);
556
        assertEquals("GETATTR(\"PARCELA\", 'MASA')", code.toString());
557
        
558
        Object v = interpreter.run(code);
559
        assertEquals("100", (String)v);
560
    }
561

    
562
    public void testDict1() {
563
        MutableSymbolTable symbolTable = createSymbolTable();
564
        Compiler compiler = createCompiler();
565
        Interpreter interpreter = createInterpreter(symbolTable);
566

    
567
        String source = "dict()" ;
568
        
569
        Code code = compiler.compileExpression(source);
570
        assertEquals("dict()", code.toString());
571
        
572
        Object v = interpreter.run(code);
573
        assertTrue("Map expected", v instanceof Map);
574
        assertEquals(0, ((Map)v).size());
575
    }
576

    
577
    public void testDict2() {
578
        MutableSymbolTable symbolTable = createSymbolTable();
579
        Compiler compiler = createCompiler();
580
        Interpreter interpreter = createInterpreter(symbolTable);
581

    
582
        String source = "dict(diez=10, veinte:20)" ;
583
        
584
        Code code = compiler.compileExpression(source);
585
        assertEquals("DICT('diez', 10, 'veinte', 20)", code.toString());
586
        
587
        Object v = interpreter.run(code);
588
        assertTrue("Map expected", v instanceof Map);
589
        assertEquals(2, ((Map)v).size());
590
        assertEquals(10, ((Number)((Map)v).get("diez")).intValue());
591
        assertEquals(20, ((Number)((Map)v).get("veinte")).intValue());
592
    }
593

    
594
    public void testDict3() {
595
        MutableSymbolTable symbolTable = createSymbolTable();
596
        Compiler compiler = createCompiler();
597
        Interpreter interpreter = createInterpreter(symbolTable);
598

    
599
        String source = "dict('diez', 10, 'veinte', 20)" ;
600
        
601
        Code code = compiler.compileExpression(source);
602
        assertEquals("dict('diez', 10, 'veinte', 20)", code.toString());
603
        
604
        Object v = interpreter.run(code);
605
        assertTrue("Map expected", v instanceof Map);
606
        assertEquals(2, ((Map)v).size());
607
        assertEquals(10, ((Number)((Map)v).get("diez")).intValue());
608
        assertEquals(20, ((Number)((Map)v).get("veinte")).intValue());
609
    }
610

    
611
    public void testStrOfInt() {
612
        SymbolTable symbolTable = createSymbolTable();
613
        Compiler compiler = createCompiler();
614
        Interpreter interpreter = createInterpreter(symbolTable);
615
        
616
        String source = "STR(10)";
617

    
618
        Code code = compiler.compileExpression(source);
619
        Object v = interpreter.run(code);
620
        assertEquals("10", (String)v);
621
    }
622

    
623
    public void testStrOfDouble() {
624
        SymbolTable symbolTable = createSymbolTable();
625
        Compiler compiler = createCompiler();
626
        Interpreter interpreter = createInterpreter(symbolTable);
627
        
628
        String source = "STR(10.1)";
629

    
630
        Code code = compiler.compileExpression(source);
631
        Object v = interpreter.run(code);
632
        assertEquals("10.1", (String)v);
633
    }
634

    
635
    public void testStrOfArray() {
636
        SymbolTable symbolTable = createSymbolTable();
637
        Compiler compiler = createCompiler();
638
        Interpreter interpreter = createInterpreter(symbolTable);
639
        
640
        String source = "STR([ 10, 20.1, 'adios' ])";
641

    
642
        Code code = compiler.compileExpression(source);
643
        Object v = interpreter.run(code);
644
        assertEquals("[10, 20.1, adios]", v);
645
    }
646

    
647
    public void testStrOfList() {
648
        SymbolTable symbolTable = createSymbolTable();
649
        Compiler compiler = createCompiler();
650
        Interpreter interpreter = createInterpreter(symbolTable);
651
        
652
        String source = "STR(LIST(10, [2,20.1], 'adios'))";
653

    
654
        Code code = compiler.compileExpression(source);
655
        Object v = interpreter.run(code);
656
        assertEquals("[10, [2, 20.1], adios]", v);
657
    }
658

    
659
    public void testSymbolTableGetName() {
660
        SymbolTable symbolTable = createSymbolTable();
661
        Compiler compiler = createCompiler();
662
        Interpreter interpreter = createInterpreter(symbolTable);
663
        
664
        String source = "$symboltable.SQL.getName()";
665

    
666
        Code code = compiler.compileExpression(source);
667
        Object v = interpreter.run(code);
668
        assertEquals("SQL", v);
669
    }
670

    
671
    public void testListAppend() {
672
        String source =  "list().add(10)";
673

    
674
        SymbolTable symbolTable = createSymbolTable();
675
        Compiler compiler = createCompiler();
676
        Interpreter interpreter = createInterpreter(symbolTable);
677
        
678
        Code code = compiler.compileExpression(source);
679
        Object v = interpreter.run(code);
680
        assertEquals( true, v);
681
    }
682
    
683
    public void testListSet() {
684
        String source =  "list(1,2,3).set(1,20)";
685

    
686
        SymbolTable symbolTable = createSymbolTable();
687
        Compiler compiler = createCompiler();
688
        Interpreter interpreter = createInterpreter(symbolTable);
689
        
690
        Code code = compiler.compileExpression(source);
691
        Object v = interpreter.run(code);
692
        assertEquals( 2, v);
693
    }    
694
    
695
}