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
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.library.impl.DefaultLibrariesInitializer;
9

    
10
public class TestExpressionBuilder extends TestCase {
11

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

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

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

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

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

    
35

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

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

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

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

    
82
        assertEquals(
83
                "FALSE",
84
                builder.toString()
85
        );
86
        assertEquals(
87
                "[]",
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
                builder.toString()
105
        );
106
        assertEquals(
107
                "[]",
108
                ArrayUtils.toString(builder.variables_names())
109
        );
110
        assertEquals(
111
                "[]",
112
                ArrayUtils.toString(builder.parameters_names())
113
        );
114
    }
115

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

    
122
        assertEquals(
123
                "( (10) IS NULL )",
124
                builder.toString()
125
        );
126
        assertEquals(
127
                "[]",
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
                builder.toString()
145
        );
146
        assertEquals(
147
                "[]",
148
                ArrayUtils.toString(builder.variables_names())
149
        );
150
        assertEquals(
151
                "[]",
152
                ArrayUtils.toString(builder.parameters_names())
153
        );
154
    }
155

    
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
    
229
    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
            )
246
        );
247

    
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
    }
261
    
262
    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
            )
270
        );
271

    
272
        assertEquals(
273
                "\"precio\" + ABS(10)",
274
                builder.toString()
275
        );
276
        assertEquals(
277
                "[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
                builder.toString()
299
        );
300
        assertEquals(
301
                "[precio]",
302
                ArrayUtils.toString(builder.variables_names())
303
        );
304
        assertEquals(
305
                "[]",
306
                ArrayUtils.toString(builder.parameters_names())
307
        );
308
    }
309
    
310
    public void testPI() {
311
        // precio + PI()
312
        ExpressionBuilder builder = createExpressionBuilder();
313
        builder.set(
314
            builder.add(
315
                builder.variable("precio"), 
316
                builder.pi()
317
            )
318
        );
319

    
320
        assertEquals(
321
                "\"precio\" + PI()",
322
                builder.toString()
323
        );
324
        assertEquals(
325
                "[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
                builder.toString()
347
        );
348
        assertEquals(
349
                "[precio]",
350
                ArrayUtils.toString(builder.variables_names())
351
        );
352
        assertEquals(
353
                "[]",
354
                ArrayUtils.toString(builder.parameters_names())
355
        );
356
    }
357
    
358
    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
            )
392
        );
393

    
394
        assertEquals(
395
                "\"precio\" || ' euros'",
396
                builder.toString()
397
        );
398
        assertEquals(
399
                "[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
                builder.toString()
421
        );
422
        assertEquals(
423
                "[NOMBRE03]",
424
                ArrayUtils.toString(builder.variables_names())
425
        );
426
        assertEquals(
427
                "[]",
428
                ArrayUtils.toString(builder.parameters_names())
429
        );
430
    }
431
    
432
    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
            )
440
        );
441

    
442
        assertEquals(
443
                "( (\"1990\") = (0.168873933773767) )",
444
                builder.toString()
445
        );
446
        assertEquals(
447
                "[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
                builder.toString()
469
        );
470
        assertEquals(
471
                "[1990, precio]",
472
                ArrayUtils.toString(builder.variables_names())
473
        );
474
        assertEquals(
475
                "[]",
476
                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
                ArrayUtils.toString(builder.variables_names())
497
        );
498
        assertEquals(
499
                "[]",
500
                ArrayUtils.toString(builder.parameters_names())
501
        );
502
    }
503
    
504
    
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
        );
515

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

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

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

    
551
    public void testComplexExpression1() {
552
        ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
553
        
554
        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
            )
573
        );
574
        builder.and(
575
            builder.gt(
576
                builder.variable("tres"),
577
                builder.constant(123456789)
578
            )
579
        );
580
        assertEquals(
581
                "((( (LOWER(\"colum_name_c\")) = (?) ) AND ( ( (LOWER(\"uno\")) LIKE ('%10') ) OR ( (\"dos\") < (-3.5) ) )) AND ( (\"tres\") > (123456789) ))",
582
                builder.toString()
583
        );
584
        assertEquals(
585
                "[colum_name_c, dos, tres, uno]",
586
                ArrayUtils.toString(builder.variables_names())
587
        );
588
        assertEquals(
589
                "[\"colum_name_p\"]",
590
                ArrayUtils.toString(builder.parameters_names())
591
        );
592
    }
593
    
594
}