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

History | View | Annotate | Download (18.8 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 testAbs2() {
288
        // precio + abs(-10)
289
        ExpressionBuilder builder = createExpressionBuilder();
290
        builder.set(
291
            builder.add(
292
                builder.variable("precio"), 
293
                builder.abs( builder.constant(-10) )
294
            )
295
        );
296

    
297
        assertEquals(
298
                "\"precio\" + ABS(-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 testPI() {
312
        // precio + PI()
313
        ExpressionBuilder builder = createExpressionBuilder();
314
        builder.set(
315
            builder.add(
316
                builder.variable("precio"), 
317
                builder.pi()
318
            )
319
        );
320

    
321
        assertEquals(
322
                "\"precio\" + PI()",
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 testCeil() {
336
        // precio + CEIL(PI())
337
        ExpressionBuilder builder = createExpressionBuilder();
338
        builder.set(
339
            builder.add(
340
                builder.variable("precio"), 
341
                builder.ceil(builder.pi())
342
            )
343
        );
344

    
345
        assertEquals(
346
                "\"precio\" + CEIL(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 testGetitem1() {
360
//        // LIST('uno','dos','tres')[1]
361
//        ExpressionBuilder builder = createExpressionBuilder();
362
//        builder.getitem(
363
//            builder.list(
364
//                builder.constant("uno"), 
365
//                builder.constant("dos"), 
366
//                builder.constant("tres") 
367
//            ),
368
//            builder.constant(1)
369
//        );
370
//
371
//        assertEquals(
372
//                "GETITEM(LIST('uno', 'dos', 'tres'), 1)",
373
//                builder.toString()
374
//        );
375
//        assertEquals(
376
//                "[]",
377
//                ArrayUtils.toString(builder.variables_names())
378
//        );
379
//        assertEquals(
380
//                "[]",
381
//                ArrayUtils.toString(builder.parameters_names())
382
//        );
383
    }
384
    
385
    public void testConcat1() {
386
        ExpressionBuilder builder = createExpressionBuilder();
387
        builder.set(
388
            builder.concat(
389
                builder.constant("Total "), 
390
                builder.variable("precio"), 
391
                builder.constant(" euros")
392
            )
393
        );
394

    
395
        assertEquals(
396
                "CONCAT('Total ', \"precio\", ' euros')",
397
                builder.toString()
398
        );
399
        assertEquals(
400
                "[precio]",
401
                ArrayUtils.toString(builder.variables_names())
402
        );
403
        assertEquals(
404
                "[]",
405
                ArrayUtils.toString(builder.parameters_names())
406
        );
407
    }
408
    
409
    public void testConcat2() {
410
        ExpressionBuilder builder = createExpressionBuilder();
411
        builder.set(
412
            builder.concat(
413
                builder.variable("precio"), 
414
                builder.constant(" euros")
415
            )
416
        );
417

    
418
        assertEquals(
419
                "\"precio\" || ' euros'",
420
                builder.toString()
421
        );
422
        assertEquals(
423
                "[precio]",
424
                ArrayUtils.toString(builder.variables_names())
425
        );
426
        assertEquals(
427
                "[]",
428
                ArrayUtils.toString(builder.parameters_names())
429
        );
430
    }
431
    
432
    public void test1() {
433
        // NOMBRE03 = 'Torre d''En Besora (la)'
434
        ExpressionBuilder builder = createExpressionBuilder();
435
        builder.set(
436
            builder.eq(
437
                builder.variable("NOMBRE03"), 
438
                builder.constant("Torre d'En Besora (la)")
439
            )
440
        );
441

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

    
466
        assertEquals(
467
                "( (\"1990\") = (0.168873933773767) )",
468
                builder.toString()
469
        );
470
        assertEquals(
471
                "[1990]",
472
                ArrayUtils.toString(builder.variables_names())
473
        );
474
        assertEquals(
475
                "[]",
476
                ArrayUtils.toString(builder.parameters_names())
477
        );
478
    }
479

    
480
    public void test2fields() {
481
        // [1990] = [precio]
482
        ExpressionBuilder builder = createExpressionBuilder();
483
        builder.set(
484
            builder.eq(
485
                builder.variable("1990"), 
486
                builder.variable("precio")
487
            )
488
        );
489

    
490
        assertEquals(
491
                "( (\"1990\") = (\"precio\") )",
492
                builder.toString()
493
        );
494
        assertEquals(
495
                "[1990, precio]",
496
                ArrayUtils.toString(builder.variables_names())
497
        );
498
        assertEquals(
499
                "[]",
500
                ArrayUtils.toString(builder.parameters_names())
501
        );
502
    }
503
    
504
    public void testInvokeMethod1() {
505
        // 'hola'.length()
506
        ExpressionBuilder builder = createExpressionBuilder();
507
        builder.set(
508
            builder.method(
509
                    builder.constant("hola"),
510
                    "length"
511
            )
512
        );
513

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

    
540
        assertEquals(
541
                "'hola'->indexOf('l')",
542
                builder.toString()
543
        );
544
        assertEquals(
545
                "[]",
546
                ArrayUtils.toString(builder.variables_names())
547
        );
548
        assertEquals(
549
                "[]",
550
                ArrayUtils.toString(builder.parameters_names())
551
        );
552
    }
553

    
554
    public void testDecimal1() {
555
        // 23.1
556
        ExpressionBuilder builder = createExpressionBuilder();
557
        builder.set(
558
            builder.constant(23.1)
559
        );
560

    
561
        assertEquals(
562
                "23.1",
563
                builder.toString()
564
        );
565
        assertEquals(
566
                "[]",
567
                ArrayUtils.toString(builder.variables_names())
568
        );
569
        assertEquals(
570
                "[]",
571
                ArrayUtils.toString(builder.parameters_names())
572
        );
573
    }
574

    
575
    public void testComplexExpression1() {
576
        ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
577
        
578
        builder.and(
579
          builder.eq(
580
            builder.lower(builder.variable("colum_name_c")),
581
            builder.parameter("colum_name_p")
582
          )
583
        );
584
        builder.and(
585
            builder.group(
586
                builder.or(
587
                    builder.like(
588
                        builder.lower( builder.variable("uno")),
589
                        builder.constant("%10")
590
                    ),
591
                    builder.lt(
592
                        builder.variable("dos"),
593
                        builder.constant(-3.5)
594
                    )
595
                )
596
            )
597
        );
598
        builder.and(
599
            builder.gt(
600
                builder.variable("tres"),
601
                builder.constant(123456789)
602
            )
603
        );
604
        assertEquals(
605
                "((( (LOWER(\"colum_name_c\")) = (?) ) AND ( (( (LOWER(\"uno\")) LIKE ('%10') ) OR ( (\"dos\") < (-3.5) )) )) AND ( (\"tres\") > (123456789) ))",
606
                builder.toString()
607
        );
608
        assertEquals(
609
                "[colum_name_c, dos, tres, uno]",
610
                ArrayUtils.toString(builder.variables_names())
611
        );
612
        assertEquals(
613
                "[\"colum_name_p\"]",
614
                ArrayUtils.toString(builder.parameters_names())
615
        );
616
    }
617
    
618
    public void testConstant() {
619
        ExpressionBuilder builder = createExpressionBuilder();
620

    
621
        ExpressionBuilder.Value v = builder.constant(10,DataTypes.INT);
622
        assertEquals("10", v.toString());
623

    
624
        v = builder.constant("10",DataTypes.INT);
625
        assertEquals("10", v.toString());
626

    
627
        v = builder.constant(10,DataTypes.LONG);
628
        assertEquals("10", v.toString());
629

    
630
        v = builder.constant("10",DataTypes.LONG);
631
        assertEquals("10", v.toString());
632

    
633
        v = builder.constant(10.5,DataTypes.DOUBLE);
634
        assertEquals("10.5", v.toString());
635

    
636
        v = builder.constant("10.5",DataTypes.DOUBLE);
637
        assertEquals("10.5", v.toString());
638

    
639
        v = builder.constant(10,DataTypes.STRING);
640
        assertEquals("'10'", v.toString());
641

    
642
        v = builder.constant(10.5,DataTypes.STRING);
643
        assertEquals("'10.5'", v.toString());
644

    
645
    }
646

    
647
    public void testGetAttr1() {
648
        ExpressionBuilder builder = createExpressionBuilder();
649
        builder.set(
650
            builder.getattr("ARENA2_VEHICULOS","ID_ACCIDENTE")
651
        );
652

    
653
        assertEquals(
654
                "\"ARENA2_VEHICULOS\".\"ID_ACCIDENTE\"",
655
                builder.toString()
656
        );
657
        assertEquals(
658
                "[ARENA2_VEHICULOS, ID_ACCIDENTE]",
659
                ArrayUtils.toString(builder.variables_names())
660
        );
661
        assertEquals(
662
                "[]",
663
                ArrayUtils.toString(builder.parameters_names())
664
        );
665
    }
666
    
667
}