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 / TestCodeToValue.java @ 44198

History | View | Annotate | Download (9.05 KB)

1 44006 jjdelcerro
package org.gvsig.expresionevaluator.impl;
2 43128 jjdelcerro
3 44198 jjdelcerro
import static junit.framework.Assert.assertEquals;
4 44006 jjdelcerro
import junit.framework.TestCase;
5 43128 jjdelcerro
import org.cresques.cts.IProjection;
6 44198 jjdelcerro
import org.gvsig.expressionevaluator.Code;
7 44006 jjdelcerro
import org.gvsig.expressionevaluator.ExpressionBuilder;
8 44198 jjdelcerro
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
9
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
10
import org.gvsig.expressionevaluator.ExpressionUtils;
11
import org.gvsig.expressionevaluator.LexicalAnalyzer;
12 43128 jjdelcerro
import org.gvsig.fmap.crs.CRSFactory;
13 44198 jjdelcerro
import org.gvsig.fmap.geom.GeometryUtils;
14 43128 jjdelcerro
import org.gvsig.fmap.geom.exception.CreateGeometryException;
15
import org.gvsig.fmap.geom.primitive.Point;
16 44006 jjdelcerro
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
17 43128 jjdelcerro
18 44198 jjdelcerro
public class TestCodeToValue extends TestCase {
19
20
    public TestCodeToValue(String testName) {
21 44006 jjdelcerro
        super(testName);
22
    }
23
24 43128 jjdelcerro
    @Override
25 44006 jjdelcerro
    protected void setUp() throws Exception {
26
        super.setUp();
27
        new DefaultLibrariesInitializer().fullInitialize();
28
    }
29 43128 jjdelcerro
30 44006 jjdelcerro
    @Override
31
    protected void tearDown() throws Exception {
32
        super.tearDown();
33 43128 jjdelcerro
    }
34 44006 jjdelcerro
35
    // TODO add test methods here. The name must begin with 'test'. For example:
36
    // public void testHello() {}
37 43128 jjdelcerro
38 44198 jjdelcerro
    protected LexicalAnalyzer createLexicalAnalyzer() {
39
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
40
        LexicalAnalyzer lexer = manager.createLexicalAnalyzer();
41
        return lexer;
42 43128 jjdelcerro
    }
43 44198 jjdelcerro
44
    protected org.gvsig.expressionevaluator.Compiler createCompiler() {
45
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
46
        org.gvsig.expressionevaluator.Compiler compiler = manager.createCompiler();
47
        compiler.setLexicalAnalyzer(createLexicalAnalyzer());
48
        return compiler;
49
    }
50 43128 jjdelcerro
51 44198 jjdelcerro
    public Code compileExpression(String source) {
52
        org.gvsig.expressionevaluator.Compiler compiler = createCompiler();
53
        Code code = compiler.compileExpression(source);
54
        return code;
55 43128 jjdelcerro
    }
56
57 44198 jjdelcerro
    public void testIdentifier1() {
58
        String source = "precio";
59
60
        Code code = compileExpression(source);
61
        assertEquals("\"precio\"", code.toValue().toString());
62
    }
63
64
    public void testIdentifier2() {
65
        org.gvsig.expressionevaluator.Compiler compiler = createCompiler();
66
        compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true);
67
68
        String source = "[precio]";
69
70
        Code code = compiler.compileExpression(source);
71
        assertEquals("\"precio\"", code.toValue().toString());
72
    }
73
74
    public void testIdentifier3() {
75
        String source = "\"precio\"";
76
77
        Code code = compileExpression(source);
78
        assertEquals("\"precio\"", code.toValue().toString());
79
    }
80
81
82
    public void testTrue() {
83
        String source = "true";
84
85
        Code code = compileExpression(source);
86
        assertEquals("TRUE", code.toValue().toString());
87
    }
88
89
    public void testFalse() {
90
        String source = "false";
91
92
        Code code = compileExpression(source);
93
        assertEquals("FALSE", code.toValue().toString());
94
    }
95
96
    public void testNull() {
97
        String source = "null";
98
99
        Code code = compileExpression(source);
100
        assertEquals("NULL", code.toValue().toString());
101
    }
102
103
    public void testNotTrue() {
104
        String source = "not true";
105
106
        Code code = compileExpression(source);
107
        assertEquals("NOT(TRUE)", code.toValue().toString());
108
    }
109
110
    public void testInteger() {
111
        String source = "23";
112
113
        Code code = compileExpression(source);
114
        assertEquals("23", code.toValue().toString());
115
    }
116
117
    public void operator(String operatorName) {
118
        String source = "precio " + operatorName + " 23";
119
120
        Code code = compileExpression(source);
121
        assertEquals("(\"precio\" "+ operatorName + " 23)", code.toValue().toString());
122
    }
123
124
    public void testOperators() {
125
126
        operator("=");
127
        operator("<>");
128
        operator(">");
129
        operator(">=");
130
        operator("<");
131
        operator("<=");
132
        operator("LIKE");
133
        operator("ILIKE");
134
        operator("||");
135
        operator("+");
136
        operator("-");
137
        operator("*");
138
        operator("OR");
139
        operator("AND");
140
        operator("%");
141
        operator("IS");
142
143
        operator("~");
144
    }
