Revision 44139

View differences:

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
1 1
package org.gvsig.expresionevaluator.impl;
2 2

  
3
import org.gvsig.expressionevaluator.impl.SQLLexicalAnalyzer;
4
import org.gvsig.expressionevaluator.impl.DefaultCompiler;
5 3
import junit.framework.TestCase;
6 4
import org.gvsig.expressionevaluator.LexicalAnalyzer;
7 5
import org.gvsig.expressionevaluator.Compiler;
8 6
import org.gvsig.expressionevaluator.Code;
7
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
8
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
9 9
import org.gvsig.expressionevaluator.ExpressionSyntaxException;
10 10
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
11 11

  
......
30 30
    // TODO add test methods here. The name must begin with 'test'. For example:
31 31
    // public void testHello() {}
32 32

  
33
    
33 34
    protected LexicalAnalyzer createLexicalAnalyzer() {
34
        SQLLexicalAnalyzer lexer = new SQLLexicalAnalyzer();
35
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
36
        LexicalAnalyzer lexer = manager.createLexicalAnalyzer();
35 37
        return lexer;
36 38
    }
37
    
38
    protected Compiler createCompiler() {
39
        Compiler compiler = new DefaultCompiler();
39

  
40
    protected org.gvsig.expressionevaluator.Compiler createCompiler() {
41
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
42
        Compiler compiler = manager.createCompiler();
40 43
        compiler.setLexicalAnalyzer(createLexicalAnalyzer());
41 44
        return compiler;
42 45
    }
43 46
    
44
    
45 47
    public void testIdentifier1() {
46 48
        String source = "precio";
47 49

  
......
51 53
    }
52 54

  
53 55
    public void testIdentifier2() {
56
        Compiler compiler = createCompiler();
57
        compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true);
58

  
54 59
        String source = "[precio]";
55 60

  
56
        Compiler compiler = createCompiler();
57 61
        Code code = compiler.compileExpression(source);
58 62
        assertEquals("\"precio\"", code.toString());
59 63
    }
60 64

  
61 65
    public void testIdentifier3() {
66
        Compiler compiler = createCompiler();
67

  
62 68
        String source = "\"precio\"";
63 69

  
64
        Compiler compiler = createCompiler();
65 70
        Code code = compiler.compileExpression(source);
66 71
        assertEquals("\"precio\"", code.toString());
67 72
    }
......
72 77

  
73 78
        Compiler compiler = createCompiler();
74 79
        Code code = compiler.compileExpression(source);
75
        assertEquals("true", code.toString());
80
        assertEquals("TRUE", code.toString());
76 81
    }
77 82

  
78 83
    public void testFalse() {
......
80 85

  
81 86
        Compiler compiler = createCompiler();
82 87
        Code code = compiler.compileExpression(source);
83
        assertEquals("false", code.toString());
88
        assertEquals("FALSE", code.toString());
84 89
    }
85 90

  
86 91
    public void testNull() {
......
88 93

  
89 94
        Compiler compiler = createCompiler();
90 95
        Code code = compiler.compileExpression(source);
91
        assertEquals("null", code.toString());
96
        assertEquals("NULL", code.toString());
92 97
    }
93 98

  
94 99
    public void testNotTrue() {
......
96 101

  
97 102
        Compiler compiler = createCompiler();
98 103
        Code code = compiler.compileExpression(source);
99
        assertEquals("not(true)", code.toString());
104
        assertEquals("NOT(TRUE)", code.toString());
100 105
    }
101 106

  
102 107
    public void testInteger() {
......
123 128
        operator(">=");
124 129
        operator("<");
125 130
        operator("<=");
126
        operator("like");
127
        operator("ilike");
131
        operator("LIKE");
132
        operator("ILIKE");
133
        operator("||");
128 134
        operator("+");
129 135
        operator("-");
130 136
        operator("*");
131
//        operator("^");
132
        operator("or");
133
        operator("and");
137
        operator("OR");
138
        operator("AND");
134 139
        operator("%");
135
        operator("is");
140
        operator("IS");
141

  
142
        operator("~");
136 143
    }
137 144

  
138 145
    public void testAddMul() {
......
168 175
        Compiler compiler = createCompiler();
169 176
        
170 177
        Code code = compiler.compileExpression(source);
171
        assertEquals("+(\"precio\", abs(negate(10)))", code.toString());
178
        assertEquals("+(\"precio\", abs(NEGATE(10)))", code.toString());
172 179
    }
173 180
    
174 181
    public void testPI() {
......
189 196
        assertEquals("+(\"precio\", CEIL(PI()))", code.toString());
190 197
    }
191 198
    
199
    public void testGetitem1() {
200
        String source = "LIST('uno','dos','tres')[1]" ;
201

  
202
        Compiler compiler = createCompiler();
203
        
204
        Code code = compiler.compileExpression(source);
205
        assertEquals("GETITEM(LIST('uno', 'dos', 'tres'), 1)", code.toString());
206
    }
207
    
192 208
    public void testConcat() {
193 209
        String source = "CONCAT(precio,' euros')";
194 210

  
......
208 224
    }
209 225
    
210 226
    public void test2() {
227
        Compiler compiler = createCompiler();
228
        compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true);
229

  
211 230
        String source = "[1990] = 0.168873933773767";
212 231

  
213
        Compiler compiler = createCompiler();
214
        
215 232
        Code code = compiler.compileExpression(source);
216 233
        assertEquals("=(\"1990\", 0.168873933773767)", code.toString());
217 234
    }
218 235

  
219 236
    public void test2fields() {
237
        Compiler compiler = createCompiler();
238
        compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true);
239

  
220 240
        String source = "[1990] = [precio]";
221 241

  
222
        Compiler compiler = createCompiler();
223
        
224 242
        Code code = compiler.compileExpression(source);
225 243
        assertEquals("=(\"1990\", \"precio\")", code.toString());
