Revision 44198 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/TestExpressionBuilder.java

View differences:

TestExpressionBuilder.java
1 1
package org.gvsig.expresionevaluator.impl;
2 2

  
3
import java.util.ArrayList;
4
import java.util.List;
5 3
import junit.framework.TestCase;
6 4
import org.apache.commons.lang3.ArrayUtils;
7 5
import org.cresques.cts.IProjection;
8 6
import org.gvsig.expressionevaluator.ExpressionBuilder;
9
import org.gvsig.expressionevaluator.ExpressionBuilder.Config;
10 7
import org.gvsig.expressionevaluator.ExpressionBuilder.GeometrySupportType;
11
import org.gvsig.expressionevaluator.ExpressionBuilder.Parameter;
12
import org.gvsig.expressionevaluator.ExpressionBuilder.Variable;
13 8
import org.gvsig.expressionevaluator.impl.DefaultExpressionBuilder;
14 9
import org.gvsig.fmap.crs.CRSFactory;
15 10
import org.gvsig.fmap.geom.Geometry;
......
29 24
    protected void setUp() throws Exception {
30 25
        super.setUp();
31 26
        new DefaultLibrariesInitializer().fullInitialize();
32
//        new ExpressionEvaluatorImplLibrary().initialize();
33 27
    }
34 28

  
35 29
    @Override
......
40 34
    // TODO add test methods here. The name must begin with 'test'. For example:
41 35
    // public void testHello() {}
42 36
    
43
    List<String> getVariableNames(ExpressionBuilder builder) {
44
        List<String> vars = new ArrayList<>();
45
        for (Variable var : builder.getVariables()) {
46
            vars.add(var.getName());
47
        }
48
        return vars;
49
    }
50
    
51
    List<String> getParameterNames(ExpressionBuilder builder) {
52
        List<String> params = new ArrayList<>();
53
        for (Parameter param : builder.getParameters()) {
54
            String s;
55
            switch(param.getType()) {
56
                case Constant:
57
                    Object value = param.getValue();
58
                    if( value==null ) {
59
                        s = "null";
60
                    } else if( value instanceof String ) {
61
                        s = "'" + (String)value + "'";
62
                    } else {
63
                        s = value.toString();
64
                    }    
65
                    break;
66
                case Geometry:
67
                case Variable:
68
                default:
69
                    s = "\"" + param.getName() + "\"";
70
            }
71
            params.add(s);
72
        }
73
        return params;
74
    }
75
    
76 37
    public void test2() {
77 38
        ExpressionBuilder builder = new DefaultExpressionBuilder();
78 39
        
79 40
        builder.and(
80 41
          builder.eq(
81
            builder.lcase(builder.variable("colum_name_c")),
42
            builder.lower(builder.variable("colum_name_c")),
82 43
            builder.parameter("colum_name_p")
83 44
          )
84 45
        );
......
86 47
            builder.group(
87 48
                builder.or(
88 49
                    builder.like(
89
                        builder.lcase( builder.variable("uno")),
50
                        builder.lower( builder.variable("uno")),
90 51
                        builder.constant("%10")
91 52
                    ),
92 53
                    builder.lt(
......
114 75
            )
115 76
        );
116 77
        assertEquals(
117
                "( (LCASE(\"colum_name_c\")) = (?) ) AND ( ( (LCASE(\"uno\")) LIKE ('%10') ) OR ( (\"dos\") < (-3.5) ) ) AND ST_Intersects((\"geom1\"), (ST_Envelope(ST_GeomFromWKB((?), (?))))) AND ( (\"tres\") > (123456789) )",
78
                "( (LOWER(\"colum_name_c\")) = (?) ) AND ( ( (LOWER(\"uno\")) LIKE ('%10') ) OR ( (\"dos\") < (-3.5) ) ) AND ST_Intersects((\"geom1\"), (ST_Envelope(ST_GeomFromWKB((?), (?))))) AND ( (\"tres\") > (123456789) )",
118 79
                builder.toString()
119 80
        );
120 81
        assertEquals(
121 82
                "[colum_name_c, dos, geom1, tres, uno]",
122
                ArrayUtils.toString(getVariableNames(builder))
83
                ArrayUtils.toString(builder.variables_names())
123 84
        );
124 85
        assertEquals(
125 86
                "[\"colum_name_p\", \"geom2\", 4326]",
126
                ArrayUtils.toString(getParameterNames(builder))
87
                ArrayUtils.toString(builder.parameters_names())
127 88
        );
128 89
    }
129 90
    
......
140 101
              builder.variable("the_geom")
141 102
            )
142 103
        );
143
        builder.getConfig().set(Config.geometry_type_support, GeometrySupportType.WKT);
104
        builder.geometry_support_type(GeometrySupportType.WKT);
144 105
        System.out.println(builder.toString());
145 106
        assertEquals(
146
                "ST_Intersects((ST_GeomFromText('POINT (10 20)', (4326))), (\"the_geom\"))",
107
                "ST_Intersects((ST_GeomFromText(('POINT (10 20)'), (4326))), (\"the_geom\"))",
147 108
                builder.toString()
148 109
        );
