Statistics
| Revision:

root / trunk / extensions / extSymbology / src-test / org / gvsig / symbology / fmap / labeling / parse / TestLabelExpressionParser.java @ 22421

History | View | Annotate | Download (19.1 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
 *
19
 * For more information, contact:
20
 *
21
 *  Generalitat Valenciana
22
 *   Conselleria d'Infraestructures i Transport
23
 *   Av. Blasco Ib??ez, 50
24
 *   46010 VALENCIA
25
 *   SPAIN
26
 *
27
 *      +34 963862235
28
 *   gvsig@gva.es
29
 *      www.gvsig.gva.es
30
 *
31
 *    or
32
 *
33
 *   IVER T.I. S.A
34
 *   Salamanca 50
35
 *   46005 Valencia
36
 *   Spain
37
 *
38
 *   +34 963163400
39
 *   dac@iver.es
40
 */
41
package org.gvsig.symbology.fmap.labeling.parse;
42

    
43
import java.io.CharArrayReader;
44

    
45
import junit.framework.TestCase;
46

    
47
import org.gvsig.symbology.fmap.labeling.lang.functions.SubstringFunction;
48
import org.gvsig.symbology.fmap.rendering.filter.operations.Expression;
49
import org.gvsig.symbology.fmap.rendering.filter.operations.ExpressionException;
50
import org.gvsig.symbology.fmap.rendering.filter.operations.OperatorsFactory;
51

    
52
import com.hardcode.gdbms.engine.values.BooleanValue;
53
import com.hardcode.gdbms.engine.values.DoubleValue;
54
import com.hardcode.gdbms.engine.values.IntValue;
55
import com.hardcode.gdbms.engine.values.NullValue;
56
import com.hardcode.gdbms.engine.values.StringValue;
57
import com.hardcode.gdbms.engine.values.Value;
58
import com.hardcode.gdbms.engine.values.ValueFactory;
59

    
60
public class TestLabelExpressionParser extends TestCase {
61
        LabelExpressionParser parser;
62

    
63
        protected void setUp() throws Exception {
64
                super.setUp();
65
        }
66

    
67
        private class Symbol {
68
                private String id;
69
                private Value val;
70

    
71
                public Symbol(String id, Value val) {
72
                        this.id = id;
73
                        this.val = val;
74
                }
75
        }
76
        private Symbol[] symbols = new Symbol[] {
77
                        new Symbol(
78
                                        "A_DOUBLE_VALUE", 
79
                                        ValueFactory.createValue(4.0)
80
                        ),
81
                        new Symbol(
82
                                        "ANOTHER_DOUBLE_VALUE", 
83
                                        ValueFactory.createValue(Math.PI)
84
                        ),
85
                        new Symbol(
86
                                        "A_INTEGER_VALUE", 
87
                                        ValueFactory.createValue(12)
88
                        ),
89
                        new Symbol(
90
                                        "A_STRING_VALUE", 
91
                                        ValueFactory.createValue("this is a String")
92
                        ),
93
                        new Symbol(
94
                                        "A_BOOLEAN_VALUE", 
95
                                        ValueFactory.createValue(true)
96
                        ),
97
                        new Symbol(
98
                                        "ANOTHER_BOOLEAN_VALUE", 
99
                                        ValueFactory.createValue(false)
100
                        ),
101
                        new Symbol(
102
                                        "A_NULL_VALUE", 
103
                                        ValueFactory.createNullValue()
104
                        ),
105
//                        new Symbol(
106
//                        "A_DATE_VALUE", 
107
//                        ValueFactory.createValue(new Date())
108
//                        )
109
        };
110

    
111
        private String[] ArgumentsExpressions = new String[] {
112
                        "(754)",
113
                        "(754, \"blah\")",
114
                        "(-9.68, [A_DOUBLE_VALUE]) ",
115
                        "(false, true) ",
116
        };
117
        private Object[][] ArgumentsExpressionsValue = new Object[][]  {
118
                        new Object[] { 754 },
119
                        new Object[] { 754, "blah" },
120
                        new Object[] { -9.68, 4.0 },
121
                        new Object[] { false, true },
122
        };        
123

    
124
        public void testArguments() throws ExpressionException {
125

    
126
                String[] expressions = ArgumentsExpressions;
127
                Object[][] expectedValues = ArgumentsExpressionsValue;
128
                System.out.println("\nTestLabelExpressionParser.testArgumens()");
129

    
130
                for (int i = 0; i < expressions.length; i++) {
131
                        String expr = expressions[i];
132
                        parser = new LabelExpressionParser(new CharArrayReader(expr.toCharArray()));
133

    
134
                        for (int j = 0; j < symbols.length; j++) {
135
                                parser.putSymbol(symbols[j].id,symbols[j].val);
136
                        }
137
                        System.out.print("Parsing '"+expr+"'");
138
                        try {
139

    
140
                                int amount = parser.Arguments();
141

    
142
                                System.out.print(": [ parsed ]. Evaluating: ");
143
                                Object[] expected = expectedValues[i];
144
                                assertTrue("Failed detecting argument number. Expected "+expected.length+", but got "+amount+".", amount == expected.length);
145

    
146
                                for (int j = expected.length-1; j >= 0; j--) { // <- Last in first out
147
                                        Object value = parser.pop();
148
                                        assertTrue("Parsed text '"+expr+"' evaluated to ("+value+") when expecting ["+expected[j]+"]", value.equals(expected[j]));
149
                                        System.out.print(value+" [ Ok! ]\t");
150
                                }
151

    
152

    
153
                        } catch (ParseException e) {
154
                                System.err.println(":\t [ Fail! ]");
155
                                fail("Failed parsing text '"+expr+"'\n"+e.getMessage());
156
                        }
157
                        System.out.println();
158
                }
159
        }
160

    
161
        private String[] LiteralExpressions = new String[] {
162
                        "true",
163
                        "false",
164
                        " 43564356435.234",
165
                        " 12455 ",
166
                        " \"a string\"",
167
        };
168
        private Object[] LiteralExpressionsValue = new Object[]  {
169
                        true ,
170
                        false,
171
                        43564356435.234,
172
                        12455,
173
                        "a string"
174
        };        
175

    
176
        public void testLiteral() throws ExpressionException {
177
                String[] expressions = LiteralExpressions;
178
                Object[] expectedValues = LiteralExpressionsValue;
179
                System.out.println("\nTestLabelExpressionParser.testLiteral()");
180

    
181
                for (int i = 0; i < expressions.length; i++) {
182
                        String expr = expressions[i];
183
                        parser =  new LabelExpressionParser(new CharArrayReader(expr.toCharArray()));
184
                        for (int j = 0; j < symbols.length; j++) {
185
                                parser.putSymbol(symbols[j].id,symbols[j].val);
186
                        }
187
                        System.out.print("Parsing '"+expr+"'");
188
                        try {
189
                                parser.UnaryElement();
190
                                System.out.print(": [ parsed ]. Evaluating: ");
191
                                Object expected = expectedValues[i];
192

    
193
                                Object value = parser.pop();
194
                                assertTrue("Parsed text '"+expr+"' evaluated to ("+value+") when expecting ["+expected+"]", value.equals(expected));
195
                                System.out.print(value+" [ Ok! ]\t");
196

    
197

    
198
                        } catch (ParseException e) {
199
                                System.err.println(":\t [ Fail! ]");
200
                                fail("Failed parsing text '"+expr+"'\n"+e.getMessage());
201
                        }
202
                        System.out.println();
203
                }
204
        }
205

    
206
        private String[] FunctionExpressions = new String[] {
207
                        new SubstringFunction().getName()+"(\"My taylor is rich!\", 1)",
208
                        new SubstringFunction().getName()+"(\"My taylor is rich!\", 3, 9)",
209
                        new SubstringFunction().getName()+"("+new SubstringFunction().getName()+"(\"My taylor is rich!\", 3, 9), 2,3)",
210
        };
211
        private Object[] FunctionExpressionsValue = new Object[]  {
212
                        "y taylor is rich!" ,
213
                        "taylor" ,
214
                        "y",
215
        };        
216
        public void testFunction() throws ExpressionException {
217
                OperatorsFactory operators = OperatorsFactory.getInstance();
218
                operators.addOperator(SubstringFunction.class);
219

    
220
                String[] expressions = FunctionExpressions;
221
                Object[] expectedValues = FunctionExpressionsValue;
222
                System.out.println("\nTestLabelExpressionParser.testFunction()");
223

    
224

    
225
                for (int i = 0; i < expressions.length; i++) {
226
                        String expr = expressions[i];
227
                        parser = new LabelExpressionParser(new CharArrayReader(expr.toCharArray()));        
228
                        parser.setOperatorsFactory(operators);
229

    
230
                        for (int j = 0; j < symbols.length; j++) {
231
                                parser.putSymbol(symbols[j].id,symbols[j].val);
232
                        }
233
                        System.out.print("Parsing '"+expr+"'");
234
                        try {
235
                                parser.function();
236
                                System.out.print(": [ parsed ]. Evaluating: ");
237
                                Object expected = expectedValues[i];
238

    
239
                                Object value = parser.pop();
240
                                assertTrue("Parsed text '"+expr+"' evaluated to ("+value+") when expecting ["+expected+"]", value.equals(expected));
241
                                System.out.print(value+" [ Ok! ]\t");
242

    
243

    
244
                        } catch (ParseException e) {
245
                                System.err.println(":\t [ Fail! ]");
246
                                fail("Failed parsing text '"+expr+"'\n"+e.getMessage());
247
                        }
248
                        System.out.println();
249
                }
250
        }
251

    
252
        public void testPrimitiveExpression() throws ExpressionException {
253
                String[] PrimitiveExpressions = new String[symbols.length];
254
                Object[] PrimitiveExpressionsValue = new Object[symbols.length];
255
                for (int i = 0; i < symbols.length; i++) {
256
                        PrimitiveExpressions[i] = "["+symbols[i].id+"]";
257
                        PrimitiveExpressionsValue[i] = symbols[i].val;
258
                }
259

    
260
                String[] expressions = PrimitiveExpressions;
261
                Object[] expectedValues = PrimitiveExpressionsValue;
262

    
263
                System.out.println("\nTestLabelExpressionParser.testPrimitiveExpression()");
264

    
265
                for (int i = 0; i < expressions.length; i++) {
266
                        String expr = expressions[i];
267
                        parser = new LabelExpressionParser(new CharArrayReader(expr.toCharArray()));
268
                        for (int j = 0; j < symbols.length; j++) {
269
                                parser.putSymbol(symbols[j].id,symbols[j].val);
270
                        }
271
                        System.out.print("Parsing '"+expr+"'");
272
                        try {
273
                                parser.Element();
274
                                System.out.print(": [ parsed ]. Evaluating: ");
275
                                Object expected = expectedValues[i];
276

    
277
                                // GDBMS values are evaluated as java primitives
278
                                if (expected instanceof DoubleValue) {
279
                                        expected = ((DoubleValue) expected).getValue();
280
                                } else if (expected instanceof IntValue) {
281
                                        expected = ((IntValue) expected).getValue();
282
                                } else if (expected instanceof StringValue) {
283
                                        expected = ((StringValue) expected).getValue();
284
                                } 
285

    
286
//                                else if (expected instanceof DateValue) {
287
//                                expected = ((DateValue) expected).getValue();
288
//                                } 
289

    
290
                                else if (expected instanceof BooleanValue) {
291
                                        expected = ((BooleanValue) expected).getValue();
292
                                } else if (expected instanceof NullValue) {
293
                                        expected = null;
294
                                }
295

    
296

    
297
                                Object value = parser.pop();
298
                                assertTrue("Parsed text '"+expr+"' evaluated to ("+value+") when expecting ["+expected+"]", value == null ? value == expected : value.equals(expected));
299
                                System.out.print(value+" [ Ok! ]\t");
300

    
301

    
302
                        } catch (ParseException e) {
303
                                System.err.println(":\t [ Fail! ]");
304
                                fail("Failed parsing text '"+expr+"'\n"+e.getMessage());
305
                        }
306
                        System.out.println();
307
                }
308
        }
309

    
310
        private String[] UnaryBooleanExpressions = new String[] {
311
                        "!false",
312
                        "!true",
313
                        "![A_BOOLEAN_VALUE]",
314
                        "![ANOTHER_BOOLEAN_VALUE]",
315
        };
316
        private Object[] UnaryBooleanExpressionsValue = new Object[]  {
317
                        !false,
318
                        !true,
319
                        !((BooleanValue) symbols[4].val).getValue(),
320
                        !((BooleanValue) symbols[5].val).getValue(),
321
        };        
322
        public void testBooleanUnaryExpression() throws ExpressionException {
323
                String[] expressions = UnaryBooleanExpressions;
324
                Object[] expectedValues = UnaryBooleanExpressionsValue;
325
                System.out.println("\nTestLabelExpressionParser.testBooleanUnaryExpression()");
326

    
327
                for (int i = 0; i < expressions.length; i++) {
328
                        String expr = expressions[i];
329
                        parser = new LabelExpressionParser(new CharArrayReader(expr.toCharArray()));
330
                        for (int j = 0; j < symbols.length; j++) {
331
                                parser.putSymbol(symbols[j].id,symbols[j].val);
332
                        }
333
                        System.out.print("Parsing '"+expr+"'");
334
                        try {
335
                                parser.UnaryElement();
336
                                System.out.print(": [ parsed ]. Evaluating: ");
337
                                Object expected = expectedValues[i];
338

    
339
                                Object value = parser.pop();
340
                                assertTrue("Parsed text '"+expr+"' evaluated to ("+value+") when expecting ["+expected+"]", value.equals(expected));
341
                                System.out.print(value+" [ Ok! ]\t");
342

    
343

    
344
                        } catch (ParseException e) {
345
                                System.err.println(":\t [ Fail! ]");
346
                                fail("Failed parsing text '"+expr+"'\n"+e.getMessage());
347
                        }
348
                        System.out.println();
349
                }
350
        }
351

    
352

    
353
        private String[] UnaryArithmeticExpressions = new String[] {
354
                        "+65",
355
                        "-5.5",
356
                        "+-+-[A_DOUBLE_VALUE]",
357
                        "--+[ANOTHER_DOUBLE_VALUE]",
358
        };
359
        private Object[] UnaryArithmeticExpressionsValue = new Object[]  {
360
                        65,
361
                        -5.5,
362
                        ((DoubleValue) symbols[0].val).getValue(),
363
                        ((DoubleValue) symbols[1].val).getValue(),
364
        };        
365
        public void testArithmeticUnaryExpression() throws ExpressionException {
366
                String[] expressions = UnaryArithmeticExpressions;
367
                Object[] expectedValues = UnaryArithmeticExpressionsValue;
368
                System.out.println("\nTestLabelExpressionParser.testArithmeticUnaryExpression()");
369

    
370
                for (int i = 0; i < expressions.length; i++) {
371
                        String expr = expressions[i];
372
                        parser = new LabelExpressionParser(new CharArrayReader(expr.toCharArray()));
373
                        for (int j = 0; j < symbols.length; j++) {
374
                                parser.putSymbol(symbols[j].id,symbols[j].val);
375
                        }
376
                        System.out.print("Parsing '"+expr+"'");
377
                        try {
378
                                parser.MultiplicativeExpression();
379
                                System.out.print(": [ parsed ]. Evaluating: ");
380
                                Object expected = expectedValues[i];
381

    
382
                                Object value = parser.pop();
383
                                assertTrue("Parsed text '"+expr+"' evaluated to ("+value+") when expecting ["+expected+"]", value.equals(expected));
384
                                System.out.print(value+" [ Ok! ]\t");
385

    
386

    
387
                        } catch (ParseException e) {
388
                                System.err.println(":\t [ Fail! ]");
389
                                fail("Failed parsing text '"+expr+"'\n"+e.getMessage());
390
                        }
391
                        System.out.println();
392
                }
393
        }
394

    
395
        private String[] MultiplicativeArithmeticExpressions = new String[] {
396
                        "3*4356.234",
397
                        "15*10",
398
                        "15/10",
399
                        "8768758/2432432",
400
                        "[A_DOUBLE_VALUE]*[ANOTHER_DOUBLE_VALUE]",
401
                        "[A_DOUBLE_VALUE]/[ANOTHER_DOUBLE_VALUE]",
402
        };
403
        private Object[] MultiplicativeArithmeticExpressionsValue = new Object[]  {
404
                        3*4356.234,
405
                        15*10,
406
                        15/10,
407
                        8768758/2432432,
408
                        ((DoubleValue) symbols[0].val).getValue()*((DoubleValue) symbols[1].val).getValue(),
409
                        ((DoubleValue) symbols[0].val).getValue()/((DoubleValue) symbols[1].val).getValue(),
410
        };        
411
        public void testMultiplicativeExpression() throws ExpressionException {
412
                String[] expressions = MultiplicativeArithmeticExpressions;
413
                Object[] expectedValues = MultiplicativeArithmeticExpressionsValue;
414
                System.out.println("\nTestLabelExpressionParser.testMultiplicativeExpression()");
415

    
416
                for (int i = 0; i < expressions.length; i++) {
417
                        String expr = expressions[i];
418
                        parser = new LabelExpressionParser(new CharArrayReader(expr.toCharArray()));
419
                        for (int j = 0; j < symbols.length; j++) {
420
                                parser.putSymbol(symbols[j].id,symbols[j].val);
421
                        }
422
                        System.out.print("Parsing '"+expr+"'");
423
                        try {
424
                                parser.MultiplicativeExpression();
425
                                System.out.print(": [ parsed ]. Evaluating: ");
426
                                Object expected = expectedValues[i];
427

    
428
                                Object value = parser.pop();
429
                                assertTrue("Parsed text '"+expr+"' evaluated to ("+value+") when expecting ["+expected+"]", value.equals(expected));
430
                                System.out.print(value+" [ Ok! ]\t");
431

    
432

    
433
                        } catch (ParseException e) {
434
                                System.err.println(":\t [ Fail! ]");
435
                                fail("Failed parsing text '"+expr+"'\n"+e.getMessage());
436
                        }
437
                        System.out.println();
438
                }
439
        }
440

    
441
        private String[] AdditiveArithmeticExpressions = new String[] {
442
                        "3-4356.234",
443
                        "8768758+2432432",
444
                        "[A_DOUBLE_VALUE]+[ANOTHER_DOUBLE_VALUE]",
445
                        "[A_DOUBLE_VALUE]-[ANOTHER_DOUBLE_VALUE]",
446
        };
447
        private Object[] AdditiveArithmeticExpressionsValue = new Object[]  {
448
                        3-4356.234,
449
                        8768758+2432432,
450
                        ((DoubleValue) symbols[0].val).getValue()+((DoubleValue) symbols[1].val).getValue(),
451
                        ((DoubleValue) symbols[0].val).getValue()-((DoubleValue) symbols[1].val).getValue(),
452
        };
453
        public void testAdditiveExpression() throws ExpressionException {
454
                String[] expressions = AdditiveArithmeticExpressions;
455
                Object[] expectedValues = AdditiveArithmeticExpressionsValue;
456
                System.out.println("\nTestLabelExpressionParser.testAdditiveExpression()");
457

    
458
                for (int i = 0; i < expressions.length; i++) {
459
                        String expr = expressions[i];
460
                        parser = new LabelExpressionParser(new CharArrayReader(expr.toCharArray()));
461
                        for (int j = 0; j < symbols.length; j++) {
462
                                parser.putSymbol(symbols[j].id,symbols[j].val);
463
                        }
464
                        System.out.print("Parsing '"+expr+"'");
465
                        try {
466
                                parser.AdditiveExpression();
467
                                System.out.print(": [ parsed ]. Evaluating: ");
468
                                Object expected = expectedValues[i];
469

    
470
                                Object value = parser.pop();
471
                                assertTrue("Parsed text '"+expr+"' evaluated to ("+value+") when expecting ["+expected+"]", value.equals(expected));
472
                                System.out.print(value+" [ Ok! ]\t");
473

    
474

    
475
                        } catch (ParseException e) {
476
                                System.err.println(":\t [ Fail! ]");
477
                                fail("Failed parsing text '"+expr+"'\n"+e.getMessage());
478
                        }
479
                        System.out.println();
480
                }
481
        }
482

    
483

    
484
        
485
        private String EOField = LabelExpressionParser.tokenFor(LabelExpressionParser.EOFIELD);
486
        private String EOExpression = LabelExpressionParser.tokenFor(LabelExpressionParser.EOEXPR);
487
        private String DOUBLEQUOTE = "\"";
488
        
489
        private String[] FieldExpressionStrings = 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[] FieldExpressionValue = 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 testFieldExpressionStrings() throws ExpressionException {
507

    
508
                String[] expressions = FieldExpressionStrings;
509
                Object[] expectedValues = FieldExpressionValue;
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",
553
                        
554
        };
555
        private Object[][] LabelExpressionsValue = new Object[][] {
556
                        new Object[] {3,true,true },
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
                        
563
        };
564

    
565
        public void testLabelExpressions() throws ExpressionException {
566

    
567
                String[] expressions = LabelExpressions;
568
                Object[][] expectedValues = LabelExpressionsValue;
569
                System.out.println("\nTestLabelExpressionParser.testLabelExpressions()");
570

    
571
                for (int i = 0; i < expressions.length; i++) {
572
                        String expr = expressions[i];
573
                        parser = new LabelExpressionParser(new CharArrayReader(expr.toCharArray()));
574

    
575
                        for (int j = 0; j < symbols.length; j++) {
576
                                parser.putSymbol(symbols[j].id,symbols[j].val);
577
                        }
578

    
579

    
580
                        System.out.print("Parsing '"+expr+"'");
581
                        try {
582

    
583
                                parser.LabelExpression();
584

    
585
                                System.out.print(": [ parsed ]. Evaluating: ");
586
                                Object[] expected = expectedValues[i];
587
                                Object[] myValues = (Object[]) ((Expression)parser.getStack().pop()).evaluate(parser.getSymbols());
588

    
589
                                for (int j = 0; j < myValues.length; j++) { // <- Last in first out
590
                                        Object value = myValues[j];
591
                                        assertTrue("Parsed text '"+expr+"' evaluated to ("+value+") when expecting ["+expected[j]+"]", value.equals(expected[j].toString()));
592
                                        System.out.print(value+" [ Ok! ]\t");
593
                                }
594

    
595

    
596
                        } catch (ParseException e) {
597
                                System.err.println(":\t [ Fail! ]");
598
                                fail("Failed parsing text '"+expr+"'\n"+e.getMessage());
599
                        }
600
                        System.out.println();
601
                }
602
        }
603

    
604

    
605

    
606
}