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

    
3
import static junit.framework.Assert.assertEquals;
4
import junit.framework.TestCase;
5
import org.cresques.cts.IProjection;
6
import org.gvsig.expressionevaluator.Code;
7
import org.gvsig.expressionevaluator.ExpressionBuilder;
8
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
9
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
10
import org.gvsig.expressionevaluator.ExpressionUtils;
11
import org.gvsig.expressionevaluator.LexicalAnalyzer;
12
import org.gvsig.fmap.crs.CRSFactory;
13
import org.gvsig.fmap.geom.GeometryUtils;
14
import org.gvsig.fmap.geom.exception.CreateGeometryException;
15
import org.gvsig.fmap.geom.primitive.Point;
16
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
17

    
18
public class TestCodeToValue extends TestCase {
19
    
20
    public TestCodeToValue(String testName) {
21
        super(testName);
22
    }
23

    
24
    @Override
25
    protected void setUp() throws Exception {
26
        super.setUp();
27
        new DefaultLibrariesInitializer().fullInitialize();
28
    }
29

    
30
    @Override
31
    protected void tearDown() throws Exception {
32
        super.tearDown();
33
    }
34

    
35
    // TODO add test methods here. The name must begin with 'test'. For example:
36
    // public void testHello() {}
37
    
38
    protected LexicalAnalyzer createLexicalAnalyzer() {
39
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
40
        LexicalAnalyzer lexer = manager.createLexicalAnalyzer();
41
        return lexer;
42
    }
43

    
44
    protected org.gvsig.expressionevaluator.Compiler createCompiler() {
45
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
46
        org.gvsig.expressionevaluator.Compiler compiler = manager.createCompiler();
47
        compiler.setLexicalAnalyzer(createLexicalAnalyzer());
48
        return compiler;
49
    }
50
    
51
    public Code compileExpression(String source) {
52
        org.gvsig.expressionevaluator.Compiler compiler = createCompiler();
53
        Code code = compiler.compileExpression(source);
54
        return code;
55
    }
56
    
57
    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
    public void test2() {
217
        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
    }
225

    
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
    
236
    
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
    public void test3() throws CreateGeometryException {
245
        ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
246

    
247
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
248
        Point point = GeometryUtils.createPoint(10, 20);
249

    
250
        builder.set(        
251
            builder.ST_Intersects(
252
              builder.geometry(point,proj),
253
              builder.variable("the_geom")
254
            )
255
        );
256
        Code code = compileExpression(builder.toString());
257
        assertEquals(
258
                "ST_Intersects(ST_GeomFromWKB(DECODE('000000000140240000000000004034000000000000', 'hex'), 4326), \"the_geom\")",
259
                code.toValue().toString()
260
        );
261
    }
262
    
263
    public void test4() throws CreateGeometryException {
264
        ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
265

    
266
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
267
        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
        );
275
        Code code = compileExpression(builder.toString());
276
        assertEquals(
277
                "ST_Intersects2(ST_GeomFromWKB(DECODE('000000000140240000000000004034000000000000', 'hex'), 4326), \"the_geom\")",
278
                code.toValue().toString()
279
        );
280
    }
281
    
282
}