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 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
    public void testNotTrue() {
100
        String source = "not true";
101
102
        Compiler compiler = createCompiler();
103
        Code code = compiler.compileExpression(source);
104 44139 jjdelcerro
        assertEquals("NOT(TRUE)", code.toString());
105 43512 jjdelcerro
    }
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 44198 jjdelcerro
        assertEquals("(\"precio\" "+ operatorName + " 23)", code.toString());
121 43512 jjdelcerro
    }
122
123
    public void testOperators() {
124
125
        operator("=");
126
        operator("<>");
127
        operator(">");
128
        operator(">=");
129
        operator("<");
130
        operator("<=");
131 44139 jjdelcerro
        operator("LIKE");
132
        operator("ILIKE");
133
        operator("||");
134 43512 jjdelcerro
        operator("+");
135
        operator("-");
136
        operator("*");
137 44139 jjdelcerro
        operator("OR");
138
        operator("AND");
139 43512 jjdelcerro
        operator("%");
140 44139 jjdelcerro
        operator("IS");
141
142
        operator("~");
143 43512 jjdelcerro
    }
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 44198 jjdelcerro
        assertEquals("(((\"precio\" + (10 * 2)) + 20) + 30)", code.toString());
152 43512 jjdelcerro
    }
153
154 43519 jjdelcerro
    public void testAddMulPar() {
155
        String source = "(precio + 10) * 2 + 20 + 30";
156
157
        Compiler compiler = createCompiler();
158
159
        Code code = compiler.compileExpression(source);
160 44198 jjdelcerro
        assertEquals("((((\"precio\" + 10) * 2) + 20) + 30)", code.toString());
161 43519 jjdelcerro
    }
162 43512 jjdelcerro
163 43519 jjdelcerro
    public void testAbs() {
164
        String source = "precio + abs(10)";
165
166
        Compiler compiler = createCompiler();
167
168
        Code code = compiler.compileExpression(source);
169 44198 jjdelcerro
        assertEquals("(\"precio\" + abs(10))", code.toString());
170 43519 jjdelcerro
    }
171
172
    public void testAbs2() {
173
        String source = "precio + abs(-10)";
174
175
        Compiler compiler = createCompiler();
176
177
        Code code = compiler.compileExpression(source);
178 44198 jjdelcerro
        assertEquals("(\"precio\" + abs(-(10)))", code.toString());
179 43519 jjdelcerro
    }
180
181
    public void testPI() {
182
        String source = "precio + PI()";
183
184
        Compiler compiler = createCompiler();
185
186
        Code code = compiler.compileExpression(source);
187 44198 jjdelcerro
        assertEquals("(\"precio\" + PI())", code.toString());
188 43519 jjdelcerro
    }
189
190
    public void testCeil() {
191
        String source = "precio + CEIL(PI())";
192
193
        Compiler compiler = createCompiler();
194
195
        Code code = compiler.compileExpression(source);
196 44198 jjdelcerro
        assertEquals("(\"precio\" + CEIL(PI()))", code.toString());
197 43519 jjdelcerro
    }
198
199 44139 jjdelcerro
    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 43519 jjdelcerro
    public void testConcat() {
209
        String source = "CONCAT(precio,' euros')";
210
211
        Compiler compiler = createCompiler();
212
213
        Code code = compiler.compileExpression(source);
214 44006 jjdelcerro
        assertEquals("CONCAT(\"precio\", ' euros')", code.toString());
215 43519 jjdelcerro
    }
216
217 43521 jjdelcerro
    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 44198 jjdelcerro
        assertEquals("(\"NOMBRE03\" = 'Torre d''En Besora (la)')", code.toString());
224 43521 jjdelcerro
    }
225
226
    public void test2() {
227 44139 jjdelcerro
        Compiler compiler = createCompiler();
228
        compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true);
229
230 43521 jjdelcerro
        String source = "[1990] = 0.168873933773767";
231
232
        Code code = compiler.compileExpression(source);
233 44198 jjdelcerro
        assertEquals("(\"1990\" = 0.168873933773767)", code.toString());
234 43521 jjdelcerro
    }
235 43532 jjdelcerro
236
    public void test2fields() {
237 44139 jjdelcerro
        Compiler compiler = createCompiler();
238
        compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true);
239
240 43532 jjdelcerro
        String source = "[1990] = [precio]";
241
242
        Code code = compiler.compileExpression(source);
243 44198 jjdelcerro
        assertEquals("(\"1990\" = \"precio\")", code.toString());
244 43532 jjdelcerro
    }
245 43521 jjdelcerro
246 43989 jjdelcerro
247
    public void testInvokeFunction1() {
248
        String source = "ST_Area(GEOMETRY)";
249
250
        Compiler compiler = createCompiler();
251
252
        Code code = compiler.compileExpression(source);
253 44006 jjdelcerro
        assertEquals("ST_Area(\"GEOMETRY\")", code.toString());
254 43989 jjdelcerro
    }
255
256 43939 jjdelcerro
    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 43983 jjdelcerro
        String source = "'hola'.indexOf('l')    ";
268 43939 jjdelcerro
269
        Compiler compiler = createCompiler();
270
271
        Code code = compiler.compileExpression(source);
272
        assertEquals("'hola'->indexOf('l')", code.toString());
273
    }
274 43983 jjdelcerro
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 43512 jjdelcerro
}