226 244
    }
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/TestGrammarInterpreter.java
1
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 TestGrammarInterpreter extends TestCase {
20

  
21
    public TestGrammarInterpreter(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 MutableSymbolTable 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
        SymbolTable symbolTable = createSymbolTable();
69
        Compiler compiler = createCompiler();
70
        Interpreter interpreter = createInterpreter(symbolTable);
71

  
72
        String source = "LET V1 = 23";
73

  
74
        Code code = compiler.compileExpression(source);
75
        Object v = interpreter.run(code);
76
        
77
        assertEquals(23, symbolTable.value("V1"));
78
    }
79

  
80
    public void testBlock() {
81
        SymbolTable symbolTable = createSymbolTable();
82
        Compiler compiler = createCompiler();
83
        Interpreter interpreter = createInterpreter(symbolTable);
84

  
85
        String source = "BEGIN SET V1 = 23 END";
86
        Code code = compiler.compileExpression(source);
87
        Object v = interpreter.run(code);
88
        
89
        assertEquals(23, symbolTable.value("V1"));
90
    }
91

  
92
    public void testBlock2() {
93
        SymbolTable symbolTable = createSymbolTable();
94
        Compiler compiler = createCompiler();
95
        Interpreter interpreter = createInterpreter(symbolTable);
96

  
97
        String source = "BEGIN SET V1 = 11; SET V2 = 22  END";
98
        Code code = compiler.compileExpression(source);
99
        Object v = interpreter.run(code);
100

  
101
        assertEquals((Integer)11, symbolTable.value("V1"));
102
        assertEquals((Integer)22, symbolTable.value("V2"));
103
    }
104

  
105
    public void testIfThen() {
106
        MutableSymbolTable symbolTable = createSymbolTable();
107
        Compiler compiler = createCompiler();
108
        Interpreter interpreter = createInterpreter(symbolTable);
109

  
110
        symbolTable.setVar("V1", 10);
111
        String source = "IF V1 = 11 THEN SET V2 = 22";
112
        Code code = compiler.compileExpression(source);
113
        Object v = interpreter.run(code);
114

  
115
        assertEquals(null, v);
116
        assertEquals((Integer)10, symbolTable.value("V1"));
117
        assertEquals(null, symbolTable.value("V2"));
118

  
119
        symbolTable.setVar("V1", 11);
120
        source = "IF V1 = 11 THEN SET V2 = 22";
121
        code = compiler.compileExpression(source);
122
        v = interpreter.run(code);
123

  
124
        assertEquals((Integer)22, v);
125
        assertEquals((Integer)11, symbolTable.value("V1"));
126
        assertEquals((Integer)22, symbolTable.value("V2"));
127
    }
128

  
129
    public void testIfThenElse() {
130
        MutableSymbolTable symbolTable = createSymbolTable();
131
        Compiler compiler = createCompiler();
132
        Interpreter interpreter = createInterpreter(symbolTable);
133

  
134
        symbolTable.setVar("V1", 10);
135
        String source = "IF V1 = 11 THEN SET V2 = 11 ELSE SET V2 = 22";
136
        Code code = compiler.compileExpression(source);
137
        Object v = interpreter.run(code);
138

  
139
        assertEquals((Integer)22, v);
140
        assertEquals((Integer)10, symbolTable.value("V1"));
141
        assertEquals((Integer)22, symbolTable.value("V2"));
142
    }
143

  
144
    public void testIfThenBlock() {
145
        MutableSymbolTable symbolTable = createSymbolTable();
146
        Compiler compiler = createCompiler();
147
        Interpreter interpreter = createInterpreter(symbolTable);
148

  
149
        symbolTable.setVar("V1", 11);
150
        String source = "IF V1 = 11 THEN BEGIN LET V2 = 22; LET V1 = 10 END";
151
        Code code = compiler.compileExpression(source);
152
        Object v = interpreter.run(code);
153

  
154
        assertEquals((Integer)10, v);
155
        assertEquals((Integer)10, symbolTable.value("V1"));
156
        assertEquals((Integer)22, symbolTable.value("V2"));
157
    }
158

  
159
    public void testWhile() {
160
        MutableSymbolTable symbolTable = createSymbolTable();
161
        Compiler compiler = createCompiler();
162
        Interpreter interpreter = createInterpreter(symbolTable);
163

  
164
        symbolTable.setVar("n",0);
165
        String source = "WHILE n < 10 SET n = n + 1";
166
        Code code = compiler.compileExpression(source);
167
        Object v = interpreter.run(code);
168

  
169
        assertEquals((Integer)10, v);
170
        assertEquals((Integer)10, symbolTable.value("n"));
171
    }
172

  
173
    public void testWhileBlock() {
174
        MutableSymbolTable symbolTable = createSymbolTable();
175
        Compiler compiler = createCompiler();
176
        Interpreter interpreter = createInterpreter(symbolTable);
177

  
178
        symbolTable.setVar("n",0);
179
        String source = "WHILE n < 10 BEGIN SET n = n + 1; print(n) END";
180
        Code code = compiler.compileExpression(source);
181
        Object v = interpreter.run(code);
182

  
183
        assertEquals((Integer)10, v);
184
        assertEquals((Integer)10, symbolTable.value("n"));
185
    }
186

  
187
    public void testCast() {
188
        MutableSymbolTable symbolTable = createSymbolTable();
189
        Compiler compiler = createCompiler();
190
        Interpreter interpreter = createInterpreter(symbolTable);
191

  
192
        symbolTable.setVar("n",1.0);
193
        String source = "CAST n AS INTEGER";
194
        Code code = compiler.compileExpression(source);
195
        Object v = interpreter.run(code);
196

  
197
        assertEquals((Integer)1, v);
198
        assertEquals((Double)1.0, symbolTable.value("n"));
199
    }
200

  
201
    public void testMatch() {
202
        Compiler compiler = createCompiler();
203
        String source;
204
        Code code;
205

  
206
        source = "MATCH 'Hola', '[Hh]ola'";
207
        code = compiler.compileExpression(source);
208
        assertEquals("~('Hola', '[Hh]ola')", code.toString());
209

  
210
        source = "MATCH 'Hola' '[Hh]ola'";
211
        code = compiler.compileExpression(source);
212
        assertEquals("~('Hola', '[Hh]ola')", code.toString());
213

  
214
        source = "MATCH('Hola', '[Hh]ola')";
215
        code = compiler.compileExpression(source);
216
        assertEquals("~('Hola', '[Hh]ola')", code.toString());
217
    }
218

  
219
    public void testForEach() {
220
        MutableSymbolTable symbolTable = createSymbolTable();
221
        Compiler compiler = createCompiler();
222
        Interpreter interpreter = createInterpreter(symbolTable);
223

  
224
        String source = "FOR n in RANGE(10) print(n)";
225
        Code code = compiler.compileExpression(source);
226
        Object v = interpreter.run(code);
227

  
228
        assertEquals((Long)9L, v);
229
        assertEquals((Long)9L, symbolTable.value("n"));
230
    }
231

  
232
    public void testCase() {
233
        MutableSymbolTable symbolTable = createSymbolTable();
234
        Compiler compiler = createCompiler();
235
        Interpreter interpreter = createInterpreter(symbolTable);
236

  
237
        symbolTable.setVar("software","unknown");
238
        String source = "CASE WHEN software LIKE '%gvSIG%' THEN 'gvSIG' ELSE 'Other' END"; // ;)
239
        Code code = compiler.compileExpression(source);
240
        Object v = interpreter.run(code);
241
        assertEquals("Other", v);
242

  
243
        symbolTable.setVar("software","gvSIG desktop");
244
        source = "CASE WHEN software LIKE '%gvSIG%' THEN 'gvSIG' ELSE 'Other' END"; // ;)
245
        code = compiler.compileExpression(source);
246
        v = interpreter.run(code);
247
        assertEquals("gvSIG", v);
248
    }
249

  
250
    public void testCase2() {
251
        MutableSymbolTable symbolTable = createSymbolTable();
252
        Compiler compiler = createCompiler();
253
        Interpreter interpreter = createInterpreter(symbolTable);
254

  
255
        symbolTable.setVar("Field_1",77);
256
        String source = "CASE WHEN Field_1 >= 75 AND Field_1 <=79 THEN 100 WHEN Field_1 >=80 AND Field_1 <=84 THEN 110 END"; // ;)
257
        Code code = compiler.compileExpression(source);
258
        Object v = interpreter.run(code);
259
        assertEquals((Integer)100, v);
260

  
261
        symbolTable.setVar("Field_1",81);
262
        source = "CASE WHEN Field_1 >= 75 AND Field_1 <=79 THEN 100 WHEN Field_1 >=80 AND Field_1 <=84 THEN 110 END"; // ;)
263
        code = compiler.compileExpression(source);
264
        v = interpreter.run(code);
265
        assertEquals((Integer)110, v);
266
    }
267
    
268
    public void testCase3() {
269
        MutableSymbolTable symbolTable = createSymbolTable();
270
        Compiler compiler = createCompiler();
271
        Interpreter interpreter = createInterpreter(symbolTable);
272

  
273
        symbolTable.setVar("Field_1",100);
274
        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"; // ;)
275
        Code code = compiler.compileExpression(source);
276
        Object v = interpreter.run(code);
277
        assertEquals((Integer)120, v);
278
    }
279
    
280
    public void testDef1() {
281
        MutableSymbolTable symbolTable = createSymbolTable();
282
        Compiler compiler = createCompiler();
283
        Interpreter interpreter = createInterpreter(symbolTable);
284

  
285
        String source = "DEF test1() 'Hola'"; 
286
        Code code = compiler.compileExpression(source);
287
        Object v = interpreter.run(code);
288

  
289
        source = "test1()"; 
290
        code = compiler.compileExpression(source);
291
        v = interpreter.run(code);
292

  
293
        assertEquals("Hola", v);
294
    }
295
    
296
    public void testDef2() {
297
        MutableSymbolTable symbolTable = createSymbolTable();
298
        Compiler compiler = createCompiler();
299
        Interpreter interpreter = createInterpreter(symbolTable);
300

  
301
        String source = "DEF test1(nombre) 'Hola ' || nombre";
302
        Code code = compiler.compileExpression(source);
303
        Object v = interpreter.run(code);
304

  
305
        source = "test1('Joaquin')"; 
306
        code = compiler.compileExpression(source);
307
        v = interpreter.run(code);
308

  
309
        assertEquals("Hola Joaquin", v);
310
    }
311

  
312
    public void testReturn1() {
313
        MutableSymbolTable symbolTable = createSymbolTable();
314
        Compiler compiler = createCompiler();
315
        Interpreter interpreter = createInterpreter(symbolTable);
316

  
317
        String source = "DEF test1(nombre) BEGIN RETURN 'Hola ' || nombre END";
318
        Code code = compiler.compileExpression(source);
319
        Object v = interpreter.run(code);
320

  
321
        source = "test1('Joaquin')"; 
322
        code = compiler.compileExpression(source);
323
        v = interpreter.run(code);
324

  
325
        assertEquals("Hola Joaquin", v);
326
    }
327

  
328
    public void testReturn2() {
329
        MutableSymbolTable symbolTable = createSymbolTable();
330
        Compiler compiler = createCompiler();
331
        Interpreter interpreter = createInterpreter(symbolTable);
332

  
333
        String source = "DEF test1(nombre) BEGIN RETURN 'Hola ' || nombre; 'Oh!...'; END";
334
        Code code = compiler.compileExpression(source);
335
        Object v = interpreter.run(code);
336

  
337
        source = "test1('Joaquin')"; 
338
        code = compiler.compileExpression(source);
339
        v = interpreter.run(code);
340

  
341
        assertEquals("Hola Joaquin", v);
342
    }
343

  
344
    public void testUseCase1() {
345
        MutableSymbolTable symbolTable = createSymbolTable();
346
        Compiler compiler = createCompiler();
347
        Interpreter interpreter = createInterpreter(symbolTable);
348

  
349
        String source = "begin set x = ''; for n in list('hola','adios','fin'): let x = x || ' ' || n end";
350
        Code code = compiler.compileExpression(source);
351
        Object v = interpreter.run(code);
352

  
353
        assertEquals(" hola adios fin", v);
354
    }
355

  
356
    public void testUseCase2() {
357
        MutableSymbolTable symbolTable = createSymbolTable();
358
        Compiler compiler = createCompiler();
359
        Interpreter interpreter = createInterpreter(symbolTable);
360

  
361
        String source = "begin set s = ''; set x = LIST('hola','adios','fin'); FOR n in RANGE(3): set s = s || ' ' || x[n] end";
362
        Code code = compiler.compileExpression(source);
363
        Object v = interpreter.run(code);
364

  
365
        assertEquals(" hola adios fin", v);
366
    }
367

  
368

  
369
}
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/TestCase1.java
149 149
        code = compiler.compileExpression(expr2.toString());
