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

History | View | Annotate | Download (15.2 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
    public void testTrue() {
89
        SymbolTable symbolTable = createSymbolTable();
90
        Compiler compiler = createCompiler();
91
        Interpreter interpreter = createInterpreter(symbolTable);
92
93 44139 jjdelcerro
        String source = "true";
94
95 43512 jjdelcerro
        Code code = compiler.compileExpression(source);
96
        assertEquals(Boolean.TRUE, interpreter.run(code));
97
    }
98
99
    public void testFalse() {
100
        SymbolTable symbolTable = createSymbolTable();
101
        Compiler compiler = createCompiler();
102
        Interpreter interpreter = createInterpreter(symbolTable);
103
104 44139 jjdelcerro
        String source = "false";
105
106 43512 jjdelcerro
        Code code = compiler.compileExpression(source);
107
        assertEquals(Boolean.FALSE, interpreter.run(code));
108
    }
109
110
    public void testNull() {
111
        SymbolTable symbolTable = createSymbolTable();
112
        Compiler compiler = createCompiler();
113
        Interpreter interpreter = createInterpreter(symbolTable);
114
115 44139 jjdelcerro
        String source = "null";
116
117 43512 jjdelcerro
        Code code = compiler.compileExpression(source);
118
        assertEquals(null, interpreter.run(code));
119
    }
120
121
    public void testAdd1() {
122
        SymbolTable symbolTable = createSymbolTable();
123
        Compiler compiler = createCompiler();
124
        Interpreter interpreter = createInterpreter(symbolTable);
125
126 44139 jjdelcerro
        String source = "precio + 10";
127
128 43512 jjdelcerro
        Code code = compiler.compileExpression(source);
129
        Object v = interpreter.run(code);
130
        assertEquals(210, ((Number)v).intValue());
131
    }
132
133 44098 jjdelcerro
    public void testSimpleAdd1() {
134
        SymbolTable symbolTable = createSymbolTable();
135
        Compiler compiler = createCompiler();
136
        Interpreter interpreter = createInterpreter(symbolTable);
137
138 44139 jjdelcerro
        String source = "5+10";
139
140 44098 jjdelcerro
        Code code = compiler.compileExpression(source);
141
        Object v = interpreter.run(code);
142
        assertEquals(15, ((Number)v).intValue());
143
    }
144
145
    public void testSimpleAdd2() {
146
        SymbolTable symbolTable = createSymbolTable();
147
        Compiler compiler = createCompiler();
148
        Interpreter interpreter = createInterpreter(symbolTable);
149
150 44139 jjdelcerro
        String source = "5 + 10";
151
152 44098 jjdelcerro
        Code code = compiler.compileExpression(source);
153
        Object v = interpreter.run(code);
154
        assertEquals(15, ((Number)v).intValue());
155
    }
156
157
    public void testSimpleAdd3() {
158
        SymbolTable symbolTable = createSymbolTable();
159
        Compiler compiler = createCompiler();
160
        Interpreter interpreter = createInterpreter(symbolTable);
161
162 44139 jjdelcerro
        String source = "10+-5";
163
164 44098 jjdelcerro
        Code code = compiler.compileExpression(source);
165
        Object v = interpreter.run(code);
166
        assertEquals(5, ((Number)v).intValue());
167
    }
168
169
    public void testSimpleSub1() {
170
        SymbolTable symbolTable = createSymbolTable();
171
        Compiler compiler = createCompiler();
172
        Interpreter interpreter = createInterpreter(symbolTable);
173
174 44139 jjdelcerro
        String source = "10-5";
175
176 44098 jjdelcerro
        Code code = compiler.compileExpression(source);
177
        Object v = interpreter.run(code);
178
        assertEquals(5, ((Number)v).intValue());
179
    }
180
181
    public void testSimpleSub2() {
182
        SymbolTable symbolTable = createSymbolTable();
183
        Compiler compiler = createCompiler();
184
        Interpreter interpreter = createInterpreter(symbolTable);
185
186 44139 jjdelcerro
        String source = "10 - 5";
187
188 44098 jjdelcerro
        Code code = compiler.compileExpression(source);
189
        Object v = interpreter.run(code);
190
        assertEquals(5, ((Number)v).intValue());
191
    }
192
193
    public void testSimpleNumber() {
194
        SymbolTable symbolTable = createSymbolTable();
195
        Compiler compiler = createCompiler();
196
        Interpreter interpreter = createInterpreter(symbolTable);
197
198 44139 jjdelcerro
        String source = "23";
199
200 44098 jjdelcerro
        Code code = compiler.compileExpression(source);
201
        Object v = interpreter.run(code);
202
        assertEquals(23, ((Number)v).intValue());
203
    }
204
205
    public void testSimpleNegativeNumber() {
206
        SymbolTable symbolTable = createSymbolTable();
207
        Compiler compiler = createCompiler();
208
        Interpreter interpreter = createInterpreter(symbolTable);
209
210 44139 jjdelcerro
        String source = "-23";
211
212 44098 jjdelcerro
        Code code = compiler.compileExpression(source);
213
        Object v = interpreter.run(code);
214
        assertEquals(-23, ((Number)v).intValue());
215
    }
216
217
    public void testNegateFunction() {
218
        SymbolTable symbolTable = createSymbolTable();
219
        Compiler compiler = createCompiler();
220
        Interpreter interpreter = createInterpreter(symbolTable);
221
222 44139 jjdelcerro
        String source = "-PI()";
223
224 44098 jjdelcerro
        Code code = compiler.compileExpression(source);
225
        Object v = interpreter.run(code);
226
        assertEquals(-Math.PI, ((Number)v).doubleValue());
227
    }
228
229 43512 jjdelcerro
    public void testSub1() {
230
        SymbolTable symbolTable = createSymbolTable();
231
        Compiler compiler = createCompiler();
232
        Interpreter interpreter = createInterpreter(symbolTable);
233
234 44139 jjdelcerro
        String source = "precio - 10";
235
236 43512 jjdelcerro
        Code code = compiler.compileExpression(source);
237
        Object v = interpreter.run(code);
238
        assertEquals(190, ((Number)v).intValue());
239
    }
240
241
    public void testMul1() {
242
        SymbolTable symbolTable = createSymbolTable();
243
        Compiler compiler = createCompiler();
244
        Interpreter interpreter = createInterpreter(symbolTable);
245
246 44139 jjdelcerro
        String source = "precio * 10";
247
248 43512 jjdelcerro
        Code code = compiler.compileExpression(source);
249
        Object v = interpreter.run(code);
250
        assertEquals(2000, ((Number)v).intValue());
251
    }
252
253
    public void testDiv1() {
254
        SymbolTable symbolTable = createSymbolTable();
255
        Compiler compiler = createCompiler();
256
        Interpreter interpreter = createInterpreter(symbolTable);
257
258 44139 jjdelcerro
        String source = "precio / 10";
259
260 43512 jjdelcerro
        Code code = compiler.compileExpression(source);
261
        Object v = interpreter.run(code);
262
        assertEquals(20, ((Number)v).intValue());
263
    }
264
265
    public void testAdd2() {
266
        SymbolTable symbolTable = createSymbolTable();
267
        Compiler compiler = createCompiler();
268
        Interpreter interpreter = createInterpreter(symbolTable);
269
270 44139 jjdelcerro
        String source = "precio + 10 + 20 + 30";
271
272 43512 jjdelcerro
        Code code = compiler.compileExpression(source);
273
        Object v = interpreter.run(code);
274
        assertEquals(260, ((Number)v).intValue());
275
    }
276
277
    public void testAddMul() {
278
        SymbolTable symbolTable = createSymbolTable();
279
        Compiler compiler = createCompiler();
280
        Interpreter interpreter = createInterpreter(symbolTable);
281
282 44139 jjdelcerro
        String source = "precio + 10 * 2 + 20 + 30";
283
284 43512 jjdelcerro
        Code code = compiler.compileExpression(source);
285
        Object v = interpreter.run(code);
286
        assertEquals(270, ((Number)v).intValue());
287
    }
288
289 43519 jjdelcerro
    public void testAddMulPar() {
290
        SymbolTable symbolTable = createSymbolTable();
291
        Compiler compiler = createCompiler();
292
        Interpreter interpreter = createInterpreter(symbolTable);
293
294 44139 jjdelcerro
        String source = "(precio + 10) * 2 + 20 + 30";
295
296 43519 jjdelcerro
        Code code = compiler.compileExpression(source);
297
        Object v = interpreter.run(code);
298
        assertEquals(470, ((Number)v).intValue());
299
    }
300
301
    public void testAbs() {
302
        SymbolTable symbolTable = createSymbolTable();
303
        Compiler compiler = createCompiler();
304
        Interpreter interpreter = createInterpreter(symbolTable);
305
306 44139 jjdelcerro
        String source = "precio + abs(10)";
307
308 43519 jjdelcerro
        Code code = compiler.compileExpression(source);
309
        Object v = interpreter.run(code);
310
        assertEquals(210, ((Number)v).intValue());
311
    }
312
313
    public void testAbs2() {
314
        SymbolTable symbolTable = createSymbolTable();
315
        Compiler compiler = createCompiler();
316
        Interpreter interpreter = createInterpreter(symbolTable);
317
318 44139 jjdelcerro
        String source = "precio + abs(-10)";
319
320 43519 jjdelcerro
        Code code = compiler.compileExpression(source);
321
        Object v = interpreter.run(code);
322
        assertEquals(210, ((Number)v).intValue());
323
    }
324
325
    public void testCeil() {
326
        SymbolTable symbolTable = createSymbolTable();
327
        Compiler compiler = createCompiler();
328
        Interpreter interpreter = createInterpreter(symbolTable);
329
330 44139 jjdelcerro
        String source = "precio + CEIL(PI())";
331
332 43519 jjdelcerro
        Code code = compiler.compileExpression(source);
333
        Object v = interpreter.run(code);
334
        assertEquals(204, ((Number)v).intValue());
335
    }
336
337
    public void testConcat() {
338
        SymbolTable symbolTable = createSymbolTable();
339
        Compiler compiler = createCompiler();
340
        Interpreter interpreter = createInterpreter(symbolTable);
341
342 44139 jjdelcerro
        String source = "CONCAT(precio,' euros')";
343
344 43519 jjdelcerro
        Code code = compiler.compileExpression(source);
345
        Object v = interpreter.run(code);
346
        assertEquals("200 euros", (String)v);
347
    }
348 43521 jjdelcerro
349
    public void testAccuracy() {
350
351
        SymbolTable symbolTable = createSymbolTable();
352
        Compiler compiler = createCompiler();
353
        Interpreter interpreter = createInterpreter(symbolTable);
354
        Code code;
355
        Object v;
356
357 44139 jjdelcerro
        compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true);
358
359 43521 jjdelcerro
        code = compiler.compileExpression("[1990] = 0.168873933773767");
360
        v = interpreter.run(code);
361
        assertEquals(true, ((Boolean)v).booleanValue());
362
363
        code = compiler.compileExpression("[1990] = 0.1688739");
364
        v = interpreter.run(code);
365
        assertEquals(false, ((Boolean)v).booleanValue());
366
367
        interpreter.setAccuracy(0.0000001);
368
        v = interpreter.run(code);
369
        assertEquals(true, ((Boolean)v).booleanValue());
370 43532 jjdelcerro
    }
