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

History | View | Annotate | Download (8.66 KB)

1 43512 jjdelcerro
package org.gvsig.expresionevaluator.impl;
2
3
import org.gvsig.expressionevaluator.impl.SQLLexicalAnalyzer;
4
import org.gvsig.expressionevaluator.impl.DefaultCompiler;
5
import junit.framework.TestCase;
6
import org.gvsig.expressionevaluator.LexicalAnalyzer;
7
import org.gvsig.expressionevaluator.Compiler;
8
import org.gvsig.expressionevaluator.Code;
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
    protected LexicalAnalyzer createLexicalAnalyzer() {
34
        SQLLexicalAnalyzer lexer = new SQLLexicalAnalyzer();
35
        return lexer;
36
    }
37
38
    protected Compiler createCompiler() {
39
        Compiler compiler = new DefaultCompiler();
40
        compiler.setLexicalAnalyzer(createLexicalAnalyzer());
41
        return compiler;
42
    }
43
44
45
    public void testIdentifier1() {
46
        String source = "precio";
47
48
        Compiler compiler = createCompiler();
49
        Code code = compiler.compileExpression(source);
50 44006 jjdelcerro
        assertEquals("\"precio\"", code.toString());
51 43512 jjdelcerro
    }
52
53
    public void testIdentifier2() {
54
        String source = "[precio]";
55
56
        Compiler compiler = createCompiler();
57
        Code code = compiler.compileExpression(source);
58 44006 jjdelcerro
        assertEquals("\"precio\"", code.toString());
59 43512 jjdelcerro
    }
60
61
    public void testIdentifier3() {
62
        String source = "\"precio\"";
63
64
        Compiler compiler = createCompiler();
65
        Code code = compiler.compileExpression(source);
66 44006 jjdelcerro
        assertEquals("\"precio\"", code.toString());
67 43512 jjdelcerro
    }
68
69
70
    public void testTrue() {
71
        String source = "true";
72
73
        Compiler compiler = createCompiler();
74
        Code code = compiler.compileExpression(source);
75
        assertEquals("true", code.toString());
76
    }
77
78
    public void testFalse() {
79
        String source = "false";
80
81
        Compiler compiler = createCompiler();
82
        Code code = compiler.compileExpression(source);
83
        assertEquals("false", code.toString());
84
    }
85
86
    public void testNull() {
87
        String source = "null";
88
89
        Compiler compiler = createCompiler();
90
        Code code = compiler.compileExpression(source);
91
        assertEquals("null", code.toString());
92
    }
93
94
    public void testNotTrue() {
95
        String source = "not true";
96
97
        Compiler compiler = createCompiler();
98
        Code code = compiler.compileExpression(source);
99
        assertEquals("not(true)", code.toString());
100
    }
101
102
    public void testInteger() {
103
        String source = "23";
104
105
        Compiler compiler = createCompiler();
106
        Code code = compiler.compileExpression(source);
107
        assertEquals("23", code.toString());
108
    }
109
110
    public void operator(String operatorName) {
111
        String source = "precio " + operatorName + " 23";
112
113
        Compiler compiler = createCompiler();
114
        Code code = compiler.compileExpression(source);
115 44006 jjdelcerro
        assertEquals(operatorName+"(\"precio\", 23)", code.toString());
116 43512 jjdelcerro
    }
117
118
    public void testOperators() {
119
120
        operator("=");
121
        operator("<>");
122
        operator(">");
123
        operator(">=");
124
        operator("<");
125
        operator("<=");
126
        operator("like");
127
        operator("ilike");
128
        operator("+");
129
        operator("-");
130
        operator("*");
131
//        operator("^");
132
        operator("or");
133
        operator("and");
134
        operator("%");
135
        operator("is");
136
    }
137
138
    public void testAddMul() {
139
        String source = "precio + 10 * 2 + 20 + 30";
140
141
        Compiler compiler = createCompiler();
142
143
        Code code = compiler.compileExpression(source);
144 44006 jjdelcerro
        assertEquals("+(+(+(\"precio\", *(10, 2)), 20), 30)", code.toString());
145 43512 jjdelcerro
    }
146
147 43519 jjdelcerro
    public void testAddMulPar() {
148
        String source = "(precio + 10) * 2 + 20 + 30";
149
150
        Compiler compiler = createCompiler();
151
152
        Code code = compiler.compileExpression(source);
153 44006 jjdelcerro
        assertEquals("+(+(*(+(\"precio\", 10), 2), 20), 30)", code.toString());
154 43519 jjdelcerro
    }
155 43512 jjdelcerro
156 43519 jjdelcerro
    public void testAbs() {
157
        String source = "precio + abs(10)";
158
159
        Compiler compiler = createCompiler();
160
161
        Code code = compiler.compileExpression(source);
162 44006 jjdelcerro
        assertEquals("+(\"precio\", abs(10))", code.toString());
163 43519 jjdelcerro
    }