150 150
        System.out.println(code.toString());
151 151
        assertEquals(
152
                "and(>(\"campo1\", 10), ST_Intersects(ST_GeomFromText('POLYGON ((0 0, 0 100, 100 100, 100 0, 0 0))', 4326), \"GEOMETRY\"))", 
152
                "AND(>(\"campo1\", 10), ST_Intersects(ST_GeomFromText('POLYGON ((0 0, 0 100, 100 100, 100 0, 0 0))', 4326), \"GEOMETRY\"))", 
153 153
                code.toString()
154 154
        );
155 155

  
......
157 157
        code = compiler.compileExpression(expr2.toString());
158 158
        System.out.println(code.toString());
159 159
        assertEquals(
160
                "and(>(\"campo1\", 10), ST_Intersects(ST_GeomFromWKB(DECODE('000000000300000001000000050000000000000000000000000000000000000000000000004059000000000000405900000000000040590000000000004059000000000000000000000000000000000000000000000000000000000000', 'hex'), 4326), \"GEOMETRY\"))", 
160
                "AND(>(\"campo1\", 10), ST_Intersects(ST_GeomFromWKB(DECODE('000000000300000001000000050000000000000000000000000000000000000000000000004059000000000000405900000000000040590000000000004059000000000000000000000000000000000000000000000000000000000000', 'hex'), 4326), \"GEOMETRY\"))", 
161 161
                code.toString()
162 162
        );
