Statistics
| Revision:

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

History | View | Annotate | Download (20.4 KB)

1 22218 jdominguez
/* 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 20768 jdominguez
package org.gvsig.symbology.fmap.labeling.parse;
42
43
import java.io.CharArrayReader;
44 22517 jvidal
import java.io.StringReader;
45
import java.util.Hashtable;
46 20768 jdominguez
47
import junit.framework.TestCase;
48
49 22517 jvidal
50 22218 jdominguez
import org.gvsig.symbology.fmap.labeling.lang.functions.SubstringFunction;
51
import org.gvsig.symbology.fmap.rendering.filter.operations.Expression;
52
import org.gvsig.symbology.fmap.rendering.filter.operations.ExpressionException;
53
import org.gvsig.symbology.fmap.rendering.filter.operations.OperatorsFactory;
54 20768 jdominguez
55
import com.hardcode.gdbms.engine.values.BooleanValue;
56
import com.hardcode.gdbms.engine.values.DoubleValue;
57
import com.hardcode.gdbms.engine.values.IntValue;
58
import com.hardcode.gdbms.engine.values.NullValue;
59
import com.hardcode.gdbms.engine.values.StringValue;
60 22218 jdominguez
import com.hardcode.gdbms.engine.values.Value;
61 20768 jdominguez
import com.hardcode.gdbms.engine.values.ValueFactory;
62
63
public class TestLabelExpressionParser extends TestCase {
64
        LabelExpressionParser parser;
65 22517 jvidal
        Hashtable<String, Value> symbols_table = new Hashtable<String, Value>();
66
67 20768 jdominguez
        protected void setUp() throws Exception {
68
                super.setUp();
69 22517 jvidal
70
                for (int j = 0; j < symbols.length; j++) {
71
                        symbols_table.put(symbols[j].id,symbols[j].val);
72
                }
73 20768 jdominguez
        }
74 22218 jdominguez
75
        private class Symbol {
76
                private String id;
77
                private Value val;
78
79
                public Symbol(String id, Value val) {
80
                        this.id = id;
81
                        this.val = val;
82
                }
83
        }
84 20768 jdominguez
        private Symbol[] symbols = new Symbol[] {
85 22495 jdominguez
// 0
86 20768 jdominguez
                        new Symbol(
87 22517 jvidal
                                        "A_DOUBLE_VALUE",
88 20768 jdominguez
                                        ValueFactory.createValue(4.0)
89
                        ),
90 22495 jdominguez
// 1
91 20768 jdominguez
                        new Symbol(
92 22517 jvidal
                                        "ANOTHER_DOUBLE_VALUE",
93 20768 jdominguez
                                        ValueFactory.createValue(Math.PI)
94
                        ),
95 22495 jdominguez
// 2
96 20768 jdominguez
                        new Symbol(
97 22517 jvidal
                                        "A_INTEGER_VALUE",
98 20768 jdominguez
                                        ValueFactory.createValue(12)
99
                        ),
100 22495 jdominguez
// 3
101 20768 jdominguez
                        new Symbol(
102 22517 jvidal
                                        "A_STRING_VALUE",
103 20768 jdominguez
                                        ValueFactory.createValue("this is a String")
104
                        ),
105 22495 jdominguez
// 4
106 20768 jdominguez
                        new Symbol(
107 22517 jvidal
                                        "A_BOOLEAN_VALUE",
108 20768 jdominguez
                                        ValueFactory.createValue(true)
109
                        ),
110 22495 jdominguez
// 5
111 20768 jdominguez
                        new Symbol(
112 22517 jvidal
                                        "ANOTHER_BOOLEAN_VALUE",
113 20768 jdominguez
                                        ValueFactory.createValue(false)
114
                        ),
115 22495 jdominguez
// 6
116 20768 jdominguez
                        new Symbol(
117 22517 jvidal
                                        "A_NULL_VALUE",
118 20768 jdominguez
                                        ValueFactory.createNullValue()
119
                        ),
120 22517 jvidal
121 22495 jdominguez
// 7
122
                        new Symbol(
123
                                        "XX",
124
                                        ValueFactory.createValue(2)),
125
// 8
126
                        new Symbol(
127
                                        "Y",
128
                                        ValueFactory.createValue(2.0)),
129 22517 jvidal
130 20768 jdominguez
        };
131 22218 jdominguez
132 20768 jdominguez
        private String[] ArgumentsExpressions = new String[] {
133
                        "(754)",
134
                        "(754, \"blah\")",
135
                        "(-9.68, [A_DOUBLE_VALUE]) ",
136
                        "(false, true) ",
137
        };
138
        private Object[][] ArgumentsExpressionsValue = new Object[][]  {
139
                        new Object[] { 754 },
140
                        new Object[] { 754, "blah" },
141
                        new Object[] { -9.68, 4.0 },
142
                        new Object[] { false, true },
143 22517 jvidal
        };
144 22218 jdominguez
145
        public void testArguments() throws ExpressionException {
146
147 20768 jdominguez
                String[] expressions = ArgumentsExpressions;
148
                Object[][] expectedValues = ArgumentsExpressionsValue;
149
                System.out.println("\nTestLabelExpressionParser.testArgumens()");
150 22218 jdominguez
151 20768 jdominguez
                for (int i = 0; i < expressions.length; i++) {
152
                        String expr = expressions[i];
153 22517 jvidal
                        parser = new LabelExpressionParser(new StringReader(expr),symbols_table);
154 22218 jdominguez
155 20768 jdominguez
                        System.out.print("Parsing '"+expr+"'");
156
                        try {
157 22279 jvidal
158 20768 jdominguez
                                int amount = parser.Arguments();
159 22279 jvidal
160 20768 jdominguez
                                System.out.print(": [ parsed ]. Evaluating: ");
161
                                Object[] expected = expectedValues[i];
162
                                assertTrue("Failed detecting argument number. Expected "+expected.length+", but got "+amount+".", amount == expected.length);
163 22218 jdominguez
164 20768 jdominguez
                                for (int j = expected.length-1; j >= 0; j--) { // <- Last in first out
165
                                        Object value = parser.pop();
166
                                        assertTrue("Parsed text '"+expr+"' evaluated to ("+value+") when expecting ["+expected[j]+"]", value.equals(expected[j]));
167
                                        System.out.print(value+" [ Ok! ]\t");
168
                                }
169
170 22218 jdominguez
171 20768 jdominguez
                        } catch (ParseException e) {
172
                                System.err.println(":\t [ Fail! ]");
173
                                fail("Failed parsing text '"+expr+"'\n"+e.getMessage());
174
                        }
175
                        System.out.println();
176
                }
177
        }
178 22279 jvidal
179 20768 jdominguez
        private String[] LiteralExpressions = new String[] {
180
                        "true",
181
                        "false",
182
                        " 43564356435.234",
183
                        " 12455 ",
184
                        " \"a string\"",
185
        };
186
        private Object[] LiteralExpressionsValue = new Object[]  {
187 22279 jvidal
                        true ,
188
                        false,
189
                        43564356435.234,
190
                        12455,
191
                        "a string"
192 22517 jvidal
        };
193 22279 jvidal
194 22218 jdominguez
        public void testLiteral() throws ExpressionException {
195 20768 jdominguez
                String[] expressions = LiteralExpressions;
196
                Object[] expectedValues = LiteralExpressionsValue;
197
                System.out.println("\nTestLabelExpressionParser.testLiteral()");
198 22279 jvidal
199 20768 jdominguez
                for (int i = 0; i < expressions.length; i++) {
200
                        String expr = expressions[i];
201 22517 jvidal
                        parser = new LabelExpressionParser(new StringReader(expr),symbols_table);
202
203 20768 jdominguez
                        System.out.print("Parsing '"+expr+"'");
204
                        try {
205 22218 jdominguez
                                parser.UnaryElement();
206 20768 jdominguez
                                System.out.print(": [ parsed ]. Evaluating: ");
207
                                Object expected = expectedValues[i];
208
209
                                Object value = parser.pop();
210
                                assertTrue("Parsed text '"+expr+"' evaluated to ("+value+") when expecting ["+expected+"]", value.equals(expected));
211
                                System.out.print(value+" [ Ok! ]\t");
212
213
214
                        } catch (ParseException e) {
215
                                System.err.println(":\t [ Fail! ]");
216
                                fail("Failed parsing text '"+expr+"'\n"+e.getMessage());
217
                        }
218
                        System.out.println();
219
                }
220
        }
221 22279 jvidal
222 20768 jdominguez
        private String[] FunctionExpressions = new String[] {
223 22517 jvidal
                        new SubstringFunction(symbols_table).getName()+"(\"My taylor is rich!\", 1)",
224
                        new SubstringFunction(symbols_table).getName()+"(\"My taylor is rich!\", 3, 9)",
225
                        new SubstringFunction(symbols_table).getName()+"("+new SubstringFunction(symbols_table).getName()+"(\"My taylor is rich!\", 3, 9), 2,3)",
226 20768 jdominguez
        };
227
        private Object[] FunctionExpressionsValue = new Object[]  {
228 22218 jdominguez
                        "y taylor is rich!" ,
229 22279 jvidal
                        "taylor" ,
230
                        "y",
231 22517 jvidal
        };
232 22218 jdominguez
        public void testFunction() throws ExpressionException {
233
                OperatorsFactory operators = OperatorsFactory.getInstance();
234 22279 jvidal
                operators.addOperator(SubstringFunction.class);
235
236 20768 jdominguez
                String[] expressions = FunctionExpressions;
237
                Object[] expectedValues = FunctionExpressionsValue;
238
                System.out.println("\nTestLabelExpressionParser.testFunction()");
239 22279 jvidal
240
241 20768 jdominguez
                for (int i = 0; i < expressions.length; i++) {
242
                        String expr = expressions[i];
243 22517 jvidal
                        parser = new LabelExpressionParser(new StringReader(expr),symbols_table);
244 22279 jvidal
                        parser.setOperatorsFactory(operators);
245
246 20768 jdominguez
                        System.out.print("Parsing '"+expr+"'");
247
                        try {
248 22218 jdominguez
                                parser.function();
249 20768 jdominguez
                                System.out.print(": [ parsed ]. Evaluating: ");
250
                                Object expected = expectedValues[i];
251
252
                                Object value = parser.pop();
253
                                assertTrue("Parsed text '"+expr+"' evaluated to ("+value+") when expecting ["+expected+"]", value.equals(expected));
254
                                System.out.print(value+" [ Ok! ]\t");
255
256
257
                        } catch (ParseException e) {
258
                                System.err.println(":\t [ Fail! ]");
259
                                fail("Failed parsing text '"+expr+"'\n"+e.getMessage());
260
                        }
261
                        System.out.println();
262
                }
263
        }
264
265 22218 jdominguez
        public void testPrimitiveExpression() throws ExpressionException {
266 20768 jdominguez
                String[] PrimitiveExpressions = new String[symbols.length];
267
                Object[] PrimitiveExpressionsValue = new Object[symbols.length];
268
                for (int i = 0; i < symbols.length; i++) {
269 22218 jdominguez
                        PrimitiveExpressions[i] = "["+symbols[i].id+"]";
270
                        PrimitiveExpressionsValue[i] = symbols[i].val;
271 20768 jdominguez
                }
272 22279 jvidal
273 20768 jdominguez
                String[] expressions = PrimitiveExpressions;
274
                Object[] expectedValues = PrimitiveExpressionsValue;
275 22279 jvidal
276 20768 jdominguez
                System.out.println("\nTestLabelExpressionParser.testPrimitiveExpression()");
277 22279 jvidal
278 20768 jdominguez
                for (int i = 0; i < expressions.length; i++) {
279
                        String expr = expressions[i];
280 22517 jvidal
                        parser = new LabelExpressionParser(new StringReader(expr),symbols_table);
281
282 20768 jdominguez
                        System.out.print("Parsing '"+expr+"'");
283
                        try {
284 22218 jdominguez
                                parser.Element();
285 20768 jdominguez
                                System.out.print(": [ parsed ]. Evaluating: ");
286
                                Object expected = expectedValues[i];
287 22279 jvidal
288 20768 jdominguez
                                // GDBMS values are evaluated as java primitives
289
                                if (expected instanceof DoubleValue) {
290
                                        expected = ((DoubleValue) expected).getValue();
291
                                } else if (expected instanceof IntValue) {
292
                                        expected = ((IntValue) expected).getValue();
293
                                } else if (expected instanceof StringValue) {
294
                                        expected = ((StringValue) expected).getValue();
295 22517 jvidal
                                }
296 22279 jvidal
297 22218 jdominguez
//                                else if (expected instanceof DateValue) {
298 22279 jvidal
//                                expected = ((DateValue) expected).getValue();
299 22517 jvidal
//                                }
300 22279 jvidal
301 22218 jdominguez
                                else if (expected instanceof BooleanValue) {
302 20768 jdominguez
                                        expected = ((BooleanValue) expected).getValue();
303
                                } else if (expected instanceof NullValue) {
304
                                        expected = null;
305
                                }
306
307 22279 jvidal
308 20768 jdominguez
                                Object value = parser.pop();
309
                                assertTrue("Parsed text '"+expr+"' evaluated to ("+value+") when expecting ["+expected+"]", value == null ? value == expected : value.equals(expected));
310
                                System.out.print(value+" [ Ok! ]\t");
311
312
313
                        } catch (ParseException e) {
314
                                System.err.println(":\t [ Fail! ]");
315
                                fail("Failed parsing text '"+expr+"'\n"+e.getMessage());
316
                        }
317
                        System.out.println();
318
                }
319
        }
320 22517 jvidal
321
322 20768 jdominguez
        private String[] UnaryBooleanExpressions = new String[] {
323
                        "!false",
324
                        "!true",
325
                        "![A_BOOLEAN_VALUE]",
326
                        "![ANOTHER_BOOLEAN_VALUE]",
327
        };
328
        private Object[] UnaryBooleanExpressionsValue = new Object[]  {
329 22279 jvidal
                        !false,
330
                        !true,
331
                        !((BooleanValue) symbols[4].val).getValue(),
332
                        !((BooleanValue) symbols[5].val).getValue(),
333 22517 jvidal
        };
334 22218 jdominguez
        public void testBooleanUnaryExpression() throws ExpressionException {
335 20768 jdominguez
                String[] expressions = UnaryBooleanExpressions;
336
                Object[] expectedValues = UnaryBooleanExpressionsValue;
337
                System.out.println("\nTestLabelExpressionParser.testBooleanUnaryExpression()");
338 22279 jvidal
339 20768 jdominguez
                for (int i = 0; i < expressions.length; i++) {
340
                        String expr = expressions[i];
341 22517 jvidal
                        parser = new LabelExpressionParser(new StringReader(expr),symbols_table);
342
343 20768 jdominguez
                        System.out.print("Parsing '"+expr+"'");
344
                        try {
345 22218 jdominguez
                                parser.UnaryElement();
346 20768 jdominguez
                                System.out.print(": [ parsed ]. Evaluating: ");
347
                                Object expected = expectedValues[i];
348
349
                                Object value = parser.pop();
350
                                assertTrue("Parsed text '"+expr+"' evaluated to ("+value+") when expecting ["+expected+"]", value.equals(expected));
351
                                System.out.print(value+" [ Ok! ]\t");
352
353
354
                        } catch (ParseException e) {
355
                                System.err.println(":\t [ Fail! ]");
356
                                fail("Failed parsing text '"+expr+"'\n"+e.getMessage());
357
                        }
358
                        System.out.println();
359
                }
360
        }
361 22279 jvidal
362
363 20768 jdominguez
        private String[] UnaryArithmeticExpressions = new String[] {
364
                        "+65",
365
                        "-5.5",
366
                        "+-+-[A_DOUBLE_VALUE]",
367
                        "--+[ANOTHER_DOUBLE_VALUE]",
368
        };
369
        private Object[] UnaryArithmeticExpressionsValue = new Object[]  {
370
                        65,
371
                        -5.5,
372 22218 jdominguez
                        ((DoubleValue) symbols[0].val).getValue(),
373
                        ((DoubleValue) symbols[1].val).getValue(),
374 22517 jvidal
        };
375 22218 jdominguez
        public void testArithmeticUnaryExpression() throws ExpressionException {
376 20768 jdominguez
                String[] expressions = UnaryArithmeticExpressions;
377
                Object[] expectedValues = UnaryArithmeticExpressionsValue;
378
                System.out.println("\nTestLabelExpressionParser.testArithmeticUnaryExpression()");
379 22279 jvidal
380 20768 jdominguez
                for (int i = 0; i < expressions.length; i++) {
381
                        String expr = expressions[i];
382 22517 jvidal
                        parser = new LabelExpressionParser(new StringReader(expr),symbols_table);
383
384 20768 jdominguez
                        System.out.print("Parsing '"+expr+"'");
385
                        try {
386 22218 jdominguez
                                parser.MultiplicativeExpression();
387 20768 jdominguez
                                System.out.print(": [ parsed ]. Evaluating: ");
388
                                Object expected = expectedValues[i];
389
390
                                Object value = parser.pop();
391
                                assertTrue("Parsed text '"+expr+"' evaluated to ("+value+") when expecting ["+expected+"]", value.equals(expected));
392
                                System.out.print(value+" [ Ok! ]\t");
393
394
395
                        } catch (ParseException e) {
396
                                System.err.println(":\t [ Fail! ]");
397
                                fail("Failed parsing text '"+expr+"'\n"+e.getMessage());
398
                        }
399
                        System.out.println();
400
                }
401
        }
402 22279 jvidal
403 20768 jdominguez
        private String[] MultiplicativeArithmeticExpressions = new String[] {
404
                        "3*4356.234",
405 22218 jdominguez
                        "15*10",
406
                        "15/10",
407 20768 jdominguez
                        "8768758/2432432",
408
                        "[A_DOUBLE_VALUE]*[ANOTHER_DOUBLE_VALUE]",
409
                        "[A_DOUBLE_VALUE]/[ANOTHER_DOUBLE_VALUE]",
410 22495 jdominguez
                        "[A_DOUBLE_VALUE]*16",
411 20768 jdominguez
        };
412
        private Object[] MultiplicativeArithmeticExpressionsValue = new Object[]  {
413
                        3*4356.234,
414 22218 jdominguez
                        15*10,
415
                        15/10,
416 20768 jdominguez
                        8768758/2432432,
417 22218 jdominguez
                        ((DoubleValue) symbols[0].val).getValue()*((DoubleValue) symbols[1].val).getValue(),
418
                        ((DoubleValue) symbols[0].val).getValue()/((DoubleValue) symbols[1].val).getValue(),
419 22495 jdominguez
                        ((DoubleValue) symbols[0].val).getValue() * 16,
420 22517 jvidal
        };
421
422 22218 jdominguez
        public void testMultiplicativeExpression() throws ExpressionException {
423 20768 jdominguez
                String[] expressions = MultiplicativeArithmeticExpressions;
424
                Object[] expectedValues = MultiplicativeArithmeticExpressionsValue;
425
                System.out.println("\nTestLabelExpressionParser.testMultiplicativeExpression()");
426 22279 jvidal
427 20768 jdominguez
                for (int i = 0; i < expressions.length; i++) {
428
                        String expr = expressions[i];
429 22517 jvidal
                        parser = new LabelExpressionParser(new StringReader(expr),symbols_table);
430
431 20768 jdominguez
                        System.out.print("Parsing '"+expr+"'");
432
                        try {
433
                                parser.MultiplicativeExpression();
434
                                System.out.print(": [ parsed ]. Evaluating: ");
435
                                Object expected = expectedValues[i];
436
437
                                Object value = parser.pop();
438
                                assertTrue("Parsed text '"+expr+"' evaluated to ("+value+") when expecting ["+expected+"]", value.equals(expected));
439
                                System.out.print(value+" [ Ok! ]\t");
440
441
442
                        } catch (ParseException e) {
443
                                System.err.println(":\t [ Fail! ]");
444
                                fail("Failed parsing text '"+expr+"'\n"+e.getMessage());
445
                        }
446
                        System.out.println();
447
                }
448
        }
449 22279 jvidal
450 20768 jdominguez
        private String[] AdditiveArithmeticExpressions = new String[] {
451
                        "3-4356.234",
452
                        "8768758+2432432",
453
                        "[A_DOUBLE_VALUE]+[ANOTHER_DOUBLE_VALUE]",
454
                        "[A_DOUBLE_VALUE]-[ANOTHER_DOUBLE_VALUE]",
455
        };
456
        private Object[] AdditiveArithmeticExpressionsValue = new Object[]  {
457
                        3-4356.234,
458
                        8768758+2432432,
459 22218 jdominguez
                        ((DoubleValue) symbols[0].val).getValue()+((DoubleValue) symbols[1].val).getValue(),
460
                        ((DoubleValue) symbols[0].val).getValue()-((DoubleValue) symbols[1].val).getValue(),
461 20768 jdominguez
        };
462 22218 jdominguez
        public void testAdditiveExpression() throws ExpressionException {
463 20768 jdominguez
                String[] expressions = AdditiveArithmeticExpressions;
464
                Object[] expectedValues = AdditiveArithmeticExpressionsValue;
465
                System.out.println("\nTestLabelExpressionParser.testAdditiveExpression()");
466 22279 jvidal
467 20768 jdominguez
                for (int i = 0; i < expressions.length; i++) {
468
                        String expr = expressions[i];
469 22517 jvidal
                        parser = new LabelExpressionParser(new StringReader(expr),symbols_table);
470
471 20768 jdominguez
                        System.out.print("Parsing '"+expr+"'");
472
                        try {
473
                                parser.AdditiveExpression();
474
                                System.out.print(": [ parsed ]. Evaluating: ");
475
                                Object expected = expectedValues[i];
476
477
                                Object value = parser.pop();
478
                                assertTrue("Parsed text '"+expr+"' evaluated to ("+value+") when expecting ["+expected+"]", value.equals(expected));
479
                                System.out.print(value+" [ Ok! ]\t");
480
481
482
                        } catch (ParseException e) {
483
                                System.err.println(":\t [ Fail! ]");
484
                                fail("Failed parsing text '"+expr+"'\n"+e.getMessage());
485
                        }
486
                        System.out.println();
487
                }
488
        }
489
490 22279 jvidal
491 22517 jvidal
492 22279 jvidal
        private String EOField = LabelExpressionParser.tokenFor(LabelExpressionParser.EOFIELD);
493
        private String EOExpression = LabelExpressionParser.tokenFor(LabelExpressionParser.EOEXPR);
494
        private String DOUBLEQUOTE = "\"";
495 22517 jvidal
496 22421 jdominguez
        private String[] FieldExpressionStrings = new String[] {
497 22279 jvidal
                        "km" +"25",
498
                        DOUBLEQUOTE+"km"+DOUBLEQUOTE+" "+DOUBLEQUOTE+" 25"+DOUBLEQUOTE,
499
                        "[A_STRING_VALUE] "+DOUBLEQUOTE+" 25"+DOUBLEQUOTE,
500
                        "[A_INTEGER_VALUE] "+DOUBLEQUOTE+" 25"+DOUBLEQUOTE,
501
                        "[A_DOUBLE_VALUE] "+DOUBLEQUOTE+" 25"+DOUBLEQUOTE,
502
                        "2+3"+"km",
503
        };
504 22421 jdominguez
        private Object[] FieldExpressionValue = new Object[]  {
505 22279 jvidal
                        "km25",
506
                        "km 25",
507
                        ((StringValue) symbols[3].val).getValue()+" 25",
508
                        ((IntValue) symbols[2].val).getValue()+" 25",
509
                        ((DoubleValue) symbols[0].val).getValue()+" 25",
510
                        "5km"
511
        };
512
513 22421 jdominguez
        public void testFieldExpressionStrings() throws ExpressionException {
514 22279 jvidal
515 22421 jdominguez
                String[] expressions = FieldExpressionStrings;
516
                Object[] expectedValues = FieldExpressionValue;
517 22279 jvidal
                System.out.println("\nTestLabelExpressionParser.testConcatExpressions()");
518
519
                for (int i = 0; i < expressions.length; i++) {
520
                        String expr = expressions[i];
521 22517 jvidal
                        parser = new LabelExpressionParser(new StringReader(expr),symbols_table);
522 22279 jvidal
523
524
                        System.out.print("Parsing '"+expr+"'");
525
                        try {
526
527
                                parser.LabelExpression();
528
529
                                System.out.print(": [ parsed ]. Evaluating: ");
530
                                Object[] expected = expectedValues;
531 22517 jvidal
                                String myValues = ((Expression)parser.getStack().pop()).evaluate().toString();
532 22279 jvidal
533
534
                                Object value = myValues;
535
                                assertTrue("Parsed text '"+expr+"' evaluated to ("+value+") when expecting ["+expected[i]+"]", value.equals(expected[i].toString()));
536
                                System.out.print(value+" [ Ok! ]\t");
537
538
539
540
                        } catch (ParseException e) {
541
                                System.err.println(":\t [ Fail! ]");
542
                                fail("Failed parsing text '"+expr+"'\n"+e.getMessage());
543
                        }
544
                        System.out.println();
545
                }
546
        }
547
548 22517 jvidal
549 22279 jvidal
        private String[] LabelExpressions = new String[] {
550
                        "1+2"+EOField+"true"+EOField+"2<3",
551
                        "300+454"+EOField+"false",
552
                        "1+2"+EOField+"1+5"+EOField+"2<3",
553
                        "[A_DOUBLE_VALUE]/[ANOTHER_DOUBLE_VALUE]"+EOField+"Km",
554
                        "km" +"25"+EOField+"1+5",
555
                        DOUBLEQUOTE+"km"+DOUBLEQUOTE+" "+DOUBLEQUOTE+" 25"+DOUBLEQUOTE+EOField+"1+2"+EOField+"true"+EOField+"2<3",
556 22517 jvidal
557 22218 jdominguez
        };
558 22279 jvidal
        private Object[][] LabelExpressionsValue = new Object[][] {
559
                        new Object[] {3,true,true },
560 22218 jdominguez
                        new Object[] { 754, false },
561 22279 jvidal
                        new Object[] { 3,6,true },
562
                        new Object[] {((DoubleValue) symbols[0].val).getValue()/((DoubleValue) symbols[1].val).getValue(),"Km"},
563
                        new Object[] {"km25",6 },
564
                        new Object[] {"km 25",3,true,true },
565 22517 jvidal
566 22218 jdominguez
        };
567
568 22279 jvidal
        public void testLabelExpressions() throws ExpressionException {
569 22218 jdominguez
570 22279 jvidal
                String[] expressions = LabelExpressions;
571
                Object[][] expectedValues = LabelExpressionsValue;
572
                System.out.println("\nTestLabelExpressionParser.testLabelExpressions()");
573
574 22218 jdominguez
                for (int i = 0; i < expressions.length; i++) {
575
                        String expr = expressions[i];
576 22517 jvidal
                        parser = new LabelExpressionParser(new StringReader(expr),symbols_table);
577 22218 jdominguez
578 22279 jvidal
579 22218 jdominguez
                        System.out.print("Parsing '"+expr+"'");
580
                        try {
581 22279 jvidal
582 22218 jdominguez
                                parser.LabelExpression();
583 22279 jvidal
584 22218 jdominguez
                                System.out.print(": [ parsed ]. Evaluating: ");
585
                                Object[] expected = expectedValues[i];
586 22517 jvidal
                                Object[] myValues = (Object[]) ((Expression)parser.getStack().pop()).evaluate();
587 22279 jvidal
588
                                for (int j = 0; j < myValues.length; j++) { // <- Last in first out
589
                                        Object value = myValues[j];
590 22218 jdominguez
                                        assertTrue("Parsed text '"+expr+"' evaluated to ("+value+") when expecting ["+expected[j]+"]", value.equals(expected[j].toString()));
591
                                        System.out.print(value+" [ Ok! ]\t");
592
                                }
593
594
595
                        } catch (ParseException e) {
596
                                System.err.println(":\t [ Fail! ]");
597
                                fail("Failed parsing text '"+expr+"'\n"+e.getMessage());
598
                        }
599
                        System.out.println();
600
                }
601 20768 jdominguez
        }
602
603 22279 jvidal
604
605 22495 jdominguez
        private String[] SolvedBugsExpressions = new String[] {
606 22510 jdominguez
                        "([Y] + 3) * 5;",
607
                        "([Y] + 3) * 5"+EOField+"([Y] + 3) * 5",
608 22495 jdominguez
        };
609
        private Object[][] SolvedBugsExpressionsValue = new Object[][] {
610 22510 jdominguez
                        new Object[] { ((((DoubleValue) symbols[8].val ).getValue() + 3 ) *5) },
611 22517 jvidal
                        new Object[] {
612 22510 jdominguez
                                        ""+((((DoubleValue) symbols[8].val ).getValue() + 3 ) *5),
613
                                        ""+((((DoubleValue) symbols[8].val ).getValue() + 3 ) *5) },
614 22495 jdominguez
        };
615
        /**
616
         * Tests several buggy expressions detected by testers and users
617
         * @throws ExpressionException
618
         */
