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 / TestGrammarCompiler.java @ 44592

History | View | Annotate | Download (11.6 KB)

1 44139 jjdelcerro
package org.gvsig.expresionevaluator.impl;
2
3
import junit.framework.TestCase;
4
import org.gvsig.expressionevaluator.Code;
5
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
6
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
7
import org.gvsig.expressionevaluator.Interpreter;
8
import org.gvsig.expressionevaluator.LexicalAnalyzer;
9
import org.gvsig.expressionevaluator.SymbolTable;
10
import org.gvsig.expressionevaluator.Compiler;
11
import org.gvsig.expressionevaluator.MutableSymbolTable;
12
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
13
14
/**
15
 *
16
 * @author jjdelcerro
17
 */
18
public class TestGrammarCompiler extends TestCase {
19
20
    public TestGrammarCompiler(String testName) {
21
        super(testName);
22
    }
23
24
    @Override
25
    protected void setUp() throws Exception {
26
        super.setUp();
27
        new DefaultLibrariesInitializer().fullInitialize();
28
    }
29
30
    @Override
31
    protected void tearDown() throws Exception {
32
        super.tearDown();
33
    }
34
35
    // TODO add test methods here. The name must begin with 'test'. For example:
36
    // public void testHello() {}
37
38
    protected LexicalAnalyzer createLexicalAnalyzer() {
39
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
40
        LexicalAnalyzer lexer = manager.createLexicalAnalyzer();
41
        return lexer;
42
    }
43
44
    protected org.gvsig.expressionevaluator.Compiler createCompiler() {
45
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
46
        Compiler compiler = manager.createCompiler();
47
        compiler.setLexicalAnalyzer(createLexicalAnalyzer());
48
        return compiler;
49
    }
50
51
    protected SymbolTable createSymbolTable() {
52
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
53
        MutableSymbolTable symbolTable = manager.createSymbolTable();
54
        symbolTable.setVar("precio", 200);
55
        symbolTable.setVar("1990", 0.168873933773767);
56
        return symbolTable;
57
    }
58
59
    protected Interpreter createInterpreter(SymbolTable symbolTable) {
60
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
61
        Interpreter interpreter = manager.createInterpreter();
62
        interpreter.setSymbolTable(symbolTable);
63
        return interpreter;
64
    }
65
66
    public void testLet() {
67
        String source = "LET V1 = 23";
68
69
        Compiler compiler = createCompiler();
70
71
        Code code = compiler.compileExpression(source);
72
        assertEquals("LET('V1', 23)", code.toString());
73
    }
74
75
    public void testBlock() {
76 44379 jjdelcerro
        String source = "BEGIN LET V1 = 23; END";
77 44139 jjdelcerro
78
        Compiler compiler = createCompiler();
79
80
        Code code = compiler.compileExpression(source);
81
        assertEquals("BLOCK(LET('V1', 23))", code.toString());
82
    }
83
84 44384 jjdelcerro
    public void testBlockExcept() {
85
        String source = "BEGIN LET V1 = 23; EXCEPT NULL; END";
86
87
        Compiler compiler = createCompiler();
88
89
        Code code = compiler.compileExpression(source);
90
        assertEquals("BLOCK_EXCEPT(LET('V1', 23), NULL)", code.toString());
91
    }
92
93 44139 jjdelcerro
    public void testBlock2() {
94 44379 jjdelcerro
        String source = "BEGIN LET V1 = 11; LET V2 = 22;  END";
95 44139 jjdelcerro
96
        Compiler compiler = createCompiler();
97
98
        Code code = compiler.compileExpression(source);
99
        assertEquals("BLOCK(LET('V1', 11), LET('V2', 22))", code.toString());
100
    }
101
102 44384 jjdelcerro
    public void testBlockExcept2() {
103
        String source = "BEGIN LET V1 = 11; LET V2 = 22; EXCEPT -1; END";
104
105
        Compiler compiler = createCompiler();
106
107
        Code code = compiler.compileExpression(source);
108
        assertEquals("BLOCK_EXCEPT(LET('V1', 11), LET('V2', 22), -1)", code.toString());
109
    }
110
111 44139 jjdelcerro
    public void testBlock3() {
112
        Compiler compiler = createCompiler();
113
114
        String source = "BEGIN LET V1 = 11; LET V2 = 22;  END";
115
        Code code = compiler.compileExpression(source);
116
        assertEquals("BLOCK(LET('V1', 11), LET('V2', 22))", code.toString());
117
118
        source = "BEGIN LET V1 = 11;; LET V2 = 22;;;  END";
119
        code = compiler.compileExpression(source);
120
        assertEquals("BLOCK(LET('V1', 11), LET('V2', 22))", code.toString());
121
    }
122
123
    public void testIfThen() {
124 44379 jjdelcerro
        String source = "IF V1 = 11 THEN LET V2 = 22; END IF";
125 44139 jjdelcerro
126
        Compiler compiler = createCompiler();
127
128
        Code code = compiler.compileExpression(source);
129 44592 jjdelcerro
        assertEquals("IFF((\"V1\" = 11), LET('V2', 22))", code.toString());
130 44139 jjdelcerro
    }
131
132
    public void testIfThenElse() {
133 44379 jjdelcerro
        String source = "IF V1 = 11 THEN LET V2 = 11; ELSE LET V2 = 22; END IF";
134 44139 jjdelcerro
135
        Compiler compiler = createCompiler();
136
137
        Code code = compiler.compileExpression(source);
138 44198 jjdelcerro
        assertEquals("IFF((\"V1\" = 11), LET('V2', 11), LET('V2', 22))", code.toString());
139 44139 jjdelcerro
    }
140
141
    public void testIfThenBlock() {
142 44379 jjdelcerro
        String source = "IF V1 = 11 THEN LET V2 = 22; LET V1 = 10; END IF";
143 44139 jjdelcerro
144
        Compiler compiler = createCompiler();
145
146
        Code code = compiler.compileExpression(source);
147 44592 jjdelcerro
        assertEquals("IFF((\"V1\" = 11), BLOCK(LET('V2', 22), LET('V1', 10)))", code.toString());
148 44139 jjdelcerro
    }
149
150
    public void testWhile() {
151 44379 jjdelcerro
        String source = "WHILE n < 10 BEGIN LET n = n + 1; END WHILE";
152 44139 jjdelcerro
153
        Compiler compiler = createCompiler();
154
155
        Code code = compiler.compileExpression(source);
156 44198 jjdelcerro
        assertEquals("WHILE((\"n\" < 10), LET('n', (\"n\" + 1)))", code.toString());
157 44139 jjdelcerro
    }
158
159
    public void testWhileBlock() {
160 44379 jjdelcerro
        String source = "WHILE n < 10 BEGIN LET n = n + 1; print(n); END WHILE";
161 44139 jjdelcerro
162
        Compiler compiler = createCompiler();
163
164
        Code code = compiler.compileExpression(source);
165 44198 jjdelcerro
        assertEquals("WHILE((\"n\" < 10), BLOCK(LET('n', (\"n\" + 1)), print(\"n\")))", code.toString());
166 44139 jjdelcerro
    }
167
168
    public void testCast() {
169
        String source = "CAST(V1 AS INTEGER)";
170
171
        Compiler compiler = createCompiler();
172
173
        Code code = compiler.compileExpression(source);
174
        assertEquals("CAST(\"V1\", 'INTEGER')", code.toString());
175
    }
176
177
    public void testCast2() {
178
        String source = "CAST V1 AS INTEGER";
179
180
        Compiler compiler = createCompiler();
181
182
        Code code = compiler.compileExpression(source);
183
        assertEquals("CAST(\"V1\", 'INTEGER')", code.toString());
184
    }
185
186
    public void testMatch() {
187
        Compiler compiler = createCompiler();
188
        String source;
189
        Code code;
190
191
        source = "MATCH 'Hola', '[Hh]ola'";
192
        code = compiler.compileExpression(source);
193
        assertEquals("~('Hola', '[Hh]ola')", code.toString());
194
195
        source = "MATCH 'Hola' '[Hh]ola'";
196
        code = compiler.compileExpression(source);
197
        assertEquals("~('Hola', '[Hh]ola')", code.toString());
198
199
        source = "MATCH('Hola', '[Hh]ola')";
200
        code = compiler.compileExpression(source);
201
        assertEquals("~('Hola', '[Hh]ola')", code.toString());
202
    }
203
204
    public void testForEach() {
205 44379 jjdelcerro
        String source = "FOR n in RANGE(10): print(n); END FOR";
206 44139 jjdelcerro
207
        Compiler compiler = createCompiler();
208
209
        Code code = compiler.compileExpression(source);
210
        assertEquals("FOREACH('n', RANGE(10), print(\"n\"))", code.toString());
211
    }
212
213
//    public void testFor() {
214
//        String source = "FOR LET n = 0 ; n < 10 ; LET n = n + 1 print(n)";
215
//
216
//        Compiler compiler = createCompiler();
217
//
218
//        Code code = compiler.compileExpression(source);
219
//        assertEquals("FOR(LET('n', 0), <(\"n\", 10), LET('n', +(\"n\", 1)), print(\"n\"))", code.toString());
220
//    }
221
222
    public void testCase() {
223 44379 jjdelcerro
        String source = "CASE WHEN software LIKE '%gvSIG%' THEN 'gvSIG'; ELSE 'Other'; END CASE"; // ;)
224 44139 jjdelcerro
225
        Compiler compiler = createCompiler();
226
227
        Code code = compiler.compileExpression(source);
228 44198 jjdelcerro
        assertEquals("CASE((\"software\" LIKE '%gvSIG%'), 'gvSIG', 'Other')", code.toString());
229 44139 jjdelcerro
    }
230
231
    public void testCase1() {
232 44379 jjdelcerro
        String source = "CASE WHEN software LIKE '%gvSIG%' THEN 'gvSIG'; ELSE 'Other'; END CASE"; // ;)
233 44139 jjdelcerro
234
        Compiler compiler = createCompiler();
235
236
        Code code = compiler.compileExpression(source);
237 44198 jjdelcerro
        assertEquals("CASE((\"software\" LIKE '%gvSIG%'), 'gvSIG', 'Other')", code.toString());
238 44139 jjdelcerro
    }
239
240
    public void testCase2() {
241 44379 jjdelcerro
        String source = "CASE WHEN Field_1 >= 75 AND Field_1 <=79 THEN 100; WHEN Field_1 >=80 AND Field_1 <=84 THEN 110; END CASE"; // ;)
242 44139 jjdelcerro
243
        Compiler compiler = createCompiler();
244
245
        Code code = compiler.compileExpression(source);
246 44592 jjdelcerro
        assertEquals("CASE(((\"Field_1\" >= 75) AND (\"Field_1\" <= 79)), ((\"Field_1\" >= 80) AND (\"Field_1\" <= 84)), 100, 110)", code.toString());
247 44139 jjdelcerro
    }
248
249
    public void testCase3() {
250 44379 jjdelcerro
        String source = "CASE WHEN Field_1 >= 75 AND Field_1 <=79 THEN 100; WHEN Field_1 >=80 AND Field_1 <=84 THEN 110; ELSE 120; END CASE"; // ;)
251 44139 jjdelcerro
252
        Compiler compiler = createCompiler();
253
254
        Code code = compiler.compileExpression(source);
255 44198 jjdelcerro
        assertEquals("CASE(((\"Field_1\" >= 75) AND (\"Field_1\" <= 79)), ((\"Field_1\" >= 80) AND (\"Field_1\" <= 84)), 100, 110, 120)", code.toString());
256 44139 jjdelcerro
    }
257
258
    public void testDef1() {
259 44533 jjdelcerro
        String source = "CREATE PROCEDURE test1 AS BEGIN print('Hola'); END PROCEDURE";
260 44139 jjdelcerro
261
        Compiler compiler = createCompiler();
262
263
        Code code = compiler.compileExpression(source);
264 44592 jjdelcerro
        assertEquals("CREATE_FUNCTION('test1', print('Hola'))", code.toString());
265 44139 jjdelcerro
    }
266
267
    public void testDef2() {
268 44533 jjdelcerro
        String source = "CREATE PROCEDURE test1 nombre AS BEGIN print('Hola '+nombre); END PROCEDURE";
269 44139 jjdelcerro
270
        Compiler compiler = createCompiler();
271
272
        Code code = compiler.compileExpression(source);
273 44592 jjdelcerro
        assertEquals("CREATE_FUNCTION('test1', LIST('nombre'), print(('Hola ' + \"nombre\")))", code.toString());
274 44139 jjdelcerro
    }
275
276
    public void testDef3() {
277 44533 jjdelcerro
        String source = "CREATE PROCEDURE test1 nombre AS BEGIN RETURN 'Hola '||nombre; END PROCEDURE";
278 44139 jjdelcerro
279
        Compiler compiler = createCompiler();
280
281
        Code code = compiler.compileExpression(source);
282 44592 jjdelcerro
        assertEquals("CREATE_FUNCTION('test1', LIST('nombre'), RETURN(('Hola ' || \"nombre\")))", code.toString());
283 44139 jjdelcerro
    }
284 44533 jjdelcerro
285
    public void testCreateFunctionExtern1() {
286 44592 jjdelcerro
        String source = "CREATE FUNCTION test1(nombre) AS 'addons/test/test', 'test1' LANGUAGE 'cosa'";
287 44139 jjdelcerro
288 44533 jjdelcerro
        Compiler compiler = createCompiler();
289
290
        Code code = compiler.compileExpression(source);
291 44592 jjdelcerro
        assertEquals("CREATE_FUNCTION('test1', LIST('nombre'), 'addons/test/test', 'test1', 'cosa')", code.toString());
292 44533 jjdelcerro
    }
293
294 44384 jjdelcerro
    public void testList() {
295
        String source = "set x TO LIST('hola','adios','fin')";
296
297
        Compiler compiler = createCompiler();
298
299
        Code code = compiler.compileExpression(source);
300
        assertEquals("LET('x', LIST('hola', 'adios', 'fin'))", code.toString());
301
    }
302
303
    public void testArray() {
304
        String source = "set x TO ARRAY['hola','adios','fin']";
305
306
        Compiler compiler = createCompiler();
307
308
        Code code = compiler.compileExpression(source);
309
        assertEquals("LET('x', LIST('hola', 'adios', 'fin'))", code.toString());
310
    }
311
312 44139 jjdelcerro
    public void testUseCase1() {
313 44379 jjdelcerro
        String source = "begin set x = ''; for n in list('hola','adios','fin'): let x = x || ' ' || n; end for; end";
314 44139 jjdelcerro
315
        Compiler compiler = createCompiler();
316
317
        Code code = compiler.compileExpression(source);
318 44198 jjdelcerro
        assertEquals("BLOCK(LET('x', ''), FOREACH('n', list('hola', 'adios', 'fin'), LET('x', ((\"x\" || ' ') || \"n\"))))", code.toString());
319 44139 jjdelcerro
    }
320
321
    public void testUseCase2() {
322 44379 jjdelcerro
        String source = "begin set s = ''; set x = LIST('hola','adios','fin'); FOR n in RANGE(3): set s = s || ' ' || x[n]; end for; end";
323 44139 jjdelcerro
324
        Compiler compiler = createCompiler();
325
326
        Code code = compiler.compileExpression(source);
327 44198 jjdelcerro
        assertEquals("BLOCK(LET('s', ''), LET('x', LIST('hola', 'adios', 'fin')), FOREACH('n', RANGE(3), LET('s', ((\"s\" || ' ') || GETITEM(\"x\", \"n\")))))", code.toString());
328 44139 jjdelcerro
    }
329
330
331
}