Revision 22279
trunk/extensions/extSymbology/src-test/org/gvsig/symbology/fmap/labeling/parse/TestLabelExpressionParser.java | ||
---|---|---|
103 | 103 |
ValueFactory.createNullValue() |
104 | 104 |
), |
105 | 105 |
// new Symbol( |
106 |
// "A_DATE_VALUE",
|
|
107 |
// ValueFactory.createValue(new Date())
|
|
106 |
// "A_DATE_VALUE", |
|
107 |
// ValueFactory.createValue(new Date()) |
|
108 | 108 |
// ) |
109 | 109 |
}; |
110 | 110 |
|
... | ... | |
136 | 136 |
} |
137 | 137 |
System.out.print("Parsing '"+expr+"'"); |
138 | 138 |
try { |
139 |
|
|
139 |
|
|
140 | 140 |
int amount = parser.Arguments(); |
141 |
|
|
141 |
|
|
142 | 142 |
System.out.print(": [ parsed ]. Evaluating: "); |
143 | 143 |
Object[] expected = expectedValues[i]; |
144 | 144 |
assertTrue("Failed detecting argument number. Expected "+expected.length+", but got "+amount+".", amount == expected.length); |
... | ... | |
157 | 157 |
System.out.println(); |
158 | 158 |
} |
159 | 159 |
} |
160 |
|
|
160 |
|
|
161 | 161 |
private String[] LiteralExpressions = new String[] { |
162 | 162 |
"true", |
163 | 163 |
"false", |
... | ... | |
166 | 166 |
" \"a string\"", |
167 | 167 |
}; |
168 | 168 |
private Object[] LiteralExpressionsValue = new Object[] { |
169 |
true ,
|
|
170 |
false,
|
|
171 |
43564356435.234,
|
|
172 |
12455,
|
|
173 |
"a string"
|
|
169 |
true , |
|
170 |
false, |
|
171 |
43564356435.234, |
|
172 |
12455, |
|
173 |
"a string" |
|
174 | 174 |
}; |
175 |
|
|
175 |
|
|
176 | 176 |
public void testLiteral() throws ExpressionException { |
177 | 177 |
String[] expressions = LiteralExpressions; |
178 | 178 |
Object[] expectedValues = LiteralExpressionsValue; |
179 | 179 |
System.out.println("\nTestLabelExpressionParser.testLiteral()"); |
180 |
|
|
180 |
|
|
181 | 181 |
for (int i = 0; i < expressions.length; i++) { |
182 | 182 |
String expr = expressions[i]; |
183 | 183 |
parser = new LabelExpressionParser(new CharArrayReader(expr.toCharArray())); |
... | ... | |
202 | 202 |
System.out.println(); |
203 | 203 |
} |
204 | 204 |
} |
205 |
|
|
205 |
|
|
206 | 206 |
private String[] FunctionExpressions = new String[] { |
207 | 207 |
new SubstringFunction().getName()+"(\"My taylor is rich!\", 1)", |
208 | 208 |
new SubstringFunction().getName()+"(\"My taylor is rich!\", 3, 9)", |
... | ... | |
210 | 210 |
}; |
211 | 211 |
private Object[] FunctionExpressionsValue = new Object[] { |
212 | 212 |
"y taylor is rich!" , |
213 |
"taylor" ,
|
|
214 |
"y",
|
|
213 |
"taylor" , |
|
214 |
"y", |
|
215 | 215 |
}; |
216 | 216 |
public void testFunction() throws ExpressionException { |
217 | 217 |
OperatorsFactory operators = OperatorsFactory.getInstance(); |
218 |
operators.addOperator(SubstringFunction.class);
|
|
219 |
|
|
218 |
operators.addOperator(SubstringFunction.class);
|
|
219 |
|
|
220 | 220 |
String[] expressions = FunctionExpressions; |
221 | 221 |
Object[] expectedValues = FunctionExpressionsValue; |
222 | 222 |
System.out.println("\nTestLabelExpressionParser.testFunction()"); |
223 |
|
|
224 |
|
|
223 |
|
|
224 |
|
|
225 | 225 |
for (int i = 0; i < expressions.length; i++) { |
226 | 226 |
String expr = expressions[i]; |
227 | 227 |
parser = new LabelExpressionParser(new CharArrayReader(expr.toCharArray())); |
228 |
parser.setOperatorsFactory(operators);
|
|
229 |
|
|
228 |
parser.setOperatorsFactory(operators);
|
|
229 |
|
|
230 | 230 |
for (int j = 0; j < symbols.length; j++) { |
231 | 231 |
parser.putSymbol(symbols[j].id,symbols[j].val); |
232 | 232 |
} |
... | ... | |
256 | 256 |
PrimitiveExpressions[i] = "["+symbols[i].id+"]"; |
257 | 257 |
PrimitiveExpressionsValue[i] = symbols[i].val; |
258 | 258 |
} |
259 |
|
|
259 |
|
|
260 | 260 |
String[] expressions = PrimitiveExpressions; |
261 | 261 |
Object[] expectedValues = PrimitiveExpressionsValue; |
262 |
|
|
262 |
|
|
263 | 263 |
System.out.println("\nTestLabelExpressionParser.testPrimitiveExpression()"); |
264 |
|
|
264 |
|
|
265 | 265 |
for (int i = 0; i < expressions.length; i++) { |
266 | 266 |
String expr = expressions[i]; |
267 | 267 |
parser = new LabelExpressionParser(new CharArrayReader(expr.toCharArray())); |
... | ... | |
273 | 273 |
parser.Element(); |
274 | 274 |
System.out.print(": [ parsed ]. Evaluating: "); |
275 | 275 |
Object expected = expectedValues[i]; |
276 |
|
|
276 |
|
|
277 | 277 |
// GDBMS values are evaluated as java primitives |
278 | 278 |
if (expected instanceof DoubleValue) { |
279 | 279 |
expected = ((DoubleValue) expected).getValue(); |
... | ... | |
282 | 282 |
} else if (expected instanceof StringValue) { |
283 | 283 |
expected = ((StringValue) expected).getValue(); |
284 | 284 |
} |
285 |
|
|
285 |
|
|
286 | 286 |
// else if (expected instanceof DateValue) { |
287 |
// expected = ((DateValue) expected).getValue();
|
|
287 |
// expected = ((DateValue) expected).getValue(); |
|
288 | 288 |
// } |
289 |
|
|
289 |
|
|
290 | 290 |
else if (expected instanceof BooleanValue) { |
291 | 291 |
expected = ((BooleanValue) expected).getValue(); |
292 | 292 |
} else if (expected instanceof NullValue) { |
293 | 293 |
expected = null; |
294 | 294 |
} |
295 |
|
|
296 | 295 |
|
296 |
|
|
297 | 297 |
Object value = parser.pop(); |
298 | 298 |
assertTrue("Parsed text '"+expr+"' evaluated to ("+value+") when expecting ["+expected+"]", value == null ? value == expected : value.equals(expected)); |
299 | 299 |
System.out.print(value+" [ Ok! ]\t"); |
... | ... | |
306 | 306 |
System.out.println(); |
307 | 307 |
} |
308 | 308 |
} |
309 |
|
|
309 |
|
|
310 | 310 |
private String[] UnaryBooleanExpressions = new String[] { |
311 | 311 |
"!false", |
312 | 312 |
"!true", |
... | ... | |
314 | 314 |
"![ANOTHER_BOOLEAN_VALUE]", |
315 | 315 |
}; |
316 | 316 |
private Object[] UnaryBooleanExpressionsValue = new Object[] { |
317 |
!false,
|
|
318 |
!true,
|
|
319 |
!((BooleanValue) symbols[4].val).getValue(),
|
|
320 |
!((BooleanValue) symbols[5].val).getValue(),
|
|
317 |
!false, |
|
318 |
!true, |
|
319 |
!((BooleanValue) symbols[4].val).getValue(), |
|
320 |
!((BooleanValue) symbols[5].val).getValue(), |
|
321 | 321 |
}; |
322 | 322 |
public void testBooleanUnaryExpression() throws ExpressionException { |
323 | 323 |
String[] expressions = UnaryBooleanExpressions; |
324 | 324 |
Object[] expectedValues = UnaryBooleanExpressionsValue; |
325 | 325 |
System.out.println("\nTestLabelExpressionParser.testBooleanUnaryExpression()"); |
326 |
|
|
326 |
|
|
327 | 327 |
for (int i = 0; i < expressions.length; i++) { |
328 | 328 |
String expr = expressions[i]; |
329 | 329 |
parser = new LabelExpressionParser(new CharArrayReader(expr.toCharArray())); |
... | ... | |
348 | 348 |
System.out.println(); |
349 | 349 |
} |
350 | 350 |
} |
351 |
|
|
352 |
|
|
351 |
|
|
352 |
|
|
353 | 353 |
private String[] UnaryArithmeticExpressions = new String[] { |
354 | 354 |
"+65", |
355 | 355 |
"-5.5", |
... | ... | |
366 | 366 |
String[] expressions = UnaryArithmeticExpressions; |
367 | 367 |
Object[] expectedValues = UnaryArithmeticExpressionsValue; |
368 | 368 |
System.out.println("\nTestLabelExpressionParser.testArithmeticUnaryExpression()"); |
369 |
|
|
369 |
|
|
370 | 370 |
for (int i = 0; i < expressions.length; i++) { |
371 | 371 |
String expr = expressions[i]; |
372 | 372 |
parser = new LabelExpressionParser(new CharArrayReader(expr.toCharArray())); |
... | ... | |
391 | 391 |
System.out.println(); |
392 | 392 |
} |
393 | 393 |
} |
394 |
|
|
394 |
|
|
395 | 395 |
private String[] MultiplicativeArithmeticExpressions = new String[] { |
396 | 396 |
"3*4356.234", |
397 | 397 |
"15*10", |
... | ... | |
412 | 412 |
String[] expressions = MultiplicativeArithmeticExpressions; |
413 | 413 |
Object[] expectedValues = MultiplicativeArithmeticExpressionsValue; |
414 | 414 |
System.out.println("\nTestLabelExpressionParser.testMultiplicativeExpression()"); |
415 |
|
|
415 |
|
|
416 | 416 |
for (int i = 0; i < expressions.length; i++) { |
417 | 417 |
String expr = expressions[i]; |
418 | 418 |
parser = new LabelExpressionParser(new CharArrayReader(expr.toCharArray())); |
... | ... | |
437 | 437 |
System.out.println(); |
438 | 438 |
} |
439 | 439 |
} |
440 |
|
|
440 |
|
|
441 | 441 |
private String[] AdditiveArithmeticExpressions = new String[] { |
442 | 442 |
"3-4356.234", |
443 | 443 |
"8768758+2432432", |
... | ... | |
454 | 454 |
String[] expressions = AdditiveArithmeticExpressions; |
455 | 455 |
Object[] expectedValues = AdditiveArithmeticExpressionsValue; |
456 | 456 |
System.out.println("\nTestLabelExpressionParser.testAdditiveExpression()"); |
457 |
|
|
457 |
|
|
458 | 458 |
for (int i = 0; i < expressions.length; i++) { |
459 | 459 |
String expr = expressions[i]; |
460 | 460 |
parser = new LabelExpressionParser(new CharArrayReader(expr.toCharArray())); |
... | ... | |
480 | 480 |
} |
481 | 481 |
} |
482 | 482 |
|
483 |
String EOField = LabelExpressionParser.tokenFor(LabelExpressionParser.EOFIELD); |
|
484 |
String EOExpression = LabelExpressionParser.tokenFor(LabelExpressionParser.EOEXPR); |
|
483 |
|
|
485 | 484 |
|
486 |
private String[] VariousExpressions = new String[] { |
|
485 |
private String EOField = LabelExpressionParser.tokenFor(LabelExpressionParser.EOFIELD); |
|
486 |
private String EOExpression = LabelExpressionParser.tokenFor(LabelExpressionParser.EOEXPR); |
|
487 |
private String DOUBLEQUOTE = "\""; |
|
488 |
|
|
489 |
private String[] ConcatStrings = new String[] { |
|
490 |
"km" +"25", |
|
491 |
DOUBLEQUOTE+"km"+DOUBLEQUOTE+" "+DOUBLEQUOTE+" 25"+DOUBLEQUOTE, |
|
492 |
"[A_STRING_VALUE] "+DOUBLEQUOTE+" 25"+DOUBLEQUOTE, |
|
493 |
"[A_INTEGER_VALUE] "+DOUBLEQUOTE+" 25"+DOUBLEQUOTE, |
|
494 |
"[A_DOUBLE_VALUE] "+DOUBLEQUOTE+" 25"+DOUBLEQUOTE, |
|
495 |
"2+3"+"km", |
|
496 |
}; |
|
497 |
private Object[] ConcatStringsValue = new Object[] { |
|
498 |
"km25", |
|
499 |
"km 25", |
|
500 |
((StringValue) symbols[3].val).getValue()+" 25", |
|
501 |
((IntValue) symbols[2].val).getValue()+" 25", |
|
502 |
((DoubleValue) symbols[0].val).getValue()+" 25", |
|
503 |
"5km" |
|
504 |
}; |
|
505 |
|
|
506 |
public void testConcatStrings() throws ExpressionException { |
|
507 |
|
|
508 |
String[] expressions = ConcatStrings; |
|
509 |
Object[] expectedValues = ConcatStringsValue; |
|
510 |
System.out.println("\nTestLabelExpressionParser.testConcatExpressions()"); |
|
511 |
|
|
512 |
for (int i = 0; i < expressions.length; i++) { |
|
513 |
String expr = expressions[i]; |
|
514 |
parser = new LabelExpressionParser(new CharArrayReader(expr.toCharArray())); |
|
515 |
|
|
516 |
for (int j = 0; j < symbols.length; j++) { |
|
517 |
parser.putSymbol(symbols[j].id,symbols[j].val); |
|
518 |
} |
|
519 |
|
|
520 |
|
|
521 |
System.out.print("Parsing '"+expr+"'"); |
|
522 |
try { |
|
523 |
|
|
524 |
parser.LabelExpression(); |
|
525 |
|
|
526 |
System.out.print(": [ parsed ]. Evaluating: "); |
|
527 |
Object[] expected = expectedValues; |
|
528 |
String myValues = ((Expression)parser.getStack().pop()).evaluate(parser.getSymbols()).toString(); |
|
529 |
|
|
530 |
|
|
531 |
Object value = myValues; |
|
532 |
assertTrue("Parsed text '"+expr+"' evaluated to ("+value+") when expecting ["+expected[i]+"]", value.equals(expected[i].toString())); |
|
533 |
System.out.print(value+" [ Ok! ]\t"); |
|
534 |
|
|
535 |
|
|
536 |
|
|
537 |
} catch (ParseException e) { |
|
538 |
System.err.println(":\t [ Fail! ]"); |
|
539 |
fail("Failed parsing text '"+expr+"'\n"+e.getMessage()); |
|
540 |
} |
|
541 |
System.out.println(); |
|
542 |
} |
|
543 |
} |
|
544 |
|
|
545 |
|
|
546 |
private String[] LabelExpressions = new String[] { |
|
547 |
"1+2"+EOField+"true"+EOField+"2<3", |
|
548 |
"300+454"+EOField+"false", |
|
549 |
"1+2"+EOField+"1+5"+EOField+"2<3", |
|
550 |
"[A_DOUBLE_VALUE]/[ANOTHER_DOUBLE_VALUE]"+EOField+"Km", |
|
551 |
"km" +"25"+EOField+"1+5", |
|
552 |
DOUBLEQUOTE+"km"+DOUBLEQUOTE+" "+DOUBLEQUOTE+" 25"+DOUBLEQUOTE+EOField+"1+2"+EOField+"true"+EOField+"2<3", |
|
487 | 553 |
|
488 |
"1+2"+EOField+"true"+EOField+"2<3"+EOExpression, |
|
489 |
"300+454"+EOField+"false"+EOExpression, |
|
490 | 554 |
}; |
491 |
private Object[][] VariousExpressionsValue = new Object[][] {
|
|
492 |
new Object[] { 3,true,true },
|
|
555 |
private Object[][] LabelExpressionsValue = new Object[][] {
|
|
556 |
new Object[] {3,true,true }, |
|
493 | 557 |
new Object[] { 754, false }, |
558 |
new Object[] { 3,6,true }, |
|
559 |
new Object[] {((DoubleValue) symbols[0].val).getValue()/((DoubleValue) symbols[1].val).getValue(),"Km"}, |
|
560 |
new Object[] {"km25",6 }, |
|
561 |
new Object[] {"km 25",3,true,true }, |
|
562 |
|
|
494 | 563 |
}; |
495 |
|
|
496 |
public void testVariousExpressions() throws ExpressionException { |
|
497 | 564 |
|
498 |
String[] expressions = VariousExpressions; |
|
499 |
Object[][] expectedValues = VariousExpressionsValue; |
|
500 |
System.out.println("\nTestLabelExpressionParser.testVariousExpressions()"); |
|
565 |
public void testLabelExpressions() throws ExpressionException { |
|
501 | 566 |
|
567 |
String[] expressions = LabelExpressions; |
|
568 |
Object[][] expectedValues = LabelExpressionsValue; |
|
569 |
System.out.println("\nTestLabelExpressionParser.testLabelExpressions()"); |
|
570 |
|
|
502 | 571 |
for (int i = 0; i < expressions.length; i++) { |
503 | 572 |
String expr = expressions[i]; |
504 | 573 |
parser = new LabelExpressionParser(new CharArrayReader(expr.toCharArray())); |
... | ... | |
506 | 575 |
for (int j = 0; j < symbols.length; j++) { |
507 | 576 |
parser.putSymbol(symbols[j].id,symbols[j].val); |
508 | 577 |
} |
509 |
|
|
510 |
|
|
578 |
|
|
579 |
|
|
511 | 580 |
System.out.print("Parsing '"+expr+"'"); |
512 | 581 |
try { |
513 |
|
|
582 |
|
|
514 | 583 |
parser.LabelExpression(); |
515 |
|
|
584 |
|
|
516 | 585 |
System.out.print(": [ parsed ]. Evaluating: "); |
517 | 586 |
Object[] expected = expectedValues[i]; |
518 | 587 |
Object[] myValues = (Object[]) ((Expression)parser.getStack().pop()).evaluate(parser.getSymbols()); |
519 |
|
|
520 |
for (int j = expected.length-1; j >= 0; j--) { // <- Last in first out
|
|
521 |
Object value = myValues[expected.length-j-1];
|
|
588 |
|
|
589 |
for (int j = 0; j < myValues.length; j++) { // <- Last in first out
|
|
590 |
Object value = myValues[j];
|
|
522 | 591 |
assertTrue("Parsed text '"+expr+"' evaluated to ("+value+") when expecting ["+expected[j]+"]", value.equals(expected[j].toString())); |
523 | 592 |
System.out.print(value+" [ Ok! ]\t"); |
524 | 593 |
} |
... | ... | |
532 | 601 |
} |
533 | 602 |
} |
534 | 603 |
|
535 |
|
|
536 |
|
|
604 |
|
|
605 |
|
|
537 | 606 |
} |
Also available in: Unified diff