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 @ 46104

History | View | Annotate | Download (19.4 KB)

1
package org.gvsig.expresionevaluator.impl;
2

    
3
import junit.framework.TestCase;
4
import static junit.framework.TestCase.assertEquals;
5
import org.apache.commons.lang3.ArrayUtils;
6
import org.gvsig.expressionevaluator.ExpressionBuilder;
7
import org.gvsig.expressionevaluator.ExpressionUtils;
8
import org.gvsig.tools.dataTypes.DataTypes;
9
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
10

    
11
public class TestExpressionBuilder extends TestCase {
12

    
13
    public TestExpressionBuilder(String testName) {
14
        super(testName);
15
    }
16

    
17
    @Override
18
    protected void setUp() throws Exception {
19
        super.setUp();
20
        new DefaultLibrariesInitializer().fullInitialize();
21
    }
22

    
23
    @Override
24
    protected void tearDown() throws Exception {
25
        super.tearDown();
26
    }
27

    
28
    protected ExpressionBuilder createExpressionBuilder() {
29
        ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
30
        return builder;
31
    }
32

    
33
    // TODO add test methods here. The name must begin with 'test'. For example:
34
    // public void testHello() {}
35

    
36

    
37
    public void testIdentifier1() {        
38
        ExpressionBuilder builder = createExpressionBuilder();
39
        builder.set(
40
            builder.variable("precio")
41
        );
42
        
43
        assertEquals(
44
                "\"precio\"",
45
                builder.toString()
46
        );
47
        assertEquals(
48
                "[precio]",
49
                ArrayUtils.toString(builder.variables_names())
50
        );
51
        assertEquals(
52
                "[]",
53
                ArrayUtils.toString(builder.parameters_names())
54
        );
55
    }
56

    
57
    public void testTrue() {
58
        ExpressionBuilder builder = createExpressionBuilder();
59
        builder.set(
60
            builder.constant(true)
61
        );
62

    
63
        assertEquals(
64
                "TRUE",
65
                builder.toString()
66
        );
67
        assertEquals(
68
                "[]",
69
                ArrayUtils.toString(builder.variables_names())
70
        );
71
        assertEquals(
72
                "[]",
73
                ArrayUtils.toString(builder.parameters_names())
74
        );
75
    }
76

    
77
    public void testFalse() {
78
        ExpressionBuilder builder = createExpressionBuilder();
79
        builder.set(
80
            builder.constant(false)
81
        );
82

    
83
        assertEquals(
84
                "FALSE",
85
                builder.toString()
86
        );
87
        assertEquals(
88
                "[]",
89
                ArrayUtils.toString(builder.variables_names())
90
        );
91
        assertEquals(
92
                "[]",
93
                ArrayUtils.toString(builder.parameters_names())
94
        );
95
    }
96

    
97
    public void testNull() {
98
        ExpressionBuilder builder = createExpressionBuilder();
99
        builder.set(
100
            builder.constant(null)
101
        );
102

    
103
        assertEquals(
104
                "NULL",
105
                builder.toString()
106
        );
107
        assertEquals(
108
                "[]",
109
                ArrayUtils.toString(builder.variables_names())
110
        );
111
        assertEquals(
112
                "[]",
113
                ArrayUtils.toString(builder.parameters_names())
114
        );
115
    }
116

    
117
    public void testIsNull() {
118
        ExpressionBuilder builder = createExpressionBuilder();
119
        builder.set(
120
            builder.is_null( builder.constant(10) )
121
        );
122

    
123
        assertEquals(
124
                "( (10) IS NULL )",
125
                builder.toString()
126
        );
127
        assertEquals(
128
                "[]",
129
                ArrayUtils.toString(builder.variables_names())
130
        );
131
        assertEquals(
132
                "[]",
133
                ArrayUtils.toString(builder.parameters_names())
134
        );
135
    }
136

    
137
    public void testIsNotNull() {
138
        ExpressionBuilder builder = createExpressionBuilder();
139
        builder.set(
140
            builder.not_is_null( builder.constant(10) )
141
        );
142

    
143
        assertEquals(
144
                "( (10) IS NOT NULL )",
145
                builder.toString()
146
        );
147
        assertEquals(
148
                "[]",
149
                ArrayUtils.toString(builder.variables_names())
150
        );
151
        assertEquals(
152
                "[]",
153
                ArrayUtils.toString(builder.parameters_names())
154
        );
155
    }
156

    
157
    public void testNotTrue() {
158
        ExpressionBuilder builder = createExpressionBuilder();
159
        builder.set(
160
            builder.not( builder.constant(true) )
161
        );
162

    
163
        assertEquals(
164
                "( NOT (TRUE) )",
165
                builder.toString()
166
        );
167
        assertEquals(
168
                "[]",
169
                ArrayUtils.toString(builder.variables_names())
170
        );
171
        assertEquals(
172
                "[]",
173
                ArrayUtils.toString(builder.parameters_names())
174
        );
175
    }
176

    
177
    public void testInteger() {
178
        ExpressionBuilder builder = createExpressionBuilder();
179
        builder.set(
180
            builder.constant(23)
181
        );
182

    
183
        assertEquals(
184
                "23",
185
                builder.toString()
186
        );
187
        assertEquals(
188
                "[]",
189
                ArrayUtils.toString(builder.variables_names())
190
        );
191
        assertEquals(
192
                "[]",
193
                ArrayUtils.toString(builder.parameters_names())
194
        );
195
    }
196

    
197
    public void testAddMul() {
198
        // precio + 10 * 2 + 20 + 30
199
        ExpressionBuilder builder = createExpressionBuilder();
200
        builder.set(
201
            builder.add(
202
                builder.add(
203
                    builder.add(
204
                        builder.variable("precio"), 
205
                        builder.mult(
206
                            builder.constant(10), 
207
                            builder.constant(2)
208
                        )
209
                    ),
210
                    builder.constant(20)
211
                ),
212
                builder.constant(30)
213
            )
214
        );
215

    
216
        assertEquals(
217
                "\"precio\" + (10 * 2) + 20 + 30",
218
                builder.toString()
219
        );
220
        assertEquals(
221
                "[precio]",
222
                ArrayUtils.toString(builder.variables_names())
223
        );
224
        assertEquals(
225
                "[]",
226
                ArrayUtils.toString(builder.parameters_names())
227
        );
228
    }
229
    
230
    public void testAddMulPar() {
231
        // (precio + 10) * 2 + 20 + 30
232
        ExpressionBuilder builder = createExpressionBuilder();
233
        builder.set(
234
            builder.add(
235
                builder.add(
236
                    builder.mult(
237
                        builder.add(
238
                            builder.variable("precio"), 
239
                            builder.constant(10)
240
                        ),
241
                        builder.constant(2)
242
                    ),
243
                    builder.constant(20)
244
                ),
245
                builder.constant(30)
246
            )
247
        );
248

    
249
        assertEquals(
250
                "(\"precio\" + 10 * 2) + 20 + 30",
251
                builder.toString()
252
        );
253
        assertEquals(
254
                "[precio]",
255
                ArrayUtils.toString(builder.variables_names())
256
        );
257
        assertEquals(
258
                "[]",
259
                ArrayUtils.toString(builder.parameters_names())
260
        );
261
    }
262
    
263
    public void testAbs() {
264
        // precio + abs(10)
265
        ExpressionBuilder builder = createExpressionBuilder();
266
        builder.set(
267
            builder.add(
268
                builder.variable("precio"), 
269
                builder.abs( builder.constant(10) )
270
            )
271
        );
272

    
273
        assertEquals(
274
                "\"precio\" + ABS(10)",
275
                builder.toString()
276
        );
277
        assertEquals(
278
                "[precio]",
279
                ArrayUtils.toString(builder.variables_names())
280
        );
281
        assertEquals(
282
                "[]",
283
                ArrayUtils.toString(builder.parameters_names())
284
        );
285
    }
286
    
287
    public void testLet() {
288
        //
289
        ExpressionBuilder builder = createExpressionBuilder();
290
        builder.set(
291
            builder.let(
292
                "precio", 
293
                builder.constant(10)
294
            )
295
        );
296

    
297
        assertEquals(
298
                "LET(\"precio\", 10)",
299
                builder.toString()
300
        );
301
        assertEquals(
302
                "[precio]",
303
                ArrayUtils.toString(builder.variables_names())
304
        );
305
        assertEquals(
306
                "[]",
307
                ArrayUtils.toString(builder.parameters_names())
308
        );
309
    }
310
    
311
    public void testAbs2() {
312
        // precio + abs(-10)
313
        ExpressionBuilder builder = createExpressionBuilder();
314
        builder.set(
315
            builder.add(
316
                builder.variable("precio"), 
317
                builder.abs( builder.constant(-10) )
318
            )
319
        );
320

    
321
        assertEquals(
322
                "\"precio\" + ABS(-10)",
323
                builder.toString()
324
        );
325
        assertEquals(
326
                "[precio]",
327
                ArrayUtils.toString(builder.variables_names())
328
        );
329
        assertEquals(
330
                "[]",
331
                ArrayUtils.toString(builder.parameters_names())
332
        );
333
    }
334
    
335
    public void testPI() {
336
        // precio + PI()
337
        ExpressionBuilder builder = createExpressionBuilder();
338
        builder.set(
339
            builder.add(
340
                builder.variable("precio"), 
341
                builder.pi()
342
            )
343
        );
344

    
345
        assertEquals(
346
                "\"precio\" + PI()",
347
                builder.toString()
348
        );
349
        assertEquals(
350
                "[precio]",
351
                ArrayUtils.toString(builder.variables_names())
352
        );
353
        assertEquals(
354
                "[]",
355
                ArrayUtils.toString(builder.parameters_names())
356
        );
357
    }
358
    
359
    public void testCeil() {
360
        // precio + CEIL(PI())
361
        ExpressionBuilder builder = createExpressionBuilder();
362
        builder.set(
363
            builder.add(
364
                builder.variable("precio"), 
365
                builder.ceil(builder.pi())
366
            )
367
        );
368

    
369
        assertEquals(
370
                "\"precio\" + CEIL(PI())",
371
                builder.toString()
372
        );
373
        assertEquals(
374
                "[precio]",
375
                ArrayUtils.toString(builder.variables_names())
376
        );
377
        assertEquals(
378
                "[]",
379
                ArrayUtils.toString(builder.parameters_names())
380
        );
381
    }
382
    
383
    public void testGetitem1() {
384
//        // LIST('uno','dos','tres')[1]
385
//        ExpressionBuilder builder = createExpressionBuilder();
386
//        builder.getitem(
387
//            builder.list(
388
//                builder.constant("uno"), 
389
//                builder.constant("dos"), 
390
//                builder.constant("tres") 
391
//            ),
392
//            builder.constant(1)
393
//        );
394
//
395
//        assertEquals(
396
//                "GETITEM(LIST('uno', 'dos', 'tres'), 1)",
397
//                builder.toString()
398
//        );
399
//        assertEquals(
400
//                "[]",
401
//                ArrayUtils.toString(builder.variables_names())
402
//        );
403
//        assertEquals(
404
//                "[]",
405
//                ArrayUtils.toString(builder.parameters_names())
406
//        );
407
    }
408
    
409
    public void testConcat1() {
410
        ExpressionBuilder builder = createExpressionBuilder();
411
        builder.set(
412
            builder.concat(
413
                builder.constant("Total "), 
414
                builder.variable("precio"), 
415
                builder.constant(" euros")
416
            )
417
        );
418

    
419
        assertEquals(
420
                "CONCAT('Total ', \"precio\", ' euros')",
421
                builder.toString()
422
        );
423
        assertEquals(
424
                "[precio]",
425
                ArrayUtils.toString(builder.variables_names())
426
        );
427
        assertEquals(
428
                "[]",
429
                ArrayUtils.toString(builder.parameters_names())
430
        );
431
    }
432
    
433
    public void testConcat2() {
434
        ExpressionBuilder builder = createExpressionBuilder();
435
        builder.set(
436
            builder.concat(
437
                builder.variable("precio"), 
438
                builder.constant(" euros")
439
            )
440
        );
441

    
442
        assertEquals(
443
                "\"precio\" || ' euros'",
444
                builder.toString()
445
        );
446
        assertEquals(
447
                "[precio]",
448
                ArrayUtils.toString(builder.variables_names())
449
        );
450
        assertEquals(
451
                "[]",
452
                ArrayUtils.toString(builder.parameters_names())
453
        );
454
    }
455
    
456
    public void test1() {
457
        // NOMBRE03 = 'Torre d''En Besora (la)'
458
        ExpressionBuilder builder = createExpressionBuilder();
459
        builder.set(
460
            builder.eq(
461
                builder.variable("NOMBRE03"), 
462
                builder.constant("Torre d'En Besora (la)")
463
            )
464
        );
465

    
466
        assertEquals(
467
                "( (\"NOMBRE03\") = ('Torre d''En Besora (la)') )",
468
                builder.toString()
469
        );
470
        assertEquals(
471
                "[NOMBRE03]",
472
                ArrayUtils.toString(builder.variables_names())
473
        );
474
        assertEquals(
475
                "[]",
476
                ArrayUtils.toString(builder.parameters_names())
477
        );
478
    }
479
    
480
    public void test2() {
481
        // [1990] = 0.168873933773767
482
        ExpressionBuilder builder = createExpressionBuilder();
483
        builder.set(
484
            builder.eq(
485
                builder.variable("1990"), 
486
                builder.constant(0.168873933773767)
487
            )
488
        );
489

    
490
        assertEquals(
491
                "( (\"1990\") = (0.168873933773767) )",
492
                builder.toString()
493
        );
494
        assertEquals(
495
                "[1990]",
496
                ArrayUtils.toString(builder.variables_names())
497
        );
498
        assertEquals(
499
                "[]",
500
                ArrayUtils.toString(builder.parameters_names())
501
        );
502
    }
503

    
504
    public void test2fields() {
505
        // [1990] = [precio]
506
        ExpressionBuilder builder = createExpressionBuilder();
507
        builder.set(
508
            builder.eq(
509
                builder.variable("1990"), 
510
                builder.variable("precio")
511
            )
512
        );
513

    
514
        assertEquals(
515
                "( (\"1990\") = (\"precio\") )",
516
                builder.toString()
517
        );
518
        assertEquals(
519
                "[1990, precio]",
520
                ArrayUtils.toString(builder.variables_names())
521
        );
522
        assertEquals(
523
                "[]",
524
                ArrayUtils.toString(builder.parameters_names())
525
        );
526
    }
527
    
528
    public void testInvokeMethod1() {
529
        // 'hola'.length()
530
        ExpressionBuilder builder = createExpressionBuilder();
531
        builder.set(
532
            builder.method(
533
                    builder.constant("hola"),
534
                    "length"
535
            )
536
        );
537

    
538
        assertEquals(
539
                "'hola'->length()",
540
                builder.toString()
541
        );
542
        assertEquals(
543
                "[]",
544
                ArrayUtils.toString(builder.variables_names())
545
        );
546
        assertEquals(
547
                "[]",
548
                ArrayUtils.toString(builder.parameters_names())
549
        );
550
    }
551
    
552
    
553
    public void testInvokeMethod2() {
554
        // 'hola'.indexOf('l')
555
        ExpressionBuilder builder = createExpressionBuilder();
556
        builder.set(
557
            builder.method(
558
                    builder.constant("hola"),
559
                    "indexOf",
560
                    builder.constant("l")
561
            )
562
        );
563

    
564
        assertEquals(
565
                "'hola'->indexOf('l')",
566
                builder.toString()
567
        );
568
        assertEquals(
569
                "[]",
570
                ArrayUtils.toString(builder.variables_names())
571
        );
572
        assertEquals(
573
                "[]",
574
                ArrayUtils.toString(builder.parameters_names())
575
        );
576
    }
577

    
578
    public void testDecimal1() {
579
        // 23.1
580
        ExpressionBuilder builder = createExpressionBuilder();
581
        builder.set(
582
            builder.constant(23.1)
583
        );
584

    
585
        assertEquals(
586
                "23.1",
587
                builder.toString()
588
        );
589
        assertEquals(
590
                "[]",
591
                ArrayUtils.toString(builder.variables_names())
592
        );
593
        assertEquals(
594
                "[]",
595
                ArrayUtils.toString(builder.parameters_names())
596
        );
597
    }
598

    
599
    public void testComplexExpression1() {
600
        ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
601
        
602
        builder.and(
603
          builder.eq(
604
            builder.lower(builder.variable("colum_name_c")),
605
            builder.parameter("colum_name_p")
606
          )
607
        );
608
        builder.and(
609
            builder.group(
610
                builder.or(
611
                    builder.like(
612
                        builder.lower( builder.variable("uno")),
613
                        builder.constant("%10")
614
                    ),
615
                    builder.lt(
616
                        builder.variable("dos"),
617
                        builder.constant(-3.5)
618
                    )
619
                )
620
            )
621
        );
622
        builder.and(
623
            builder.gt(
624
                builder.variable("tres"),
625
                builder.constant(123456789)
626
            )
627
        );
628
        assertEquals(
629
                "((( (LOWER(\"colum_name_c\")) = (?) ) AND ( (( (LOWER(\"uno\")) LIKE ('%10') ) OR ( (\"dos\") < (-3.5) )) )) AND ( (\"tres\") > (123456789) ))",
630
                builder.toString()
631
        );
632
        assertEquals(
633
                "[colum_name_c, dos, tres, uno]",
634
                ArrayUtils.toString(builder.variables_names())
635
        );
636
        assertEquals(
637
                "[\"colum_name_p\"]",
638
                ArrayUtils.toString(builder.parameters_names())
639
        );
640
    }
641
    
642
    public void testConstant() {
643
        ExpressionBuilder builder = createExpressionBuilder();
644

    
645
        ExpressionBuilder.Value v = builder.constant(10,DataTypes.INT);
646
        assertEquals("10", v.toString());
647

    
648
        v = builder.constant("10",DataTypes.INT);
649
        assertEquals("10", v.toString());
650

    
651
        v = builder.constant(10,DataTypes.LONG);
652
        assertEquals("10", v.toString());
653

    
654
        v = builder.constant("10",DataTypes.LONG);
655
        assertEquals("10", v.toString());
656

    
657
        v = builder.constant(10.5,DataTypes.DOUBLE);
658
        assertEquals("10.5", v.toString());
659

    
660
        v = builder.constant("10.5",DataTypes.DOUBLE);
661
        assertEquals("10.5", v.toString());
662

    
663
        v = builder.constant(10,DataTypes.STRING);
664
        assertEquals("'10'", v.toString());
665

    
666
        v = builder.constant(10.5,DataTypes.STRING);
667
        assertEquals("'10.5'", v.toString());
668

    
669
    }
670

    
671
    public void testGetAttr1() {
672
        ExpressionBuilder builder = createExpressionBuilder();
673
        builder.set(
674
            builder.getattr("ARENA2_VEHICULOS","ID_ACCIDENTE")
675
        );
676

    
677
        assertEquals(
678
                "\"ARENA2_VEHICULOS\".\"ID_ACCIDENTE\"",
679
                builder.toString()
680
        );
681
        assertEquals(
682
                "[ARENA2_VEHICULOS, ID_ACCIDENTE]",
683
                ArrayUtils.toString(builder.variables_names())
684
        );
685
        assertEquals(
686
                "[]",
687
                ArrayUtils.toString(builder.parameters_names())
688
        );
689
    }
690
    
691
}