164
165
    public void testAbs2() {
166
        String source = "precio + abs(-10)";
167
168
        Compiler compiler = createCompiler();
169
170
        Code code = compiler.compileExpression(source);
171 44098 jjdelcerro
        assertEquals("+(\"precio\", abs(negate(10)))", code.toString());
172 43519 jjdelcerro
    }
173
174
    public void testPI() {
175
        String source = "precio + PI()";
176
177
        Compiler compiler = createCompiler();
178
179
        Code code = compiler.compileExpression(source);
180 44006 jjdelcerro
        assertEquals("+(\"precio\", PI())", code.toString());
181 43519 jjdelcerro
    }
182
183
    public void testCeil() {
184
        String source = "precio + CEIL(PI())";
185
186
        Compiler compiler = createCompiler();
187
188
        Code code = compiler.compileExpression(source);
189 44006 jjdelcerro
        assertEquals("+(\"precio\", CEIL(PI()))", code.toString());
190 43519 jjdelcerro
    }
191
192
    public void testConcat() {
193
        String source = "CONCAT(precio,' euros')";
194
195
        Compiler compiler = createCompiler();
196
197
        Code code = compiler.compileExpression(source);
198 44006 jjdelcerro
        assertEquals("CONCAT(\"precio\", ' euros')", code.toString());
199 43519 jjdelcerro
    }
200
201 43521 jjdelcerro
    public void test1() {
202
        String source = "NOMBRE03 = 'Torre d''En Besora (la)'";
203
204
        Compiler compiler = createCompiler();
205
206
        Code code = compiler.compileExpression(source);
207 44006 jjdelcerro
        assertEquals("=(\"NOMBRE03\", 'Torre d'En Besora (la)')", code.toString());
208 43521 jjdelcerro
    }
209
210
    public void test2() {
211
        String source = "[1990] = 0.168873933773767";
212
213
        Compiler compiler = createCompiler();
214
215
        Code code = compiler.compileExpression(source);
216 44006 jjdelcerro
        assertEquals("=(\"1990\", 0.168873933773767)", code.toString());
217 43521 jjdelcerro
    }
218 43532 jjdelcerro
219
    public void test2fields() {
220
        String source = "[1990] = [precio]";
221
222
        Compiler compiler = createCompiler();
223
224
        Code code = compiler.compileExpression(source);
225 44006 jjdelcerro
        assertEquals("=(\"1990\", \"precio\")", code.toString());
226 43532 jjdelcerro
    }
227 43521 jjdelcerro
228 43989 jjdelcerro
229
    public void testInvokeFunction1() {
230
        String source = "ST_Area(GEOMETRY)";
231
232
        Compiler compiler = createCompiler();
233
234
        Code code = compiler.compileExpression(source);
235 44006 jjdelcerro
        assertEquals("ST_Area(\"GEOMETRY\")", code.toString());
236 43989 jjdelcerro
    }
237
238 43939 jjdelcerro
    public void testInvokeMethod1() {
239
        String source = "'hola'.length()";
240
241
        Compiler compiler = createCompiler();
242
243
        Code code = compiler.compileExpression(source);
244
        assertEquals("'hola'->length()", code.toString());
245
    }
246
247
248
    public void testInvokeMethod2() {
249 43983 jjdelcerro
        String source = "'hola'.indexOf('l')    ";
250 43939 jjdelcerro
251
        Compiler compiler = createCompiler();
252
253
        Code code = compiler.compileExpression(source);
254
        assertEquals("'hola'->indexOf('l')", code.toString());
255
    }
256 43983 jjdelcerro
257
    public void testSyntaxError1() {
258
        Compiler compiler = createCompiler();
259
        String source;
260
261
        source = "3 + (2*)";
262
        try {
263
            compiler.compileExpression(source);
264
            assertTrue("A syntax exception should have been thrown compiling '"+source+"'.", false);
265
        } catch(ExpressionSyntaxException ex) {
266
            // Ok
267
        }
268
        source = "3 + 2*";
269
        try {
270
            compiler.compileExpression(source);
271
            assertTrue("A syntax exception should have been thrown compiling '"+source+"'.", false);
272
        } catch(ExpressionSyntaxException ex) {
273
            // Ok
274
        }
275
        source = "3 + (2*2))";
276
        try {
277
            compiler.compileExpression(source);
278
            assertTrue("A syntax exception should have been thrown compiling '"+source+"'.", false);
279
        } catch(ExpressionSyntaxException ex) {
280
            // Ok
281
        }
282
        source = "3 and or 2";
283
        try {
284
            compiler.compileExpression(source);
285
            assertTrue("A syntax exception should have been thrown compiling '"+source+"'.", false);
286
        } catch(ExpressionSyntaxException ex) {
287
            // Ok
288
        }
289
        source = "3*/2";
290
        try {
291
            compiler.compileExpression(source);
292
            assertTrue("A syntax exception should have been thrown compiling '"+source+"'.", false);
293
        } catch(ExpressionSyntaxException ex) {
294
            // Ok
295
        }
296
    }
297 43512 jjdelcerro
}