Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.library / org.gvsig.expressionevaluator / org.gvsig.expressionevaluator.geometry / org.gvsig.expressionevaluator.geometry.lib / org.gvsig.expressionevaluator.geometry.lib.impl / src / test / java / org / gvsig / expresionevaluator / impl / TestCompiler.java @ 44644

History | View | Annotate | Download (12.8 KB)

1
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
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
8
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
9
import org.gvsig.expressionevaluator.ExpressionSyntaxException;
10
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
11

    
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
        new DefaultLibrariesInitializer().fullInitialize();
23
    }
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
    
34
    protected LexicalAnalyzer createLexicalAnalyzer() {
35
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
36
        LexicalAnalyzer lexer = manager.createLexicalAnalyzer();
37
        return lexer;
38
    }
39

    
40
    protected org.gvsig.expressionevaluator.Compiler createCompiler() {
41
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
42
        Compiler compiler = manager.createCompiler();
43
        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
        assertEquals("\"precio\"", code.toString());
53
    }
54

    
55
    public void testIdentifier2() {
56
        Compiler compiler = createCompiler();
57
        compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true);
58

    
59
        String source = "[precio]";
60

    
61
        Code code = compiler.compileExpression(source);
62
        assertEquals("\"precio\"", code.toString());
63
    }
64

    
65
    public void testIdentifier3() {
66
        Compiler compiler = createCompiler();
67

    
68
        String source = "\"precio\"";
69

    
70
        Code code = compiler.compileExpression(source);
71
        assertEquals("\"precio\"", code.toString());
72
    }
73

    
74

    
75
    public void testTrue() {
76
        String source = "true";
77

    
78
        Compiler compiler = createCompiler();
79
        Code code = compiler.compileExpression(source);
80
        assertEquals("TRUE", code.toString());
81
    }
82

    
83
    public void testFalse() {
84
        String source = "false";
85

    
86
        Compiler compiler = createCompiler();
87
        Code code = compiler.compileExpression(source);
88
        assertEquals("FALSE", code.toString());
89
    }
90

    
91
    public void testNull() {
92
        String source = "null";
93

    
94
        Compiler compiler = createCompiler();
95
        Code code = compiler.compileExpression(source);
96
        assertEquals("NULL", code.toString());
97
    }
98

    
99
    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
    public void testNotTrue() {
116
        String source = "not true";
117

    
118
        Compiler compiler = createCompiler();
119
        Code code = compiler.compileExpression(source);
120
        assertEquals("NOT(TRUE)", code.toString());
121
    }
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
        assertEquals("(\"precio\" "+ operatorName + " 23)", code.toString());
137
    }
138
    
139
    public void testOperators() {
140

    
141
        operator("=");
142
        operator("<>");
143
        operator(">");
144
        operator(">=");
145
        operator("<");
146
        operator("<=");
147
        operator("LIKE");
148
        operator("ILIKE");
149
        operator("||");
150
        operator("+");
151
        operator("-");
152
        operator("*");
153
        operator("OR");
154
        operator("AND");
155
        operator("%");
156
        operator("IS");
157

    
158
        operator("~");
159
    }
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
        assertEquals("(((\"precio\" + (10 * 2)) + 20) + 30)", code.toString());
168
    }
169
    
170
    public void testAddMulPar() {
171
        String source = "(precio + 10) * 2 + 20 + 30";
172

    
173
        Compiler compiler = createCompiler();
174
        
175
        Code code = compiler.compileExpression(source);
176
        assertEquals("((((\"precio\" + 10) * 2) + 20) + 30)", code.toString());
177
    }
178
    
179
    public void testAbs() {
180
        String source = "precio + abs(10)";
181

    
182
        Compiler compiler = createCompiler();
183
        
184
        Code code = compiler.compileExpression(source);
185
        assertEquals("(\"precio\" + abs(10))", code.toString());
186
    }
187
    
188
    public void testAbs2() {
189
        String source = "precio + abs(-10)";
190

    
191
        Compiler compiler = createCompiler();
192
        
193
        Code code = compiler.compileExpression(source);
194
        assertEquals("(\"precio\" + abs(-10))", code.toString());
195
    }
196
    
197
    public void testPI() {
198
        String source = "precio + PI()";
199

    
200
        Compiler compiler = createCompiler();
201
        
202
        Code code = compiler.compileExpression(source);
203
        assertEquals("(\"precio\" + PI())", code.toString());
204
    }
205
    
206
    public void testCeil() {
207
        String source = "precio + CEIL(PI())";
208

    
209
        Compiler compiler = createCompiler();
210
        
211
        Code code = compiler.compileExpression(source);
212
        assertEquals("(\"precio\" + CEIL(PI()))", code.toString());
213
    }
214
    
215
    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
    public void testConcat() {
225
        String source = "CONCAT(precio,' euros')";
226

    
227
        Compiler compiler = createCompiler();
228
        
229
        Code code = compiler.compileExpression(source);
230
        assertEquals("CONCAT(\"precio\", ' euros')", code.toString());
231
    }
232
    
233
    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
        assertEquals("(\"NOMBRE03\" = 'Torre d''En Besora (la)')", code.toString());
240
    }
241
    
242
    public void test2() {
243
        Compiler compiler = createCompiler();
244
        compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true);
245

    
246
        String source = "[1990] = 0.168873933773767";
247

    
248
        Code code = compiler.compileExpression(source);
249
        assertEquals("(\"1990\" = 0.168873933773767)", code.toString());
250
    }
251

    
252
    public void test2fields() {
253
        Compiler compiler = createCompiler();
254
        compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true);
255

    
256
        String source = "[1990] = [precio]";
257

    
258
        Code code = compiler.compileExpression(source);
259
        assertEquals("(\"1990\" = \"precio\")", code.toString());
260
    }
261
    
262
    
263
    public void testInvokeFunction1() {
264
        String source = "ST_Area(GEOMETRY)";
265

    
266
        Compiler compiler = createCompiler();
267
        
268
        Code code = compiler.compileExpression(source);
269
        assertEquals("ST_Area(\"GEOMETRY\")", code.toString());
270
    }
271

    
272
    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
        String source = "'hola'.indexOf('l')    ";
284
        
285
        Compiler compiler = createCompiler();
286
        
287
        Code code = compiler.compileExpression(source);
288
        assertEquals("'hola'->indexOf('l')", code.toString());
289
    }
290

    
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

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