149
        builder.getConfig().set(Config.geometry_type_support, GeometrySupportType.WKB);
110
        builder.geometry_support_type(GeometrySupportType.WKB);
150 111
        System.out.println(builder.toString());
151 112
        assertEquals(
152 113
                "ST_Intersects((ST_GeomFromWKB((DECODE('000000000140240000000000004034000000000000','hex')), (4326))), (\"the_geom\"))",
......
154 115
        );
155 116
        assertEquals(
156 117
                "[the_geom]",
157
                ArrayUtils.toString(getVariableNames(builder))
118
                ArrayUtils.toString(builder.variables_names())
158 119
        );
159 120
        assertEquals(
160 121
                "[]",
161
                ArrayUtils.toString(getParameterNames(builder))
122
                ArrayUtils.toString(builder.parameters_names())
162 123
        );
163 124
    }
164 125
    
126
    public void testParameter() throws CreateGeometryException {
127
        ExpressionBuilder builder = new DefaultExpressionBuilder();
128
                
129
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
130
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
131
        
132
        Point point = geometryManager.createPoint(10, 20, Geometry.SUBTYPES.GEOM2D);
133
        builder.set(        
134
            builder.ST_Intersects(
135
              builder.geometry(point,proj),
136
              builder.parameter("the_geom")
137
            )
138
        );
139
        builder.geometry_support_type(GeometrySupportType.WKT);
140
        System.out.println(builder.toString());
141
        assertEquals(
142
                "ST_Intersects((ST_GeomFromText(('POINT (10 20)'), (4326))), (?))",
143
                builder.toString()
144
        );
145
        builder.geometry_support_type(GeometrySupportType.WKB);
146
        System.out.println(builder.toString());
147
        assertEquals(
148
                "ST_Intersects((ST_GeomFromWKB((DECODE('000000000140240000000000004034000000000000','hex')), (4326))), (?))",
149
                builder.toString()
150
        );
151
        assertEquals(
152
                "[]",
153
                ArrayUtils.toString(builder.variables_names())
154
        );
155
        assertEquals(
156
                "[\"the_geom\"]",
157
                ArrayUtils.toString(builder.parameters_names())
158
        );
159
    }
160
    
161
    public void testParameterGeomWhitoutSRS() throws CreateGeometryException {
162
        ExpressionBuilder builder = new DefaultExpressionBuilder();
163
                
164
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
165
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
166
        
167
        Point point = geometryManager.createPoint(10, 20, Geometry.SUBTYPES.GEOM2D);
168
        builder.set(        
169
            builder.ST_Intersects(
170
              builder.geometry(point,proj),
171
              builder.parameter("the_geom").as_geometry_variable()
172
            )
173
        );
174
        try {
175
            builder.toString();
176
            fail("Geometry parameter without SRS not detected.");
177
        } catch(IllegalArgumentException ex) {
178
            // Do nothing, it's ok that fail if not SRS is specified.
179
        }
180
    }
181
    
182
    public void testPatameterGeomWithSRS1() throws CreateGeometryException {
183
        ExpressionBuilder builder = new DefaultExpressionBuilder();
184
                
185
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
186
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
187
        
188
        Point point = geometryManager.createPoint(10, 20, Geometry.SUBTYPES.GEOM2D);
189
        builder.set(        
190
            builder.ST_Intersects(
191
              builder.geometry(point,proj),
192
              builder.parameter("the_geom").srs(proj)
193
            )
194
        );
195
        builder.geometry_support_type(GeometrySupportType.WKT);
196
        System.out.println(builder.toString());
197
        assertEquals(
198
                "ST_Intersects((ST_GeomFromText(('POINT (10 20)'), (4326))), (ST_GeomFromText((?), (4326))))",
199
                builder.toString()
200
        );
201
        builder.geometry_support_type(GeometrySupportType.WKB);
202
        System.out.println(builder.toString());
203
        assertEquals(
204
                "ST_Intersects((ST_GeomFromWKB((DECODE('000000000140240000000000004034000000000000','hex')), (4326))), (ST_GeomFromWKB((?), (4326))))",
205
                builder.toString()
206
        );
207
        assertEquals(
208
                "[]",
209
                ArrayUtils.toString(builder.variables_names())
210
        );
211
        assertEquals(
212
                "[\"the_geom\"]",
213
                ArrayUtils.toString(builder.parameters_names())
214
        );
215
    }
216
    
