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

History | View | Annotate | Download (9.38 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 testNotTrue() {
100
        String source = "not true";
101

    
102
        Compiler compiler = createCompiler();
103
        Code code = compiler.compileExpression(source);
104
        assertEquals("NOT(TRUE)", code.toString());
105
    }
106

    
107
    public void testInteger() {
108
        String source = "23";
109

    
110
        Compiler compiler = createCompiler();
111
        Code code = compiler.compileExpression(source);
112
        assertEquals("23", code.toString());
113
    }
114

    
115
    public void operator(String operatorName) {
116
        String source = "precio " + operatorName + " 23";
117

    
118
        Compiler compiler = createCompiler();
119
        Code code = compiler.compileExpression(source);
120
        assertEquals("(\"precio\" "+ operatorName + " 23)", code.toString());
121
    }
122
    
123
    public void testOperators() {
124

    
125
        operator("=");
126
        operator("<>");
127
        operator(">");
128
        operator(">=");
129
        operator("<");
130
        operator("<=");
131
        operator("LIKE");
132
        operator("ILIKE");
133
        operator("||");
134
        operator("+");
135
        operator("-");
136
        operator("*");
137
        operator("OR");
138
        operator("AND");
139
        operator("%");
140
        operator("IS");
141

    
142
        operator("~");
143
    }
144

    
145
    public void testAddMul() {
146
        String source = "precio + 10 * 2 + 20 + 30";
147

    
148
        Compiler compiler = createCompiler();
149
        
150
        Code code = compiler.compileExpression(source);
151
        assertEquals("(((\"precio\" + (10 * 2)) + 20) + 30)", code.toString());
152
    }
153
    
154
    public void testAddMulPar() {
155
        String source = "(precio + 10) * 2 + 20 + 30";
156

    
157
        Compiler compiler = createCompiler();
158
        
159
        Code code = compiler.compileExpression(source);
160
        assertEquals("((((\"precio\" + 10) * 2) + 20) + 30)", code.toString());
161
    }
162
    
163
    public void testAbs() {
164
        String source = "precio + abs(10)";
165

    
166
        Compiler compiler = createCompiler();
167
        
168
        Code code = compiler.compileExpression(source);
169
        assertEquals("(\"precio\" + abs(10))", code.toString());
170
    }
171
    
172
    public void testAbs2() {
173
        String source = "precio + abs(-10)";
174

    
175
        Compiler compiler = createCompiler();
176
        
177
        Code code = compiler.compileExpression(source);
178
        assertEquals("(\"precio\" + abs(-(10)))", code.toString());
179
    }
180
    
181
    public void testPI() {
182
        String source = "precio + PI()";
183

    
184
        Compiler compiler = createCompiler();
185
        
186
        Code code = compiler.compileExpression(source);
187
        assertEquals("(\"precio\" + PI())", code.toString());
188
    }
189
    
190
    public void testCeil() {
191
        String source = "precio + CEIL(PI())";
192

    
193
        Compiler compiler = createCompiler();
194
        
195
        Code code = compiler.compileExpression(source);
196
        assertEquals("(\"precio\" + CEIL(PI()))", code.toString());
197
    }
198
    
199
    public void testGetitem1() {
200
        String source = "LIST('uno','dos','tres')[1]" ;
201

    
202
        Compiler compiler = createCompiler();
203
        
204
        Code code = compiler.compileExpression(source);
205
        assertEquals("GETITEM(LIST('uno', 'dos', 'tres'), 1)", code.toString());
206
    }
207
    
208
    public void testConcat() {
209
        String source = "CONCAT(precio,' euros')";
210

    
211
        Compiler compiler = createCompiler();
212
        
213
        Code code = compiler.compileExpression(source);
214
        assertEquals("CONCAT(\"precio\", ' euros')", code.toString());
215
    }
216
    
217
    public void test1() {
218
        String source = "NOMBRE03 = 'Torre d''En Besora (la)'";
219

    
220
        Compiler compiler = createCompiler();
221
        
222
        Code code = compiler.compileExpression(source);
223
        assertEquals("(\"NOMBRE03\" = 'Torre d''En Besora (la)')", code.toString());
224
    }
225
    
226
    public void test2() {
227
        Compiler compiler = createCompiler();
228
        compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true);
229

    
230
        String source = "[1990] = 0.168873933773767";
231

    
232
        Code code = compiler.compileExpression(source);
233
        assertEquals("(\"1990\" = 0.168873933773767)", code.toString());
234
    }
235

    
236
    public void test2fields() {
237
        Compiler compiler = createCompiler();
238
        compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true);
239

    
240
        String source = "[1990] = [precio]";
241

    
242
        Code code = compiler.compileExpression(source);
243
        assertEquals("(\"1990\" = \"precio\")", code.toString());
244
    }
245
    
246
    
247
    public void testInvokeFunction1() {
248
        String source = "ST_Area(GEOMETRY)";
249

    
250
        Compiler compiler = createCompiler();
251
        
252
        Code code = compiler.compileExpression(source);
253
        assertEquals("ST_Area(\"GEOMETRY\")", code.toString());
254
    }
255

    
256
    public void testInvokeMethod1() {
257
        String source = "'hola'.length()";
258

    
259
        Compiler compiler = createCompiler();
260
        
261
        Code code = compiler.compileExpression(source);
262
        assertEquals("'hola'->length()", code.toString());
263
    }
264
    
265
    
266
    public void testInvokeMethod2() {
267
        String source = "'hola'.indexOf('l')    ";
268
        
269
        Compiler compiler = createCompiler();
270
        
271
        Code code = compiler.compileExpression(source);
272
        assertEquals("'hola'->indexOf('l')", code.toString());
273
    }
274

    
275
    public void testSyntaxError1() {
276
        Compiler compiler = createCompiler();
277
        String source;
278
        
279
        source = "3 + (2*)";
280
        try {
281
            compiler.compileExpression(source);
282
            assertTrue("A syntax exception should have been thrown compiling '"+source+"'.", false);
283
        } catch(ExpressionSyntaxException ex) {
284
            // Ok
285
        }
286
        source = "3 + 2*";
287
        try {
288
            compiler.compileExpression(source);
289
            assertTrue("A syntax exception should have been thrown compiling '"+source+"'.", false);
290
        } catch(ExpressionSyntaxException ex) {
291
            // Ok
292
        }
293
        source = "3 + (2*2))";
294
        try {
295
            compiler.compileExpression(source);
296
            assertTrue("A syntax exception should have been thrown compiling '"+source+"'.", false);
297
        } catch(ExpressionSyntaxException ex) {
298
            // Ok
299
        }
300
        source = "3 and or 2";
301
        try {
302
            compiler.compileExpression(source);
303
            assertTrue("A syntax exception should have been thrown compiling '"+source+"'.", false);
304
        } catch(ExpressionSyntaxException ex) {
305
            // Ok
306
        }
307
        source = "3*/2";
308
        try {
309
            compiler.compileExpression(source);
310
            assertTrue("A syntax exception should have been thrown compiling '"+source+"'.", false);
311
        } catch(ExpressionSyntaxException ex) {
312
            // Ok
313
        }
314
    }
315
}