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

History | View | Annotate | Download (8.36 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 43939 jjdelcerro
import org.gvsig.expressionevaluator.impl.ExpressionEvaluatorImplLibrary;
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 43939 jjdelcerro
        new ExpressionEvaluatorImplLibrary().initialize();
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 43521 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 43521 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 43521 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 43521 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 43521 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 43521 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 43521 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 43521 jjdelcerro
        assertEquals("+([precio], abs(-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 43521 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 43521 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 43521 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
        assertEquals("=([NOMBRE03], 'Torre d'En Besora (la)')", code.toString());
208
    }
209
210
    public void test2() {
211
        String source = "[1990] = 0.168873933773767";
212
213
        Compiler compiler = createCompiler();
214
215
        Code code = compiler.compileExpression(source);
216
        assertEquals("=([1990], 0.168873933773767)", code.toString());
217
    }
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
        assertEquals("=([1990], [precio])", code.toString());
226
    }
227 43521 jjdelcerro
228 43939 jjdelcerro
    public void testInvokeMethod1() {
229
        String source = "'hola'.length()";
230
231
        Compiler compiler = createCompiler();
232
233
        Code code = compiler.compileExpression(source);
234
        assertEquals("'hola'->length()", code.toString());
235
    }
236
237
238
    public void testInvokeMethod2() {
239 43983 jjdelcerro
        String source = "'hola'.indexOf('l')    ";
240 43939 jjdelcerro
241
        Compiler compiler = createCompiler();
242
243
        Code code = compiler.compileExpression(source);
244
        assertEquals("'hola'->indexOf('l')", code.toString());
245
    }
246 43983 jjdelcerro
247
    public void testSyntaxError1() {
248
        Compiler compiler = createCompiler();
249
        String source;
250
251
        source = "3 + (2*)";
252
        try {
253
            compiler.compileExpression(source);
254
            assertTrue("A syntax exception should have been thrown compiling '"+source+"'.", false);
255
        } catch(ExpressionSyntaxException ex) {
256
            // Ok
257
        }
258
        source = "3 + 2*";
259
        try {
260
            compiler.compileExpression(source);
261
            assertTrue("A syntax exception should have been thrown compiling '"+source+"'.", false);
262
        } catch(ExpressionSyntaxException ex) {
263
            // Ok
264
        }
265
        source = "3 + (2*2))";
266
        try {
267
            compiler.compileExpression(source);
268
            assertTrue("A syntax exception should have been thrown compiling '"+source+"'.", false);
269
        } catch(ExpressionSyntaxException ex) {
270
            // Ok
271
        }
272
        source = "3 and or 2";
273
        try {
274
            compiler.compileExpression(source);
275
            assertTrue("A syntax exception should have been thrown compiling '"+source+"'.", false);
276
        } catch(ExpressionSyntaxException ex) {
277
            // Ok
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
    }
287 43512 jjdelcerro
}