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