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 / TestCompiler.java @ 44622

History | View | Annotate | Download (12.8 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.Code;
7 44139 jjdelcerro
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
8
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
9 43983 jjdelcerro
import org.gvsig.expressionevaluator.ExpressionSyntaxException;
10 44098 jjdelcerro
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
11 43512 jjdelcerro
12
13
public class TestCompiler extends TestCase {
14
15
    public TestCompiler(String testName) {
16
        super(testName);
17
    }
18
19
    @Override
20
    protected void setUp() throws Exception {
21
        super.setUp();
22 44098 jjdelcerro
        new DefaultLibrariesInitializer().fullInitialize();
23 43512 jjdelcerro
    }
24
25
    @Override
26
    protected void tearDown() throws Exception {
27
        super.tearDown();
28
    }
29
30
    // TODO add test methods here. The name must begin with 'test'. For example:
31
    // public void testHello() {}
32
33 44139 jjdelcerro
34 43512 jjdelcerro
    protected LexicalAnalyzer createLexicalAnalyzer() {
35 44139 jjdelcerro
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
36
        LexicalAnalyzer lexer = manager.createLexicalAnalyzer();
37 43512 jjdelcerro
        return lexer;
38
    }
39 44139 jjdelcerro
40
    protected org.gvsig.expressionevaluator.Compiler createCompiler() {
41
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
42
        Compiler compiler = manager.createCompiler();
43 43512 jjdelcerro
        compiler.setLexicalAnalyzer(createLexicalAnalyzer());
44
        return compiler;
45
    }
46
47
    public void testIdentifier1() {
48
        String source = "precio";
49
50
        Compiler compiler = createCompiler();
51
        Code code = compiler.compileExpression(source);
52 44006 jjdelcerro
        assertEquals("\"precio\"", code.toString());
53 43512 jjdelcerro
    }
54
55
    public void testIdentifier2() {
56 44139 jjdelcerro
        Compiler compiler = createCompiler();
57
        compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true);
58
59 43512 jjdelcerro
        String source = "[precio]";
60
61
        Code code = compiler.compileExpression(source);
62 44006 jjdelcerro
        assertEquals("\"precio\"", code.toString());
63 43512 jjdelcerro
    }
64
65
    public void testIdentifier3() {
66 44139 jjdelcerro
        Compiler compiler = createCompiler();
67
68 43512 jjdelcerro
        String source = "\"precio\"";
69
70
        Code code = compiler.compileExpression(source);
71 44006 jjdelcerro
        assertEquals("\"precio\"", code.toString());
72 43512 jjdelcerro
    }
73
74
75
    public void testTrue() {
76
        String source = "true";
77
78
        Compiler compiler = createCompiler();
79
        Code code = compiler.compileExpression(source);
80 44139 jjdelcerro
        assertEquals("TRUE", code.toString());
81 43512 jjdelcerro
    }
82
83
    public void testFalse() {
84
        String source = "false";
85
86
        Compiler compiler = createCompiler();
87
        Code code = compiler.compileExpression(source);
88 44139 jjdelcerro
        assertEquals("FALSE", code.toString());
89 43512 jjdelcerro
    }
90
91
    public void testNull() {
92
        String source = "null";
93
94
        Compiler compiler = createCompiler();
95
        Code code = compiler.compileExpression(source);
96 44139 jjdelcerro
        assertEquals("NULL", code.toString());
97 43512 jjdelcerro
    }
98
99 44384 jjdelcerro
    public void testIsNull() {
100
        String source = "10 is null";
101
102
        Compiler compiler = createCompiler();
103
        Code code = compiler.compileExpression(source);
104
        assertEquals("(10 IS NULL)", code.toString());
105
    }
106
107
    public void testIsNotNull() {
108
        String source = "10 is not null";
109
110
        Compiler compiler = createCompiler();
111
        Code code = compiler.compileExpression(source);
112
        assertEquals("NOT((10 IS NULL))", code.toString());
113
    }
114
115 43512 jjdelcerro
    public void testNotTrue() {
116
        String source = "not true";
117
118
        Compiler compiler = createCompiler();
119
        Code code = compiler.compileExpression(source);
120 44139 jjdelcerro
        assertEquals("NOT(TRUE)", code.toString());
121 43512 jjdelcerro
    }
122
123
    public void testInteger() {
124
        String source = "23";
125
126
        Compiler compiler = createCompiler();
127
        Code code = compiler.compileExpression(source);
128
        assertEquals("23", code.toString());
129
    }
130
131
    public void operator(String operatorName) {
132
        String source = "precio " + operatorName + " 23";
133
134
        Compiler compiler = createCompiler();
135
        Code code = compiler.compileExpression(source);
136 44198 jjdelcerro
        assertEquals("(\"precio\" "+ operatorName + " 23)", code.toString());
137 43512 jjdelcerro
    }
138
139
    public void testOperators() {
140
141
        operator("=");
142
        operator("<>");
143
        operator(">");
144
        operator(">=");
145
        operator("<");
146
        operator("<=");
147 44139 jjdelcerro
        operator("LIKE");
148
        operator("ILIKE");
149
        operator("||");
150 43512 jjdelcerro
        operator("+");
151
        operator("-");
152
        operator("*");
153 44139 jjdelcerro
        operator("OR");
154
        operator("AND");
155 43512 jjdelcerro
        operator("%");
156 44139 jjdelcerro
        operator("IS");
157
158
        operator("~");
159 43512 jjdelcerro
    }
160
161
    public void testAddMul() {
162
        String source = "precio + 10 * 2 + 20 + 30";
163
164
        Compiler compiler = createCompiler();
165
166
        Code code = compiler.compileExpression(source);
167 44198 jjdelcerro
        assertEquals("(((\"precio\" + (10 * 2)) + 20) + 30)", code.toString());
168 43512 jjdelcerro
    }
169
170 43519 jjdelcerro
    public void testAddMulPar() {
171
        String source = "(precio + 10) * 2 + 20 + 30";
172
173
        Compiler compiler = createCompiler();
174
175
        Code code = compiler.compileExpression(source);
176 44198 jjdelcerro
        assertEquals("((((\"precio\" + 10) * 2) + 20) + 30)", code.toString());
177 43519 jjdelcerro
    }
178 43512 jjdelcerro
179 43519 jjdelcerro
    public void testAbs() {
180
        String source = "precio + abs(10)";
181
182
        Compiler compiler = createCompiler();
183
184
        Code code = compiler.compileExpression(source);
185 44198 jjdelcerro
        assertEquals("(\"precio\" + abs(10))", code.toString());
186 43519 jjdelcerro
    }
187
188
    public void testAbs2() {
189
        String source = "precio + abs(-10)";
190
191
        Compiler compiler = createCompiler();
192
193
        Code code = compiler.compileExpression(source);
194 44211 jjdelcerro
        assertEquals("(\"precio\" + abs(-10))", code.toString());
195 43519 jjdelcerro
    }
196
197
    public void testPI() {
198
        String source = "precio + PI()";
199
200
        Compiler compiler = createCompiler();
201
202
        Code code = compiler.compileExpression(source);
203 44198 jjdelcerro
        assertEquals("(\"precio\" + PI())", code.toString());
204 43519 jjdelcerro
    }
205
206
    public void testCeil() {
207
        String source = "precio + CEIL(PI())";
208
209
        Compiler compiler = createCompiler();
210
211
        Code code = compiler.compileExpression(source);
212 44198 jjdelcerro
        assertEquals("(\"precio\" + CEIL(PI()))", code.toString());
213 43519 jjdelcerro
    }
214
215 44139 jjdelcerro
    public void testGetitem1() {
216
        String source = "LIST('uno','dos','tres')[1]" ;
217
218
        Compiler compiler = createCompiler();
219
220
        Code code = compiler.compileExpression(source);
221
        assertEquals("GETITEM(LIST('uno', 'dos', 'tres'), 1)", code.toString());
222
    }
223
224 43519 jjdelcerro
    public void testConcat() {
225
        String source = "CONCAT(precio,' euros')";
226
227
        Compiler compiler = createCompiler();
228
229
        Code code = compiler.compileExpression(source);
230 44006 jjdelcerro
        assertEquals("CONCAT(\"precio\", ' euros')", code.toString());
231 43519 jjdelcerro
    }
232
233 43521 jjdelcerro
    public void test1() {
234
        String source = "NOMBRE03 = 'Torre d''En Besora (la)'";
235
236
        Compiler compiler = createCompiler();
237
238
        Code code = compiler.compileExpression(source);
239 44198 jjdelcerro
        assertEquals("(\"NOMBRE03\" = 'Torre d''En Besora (la)')", code.toString());
240 43521 jjdelcerro
    }
241
242
    public void test2() {
243 44139 jjdelcerro
        Compiler compiler = createCompiler();
244
        compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true);
245
246 43521 jjdelcerro
        String source = "[1990] = 0.168873933773767";
247
248
        Code code = compiler.compileExpression(source);
249 44198 jjdelcerro
        assertEquals("(\"1990\" = 0.168873933773767)", code.toString());
250 43521 jjdelcerro
    }
