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

History | View | Annotate | Download (18.2 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.DataTypeUtils;
9
import org.gvsig.tools.dataTypes.DataTypes;
10
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
11

    
12
public class TestExpressionBuilder extends TestCase {
13

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

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

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

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

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

    
37

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
346
        assertEquals(
347
                "\"precio\" + CEIL(PI())",
348
                builder.toString()
349
        );
350
        assertEquals(
351
                "[precio]",
352
                ArrayUtils.toString(builder.variables_names())
353
        );
354
        assertEquals(
355
                "[]",
356
                ArrayUtils.toString(builder.parameters_names())
357
        );
358
    }
359
    
360
    public void testGetitem1() {
361
//        // LIST('uno','dos','tres')[1]
362
//        ExpressionBuilder builder = createExpressionBuilder();
363
//        builder.getitem(
364
//            builder.list(
365
//                builder.constant("uno"), 
366
//                builder.constant("dos"), 
367
//                builder.constant("tres") 
368
//            ),
369
//            builder.constant(1)
370
//        );
371
//
372
//        assertEquals(
373
//                "GETITEM(LIST('uno', 'dos', 'tres'), 1)",
374
//                builder.toString()
375
//        );
376
//        assertEquals(
377
//                "[]",
378
//                ArrayUtils.toString(builder.variables_names())
379
//        );
380
//        assertEquals(
381
//                "[]",
382
//                ArrayUtils.toString(builder.parameters_names())
383
//        );
384
    }
385
    
386
    public void testConcat1() {
387
        ExpressionBuilder builder = createExpressionBuilder();
388
        builder.set(
389
            builder.concat(
390
                builder.constant("Total "), 
391
                builder.variable("precio"), 
392
                builder.constant(" euros")
393
            )
394
        );
395

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

    
419
        assertEquals(
420
                "\"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 test1() {
434
        // NOMBRE03 = 'Torre d''En Besora (la)'
435
        ExpressionBuilder builder = createExpressionBuilder();
436
        builder.set(
437
            builder.eq(
438
                builder.variable("NOMBRE03"), 
439
                builder.constant("Torre d'En Besora (la)")
440
            )
441
        );
442

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
646
    }
647

    
648
}