163 163
        
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/TestCodeToStringConverter.java
5 5
import org.gvsig.expressionevaluator.spi.AbstractCodeToStringConverter;
6 6
import org.gvsig.expressionevaluator.Code;
7 7
import org.gvsig.expressionevaluator.CodeToStringConverter;
8
import org.gvsig.expressionevaluator.Codes;
8 9
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
9 10
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
10 11
import org.gvsig.expressionevaluator.Function;
......
70 71
        }
71 72

  
72 73
        @Override
73
        protected String functionToString(String functionName, Code.Caller.Arguments args) {
74
        protected String functionToString(String functionName, Codes args) {
74 75
            switch (functionName.toLowerCase()) {
75 76
                case "date":
76 77
                    return "DATE " + toString(args.get(0)) + " ";
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/TestSQLLexer.java
53 53
        String expression = "[precio]";
54 54

  
55 55
        LexicalAnalyzer lex = createLexicalAnalyzer(expression);
56
        lex.setUseBracketsForIdentifiers(true);
57
        
56 58
        Token t1 = lex.next();
57 59
        assertEquals(Token.IDENTIFIER, t1.getType());
58 60
        assertEquals("precio", t1.getLiteral());
......
125 127
        Token t1 = lex.next();
126 128
        assertEquals(Token.INTEGER_LITERAL, t1.getType());
127 129
        assertEquals("23", t1.getLiteral());
128
        assertEquals(new Long(23), t1.getValue());
130
        assertEquals((Integer)23, t1.getValue());
129 131
    }
130 132

  
131 133
    public void testDecimal() {
......
173 175
        Token t3 = lex.next();
174 176
        assertEquals(Token.INTEGER_LITERAL, t3.getType());
175 177
        assertEquals("23", t3.getLiteral());
176
        assertEquals(new Long(23), t3.getValue());
178
        assertEquals((Integer)23, t3.getValue());
177 179
    }
178 180
    
179 181
    public void testOperators() {
......
218 220
        t1 = lex.next();
219 221
        assertEquals(Token.INTEGER_LITERAL, t1.getType());
220 222
        assertEquals("23", t1.getLiteral());
221
        assertEquals(new Long(23), t1.getValue());
223
        assertEquals((Integer)23, t1.getValue());
222 224

  
223 225
        t1 = lex.next();
224 226
        assertEquals(Token.OP_ADD, t1.getType());
......
227 229
        t1 = lex.next();
228 230
        assertEquals(Token.INTEGER_LITERAL, t1.getType());
229 231
        assertEquals("5", t1.getLiteral());
230
        assertEquals(new Long(5), t1.getValue());
232
        assertEquals((Integer)5, t1.getValue());
231 233

  
232 234
        t1 = lex.next();
233 235
        assertEquals(Token.PARENTHESIS_CLOSE, t1.getType());
......
257 259
        t1 = lex.next();
258 260
        assertEquals(Token.INTEGER_LITERAL, t1.getType());
259 261
        assertEquals("23", t1.getLiteral());
260
        assertEquals(new Long(23), t1.getValue());
262
        assertEquals((Integer)23, t1.getValue());
261 263

  
262 264
        t1 = lex.next();
263 265
        assertEquals(Token.COMA, t1.getType());
......
266 268
        t1 = lex.next();
267 269
        assertEquals(Token.INTEGER_LITERAL, t1.getType());
268 270
        assertEquals("5", t1.getLiteral());
269
        assertEquals(new Long(5), t1.getValue());
271
        assertEquals((Integer)5, t1.getValue());
270 272

  
271 273
        t1 = lex.next();
272 274
        assertEquals(Token.PARENTHESIS_CLOSE, t1.getType());
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
1
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
        assertEquals("IFF(=(\"V1\", 11), LET('V2', 22))", code.toString());
113
    }
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
        assertEquals("IFF(=(\"V1\", 11), LET('V2', 22))", code.toString());
122
    }
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
        assertEquals("IFF(=(\"V1\", 11), LET('V2', 22))", code.toString());
131
    }
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
        assertEquals("IFF(=(\"V1\", 11), LET('V2', 11), LET('V2', 22))", code.toString());