371
372
    public void test2fields() {
373
        SymbolTable symbolTable = createSymbolTable();
374
        Compiler compiler = createCompiler();
375
        Interpreter interpreter = createInterpreter(symbolTable);
376
377 44139 jjdelcerro
        compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true);
378
379
        String source = "[1990] = [precio]";
380
381
        compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true);
382 43532 jjdelcerro
        Code code = compiler.compileExpression(source);
383
        Object v = interpreter.run(code);
384
        assertEquals(false, ((Boolean)v).booleanValue());
385 43939 jjdelcerro
    }
386
387
388
    public void testInvokeMethod1() {
389
        SymbolTable symbolTable = createSymbolTable();
390
        Compiler compiler = createCompiler();
391
        Interpreter interpreter = createInterpreter(symbolTable);
392
393 44139 jjdelcerro
        String source = "'hola'.length()";
394
395 43939 jjdelcerro
        Code code = compiler.compileExpression(source);
396
        Object v = interpreter.run(code);
397
398
        assertEquals(4, ((Number)v).intValue());
399
    }
400
401
402
    public void testInvokeMethod2() {
403 44139 jjdelcerro
        SymbolTable symbolTable = createSymbolTable();
404
        Compiler compiler = createCompiler();
405
        Interpreter interpreter = createInterpreter(symbolTable);
406
407 43939 jjdelcerro
        String source = "'hola'.indexOf('l')";
408
409 44139 jjdelcerro
        Code code = compiler.compileExpression(source);
410
        Object v = interpreter.run(code);
411
412
        assertEquals(2, ((Number)v).intValue());
413
    }