251 43532 jjdelcerro
252
    public void test2fields() {
253 44139 jjdelcerro
        Compiler compiler = createCompiler();
254
        compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true);
255
256 43532 jjdelcerro
        String source = "[1990] = [precio]";
257
258
        Code code = compiler.compileExpression(source);
259 44198 jjdelcerro
        assertEquals("(\"1990\" = \"precio\")", code.toString());
260 43532 jjdelcerro
    }
261 43521 jjdelcerro
262 43989 jjdelcerro
263
    public void testInvokeFunction1() {
264
        String source = "ST_Area(GEOMETRY)";
265
266
        Compiler compiler = createCompiler();
267
268
        Code code = compiler.compileExpression(source);
269 44006 jjdelcerro
        assertEquals("ST_Area(\"GEOMETRY\")", code.toString());
270 43989 jjdelcerro
    }
271
272 43939 jjdelcerro
    public void testInvokeMethod1() {
273
        String source = "'hola'.length()";
274
275
        Compiler compiler = createCompiler();
276
277
        Code code = compiler.compileExpression(source);
278
        assertEquals("'hola'->length()", code.toString());
279
    }
280
281
282
    public void testInvokeMethod2() {
283 43983 jjdelcerro
        String source = "'hola'.indexOf('l')    ";
284 43939 jjdelcerro
285
        Compiler compiler = createCompiler();
286
287
        Code code = compiler.compileExpression(source);
288
        assertEquals("'hola'->indexOf('l')", code.toString());
289
    }