140
    }
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
        assertEquals("IFF(=(\"V1\", 11), BLOCK(LET('V2', 22), LET('V1', 10)))", code.toString());
149
    }
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
        assertEquals("WHILE(<(\"n\", 10), LET('n', +(\"n\", 1)))", code.toString());
158
    }
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
        assertEquals("WHILE(<(\"n\", 10), BLOCK(LET('n', +(\"n\", 1)), print(\"n\")))", code.toString());
167
    }
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
        assertEquals("CASE(LIKE(\"software\", '%gvSIG%'), 'gvSIG', 'Other')", code.toString());
230
    }
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
        assertEquals("CASE(LIKE(\"software\", '%gvSIG%'), 'gvSIG', 'Other')", code.toString());
239
    }
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
        assertEquals("CASE(AND(>=(\"Field_1\", 75), <=(\"Field_1\", 79)), AND(>=(\"Field_1\", 80), <=(\"Field_1\", 84)), 100, 110)", code.toString());
248
    }
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
        assertEquals("CASE(AND(>=(\"Field_1\", 75), <=(\"Field_1\", 79)), AND(>=(\"Field_1\", 80), <=(\"Field_1\", 84)), 100, 110, 120)", code.toString());
257
    }
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
        assertEquals("CREATE_FUNCTION('test1', LIST('nombre'), print(+('Hola ', \"nombre\")))", code.toString());
275
    }
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
        assertEquals("CREATE_FUNCTION('test1', LIST('nombre'), BLOCK(RETURN(||('Hola ', \"nombre\"))))", code.toString());
284
    }
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
        assertEquals("BLOCK(LET('x', ''), FOREACH('n', list('hola', 'adios', 'fin'), LET('x', ||(||(\"x\", ' '), \"n\"))))", code.toString());
293
    }
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
        assertEquals("BLOCK(LET('s', ''), LET('x', LIST('hola', 'adios', 'fin')), FOREACH('n', RANGE(3), LET('s', ||(||(\"s\", ' '), GETITEM(\"x\", \"n\")))))", code.toString());
302
    }
303

  
304

  
305
}
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/TestOptimizer.java
126 126
    }
127 127

  
128 128
    public void testIdentifier2() {
129
        Compiler compiler = createCompiler();
130
        compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true);
131

  
129 132
        String source = "[precio]";
130 133

  
131
        Compiler compiler = createCompiler();
132 134
        Code code = compiler.compileExpression(source);
133 135
        assertEquals("\"precio\"", code.toString());
134 136

  
......
156 158

  
157 159
        Compiler compiler = createCompiler();
158 160
        Code code = compiler.compileExpression(source);
159
        assertEquals("true", code.toString());
161
        assertEquals("TRUE", code.toString());
160 162

  
161 163
        SymbolTable symbolTable = createSymbolTable();
162 164
        Optimizer optimizer = createOptimizer(symbolTable);
163 165
        Code code2 = optimizer.optimize(code);
164
        assertEquals("true", code2.toString());
166
        assertEquals("TRUE", code2.toString());
165 167
    }
166 168

  
167 169
    public void testFalse() {
......
169 171

  
170 172
        Compiler compiler = createCompiler();
171 173
        Code code = compiler.compileExpression(source);
172
        assertEquals("false", code.toString());
174
        assertEquals("FALSE", code.toString());
173 175

  
174 176
        SymbolTable symbolTable = createSymbolTable();
175 177
        Optimizer optimizer = createOptimizer(symbolTable);
176 178
        Code code2 = optimizer.optimize(code);
177
        assertEquals("false", code2.toString());
179
        assertEquals("FALSE", code2.toString());
178 180
    }
179 181

  
180 182
    public void testNull() {
......
182 184

  
183 185
        Compiler compiler = createCompiler();
184 186
        Code code = compiler.compileExpression(source);
185
        assertEquals("null", code.toString());
187
        assertEquals("NULL", code.toString());
186 188

  
187 189
        SymbolTable symbolTable = createSymbolTable();
188 190
        Optimizer optimizer = createOptimizer(symbolTable);
189 191
        Code code2 = optimizer.optimize(code);
190
        assertEquals("null", code2.toString());
192
        assertEquals("NULL", code2.toString());
191 193
    }
192 194

  
193 195
    public void testNotTrue() {
......
195 197

  
196 198
        Compiler compiler = createCompiler();
197 199
        Code code = compiler.compileExpression(source);
198
        assertEquals("not(true)", code.toString());
200
        assertEquals("NOT(TRUE)", code.toString());
199 201

  
200 202
        SymbolTable symbolTable = createSymbolTable();
201 203
        Optimizer optimizer = createOptimizer(symbolTable);
202 204
        Code code2 = optimizer.optimize(code);
203
        assertEquals("false", code2.toString());
205
        assertEquals("FALSE", code2.toString());
204 206
    }
205 207

  
206 208
    public void testInteger() {
......
237 239
        operator(">=");
238 240
        operator("<");
239 241
        operator("<=");
240
        operator("like");
241
        operator("ilike");
242
        operator("LIKE");
243
        operator("ILIKE");
244
        operator("||");
242 245
        operator("+");
243 246
        operator("-");
244 247
        operator("*");
245 248
//        operator("^");
246
        operator("or");
247
        operator("and");
249
        operator("OR");
250
        operator("AND");
248 251
        operator("%");
249
        operator("is");
252
        operator("IS");
250 253
    }