414
415
    public void testAlias() {
416 43939 jjdelcerro
        SymbolTable symbolTable = createSymbolTable();
417
        Compiler compiler = createCompiler();
418
        Interpreter interpreter = createInterpreter(symbolTable);
419
420 44139 jjdelcerro
        String source = "UPPER('hola')";
421 43939 jjdelcerro
        Code code = compiler.compileExpression(source);
422
        Object v = interpreter.run(code);
423 44139 jjdelcerro
        assertEquals("HOLA", (String)v);
424 43939 jjdelcerro
425 44139 jjdelcerro
426
        source = "UCASE('hola')";
427
        code = compiler.compileExpression(source);
428
        v = interpreter.run(code);
429
        assertEquals("HOLA", (String)v);
430 43939 jjdelcerro
    }
431 44139 jjdelcerro
432
    public void testRegexp1() {
433
        SymbolTable symbolTable = createSymbolTable();
434
        Compiler compiler = createCompiler();
435
        Interpreter interpreter = createInterpreter(symbolTable);
436
437
        String source = "'Hola' ~ '[Hh]ola'" ;
438
        Code code = compiler.compileExpression(source);
439
        Object v = interpreter.run(code);
440
        assertTrue((Boolean)v);
441
    }
442 43939 jjdelcerro
443 44139 jjdelcerro
    public void testGetitem1() {
444
        SymbolTable symbolTable = createSymbolTable();
445
        Compiler compiler = createCompiler();
446
        Interpreter interpreter = createInterpreter(symbolTable);
447
        compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(false);
448
449
        String source = "LIST('uno','dos','tres')[1]" ;
450
451
        Code code = compiler.compileExpression(source);
452
        Object v = interpreter.run(code);
453
        assertEquals("dos", (String)v);
454
    }
455 43939 jjdelcerro
456
}