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

History | View | Annotate | Download (10.4 KB)

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