Revision 22279

View differences:

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