290 43983 jjdelcerro
291
    public void testSyntaxError1() {
292
        Compiler compiler = createCompiler();
293
        String source;
294
295
        source = "3 + (2*)";
296
        try {
297
            compiler.compileExpression(source);
298
            assertTrue("A syntax exception should have been thrown compiling '"+source+"'.", false);
299
        } catch(ExpressionSyntaxException ex) {
300
            // Ok
301
        }
302
        source = "3 + 2*";
303
        try {
304
            compiler.compileExpression(source);
305
            assertTrue("A syntax exception should have been thrown compiling '"+source+"'.", false);
306
        } catch(ExpressionSyntaxException ex) {
307
            // Ok
308
        }
309
        source = "3 + (2*2))";
310
        try {
311
            compiler.compileExpression(source);
312
            assertTrue("A syntax exception should have been thrown compiling '"+source+"'.", false);
313
        } catch(ExpressionSyntaxException ex) {
314
            // Ok
315
        }
316
        source = "3 and or 2";
317
        try {
318
            compiler.compileExpression(source);
319
            assertTrue("A syntax exception should have been thrown compiling '"+source+"'.", false);
320
        } catch(ExpressionSyntaxException ex) {
321
            // Ok
322
        }
323
        source = "3*/2";
324
        try {
325
            compiler.compileExpression(source);
326
            assertTrue("A syntax exception should have been thrown compiling '"+source+"'.", false);
327
        } catch(ExpressionSyntaxException ex) {
328
            // Ok
329
        }
330
    }
