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 / TestExpressionBuilder.java @ 44644

History | View | Annotate | Download (16.6 KB)

1 44006 jjdelcerro
package org.gvsig.expresionevaluator.impl;
2 43128 jjdelcerro
3 44006 jjdelcerro
import junit.framework.TestCase;
4 44644 jjdelcerro
import static junit.framework.TestCase.assertEquals;
5 43128 jjdelcerro
import org.apache.commons.lang3.ArrayUtils;
6 44006 jjdelcerro
import org.gvsig.expressionevaluator.ExpressionBuilder;
7 44644 jjdelcerro
import org.gvsig.expressionevaluator.ExpressionUtils;
8 44006 jjdelcerro
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
9 43128 jjdelcerro
10 44006 jjdelcerro
public class TestExpressionBuilder extends TestCase {
11
12
    public TestExpressionBuilder(String testName) {
13
        super(testName);
14
    }
15
16 43128 jjdelcerro
    @Override
17 44006 jjdelcerro
    protected void setUp() throws Exception {
18
        super.setUp();
19
        new DefaultLibrariesInitializer().fullInitialize();
20
    }
21 43128 jjdelcerro
22 44006 jjdelcerro
    @Override
23
    protected void tearDown() throws Exception {
24
        super.tearDown();
25 43128 jjdelcerro
    }
26 44006 jjdelcerro
27 44644 jjdelcerro
    protected ExpressionBuilder createExpressionBuilder() {
28
        ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
29
        return builder;
30
    }
31
32 44006 jjdelcerro
    // TODO add test methods here. The name must begin with 'test'. For example:
33
    // public void testHello() {}
34 44644 jjdelcerro
35
36
    public void testIdentifier1() {
37
        ExpressionBuilder builder = createExpressionBuilder();
38
        builder.set(
39
            builder.variable("precio")
40
        );
41 43128 jjdelcerro
42 44644 jjdelcerro
        assertEquals(
43
                "\"precio\"",
44
                builder.toString()
45 43128 jjdelcerro
        );
46 44644 jjdelcerro
        assertEquals(
47
                "[precio]",
48
                ArrayUtils.toString(builder.variables_names())
49 43128 jjdelcerro
        );
50 44644 jjdelcerro
        assertEquals(
51
                "[]",
52
                ArrayUtils.toString(builder.parameters_names())
53 43128 jjdelcerro
        );
54 44644 jjdelcerro
    }
55
56
    public void testTrue() {
57
        ExpressionBuilder builder = createExpressionBuilder();
58
        builder.set(
59
            builder.constant(true)
60 43128 jjdelcerro
        );
61 44644 jjdelcerro
62 43128 jjdelcerro
        assertEquals(
63 44644 jjdelcerro
                "TRUE",
64 43128 jjdelcerro
                builder.toString()
65
        );
66
        assertEquals(
67 44644 jjdelcerro
                "[]",
68 44198 jjdelcerro
                ArrayUtils.toString(builder.variables_names())
69 43128 jjdelcerro
        );
70
        assertEquals(
71 44644 jjdelcerro
                "[]",
72 44198 jjdelcerro
                ArrayUtils.toString(builder.parameters_names())
73 43128 jjdelcerro
        );
74
    }
75 44644 jjdelcerro
76
    public void testFalse() {
77
        ExpressionBuilder builder = createExpressionBuilder();
78
        builder.set(
79
            builder.constant(false)
80 43128 jjdelcerro
        );
81 44644 jjdelcerro
82 43128 jjdelcerro
        assertEquals(
83 44644 jjdelcerro
                "FALSE",
84 43128 jjdelcerro
                builder.toString()
85
        );
86
        assertEquals(
87 44644 jjdelcerro
                "[]",
88
                ArrayUtils.toString(builder.variables_names())
89
        );
90
        assertEquals(
91
                "[]",
92
                ArrayUtils.toString(builder.parameters_names())
93
        );
94
    }
95
96
    public void testNull() {
97
        ExpressionBuilder builder = createExpressionBuilder();
98
        builder.set(
99
            builder.constant(null)
100
        );
101
102
        assertEquals(
103
                "NULL",
104 43128 jjdelcerro
                builder.toString()
105
        );
106
        assertEquals(
107 44644 jjdelcerro
                "[]",
108 44198 jjdelcerro
                ArrayUtils.toString(builder.variables_names())
109 43128 jjdelcerro
        );
110
        assertEquals(
111
                "[]",
112 44198 jjdelcerro
                ArrayUtils.toString(builder.parameters_names())
113 43128 jjdelcerro
        );
114
    }
115 44644 jjdelcerro
116
    public void testIsNull() {
117
        ExpressionBuilder builder = createExpressionBuilder();
118
        builder.set(
119
            builder.is_null( builder.constant(10) )
120 44198 jjdelcerro
        );
121 44644 jjdelcerro
122 44198 jjdelcerro
        assertEquals(
123 44644 jjdelcerro
                "( (10) IS NULL )",
124 44198 jjdelcerro
                builder.toString()
125
        );
126
        assertEquals(
127 44644 jjdelcerro
                "[]",
128
                ArrayUtils.toString(builder.variables_names())
129
        );
130
        assertEquals(
131
                "[]",
132
                ArrayUtils.toString(builder.parameters_names())
133
        );
134
    }
135
136
    public void testIsNotNull() {
137
        ExpressionBuilder builder = createExpressionBuilder();
138
        builder.set(
139
            builder.not_is_null( builder.constant(10) )
140
        );
141
142
        assertEquals(
143
                "( (10) IS NOT NULL )",
144 44198 jjdelcerro
                builder.toString()
145
        );
146
        assertEquals(
147
                "[]",
148
                ArrayUtils.toString(builder.variables_names())
149
        );
150
        assertEquals(
151 44644 jjdelcerro
                "[]",
152 44198 jjdelcerro
                ArrayUtils.toString(builder.parameters_names())
153
        );
154
    }
155 44644 jjdelcerro
156
    public void testNotTrue() {
157
        ExpressionBuilder builder = createExpressionBuilder();
158
        builder.set(
159
            builder.not( builder.constant(true) )
160
        );
161
162
        assertEquals(
163
                "( NOT (TRUE) )",
164
                builder.toString()
165
        );
166
        assertEquals(
167
                "[]",
168
                ArrayUtils.toString(builder.variables_names())
169
        );
170
        assertEquals(
171
                "[]",
172
                ArrayUtils.toString(builder.parameters_names())
173
        );
174
    }
175
176
    public void testInteger() {
177
        ExpressionBuilder builder = createExpressionBuilder();
178
        builder.set(
179
            builder.constant(23)
180
        );
181
182
        assertEquals(
183
                "23",
184
                builder.toString()
185
        );
186
        assertEquals(
187
                "[]",
188
                ArrayUtils.toString(builder.variables_names())
189
        );
190
        assertEquals(
191
                "[]",
192
                ArrayUtils.toString(builder.parameters_names())
193
        );
194
    }
195
196
    public void testAddMul() {
197
        // precio + 10 * 2 + 20 + 30
198
        ExpressionBuilder builder = createExpressionBuilder();
199
        builder.set(
200
            builder.add(
201
                builder.add(
202
                    builder.add(
203
                        builder.variable("precio"),
204
                        builder.mult(
205
                            builder.constant(10),
206
                            builder.constant(2)
207
                        )
208
                    ),
209
                    builder.constant(20)
210
                ),
211
                builder.constant(30)
212
            )
213
        );
214
215
        assertEquals(
216
                "\"precio\" + (10 * 2) + 20 + 30",
217
                builder.toString()
218
        );
219
        assertEquals(
220
                "[precio]",
221
                ArrayUtils.toString(builder.variables_names())
222
        );
223
        assertEquals(
224
                "[]",
225
                ArrayUtils.toString(builder.parameters_names())
226
        );
227
    }
228 44198 jjdelcerro
229 44644 jjdelcerro
    public void testAddMulPar() {
230
        // (precio + 10) * 2 + 20 + 30
231
        ExpressionBuilder builder = createExpressionBuilder();
232
        builder.set(
233
            builder.add(
234
                builder.add(
235
                    builder.mult(
236
                        builder.add(
237
                            builder.variable("precio"),
238
                            builder.constant(10)
239
                        ),
240
                        builder.constant(2)
241
                    ),
242
                    builder.constant(20)
243
                ),
244
                builder.constant(30)
245 44198 jjdelcerro
            )
246
        );
247 44644 jjdelcerro
248
        assertEquals(
249
                "(\"precio\" + 10 * 2) + 20 + 30",
250
                builder.toString()
251
        );
252
        assertEquals(
253
                "[precio]",
254
                ArrayUtils.toString(builder.variables_names())
255
        );
256
        assertEquals(
257
                "[]",
258
                ArrayUtils.toString(builder.parameters_names())
259
        );
260 44198 jjdelcerro
    }
261
262 44644 jjdelcerro
    public void testAbs() {
263
        // precio + abs(10)
264
        ExpressionBuilder builder = createExpressionBuilder();
265
        builder.set(
266
            builder.add(
267
                builder.variable("precio"),
268
                builder.abs( builder.constant(10) )
269 44198 jjdelcerro
            )
270
        );
271 44644 jjdelcerro
272 44198 jjdelcerro
        assertEquals(
273 44644 jjdelcerro
                "\"precio\" + ABS(10)",
274 44198 jjdelcerro
                builder.toString()
275
        );
276
        assertEquals(
277 44644 jjdelcerro
                "[precio]",
278
                ArrayUtils.toString(builder.variables_names())
279
        );
280
        assertEquals(
281
                "[]",
282
                ArrayUtils.toString(builder.parameters_names())
283
        );
284
    }
285
286
    public void testAbs2() {
287
        // precio + abs(-10)
288
        ExpressionBuilder builder = createExpressionBuilder();
289
        builder.set(
290
            builder.add(
291
                builder.variable("precio"),
292
                builder.abs( builder.constant(-10) )
293
            )
294
        );
295
296
        assertEquals(
297
                "\"precio\" + ABS(-10)",
298 44198 jjdelcerro
                builder.toString()
299
        );
300
        assertEquals(
301 44644 jjdelcerro
                "[precio]",
302 44198 jjdelcerro
                ArrayUtils.toString(builder.variables_names())
303
        );
304
        assertEquals(
305 44644 jjdelcerro
                "[]",
306 44198 jjdelcerro
                ArrayUtils.toString(builder.parameters_names())
307
        );
308
    }
309
310 44644 jjdelcerro
    public void testPI() {
311
        // precio + PI()
312
        ExpressionBuilder builder = createExpressionBuilder();
313
        builder.set(
314
            builder.add(
315
                builder.variable("precio"),
316
                builder.pi()
317 44198 jjdelcerro
            )
318
        );
319 44644 jjdelcerro
320 44198 jjdelcerro
        assertEquals(
321 44644 jjdelcerro
                "\"precio\" + PI()",
322 44198 jjdelcerro
                builder.toString()
323
        );
324
        assertEquals(
325 44644 jjdelcerro
                "[precio]",
326
                ArrayUtils.toString(builder.variables_names())
327
        );
328
        assertEquals(
329
                "[]",
330
                ArrayUtils.toString(builder.parameters_names())
331
        );
332
    }
333
334
    public void testCeil() {
335
        // precio + CEIL(PI())
336
        ExpressionBuilder builder = createExpressionBuilder();
337
        builder.set(
338
            builder.add(
339
                builder.variable("precio"),
340
                builder.ceil(builder.pi())
341
            )
342
        );
343
344
        assertEquals(
345
                "\"precio\" + CEIL(PI())",
346 44198 jjdelcerro
                builder.toString()
347
        );
348
        assertEquals(
349 44644 jjdelcerro
                "[precio]",
350 44198 jjdelcerro
                ArrayUtils.toString(builder.variables_names())
351
        );
352
        assertEquals(
353 44644 jjdelcerro
                "[]",
354 44198 jjdelcerro
                ArrayUtils.toString(builder.parameters_names())
355
        );
356
    }
357
358 44644 jjdelcerro
    public void testGetitem1() {
359
//        // LIST('uno','dos','tres')[1]
360
//        ExpressionBuilder builder = createExpressionBuilder();
361
//        builder.getitem(
362
//            builder.list(
363
//                builder.constant("uno"),
364
//                builder.constant("dos"),
365
//                builder.constant("tres")
366
//            ),
367
//            builder.constant(1)
368
//        );
369
//
370
//        assertEquals(
371
//                "GETITEM(LIST('uno', 'dos', 'tres'), 1)",
372
//                builder.toString()
373
//        );
374
//        assertEquals(
375
//                "[]",
376
//                ArrayUtils.toString(builder.variables_names())
377
//        );
378
//        assertEquals(
379
//                "[]",
380
//                ArrayUtils.toString(builder.parameters_names())
381
//        );
382
    }
383
384
    public void testConcat() {
385
        // CONCAT(precio,' euros')
386
        ExpressionBuilder builder = createExpressionBuilder();
387
        builder.set(
388
            builder.concat(
389
                builder.variable("precio"),
390
                builder.constant(" euros")
391 44198 jjdelcerro
            )
392
        );
393 44644 jjdelcerro
394 44198 jjdelcerro
        assertEquals(
395 44644 jjdelcerro
                "\"precio\" || ' euros'",
396 44198 jjdelcerro
                builder.toString()
397
        );
398
        assertEquals(
399 44644 jjdelcerro
                "[precio]",
400
                ArrayUtils.toString(builder.variables_names())
401
        );
402
        assertEquals(
403
                "[]",
404
                ArrayUtils.toString(builder.parameters_names())
405
        );
406
    }
407
408
    public void test1() {
409
        // NOMBRE03 = 'Torre d''En Besora (la)'
410
        ExpressionBuilder builder = createExpressionBuilder();
411
        builder.set(
412
            builder.eq(
413
                builder.variable("NOMBRE03"),
414
                builder.constant("Torre d'En Besora (la)")
415
            )
416
        );
417
418
        assertEquals(
419
                "( (\"NOMBRE03\") = ('Torre d''En Besora (la)') )",
420 44198 jjdelcerro
                builder.toString()
421
        );
422
        assertEquals(
423 44644 jjdelcerro
                "[NOMBRE03]",
424 44198 jjdelcerro
                ArrayUtils.toString(builder.variables_names())
425
        );
426
        assertEquals(
427 44644 jjdelcerro
                "[]",
428 44198 jjdelcerro
                ArrayUtils.toString(builder.parameters_names())
429
        );
430
    }
431
432 44644 jjdelcerro
    public void test2() {
433
        // [1990] = 0.168873933773767
434
        ExpressionBuilder builder = createExpressionBuilder();
435
        builder.set(
436
            builder.eq(
437
                builder.variable("1990"),
438
                builder.constant(0.168873933773767)
439 44198 jjdelcerro
            )
440
        );
441 44644 jjdelcerro
442 44198 jjdelcerro
        assertEquals(
443 44644 jjdelcerro
                "( (\"1990\") = (0.168873933773767) )",
444 44198 jjdelcerro
                builder.toString()
445
        );
446
        assertEquals(
447 44644 jjdelcerro
                "[1990]",
448
                ArrayUtils.toString(builder.variables_names())
449
        );
450
        assertEquals(
451
                "[]",
452
                ArrayUtils.toString(builder.parameters_names())
453
        );
454
    }
455
456
    public void test2fields() {
457
        // [1990] = [precio]
458
        ExpressionBuilder builder = createExpressionBuilder();
459
        builder.set(
460
            builder.eq(
461
                builder.variable("1990"),
462
                builder.variable("precio")
463
            )
464
        );
465
466
        assertEquals(
467
                "( (\"1990\") = (\"precio\") )",
468 44198 jjdelcerro
                builder.toString()
469
        );
470
        assertEquals(
471 44644 jjdelcerro
                "[1990, precio]",
472
                ArrayUtils.toString(builder.variables_names())
473
        );
474
        assertEquals(
475 44198 jjdelcerro
                "[]",
476 44644 jjdelcerro
                ArrayUtils.toString(builder.parameters_names())
477
        );
478
    }
479
480
    public void testInvokeMethod1() {
481
        // 'hola'.length()
482
        ExpressionBuilder builder = createExpressionBuilder();
483
        builder.set(
484
            builder.method(
485
                    builder.constant("hola"),
486
                    "length"
487
            )
488
        );
489
490
        assertEquals(
491
                "'hola'->length()",
492
                builder.toString()
493
        );
494
        assertEquals(
495
                "[]",
496 44198 jjdelcerro
                ArrayUtils.toString(builder.variables_names())
497
        );
498
        assertEquals(
499 44644 jjdelcerro
                "[]",
500 44198 jjdelcerro
                ArrayUtils.toString(builder.parameters_names())
501
        );
502
    }
503
504 44644 jjdelcerro
505
    public void testInvokeMethod2() {
506
        // 'hola'.indexOf('l')
507
        ExpressionBuilder builder = createExpressionBuilder();
508
        builder.set(
509
            builder.method(
510
                    builder.constant("hola"),
511
                    "indexOf",
512
                    builder.constant("l")
513
            )
514 43128 jjdelcerro
        );
515 44644 jjdelcerro
516 43128 jjdelcerro
        assertEquals(
517 44644 jjdelcerro
                "'hola'->indexOf('l')",
518 43128 jjdelcerro
                builder.toString()
519
        );
520
        assertEquals(
521 44644 jjdelcerro
                "[]",
522 44198 jjdelcerro
                ArrayUtils.toString(builder.variables_names())
523 43128 jjdelcerro
        );
524
        assertEquals(
525 44644 jjdelcerro
                "[]",
526 44198 jjdelcerro
                ArrayUtils.toString(builder.parameters_names())
527 43128 jjdelcerro
        );
528
    }
529 44644 jjdelcerro
530
    public void testDecimal1() {
531
        // 23.1
532
        ExpressionBuilder builder = createExpressionBuilder();
533
        builder.set(
534
            builder.constant(23.1)
535 43128 jjdelcerro
        );
536 44644 jjdelcerro
537 43128 jjdelcerro
        assertEquals(
538 44644 jjdelcerro
                "23.1",
539 43128 jjdelcerro
                builder.toString()
540
        );
541
        assertEquals(
542 44644 jjdelcerro
                "[]",
543 44198 jjdelcerro
                ArrayUtils.toString(builder.variables_names())
544 43128 jjdelcerro
        );
545
        assertEquals(
546
                "[]",
547 44198 jjdelcerro
                ArrayUtils.toString(builder.parameters_names())
548 43128 jjdelcerro
        );
549
    }
550 44364 jjdelcerro
551 44644 jjdelcerro
    public void testComplexExpression1() {
552
        ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
553 44364 jjdelcerro
554 44644 jjdelcerro
        builder.and(
555
          builder.eq(
556
            builder.lower(builder.variable("colum_name_c")),
557
            builder.parameter("colum_name_p")
558
          )
559
        );
560
        builder.and(
561
            builder.group(
562
                builder.or(
563
                    builder.like(
564
                        builder.lower( builder.variable("uno")),
565
                        builder.constant("%10")
566
                    ),
567
                    builder.lt(
568
                        builder.variable("dos"),
569
                        builder.constant(-3.5)
570
                    )
571
                )
572 44376 jjdelcerro
            )
573
        );
574 44644 jjdelcerro
        builder.and(
575
            builder.gt(
576
                builder.variable("tres"),
577
                builder.constant(123456789)
578 44364 jjdelcerro
            )
579
        );
580
        assertEquals(
581 44644 jjdelcerro
                "((( (LOWER(\"colum_name_c\")) = (?) ) AND ( ( (LOWER(\"uno\")) LIKE ('%10') ) OR ( (\"dos\") < (-3.5) ) )) AND ( (\"tres\") > (123456789) ))",
582 44364 jjdelcerro
                builder.toString()
583
        );
584
        assertEquals(
585 44644 jjdelcerro
                "[colum_name_c, dos, tres, uno]",
586 44364 jjdelcerro
                ArrayUtils.toString(builder.variables_names())
587
        );
588
        assertEquals(
589 44644 jjdelcerro
                "[\"colum_name_p\"]",
590 44364 jjdelcerro
                ArrayUtils.toString(builder.parameters_names())
591
        );
592
    }
593 44644 jjdelcerro
594 43128 jjdelcerro
}