145
146
//    public void testILike() {
147
//        String source = "precio ILike 23";
148
//
149
//        Code code = compileExpression(source);
150
//        assertEquals("LOWER(\"precio\") LIKE LOWER(23)", code.toValue().toString());
151
//    }
152
153
    public void testAddMul() {
154
        String source = "precio + 10 * 2 + 20 + 30";
155
156
        Code code = compileExpression(source);
157
        assertEquals("(((\"precio\" + (10 * 2)) + 20) + 30)", code.toValue().toString());
158
    }
159
160
    public void testAddMulPar() {
161
        String source = "(precio + 10) * 2 + 20 + 30";
162
163
        Code code = compileExpression(source);
164
        assertEquals("((((\"precio\" + 10) * 2) + 20) + 30)", code.toValue().toString());
165
    }
166
167
    public void testAbs() {
168
        String source = "precio + abs(10)";
169
170
        Code code = compileExpression(source);
171
        assertEquals("(\"precio\" + abs(10))", code.toValue().toString());
172
    }
173
174
    public void testAbs2() {
175
        String source = "precio + abs(-10)";
176
177
        Code code = compileExpression(source);
178
        assertEquals("(\"precio\" + abs(-(10)))", code.toValue().toString());
179
    }
180
181
    public void testPI() {
182
        String source = "precio + PI()";
183
184
        Code code = compileExpression(source);
185
        assertEquals("(\"precio\" + PI())", code.toValue().toString());
186
    }
187
188
    public void testCeil() {
189
        String source = "precio + CEIL(PI())";
190
191
        Code code = compileExpression(source);
192
        assertEquals("(\"precio\" + CEIL(PI()))", code.toValue().toString());
193
    }
194
195
    public void testGetitem1() {
196
        String source = "LIST('uno','dos','tres')[1]" ;
197
198
        Code code = compileExpression(source);
199
        assertEquals("GETITEM(LIST('uno', 'dos', 'tres'), 1)", code.toValue().toString());
200
    }
201
202
    public void testConcat() {
203
        String source = "CONCAT(precio,' euros')";
204
205
        Code code = compileExpression(source);
206
        assertEquals("CONCAT(\"precio\", ' euros')", code.toValue().toString());
207
    }
208
209
    public void test1() {
210
        String source = "NOMBRE03 = 'Torre d''En Besora (la)'";
211
212
        Code code = compileExpression(source);
213
        assertEquals("(\"NOMBRE03\" = 'Torre d''En Besora (la)')", code.toValue().toString());
214
    }
215
216 43128 jjdelcerro
    public void test2() {
217 44198 jjdelcerro
        org.gvsig.expressionevaluator.Compiler compiler = createCompiler();
218
        compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true);
219
220
        String source = "[1990] = 0.168873933773767";
221
222
        Code code = compiler.compileExpression(source);
223
        assertEquals("(\"1990\" = 0.168873933773767)", code.toValue().toString());
224 43128 jjdelcerro
    }
225 44198 jjdelcerro
226
    public void test2fields() {
227
        org.gvsig.expressionevaluator.Compiler compiler = createCompiler();
228
        compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(true);
229
230
        String source = "[1990] = [precio]";
231
232
        Code code = compiler.compileExpression(source);
233
        assertEquals("(\"1990\" = \"precio\")", code.toValue().toString());
234
    }
235 43128 jjdelcerro
236 44198 jjdelcerro
237
    public void testInvokeFunction1() {
238
        String source = "ST_Area(GEOMETRY)";
239
240
        Code code = compileExpression(source);
241
        assertEquals("ST_Area(\"GEOMETRY\")", code.toValue().toString());
242
    }
243
244 43128 jjdelcerro
    public void test3() throws CreateGeometryException {
245 44198 jjdelcerro
        ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
246
247 43128 jjdelcerro
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
248 44198 jjdelcerro
        Point point = GeometryUtils.createPoint(10, 20);
249
250 43128 jjdelcerro
        builder.set(
251
            builder.ST_Intersects(
252
              builder.geometry(point,proj),
253
              builder.variable("the_geom")
254
            )
255
        );
256 44198 jjdelcerro
        Code code = compileExpression(builder.toString());
257 43128 jjdelcerro
        assertEquals(
258 44198 jjdelcerro
                "ST_Intersects(ST_GeomFromWKB(DECODE('000000000140240000000000004034000000000000', 'hex'), 4326), \"the_geom\")",
259
                code.toValue().toString()
260 43128 jjdelcerro
        );
261
    }
262
263
    public void test4() throws CreateGeometryException {
264 44198 jjdelcerro
        ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
265
266 43128 jjdelcerro
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
267 44198 jjdelcerro
        Point point = GeometryUtils.createPoint(10, 20);
268
269
        builder.set(
270
            builder.function("ST_Intersects2",
271
                builder.geometry(point,proj),
272
                builder.variable("the_geom")
273
            )
274 43128 jjdelcerro
        );
275 44198 jjdelcerro
        Code code = compileExpression(builder.toString());
276 43128 jjdelcerro
        assertEquals(
277 44198 jjdelcerro
                "ST_Intersects2(ST_GeomFromWKB(DECODE('000000000140240000000000004034000000000000', 'hex'), 4326), \"the_geom\")",
278
                code.toValue().toString()
279 43128 jjdelcerro
        );
280
    }
281 44198 jjdelcerro
282 43128 jjdelcerro
}