331 44210 jjdelcerro
332
    public void testInvokeFunction2paramters1() {
333
        String source = "LEFT('NOMBRE', 2)";
334
335
        Compiler compiler = createCompiler();
336
337
        Code code = compiler.compileExpression(source);
338
        assertEquals("LEFT('NOMBRE', 2)", code.toString());
339
    }
340
341
    public void testInvokeFunction2paramters2() {
342
        String source = "LEFT('NOMBRE',2)";
343
344
        Compiler compiler = createCompiler();
345
346
        Code code = compiler.compileExpression(source);
347
        assertEquals("LEFT('NOMBRE', 2)", code.toString());
348
    }
349
350
    public void testInvokeFunction3paramters1() {
351
        String source = "MID('NOMBRE', 2, 2)";
352
353
        Compiler compiler = createCompiler();
354
355
        Code code = compiler.compileExpression(source);
356
        assertEquals("MID('NOMBRE', 2, 2)", code.toString());
357
    }
358
359
    public void testInvokeFunction3paramters2() {
360
        String source = "MID('NOMBRE', 2,2)";
361
362
        Compiler compiler = createCompiler();
363
364
        Code code = compiler.compileExpression(source);
365
        assertEquals("MID('NOMBRE', 2, 2)", code.toString());
366
    }
367
368 44211 jjdelcerro
    public void testDecimal1() {
369
        String source = "23.1";
370
371
        Compiler compiler = createCompiler();
372
        Code code = compiler.compileExpression(source);
373
        assertEquals("23.1", code.toString());
374
    }
375
376
    public void testDecimal2() {
377
        String source = "23,1";
378
379
        Compiler compiler = createCompiler();
380
        try {
381
            Code code = compiler.compileExpression(source);
382
            fail("I expected 23,1 to be erroneous.");
383
        } catch(ExpressionSyntaxException ex) {
384
            // This is OK.
385
        }
386
    }
387
    public void testDecimal3() {
388
        String source = "1.23E4";
389
390
        Compiler compiler = createCompiler();
391
        Code code = compiler.compileExpression(source);
392
        assertEquals("12300", code.toString());
393
    }
394
395
    public void testDecimal4() {
396
        String source = "1.23E-2";
397
398
        Compiler compiler = createCompiler();
399
        Code code = compiler.compileExpression(source);
400
        assertEquals("0.0123", code.toString());
401
    }
402
403
    public void testDecimal5() {
404
        String source = "1.23E-4";
405
406
        Compiler compiler = createCompiler();
407
        Code code = compiler.compileExpression(source);
408
        assertEquals("1.23E-4", code.toString());
409
    }
410
411
    public void testDecimal6() {
412
        String source = "-23.1";
413
414
        Compiler compiler = createCompiler();
415
        Code code = compiler.compileExpression(source);
416
        assertEquals("-23.1", code.toString());
417
    }
418
419
    public void testDecimal7() {
420
        String source = "-1.23E-2";
421
422
        Compiler compiler = createCompiler();
423
        Code code = compiler.compileExpression(source);
424
        assertEquals("-0.0123", code.toString());
425
    }
426
427
    public void testDecimal8() {
428
        String source = "-1.23E-4";
429
430
        Compiler compiler = createCompiler();
431
        Code code = compiler.compileExpression(source);
432
        assertEquals("-1.23E-4", code.toString());
433
    }
434
435
436 43512 jjdelcerro
}