217
    public void testParameterGeomWithSRS2() throws CreateGeometryException {
218
        ExpressionBuilder builder = new DefaultExpressionBuilder();
219
                
220
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
221
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
222
        
223
        Point point = geometryManager.createPoint(10, 20, Geometry.SUBTYPES.GEOM2D);
224
        builder.set(        
225
            builder.ST_Intersects(
226
              builder.geometry(point,proj),
227
              builder.parameter("the_geom").srs(builder.constant(4326))
228
            )
229
        );
230
        builder.geometry_support_type(GeometrySupportType.WKT);
231
        System.out.println(builder.toString());
232
        assertEquals(
233
                "ST_Intersects((ST_GeomFromText(('POINT (10 20)'), (4326))), (ST_GeomFromText((?), (4326))))",
234
                builder.toString()
235
        );
236
        builder.geometry_support_type(GeometrySupportType.WKB);
237
        System.out.println(builder.toString());
238
        assertEquals(
239
                "ST_Intersects((ST_GeomFromWKB((DECODE('000000000140240000000000004034000000000000','hex')), (4326))), (ST_GeomFromWKB((?), (4326))))",
240
                builder.toString()
241
        );
242
        assertEquals(
243
                "[]",
244
                ArrayUtils.toString(builder.variables_names())
245
        );
246
        assertEquals(
247
                "[\"the_geom\"]",
248
                ArrayUtils.toString(builder.parameters_names())
249
        );
250
    }
251
    
252
    public void testParameterGeomWithParameterSRS() throws CreateGeometryException {
253
        ExpressionBuilder builder = new DefaultExpressionBuilder();
254
                
255
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
256
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
257
        
258
        Point point = geometryManager.createPoint(10, 20, Geometry.SUBTYPES.GEOM2D);
259
        builder.set(        
260
            builder.ST_Intersects(
261
              builder.geometry(point,proj),
262
              builder.parameter("the_geom").srs(
263
                      builder.parameter().value(proj)
264
              )
265
            )
266
        );
267
        builder.geometry_support_type(GeometrySupportType.WKT);
268
        System.out.println(builder.toString());
269
        assertEquals(
270
                "ST_Intersects((ST_GeomFromText(('POINT (10 20)'), (4326))), (ST_GeomFromText((?), (?))))",
271
                builder.toString()
272
        );
273
        builder.geometry_support_type(GeometrySupportType.WKB);
274
        System.out.println(builder.toString());
275
        assertEquals(
276
                "ST_Intersects((ST_GeomFromWKB((DECODE('000000000140240000000000004034000000000000','hex')), (4326))), (ST_GeomFromWKB((?), (?))))",
277
                builder.toString()
278
        );
279
        assertEquals(
280
                "[]",
281
                ArrayUtils.toString(builder.variables_names())
282
        );
283
        assertEquals(
284
                "[\"the_geom\", 4326]",
285
                ArrayUtils.toString(builder.parameters_names())
286
        );
287
    }
288
    
289
    public void testParameterGeomConstant() throws CreateGeometryException {
290
        ExpressionBuilder builder = new DefaultExpressionBuilder();
291
                
292
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
293
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
294
        
295
        Point point = geometryManager.createPoint(10, 20, Geometry.SUBTYPES.GEOM2D);
296
        Point point2 = geometryManager.createPoint(10, 20, Geometry.SUBTYPES.GEOM2D);
297
        point2.setProjection(proj);
298
        builder.set(        
299
            builder.ST_Intersects(
300
              builder.geometry(point,proj),
301
              builder.parameter().value(point2)
302
            )
303
        );
304
        builder.geometry_support_type(GeometrySupportType.WKT);
305
        System.out.println(builder.toString());
306
        assertEquals(
307
                "ST_Intersects((ST_GeomFromText(('POINT (10 20)'), (4326))), (ST_GeomFromText((?), (?))))",
308
                builder.toString()
309
        );
310
        builder.geometry_support_type(GeometrySupportType.WKB);
311
        System.out.println(builder.toString());
312
        assertEquals(
313
                "ST_Intersects((ST_GeomFromWKB((DECODE('000000000140240000000000004034000000000000','hex')), (4326))), (ST_GeomFromWKB((?), (?))))",
314
                builder.toString()
315
        );
316
        assertEquals(
317
                "[]",
318
                ArrayUtils.toString(builder.variables_names())
319
        );
320
        assertEquals(
321
                "[0x000000000140240000000000004034000000000000, 4326]",
322
                ArrayUtils.toString(builder.parameters_names())
323
        );
324
    }
325
    
165 326
    public void test4() throws CreateGeometryException {
166 327
        ExpressionBuilder builder = new DefaultExpressionBuilder();
167 328
                
......
186 347
        );
187 348
        assertEquals(
188 349
                "[geom1]",
189
                ArrayUtils.toString(getVariableNames(builder))
350
                ArrayUtils.toString(builder.variables_names())
190 351
        );
191 352
        assertEquals(
192 353
                "[\"geom2\", 4326]",
193
                ArrayUtils.toString(getParameterNames(builder))
354
                ArrayUtils.toString(builder.parameters_names())
194 355
        );
195 356
    }
196 357
        
......
213 374
        );
214 375
        assertEquals(
215 376
                "[geom]",
216
                ArrayUtils.toString(getVariableNames(builder))
377
                ArrayUtils.toString(builder.variables_names())
217 378
        );
218 379
        assertEquals(
219 380
                "[]",
220
                ArrayUtils.toString(getParameterNames(builder))
381
                ArrayUtils.toString(builder.parameters_names())
221 382
        );
222 383
    }
223 384
}

Also available in: Unified diff