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 | } |