Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.library / org.gvsig.expressionevaluator / org.gvsig.expressionevaluator.lib / org.gvsig.expressionevaluator.lib.impl / src / test / java / org / gvsig / expresionevaluator / impl / TestExpression.java @ 45739

History | View | Annotate | Download (7.56 KB)

1
package org.gvsig.expresionevaluator.impl;
2

    
3
import java.awt.Color;
4
import junit.framework.TestCase;
5
import org.apache.commons.lang3.Range;
6
import org.gvsig.expressionevaluator.Expression;
7
import org.gvsig.expressionevaluator.ExpressionBuilder;
8
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
9
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
10
import org.gvsig.expressionevaluator.ExpressionUtils;
11
import org.gvsig.expressionevaluator.Interpreter;
12
import org.gvsig.expressionevaluator.MutableSymbolTable;
13
import org.gvsig.expressionevaluator.impl.DefaultSymbolTable;
14
import org.gvsig.expressionevaluator.spi.AbstractFunction;
15
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
16

    
17
public class TestExpression extends TestCase {
18

    
19
    private static class MyValueSymbolTable extends DefaultSymbolTable {
20

    
21
        private class MyValueFunction extends AbstractFunction {
22

    
23
            public MyValueFunction() {
24
                super("Numeric", "MyValue", Range.is(0));
25
            }
26

    
27
            @Override
28
            public Object call(Interpreter interpreter, Object[] args) {
29
                return value;
30
            }
31

    
32
            @Override
33
            public boolean allowConstantFolding() {
34
                return false;
35
            }
36
        }
37
        private int value;
38

    
39
        @SuppressWarnings("OverridableMethodCallInConstructor")
40
        public MyValueSymbolTable(String name) {
41
            super(name);
42
            this.addFunction(new MyValueFunction());
43
        }
44

    
45
        public void setValue(int value) {
46
            this.value = value;
47
        }
48
    }
49

    
50
    public TestExpression(String testName) {
51
        super(testName);
52
    }
53

    
54
    @Override
55
    protected void setUp() throws Exception {
56
        super.setUp();
57
        new DefaultLibrariesInitializer().fullInitialize();
58
    }
59

    
60
    @Override
61
    protected void tearDown() throws Exception {
62
        super.tearDown();
63
    }
64

    
65
    private MutableSymbolTable createMutableSymbolTable() {
66
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
67
        MutableSymbolTable t = manager.createSymbolTable();
68
        return t;
69
    }
70

    
71
    private Expression createExpression() {
72
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
73
        Expression e = manager.createExpression();
74
        return e;
75
    }
76

    
77
    // TODO add test methods here. The name must begin with 'test'. For example:
78
    // public void testHello() {}
79
    
80
    public void testToJSON1() {
81
        String source = "precio + 10";
82

    
83
        Expression expression = createExpression();
84
        expression.setPhrase(source);
85

    
86
        assertEquals(
87
                "\n{\n    \"__classname__\":\"org.gvsig.expressionevaluator.impl.DefaultExpression\",\n    \"phrase\":\"precio + 10\"\n}",
88
                expression.toJSON()
89
        );
90
    }
91

    
92
    public void testA() {
93

    
94
        Expression expression = createExpression();
95
        expression.setPhrase("precio * 10");
96

    
97
        MutableSymbolTable t1 = createMutableSymbolTable();
98
        t1.setVar("precio", 2);
99
        Object v1 = expression.execute(t1);
100
        assertEquals(20, (int) v1);
101

    
102
        t1.setVar("precio", 3);
103
        v1 = expression.execute(t1);
104
        assertEquals(30, (int) v1);
105

    
106
        MutableSymbolTable t2 = createMutableSymbolTable();
107
        t2.setVar("precio", 4);
108
        v1 = expression.execute(t2);
109
        assertEquals(40, (int) v1);
110

    
111
    }
112

    
113
    public void testB() {
114

    
115
        Expression expression = createExpression();
116
        expression.setPhrase("MYVALUE()*10");
117

    
118
        MyValueSymbolTable t1 = new MyValueSymbolTable("MyValueSymbolTable1");
119
        t1.setValue(2);
120
        Object v1 = expression.execute(t1);
121
        assertEquals(20, (int) v1);
122

    
123
        t1.setValue(3);
124
        v1 = expression.execute(t1);
125
        assertEquals(30, (int) v1);
126

    
127
        MyValueSymbolTable t2 = new MyValueSymbolTable("MyValueSymbolTable2");
128
        t2.setValue(4);
129
        v1 = expression.execute(t2);
130
        assertEquals(40, (int) v1);
131

    
132
    }
133

    
134
    public void testAs() {
135

    
136
        Expression expression = createExpression();
137
        expression.setPhrase("MYVALUE()*10 as n");
138

    
139
        MyValueSymbolTable t1 = new MyValueSymbolTable("MyValueSymbolTable1");
140
        t1.setValue(2);
141
        Object v1 = expression.execute(t1);
142
        assertEquals(20, (int) v1);
143
        assertEquals(20, (int) expression.getSymbolTable().value("n"));
144

    
145
        t1.setValue(3);
146
        v1 = expression.execute(t1);
147
        assertEquals(30, (int) v1);
148
        assertEquals(30, (int) expression.getSymbolTable().value("n"));
149

    
150
        MyValueSymbolTable t2 = new MyValueSymbolTable("MyValueSymbolTable2");
151
        t2.setValue(4);
152
        v1 = expression.execute(t2);
153
        assertEquals(40, (int) v1);
154
        assertEquals(40, (int) expression.getSymbolTable().value("n"));
155

    
156
    }
157
    
158
    public void testCast1() {
159

    
160
        Expression expression = createExpression();
161
        expression.setPhrase("CAST 10.1 AS INTEGER");
162

    
163
        Object v1 = expression.execute(null);
164
        assertEquals("Integer", v1.getClass().getSimpleName());
165
        assertEquals(10, (int) v1);
166
    }
167
    
168
    public void testCast2() {
169

    
170
        Expression expression = createExpression();
171
        expression.setPhrase("CAST(10.1 AS INTEGER)");
172

    
173
        Object v1 = expression.execute(null);
174
        assertEquals("Integer", v1.getClass().getSimpleName());
175
        assertEquals(10, (int) v1);
176
    }
177
    
178
    public void testCastAndAs() {
179

    
180
        Expression expression = createExpression();
181
        expression.setPhrase("CAST 10.1 AS INTEGER AS N");
182

    
183
        Object v1 = expression.execute(null);
184
        assertEquals("Integer", v1.getClass().getSimpleName());
185
        assertEquals(10, (int) v1);
186

    
187
        Object n = expression.getSymbolTable().value("n");
188
        assertEquals("Integer", n.getClass().getSimpleName());
189
        assertEquals(10, (int) n);
190
    }
191
    
192
    
193
    public void testToColor() {
194

    
195
        ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
196
        
197
        Color color = ExpressionUtils.parseColor(
198
                null, 
199
                builder.color(new Color(111,22,3,44)).toString(), 
200
                Color.BLACK
201
        );
202
        assertEquals(111, color.getRed());
203
        assertEquals(22, color.getGreen());
204
        assertEquals(3, color.getBlue());
205
        assertEquals(44, color.getAlpha());
206
        
207
        color = ExpressionUtils.parseColor(
208
                null, 
209
                builder.color(new Color(111,22,3)).toString(), 
210
                Color.BLACK
211
        );
212
        assertEquals(111, color.getRed());
213
        assertEquals(22, color.getGreen());
214
        assertEquals(3, color.getBlue());
215
        assertEquals(255, color.getAlpha());
216
        
217
        // Falla y devuelbe Color.BLACK por que el alfa tiene mas de 4 caracteres
218
        color = ExpressionUtils.parseColor(
219
                null, 
220
                "COLOR(111, 22, 3, 4444)", 
221
                Color.BLACK
222
        );
223
        assertEquals(Color.BLACK.getRed(), color.getRed());
224
        assertEquals(Color.BLACK.getGreen(), color.getGreen());
225
        assertEquals(Color.BLACK.getBlue(), color.getBlue());
226
        assertEquals(Color.BLACK.getAlpha(), color.getAlpha());
227
        
228
        // Falla y devuelbe Color.BLACK por que el blue se excede del rango [0..255]
229
        color = ExpressionUtils.parseColor(
230
                null, 
231
                "COLOR(111, 22, 999, 44)", 
232
                Color.BLACK
233
        );
234
        assertEquals(Color.BLACK.getRed(), color.getRed());
235
        assertEquals(Color.BLACK.getGreen(), color.getGreen());
236
        assertEquals(Color.BLACK.getBlue(), color.getBlue());
237
        assertEquals(Color.BLACK.getAlpha(), color.getAlpha());
238
        
239
    }
240
}