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 |
} |