251 254

  
252 255
    
......
354 357
        Compiler compiler = createCompiler();
355 358

  
356 359
        Code code = compiler.compileExpression(source);
357
        assertEquals("+(\"precio\", abs(negate(10)))", code.toString());
360
        assertEquals("+(\"precio\", abs(NEGATE(10)))", code.toString());
358 361

  
359 362
        SymbolTable symbolTable = createSymbolTable();
360 363
        Optimizer optimizer = createOptimizer(symbolTable);
......
404 407
        assertEquals("CONCAT(\"precio\", ' euros')", code2.toString());
405 408
    }
406 409

  
410
    public void testConcat2() {
411
        String source = "CONCAT(precio,' euros')";
412

  
413
        Compiler compiler = createCompiler();
414

  
415
        Code code = compiler.compileExpression(source);
416
        assertEquals("CONCAT(\"precio\", ' euros')", code.toString());
417

  
418
        SymbolTable symbolTable = createSymbolTable();
419
        Optimizer optimizer = createOptimizer(symbolTable);
420
        Code code2 = optimizer.optimize(code);
421
        assertEquals("CONCAT(\"precio\", ' euros')", code2.toString());
422
    }
423

  
407 424
    public void testInvokeFunction1() {
408 425
        String source = "ST_Area(GEOMETRY)";
409 426

  
......
454 471
        Code code = compiler.compileExpression(source);
455 472
        System.out.println(code.toString());
456 473
        assertEquals(
457
                "and(>(\"campo1\", 10), ST_Intersects(ST_GeomFromWKB(DECODE('000000000300000001000000050000000000000000000000000000000000000000000000004059000000000000405900000000000040590000000000004059000000000000000000000000000000000000000000000000000000000000', 'hex'), 4326), \"GEOMETRY\"))",
474
                "AND(>(\"campo1\", 10), ST_Intersects(ST_GeomFromWKB(DECODE('000000000300000001000000050000000000000000000000000000000000000000000000004059000000000000405900000000000040590000000000004059000000000000000000000000000000000000000000000000000000000000', 'hex'), 4326), \"GEOMETRY\"))",
458 475
                code.toString()
459 476
        );
460 477

  
......
470 487
//        System.out.println("Tiempo de optimizacion: " + (System.currentTimeMillis() - t1));
471 488
        System.out.println(code2.toString());
472 489
        assertEquals(
473
                "and(>(\"campo1\", 10), ST_Intersects('POLYGON ((0 0, 0 100, 100 100, 100 0, 0 0))'::geometry, \"GEOMETRY\"))",
490
                "AND(>(\"campo1\", 10), ST_Intersects('POLYGON ((0 0, 0 100, 100 100, 100 0, 0 0))'::geometry, \"GEOMETRY\"))",
474 491
                code2.toString()
475 492
        );
476 493

  
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/TestInterpreter.java
1 1
package org.gvsig.expresionevaluator.impl;
2 2

  
3
import org.gvsig.expressionevaluator.impl.DefaultInterpreter;
4
import org.gvsig.expressionevaluator.impl.DefaultSymbolTable;
5
import org.gvsig.expressionevaluator.impl.SQLLexicalAnalyzer;
6
import org.gvsig.expressionevaluator.impl.DefaultCompiler;
7 3
import junit.framework.TestCase;
8 4
import org.gvsig.expressionevaluator.LexicalAnalyzer;
9 5
import org.gvsig.expressionevaluator.Compiler;
10 6
import org.gvsig.expressionevaluator.SymbolTable;
11 7
import org.gvsig.expressionevaluator.Interpreter;
12 8
import org.gvsig.expressionevaluator.Code;
9
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
10
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
11
import org.gvsig.expressionevaluator.MutableSymbolTable;
13 12
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
14 13

  
15 14
public class TestInterpreter extends TestCase {
......
32 31
    // TODO add test methods here. The name must begin with 'test'. For example:
33 32
    // public void testHello() {}
34 33

  
34
    
35 35
    protected LexicalAnalyzer createLexicalAnalyzer() {
36
        SQLLexicalAnalyzer lexer = new SQLLexicalAnalyzer();
36
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
37
        LexicalAnalyzer lexer = manager.createLexicalAnalyzer();
37 38
        return lexer;
38 39
    }
39
    
40
    protected Compiler createCompiler() {
41
        Compiler compiler = new DefaultCompiler();
40

  
41
    protected org.gvsig.expressionevaluator.Compiler createCompiler() {
42
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
43
        Compiler compiler = manager.createCompiler();
42 44
        compiler.setLexicalAnalyzer(createLexicalAnalyzer());
43 45
        return compiler;
44 46
    }
47

  
45 48
    
46 49
    protected SymbolTable createSymbolTable() {
47
        DefaultSymbolTable symbolTable = new DefaultSymbolTable();
50
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
51
        MutableSymbolTable symbolTable = manager.createSymbolTable();
48 52
        symbolTable.setVar("precio", 200);
49 53
        symbolTable.setVar("1990", 0.168873933773767);
50 54
        return symbolTable;
51 55
    }
52 56
    
53 57
    protected Interpreter createInterpreter(SymbolTable symbolTable) {
54
        Interpreter interpreter = new DefaultInterpreter();
58
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
59
        Interpreter interpreter = manager.createInterpreter();
55 60
        interpreter.setSymbolTable(symbolTable);
56 61
        return interpreter;
57 62
    }
58 63
    
59 64
    public void testIdentifier1() {
60
        String source = "precio";
61

  
62 65
        SymbolTable symbolTable = createSymbolTable();
63 66
        Compiler compiler = createCompiler();
64 67
        Interpreter interpreter = createInterpreter(symbolTable);
65 68
        
69
        String source = "precio";
70

  
66 71
        Code code = compiler.compileExpression(source);
67 72
        Object v = interpreter.run(code);
68 73
        assertEquals(200, ((Number)v).intValue());
69 74
    }
70 75
    
71 76
    public void testInteger() {
72
        String source = "23";
73

  
74 77
        SymbolTable symbolTable = createSymbolTable();
75 78
        Compiler compiler = createCompiler();
76 79
        Interpreter interpreter = createInterpreter(symbolTable);
77 80
        
81
        String source = "23";
82

  
78 83
        Code code = compiler.compileExpression(source);
79 84
        Object v = interpreter.run(code);
80 85
        assertEquals(23, ((Number)v).intValue());
81 86
    }
82 87
    
83 88
    public void testTrue() {
84
        String source = "true";
85

  
86 89
        SymbolTable symbolTable = createSymbolTable();
87 90
        Compiler compiler = createCompiler();
88 91
        Interpreter interpreter = createInterpreter(symbolTable);
89 92
        
93
        String source = "true";
94

  
90 95
        Code code = compiler.compileExpression(source);
91 96
        assertEquals(Boolean.TRUE, interpreter.run(code));
92 97
    }
93 98
    
94 99
    public void testFalse() {
95
        String source = "false";
96

  
97 100
        SymbolTable symbolTable = createSymbolTable();
98 101
        Compiler compiler = createCompiler();
99 102
        Interpreter interpreter = createInterpreter(symbolTable);
100 103
        
104
        String source = "false";
105

  
101 106
        Code code = compiler.compileExpression(source);
102 107
        assertEquals(Boolean.FALSE, interpreter.run(code));
103 108
    }
104 109
    
105 110
    public void testNull() {
106
        String source = "null";
107

  
108 111
        SymbolTable symbolTable = createSymbolTable();
109 112
        Compiler compiler = createCompiler();
110 113
        Interpreter interpreter = createInterpreter(symbolTable);
111 114
        
115
        String source = "null";
116

  
112 117
        Code code = compiler.compileExpression(source);
113 118
        assertEquals(null, interpreter.run(code));
114 119
    }
115 120
    
116 121
    public void testAdd1() {
117
        String source = "precio + 10";
118

  
119 122
        SymbolTable symbolTable = createSymbolTable();
120 123
        Compiler compiler = createCompiler();
121 124
        Interpreter interpreter = createInterpreter(symbolTable);
122 125
        
126
        String source = "precio + 10";
127

  
123 128
        Code code = compiler.compileExpression(source);
124 129
        Object v = interpreter.run(code);
125 130
        assertEquals(210, ((Number)v).intValue());
126 131
    }
127 132
    
128 133
    public void testSimpleAdd1() {
129
        String source = "5+10";
130

  
131 134
        SymbolTable symbolTable = createSymbolTable();
132 135
        Compiler compiler = createCompiler();
133 136
        Interpreter interpreter = createInterpreter(symbolTable);
134 137
        
138
        String source = "5+10";
139

  
135 140
        Code code = compiler.compileExpression(source);
136 141
        Object v = interpreter.run(code);
137 142
        assertEquals(15, ((Number)v).intValue());
138 143
    }
139 144
    
140 145
    public void testSimpleAdd2() {
141
        String source = "5 + 10";
142

  
143 146
        SymbolTable symbolTable = createSymbolTable();
144 147
        Compiler compiler = createCompiler();
145 148
        Interpreter interpreter = createInterpreter(symbolTable);
146 149
        
150
        String source = "5 + 10";
151

  
147 152
        Code code = compiler.compileExpression(source);
148 153
        Object v = interpreter.run(code);
149 154
        assertEquals(15, ((Number)v).intValue());
150 155
    }
151 156
    
152 157
    public void testSimpleAdd3() {
153
        String source = "10+-5";
154

  
155 158
        SymbolTable symbolTable = createSymbolTable();
156 159
        Compiler compiler = createCompiler();
157 160
        Interpreter interpreter = createInterpreter(symbolTable);
158 161
        
162
        String source = "10+-5";
163

  
159 164
        Code code = compiler.compileExpression(source);
160 165
        Object v = interpreter.run(code);
161 166
        assertEquals(5, ((Number)v).intValue());
162 167
    }
163 168
    
164 169
    public void testSimpleSub1() {
165
        String source = "10-5";
166

  
167 170
        SymbolTable symbolTable = createSymbolTable();
168 171
        Compiler compiler = createCompiler();
169 172
        Interpreter interpreter = createInterpreter(symbolTable);
170 173
        
174
        String source = "10-5";
175

  
171 176
        Code code = compiler.compileExpression(source);
172 177
        Object v = interpreter.run(code);
173 178
        assertEquals(5, ((Number)v).intValue());
174 179
    }
175 180
    
176 181
    public void testSimpleSub2() {
177
        String source = "10 - 5";
178

  
179 182
        SymbolTable symbolTable = createSymbolTable();
180 183
        Compiler compiler = createCompiler();
181 184
        Interpreter interpreter = createInterpreter(symbolTable);
182 185
        
186
        String source = "10 - 5";
187

  
183 188
        Code code = compiler.compileExpression(source);
184 189
        Object v = interpreter.run(code);
185 190
        assertEquals(5, ((Number)v).intValue());
186 191
    }
187 192
    
188 193
    public void testSimpleNumber() {
189
        String source = "23";
190

  
191 194
        SymbolTable symbolTable = createSymbolTable();
192 195
        Compiler compiler = createCompiler();
193 196
        Interpreter interpreter = createInterpreter(symbolTable);
194 197
        
198
        String source = "23";
199

  
195 200
        Code code = compiler.compileExpression(source);
196 201
        Object v = interpreter.run(code);
197 202
        assertEquals(23, ((Number)v).intValue());
198 203
    }
199 204
    
200 205
    public void testSimpleNegativeNumber() {
201
        String source = "-23";
202

  
203 206
        SymbolTable symbolTable = createSymbolTable();
204 207
        Compiler compiler = createCompiler();
205 208
        Interpreter interpreter = createInterpreter(symbolTable);
206 209
        
210
        String source = "-23";
211

  
207 212
        Code code = compiler.compileExpression(source);
208 213
        Object v = interpreter.run(code);
209 214
        assertEquals(-23, ((Number)v).intValue());
210 215
    }
211 216
    
212 217
    public void testNegateFunction() {
213
        String source = "-PI()";
214

  
215 218
        SymbolTable symbolTable = createSymbolTable();
216 219
        Compiler compiler = createCompiler();
217 220
        Interpreter interpreter = createInterpreter(symbolTable);
218 221
        
222
        String source = "-PI()";
223

  
219 224
        Code code = compiler.compileExpression(source);
220 225
        Object v = interpreter.run(code);
221 226
        assertEquals(-Math.PI, ((Number)v).doubleValue());
222 227
    }
223 228
    
224 229
    public void testSub1() {
225
        String source = "precio - 10";
226

  
227 230
        SymbolTable symbolTable = createSymbolTable();
228 231
        Compiler compiler = createCompiler();
229 232
        Interpreter interpreter = createInterpreter(symbolTable);
230 233
        
234
        String source = "precio - 10";
235

  
231 236
        Code code = compiler.compileExpression(source);
232 237
        Object v = interpreter.run(code);
233 238
        assertEquals(190, ((Number)v).intValue());
234 239
    }
235 240
    
236 241
    public void testMul1() {
237
        String source = "precio * 10";
238

  
239 242
        SymbolTable symbolTable = createSymbolTable();
240 243
        Compiler compiler = createCompiler();
241 244
        Interpreter interpreter = createInterpreter(symbolTable);
242 245
        
246
        String source = "precio * 10";
247

  
243 248
        Code code = compiler.compileExpression(source);
244 249
        Object v = interpreter.run(code);
245 250
        assertEquals(2000, ((Number)v).intValue());
246 251
    }
247 252

  
248 253
    public void testDiv1() {
249
        String source = "precio / 10";
250

  
251 254
        SymbolTable symbolTable = createSymbolTable();
252 255
        Compiler compiler = createCompiler();
253 256
        Interpreter interpreter = createInterpreter(symbolTable);
254 257
        
258
        String source = "precio / 10";
259

  
255 260
        Code code = compiler.compileExpression(source);
256 261
        Object v = interpreter.run(code);
257 262
        assertEquals(20, ((Number)v).intValue());
258 263
    }
259 264
    
260 265
    public void testAdd2() {
261
        String source = "precio + 10 + 20 + 30";
262

  
263 266
        SymbolTable symbolTable = createSymbolTable();
264 267
        Compiler compiler = createCompiler();
265 268
        Interpreter interpreter = createInterpreter(symbolTable);
266 269
        
270
        String source = "precio + 10 + 20 + 30";
271

  
267 272
        Code code = compiler.compileExpression(source);
268 273
        Object v = interpreter.run(code);
269 274
        assertEquals(260, ((Number)v).intValue());
270 275
    }
271 276
    
272 277
    public void testAddMul() {
273
        String source = "precio + 10 * 2 + 20 + 30";
274

  
275 278
        SymbolTable symbolTable = createSymbolTable();
276 279
        Compiler compiler = createCompiler();
277 280
        Interpreter interpreter = createInterpreter(symbolTable);
278 281
        
282
        String source = "precio + 10 * 2 + 20 + 30";
283

  
279 284
        Code code = compiler.compileExpression(source);
280 285
        Object v = interpreter.run(code);
281 286
        assertEquals(270, ((Number)v).intValue());
282 287
    }
283 288
    
284 289
    public void testAddMulPar() {
285
        String source = "(precio + 10) * 2 + 20 + 30";
286

  
287 290
        SymbolTable symbolTable = createSymbolTable();
288 291
        Compiler compiler = createCompiler();
289 292
        Interpreter interpreter = createInterpreter(symbolTable);
290 293
        
294
        String source = "(precio + 10) * 2 + 20 + 30";
295

  
291 296
        Code code = compiler.compileExpression(source);
292 297
        Object v = interpreter.run(code);
293 298
        assertEquals(470, ((Number)v).intValue());
294 299
    }    
295 300

  
296 301
    public void testAbs() {
297
        String source = "precio + abs(10)";
298

  
299 302
        SymbolTable symbolTable = createSymbolTable();
300 303
        Compiler compiler = createCompiler();
301 304
        Interpreter interpreter = createInterpreter(symbolTable);
302 305
        
306
        String source = "precio + abs(10)";
307

  
303 308
        Code code = compiler.compileExpression(source);
304 309
        Object v = interpreter.run(code);
305 310
        assertEquals(210, ((Number)v).intValue());
306 311
    }
307 312

  
308 313
    public void testAbs2() {
309
        String source = "precio + abs(-10)";
310

  
311 314
        SymbolTable symbolTable = createSymbolTable();
312 315
        Compiler compiler = createCompiler();
313 316
        Interpreter interpreter = createInterpreter(symbolTable);
314 317
        
318
        String source = "precio + abs(-10)";
319

  
315 320
        Code code = compiler.compileExpression(source);
316 321
        Object v = interpreter.run(code);
317 322
        assertEquals(210, ((Number)v).intValue());
318 323
    }
319 324
    
320 325
    public void testCeil() {
321
        String source = "precio + CEIL(PI())";
322

  
323 326
        SymbolTable symbolTable = createSymbolTable();
324 327
        Compiler compiler = createCompiler();
325 328
        Interpreter interpreter = createInterpreter(symbolTable);
326 329
        
330
        String source = "precio + CEIL(PI())";
331

  
327 332
        Code code = compiler.compileExpression(source);
328 333
        Object v = interpreter.run(code);
329 334
        assertEquals(204, ((Number)v).intValue());
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff