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

History | View | Annotate | Download (17.6 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 testConcat() {
387
        // CONCAT(precio,' euros')
388
        ExpressionBuilder builder = createExpressionBuilder();
389
        builder.set(
390
            builder.concat(
391
                builder.variable("precio"), 
392
                builder.constant(" euros")
393
            )
394
        );
395

    
396
        assertEquals(
397
                "\"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 test1() {
411
        // NOMBRE03 = 'Torre d''En Besora (la)'
412
        ExpressionBuilder builder = createExpressionBuilder();
413
        builder.set(
414
            builder.eq(
415
                builder.variable("NOMBRE03"), 
416
                builder.constant("Torre d'En Besora (la)")
417
            )
418
        );
419

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

    
444
        assertEquals(
445
                "( (\"1990\") = (0.168873933773767) )",
446
                builder.toString()
447
        );
448
        assertEquals(
449
                "[1990]",
450
                ArrayUtils.toString(builder.variables_names())
451
        );
452
        assertEquals(
453
                "[]",
454
                ArrayUtils.toString(builder.parameters_names())
455
        );
456
    }
457

    
458
    public void test2fields() {
459
        // [1990] = [precio]
460
        ExpressionBuilder builder = createExpressionBuilder();
461
        builder.set(
462
            builder.eq(
463
                builder.variable("1990"), 
464
                builder.variable("precio")
465
            )
466
        );
467

    
468
        assertEquals(
469
                "( (\"1990\") = (\"precio\") )",
470
                builder.toString()
471
        );
472
        assertEquals(
473
                "[1990, precio]",
474
                ArrayUtils.toString(builder.variables_names())
475
        );
476
        assertEquals(
477
                "[]",
478
                ArrayUtils.toString(builder.parameters_names())
479
        );
480
    }
481
    
482
    public void testInvokeMethod1() {
483
        // 'hola'.length()
484
        ExpressionBuilder builder = createExpressionBuilder();
485
        builder.set(
486
            builder.method(
487
                    builder.constant("hola"),
488
                    "length"
489
            )
490
        );
491

    
492
        assertEquals(
493
                "'hola'->length()",
494
                builder.toString()
495
        );
496
        assertEquals(
497
                "[]",
498
                ArrayUtils.toString(builder.variables_names())
499
        );
500
        assertEquals(
501
                "[]",
502
                ArrayUtils.toString(builder.parameters_names())
503
        );
504
    }
505
    
506
    
507
    public void testInvokeMethod2() {
508
        // 'hola'.indexOf('l')
509
        ExpressionBuilder builder = createExpressionBuilder();
510
        builder.set(
511
            builder.method(
512
                    builder.constant("hola"),
513
                    "indexOf",
514
                    builder.constant("l")
515
            )
516
        );
517

    
518
        assertEquals(
519
                "'hola'->indexOf('l')",
520
                builder.toString()
521
        );
522
        assertEquals(
523
                "[]",
524
                ArrayUtils.toString(builder.variables_names())
525
        );
526
        assertEquals(
527
                "[]",
528
                ArrayUtils.toString(builder.parameters_names())
529
        );
530
    }
531

    
532
    public void testDecimal1() {
533
        // 23.1
534
        ExpressionBuilder builder = createExpressionBuilder();
535
        builder.set(
536
            builder.constant(23.1)
537
        );
538

    
539
        assertEquals(
540
                "23.1",
541
                builder.toString()
542
        );
543
        assertEquals(
544
                "[]",
545
                ArrayUtils.toString(builder.variables_names())
546
        );
547
        assertEquals(
548
                "[]",
549
                ArrayUtils.toString(builder.parameters_names())
550
        );
551
    }
552

    
553
    public void testComplexExpression1() {
554
        ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
555
        
556
        builder.and(
557
          builder.eq(
558
            builder.lower(builder.variable("colum_name_c")),
559
            builder.parameter("colum_name_p")
560
          )
561
        );
562
        builder.and(
563
            builder.group(
564
                builder.or(
565
                    builder.like(
566
                        builder.lower( builder.variable("uno")),
567
                        builder.constant("%10")
568
                    ),
569
                    builder.lt(
570
                        builder.variable("dos"),
571
                        builder.constant(-3.5)
572
                    )
573
                )
574
            )
575
        );
576
        builder.and(
577
            builder.gt(
578
                builder.variable("tres"),
579
                builder.constant(123456789)
580
            )
581
        );
582
        assertEquals(
583
                "((( (LOWER(\"colum_name_c\")) = (?) ) AND ( ( (LOWER(\"uno\")) LIKE ('%10') ) OR ( (\"dos\") < (-3.5) ) )) AND ( (\"tres\") > (123456789) ))",
584
                builder.toString()
585
        );
586
        assertEquals(
587
                "[colum_name_c, dos, tres, uno]",
588
                ArrayUtils.toString(builder.variables_names())
589
        );
590
        assertEquals(
591
                "[\"colum_name_p\"]",
592
                ArrayUtils.toString(builder.parameters_names())
593
        );
594
    }
595
    
596
    public void testConstant() {
597
        ExpressionBuilder builder = createExpressionBuilder();
598

    
599
        ExpressionBuilder.Value v = builder.constant(10,DataTypes.INT);
600
        assertEquals("10", v.toString());
601

    
602
        v = builder.constant("10",DataTypes.INT);
603
        assertEquals("10", v.toString());
604

    
605
        v = builder.constant(10,DataTypes.LONG);
606
        assertEquals("10", v.toString());
607

    
608
        v = builder.constant("10",DataTypes.LONG);
609
        assertEquals("10", v.toString());
610

    
611
        v = builder.constant(10.5,DataTypes.DOUBLE);
612
        assertEquals("10.5", v.toString());
613

    
614
        v = builder.constant("10.5",DataTypes.DOUBLE);
615
        assertEquals("10.5", v.toString());
616

    
617
        v = builder.constant(10,DataTypes.STRING);
618
        assertEquals("'10'", v.toString());
619

    
620
        v = builder.constant(10.5,DataTypes.STRING);
621
        assertEquals("'10.5'", v.toString());
622

    
623
    }
624

    
625
}