619
        public void testSolvedBugsExpressions() throws ExpressionException {
620
621
                String[] expressions = SolvedBugsExpressions;
622
                Object[][] expectedValues = SolvedBugsExpressionsValue;
623
                System.out.println("\nTestLabelExpressionParser.testSolvedBugsExpressions()");
624
625
                for (int i = 0; i < expressions.length; i++) {
626
                        String expr = expressions[i];
627 22517 jvidal
                        parser = new LabelExpressionParser(new StringReader(expr),symbols_table);
628 22495 jdominguez
629
630
                        System.out.print("Parsing '"+expr+"'");
631
                        try {
632
633
                                parser.LabelExpression();
634
635
                                System.out.print(": [ parsed ]. Evaluating: ");
636
                                Object[] expected = expectedValues[i];
637 22517 jvidal
                                Object value = ((Expression)parser.getStack().pop()).evaluate();
638 22510 jdominguez
                                if (value.getClass().isArray()) {
639
                                        Object[] myValues = (Object[]) value;
640 22495 jdominguez
641 22510 jdominguez
                                        for (int j = 0; j < myValues.length; j++) { // <- Last in first out
642
                                                Object aValue = myValues[j];
643
                                                assertTrue("Parsed text '"+expr+"' evaluated to ("+aValue+") when expecting ["+expected[j]+"]", aValue.equals(expected[j].toString()));
644
                                                System.out.print(aValue+" [ Ok! ]\t");
645
                                        }
646
                                } else {
647
                                        assertTrue("Parsed text '"+expr+"' evaluated to ("+value+") when expecting ["+expected+"]", value.equals(expected[0]));
648 22495 jdominguez
                                        System.out.print(value+" [ Ok! ]\t");
649
                                }
650
651
                        } catch (ParseException e) {
652
                                System.err.println(":\t [ Fail! ]");
653
                                fail("Failed parsing text '"+expr+"'\n"+e.getMessage());
654
                        }
655
                        System.out.println();
656
                }
657
        }
658
659 20768 jdominguez
}