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
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
import org.gvsig.expressionevaluator.ExpressionSyntaxException;
10
import org.gvsig.expressionevaluator.impl.ExpressionEvaluatorImplLibrary;
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 ExpressionEvaluatorImplLibrary().initialize();
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
    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
        assertEquals("[precio]", code.toString());
51
    }
52

    
53
    public void testIdentifier2() {
54
        String source = "[precio]";
55

    
56
        Compiler compiler = createCompiler();
57
        Code code = compiler.compileExpression(source);
58
        assertEquals("[precio]", code.toString());
59
    }
60

    
61
    public void testIdentifier3() {
62
        String source = "\"precio\"";
63

    
64
        Compiler compiler = createCompiler();
65
        Code code = compiler.compileExpression(source);
66
        assertEquals("[precio]", code.toString());
67
    }
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
        assertEquals(operatorName+"([precio], 23)", code.toString());
116
    }
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
        assertEquals("+(+(+([precio], *(10, 2)), 20), 30)", code.toString());
145
    }
146
    
147
    public void testAddMulPar() {
148
        String source = "(precio + 10) * 2 + 20 + 30";
149

    
150
        Compiler compiler = createCompiler();
151
        
152
        Code code = compiler.compileExpression(source);
153
        assertEquals("+(+(*(+([precio], 10), 2), 20), 30)", code.toString());
154
    }
155
    
156
    public void testAbs() {
157
        String source = "precio + abs(10)";
158

    
159
        Compiler compiler = createCompiler();
160
        
161
        Code code = compiler.compileExpression(source);
162
        assertEquals("+([precio], abs(10))", code.toString());
163
    }
164
    
165
    public void testAbs2() {
166
        String source = "precio + abs(-10)";
167

    
168
        Compiler compiler = createCompiler();
169
        
170
        Code code = compiler.compileExpression(source);
171
        assertEquals("+([precio], abs(-10))", code.toString());
172
    }
173
    
174
    public void testPI() {
175
        String source = "precio + PI()";
176

    
177
        Compiler compiler = createCompiler();
178
        
179
        Code code = compiler.compileExpression(source);
180
        assertEquals("+([precio], PI())", code.toString());
181
    }
182
    
183
    public void testCeil() {
184
        String source = "precio + CEIL(PI())";
185

    
186
        Compiler compiler = createCompiler();
187
        
188
        Code code = compiler.compileExpression(source);
189
        assertEquals("+([precio], CEIL(PI()))", code.toString());
190
    }
191
    
192
    public void testConcat() {
193
        String source = "CONCAT(precio,' euros')";
194

    
195
        Compiler compiler = createCompiler();
196
        
197
        Code code = compiler.compileExpression(source);
198
        assertEquals("CONCAT([precio], ' euros')", code.toString());
199
    }
200
    
201
    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

    
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
    
228
    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
        String source = "'hola'.indexOf('l')    ";
240
        
241
        Compiler compiler = createCompiler();
242
        
243
        Code code = compiler.compileExpression(source);
244
        assertEquals("'hola'->indexOf('l')", code.toString());
245
    }
246

    
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
}