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 / TestJsonInterpreter.java @ 45025

History | View | Annotate | Download (10.4 KB)

1 44139 jjdelcerro
package org.gvsig.expresionevaluator.impl;
2
3 44761 jjdelcerro
import java.text.ParseException;
4 45011 jjdelcerro
import java.util.List;
5
import java.util.Map;
6
import javax.json.JsonArray;
7
import javax.json.JsonObject;
8 44139 jjdelcerro
import junit.framework.TestCase;
9
import org.gvsig.expressionevaluator.Code;
10
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
11
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
12
import org.gvsig.expressionevaluator.Interpreter;
13
import org.gvsig.expressionevaluator.LexicalAnalyzer;
14
import org.gvsig.expressionevaluator.SymbolTable;
15
import org.gvsig.expressionevaluator.Compiler;
16
import org.gvsig.expressionevaluator.MutableSymbolTable;
17
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
18
19
/**
20
 *
21
 * @author jjdelcerro
22
 */
23 45011 jjdelcerro
public class TestJsonInterpreter extends TestCase {
24 44139 jjdelcerro
25 45011 jjdelcerro
    public TestJsonInterpreter(String testName) {
26 44139 jjdelcerro
        super(testName);
27
    }
28
29
    @Override
30
    protected void setUp() throws Exception {
31
        super.setUp();
32
        new DefaultLibrariesInitializer().fullInitialize();
33
    }
34
35
    @Override
36
    protected void tearDown() throws Exception {
37
        super.tearDown();
38
    }
39
40
    // TODO add test methods here. The name must begin with 'test'. For example:
41
    // public void testHello() {}
42
43
    protected LexicalAnalyzer createLexicalAnalyzer() {
44
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
45
        LexicalAnalyzer lexer = manager.createLexicalAnalyzer();
46
        return lexer;
47
    }
48
49
    protected org.gvsig.expressionevaluator.Compiler createCompiler() {
50
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
51
        Compiler compiler = manager.createCompiler();
52
        compiler.setLexicalAnalyzer(createLexicalAnalyzer());
53
        return compiler;
54
    }
55
56
    protected MutableSymbolTable createSymbolTable() {
57
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
58
        MutableSymbolTable symbolTable = manager.createSymbolTable();
59
        symbolTable.setVar("precio", 200);
60
        symbolTable.setVar("1990", 0.168873933773767);
61
        return symbolTable;
62
    }
63
64
    protected Interpreter createInterpreter(SymbolTable symbolTable) {
65
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
66
        Interpreter interpreter = manager.createInterpreter();
67
        interpreter.setSymbolTable(symbolTable);
68
        return interpreter;
69
    }
70 44761 jjdelcerro
71 45011 jjdelcerro
    public void testSimpleList() throws ParseException {
72 44139 jjdelcerro
        SymbolTable symbolTable = createSymbolTable();
73
        Compiler compiler = createCompiler();
74
        Interpreter interpreter = createInterpreter(symbolTable);
75
76 45011 jjdelcerro
        String source = "[ 10, 20, 'adios' ]";
77 44761 jjdelcerro
78 44139 jjdelcerro
        Code code = compiler.compileExpression(source);
79
        Object v = interpreter.run(code);
80 45011 jjdelcerro
81
        assertEquals("[ 10, 20, 'adios' ]", code.toString());
82
        assertTrue("List expected", v instanceof List);
83
        assertEquals(3, ((List)v).size());
84
        assertEquals(10, ((List)v).get(0));
85
        assertEquals(20, ((List)v).get(1));
86
        assertEquals("adios", ((List)v).get(2));
87 44139 jjdelcerro
    }
88
89 45011 jjdelcerro
    public void testSimpleDict() throws ParseException {
90 44139 jjdelcerro
        SymbolTable symbolTable = createSymbolTable();
91
        Compiler compiler = createCompiler();
92
        Interpreter interpreter = createInterpreter(symbolTable);
93
94 45011 jjdelcerro
        String source = "{ diez:10, 'veinte':20, saludo:'hola', 'despedida':'adios' }";
95 44139 jjdelcerro
96
        Code code = compiler.compileExpression(source);
97
        Object v = interpreter.run(code);
98 45011 jjdelcerro
99
        assertEquals("{ 'diez':10, 'veinte':20, 'saludo':'hola', 'despedida':'adios' }", code.toString());
100
        assertTrue("Map expected", v instanceof Map);
101
        assertEquals(4, ((Map)v).size());
102
        assertEquals(10, ((Map)v).get("diez"));
103
        assertEquals(20, ((Map)v).get("veinte"));
104
        assertEquals("hola", ((Map)v).get("saludo"));
105
        assertEquals("adios", ((Map)v).get("despedida"));
106 44139 jjdelcerro
    }
107
108 45011 jjdelcerro
    public void testSimpleToJsonObjectFromString() throws ParseException {
109 44761 jjdelcerro
        SymbolTable symbolTable = createSymbolTable();
110 44139 jjdelcerro
        Compiler compiler = createCompiler();
111
        Interpreter interpreter = createInterpreter(symbolTable);
112
113 45011 jjdelcerro
        String source = "to_json('{ \"diez\":10, \"veinte\":20, \"despedida\":\"adios\" }')";
114 44139 jjdelcerro
115
        Code code = compiler.compileExpression(source);
116
        Object v = interpreter.run(code);
117
118 45011 jjdelcerro
        assertEquals("to_json('{ \"diez\":10, \"veinte\":20, \"despedida\":\"adios\" }')", code.toString());
119
        assertTrue("JsonObject expected", v instanceof JsonObject);
120
        assertEquals(3, ((JsonObject)v).size());
121
        assertEquals(10, ((JsonObject)v).getInt("diez"));
122
        assertEquals(20, ((JsonObject)v).getInt("veinte"));
123
        assertEquals("adios", ((JsonObject)v).getString("despedida"));
124 44139 jjdelcerro
    }
125
126 45011 jjdelcerro
    public void testSimpleToJsonObjectFromMap() throws ParseException {
127 44761 jjdelcerro
        SymbolTable symbolTable = createSymbolTable();
128 44139 jjdelcerro
        Compiler compiler = createCompiler();
129
        Interpreter interpreter = createInterpreter(symbolTable);
130
131 45011 jjdelcerro
        String source = "to_json({ diez:10, veinte:20, despedida:'adios' })";
132 44139 jjdelcerro
133
        Code code = compiler.compileExpression(source);
134
        Object v = interpreter.run(code);
135
136 45011 jjdelcerro
        assertEquals("to_json({ 'diez':10, 'veinte':20, 'despedida':'adios' })", code.toString());
137
        assertTrue("JsonObject expected", v instanceof JsonObject);
138
        assertEquals(3, ((JsonObject)v).size());
139
        assertEquals(10, ((JsonObject)v).getInt("diez"));
140
        assertEquals(20, ((JsonObject)v).getInt("veinte"));
141
        assertEquals("adios", ((JsonObject)v).getString("despedida"));
142 44384 jjdelcerro
    }
143
144 45011 jjdelcerro
    public void testSimpleToJsonArrayFromString() throws ParseException {
145 44761 jjdelcerro
        SymbolTable symbolTable = createSymbolTable();
146 44139 jjdelcerro
        Compiler compiler = createCompiler();
147
        Interpreter interpreter = createInterpreter(symbolTable);
148
149 45011 jjdelcerro
        String source = "to_json('[ 10, 20, \"adios\" ]')";
150 44139 jjdelcerro
151
        Code code = compiler.compileExpression(source);
152
        Object v = interpreter.run(code);
153 45011 jjdelcerro
154
        assertEquals("to_json('[ 10, 20, \"adios\" ]')", code.toString());
155
156
        assertTrue("JsonArray expected", v instanceof JsonArray);
157
        assertEquals(3, ((JsonArray)v).size());
158
        assertEquals(10, ((JsonArray)v).getInt(0));
159
        assertEquals(20, ((JsonArray)v).getInt(1));
160
        assertEquals("adios", ((JsonArray)v).getString(2));
161 44139 jjdelcerro
    }
162
163 45011 jjdelcerro
    public void testSimpleToJsonArrayFromList() throws ParseException {
164 44761 jjdelcerro
        SymbolTable symbolTable = createSymbolTable();
165 44139 jjdelcerro
        Compiler compiler = createCompiler();
166
        Interpreter interpreter = createInterpreter(symbolTable);
167
168 45011 jjdelcerro
        String source = "to_json([ 10, 20, 'adios' ])";
169 44139 jjdelcerro
170
        Code code = compiler.compileExpression(source);
171
        Object v = interpreter.run(code);
172 45011 jjdelcerro
173
        assertEquals("to_json([ 10, 20, 'adios' ])", code.toString());
174
175
        assertTrue("JsonArray expected", v instanceof JsonArray);
176
        assertEquals(3, ((JsonArray)v).size());
177
        assertEquals(10, ((JsonArray)v).getInt(0));
178
        assertEquals(20, ((JsonArray)v).getInt(1));
179
        assertEquals("adios", ((JsonArray)v).getString(2));
180 44139 jjdelcerro
    }
181
182 45011 jjdelcerro
    public void testComplexToJsonArrayFromList() throws ParseException {
183 44761 jjdelcerro
        SymbolTable symbolTable = createSymbolTable();
184 44139 jjdelcerro
        Compiler compiler = createCompiler();
185
        Interpreter interpreter = createInterpreter(symbolTable);
186
187 45011 jjdelcerro
        String source = "to_json([ 10, 20, { diez:10, veinte:20, despedida:'adios' }, 'adios' ])";
188 44139 jjdelcerro
189
        Code code = compiler.compileExpression(source);
190
        Object v = interpreter.run(code);
191 45011 jjdelcerro
192
        assertEquals("to_json([ 10, 20, { 'diez':10, 'veinte':20, 'despedida':'adios' }, 'adios' ])", code.toString());
193
194
        assertTrue("JsonArray expected", v instanceof JsonArray);
195
        assertEquals(4, ((JsonArray)v).size());
196
        assertEquals(10, ((JsonArray)v).getInt(0));
197
        assertEquals(20, ((JsonArray)v).getInt(1));
198
        assertEquals("adios", ((JsonArray)v).getString(3));
199 44139 jjdelcerro
200 45011 jjdelcerro
        assertTrue("JsonObject expected", ((JsonArray)v).getJsonObject(2) instanceof JsonObject);
201
        JsonObject jsonobj = ((JsonArray)v).getJsonObject(2);
202
        assertEquals(3, jsonobj.size());
203
        assertEquals(10, jsonobj.getInt("diez"));
204
        assertEquals(20, jsonobj.getInt("veinte"));
205
        assertEquals("adios", jsonobj.getString("despedida"));
206 44139 jjdelcerro
207 45011 jjdelcerro
    }
208 45025 jjdelcerro
209
    public void testLambda1() throws ParseException {
210
        SymbolTable symbolTable = createSymbolTable();
211
        Compiler compiler = createCompiler();
212
        Interpreter interpreter = createInterpreter(symbolTable);
213
214
        String source = "begin set x to 10 ; set fn = lambda : x * 2; fn(); end";
215
216
        Code code = compiler.compileExpression(source);
217
        assertEquals("BLOCK(LET('x', 10), LET('fn', CREATE_FUNCTION(NULL, (\"x\" * 2))), fn())", code.toString());
218
219
        Object v = interpreter.run(code);
220
        assertEquals(20, ((Number)v).intValue());
221
    }
222
223
    public void testLambda1WithArgs() throws ParseException {
224
        SymbolTable symbolTable = createSymbolTable();
225
        Compiler compiler = createCompiler();
226
        Interpreter interpreter = createInterpreter(symbolTable);
227
228
        String source = "begin set x to 10 ; set fn = lambda n : (x * 2) + n; fn(3); end";
229
230
        Code code = compiler.compileExpression(source);
231
        assertEquals("BLOCK(LET('x', 10), LET('fn', CREATE_FUNCTION(LIST('n'), ((\"x\" * 2) + \"n\"))), fn(3))", code.toString());
232
233
        Object v = interpreter.run(code);
234
        assertEquals(23, ((Number)v).intValue());
235
    }
236
237
    public void testMap1() throws ParseException {
238
        SymbolTable symbolTable = createSymbolTable();
239
        Compiler compiler = createCompiler();
240
        Interpreter interpreter = createInterpreter(symbolTable);
241
242
        String source = "begin " +
243
                "set data to [ { a:10, b:'primero'}, { a:20, b:'segundo'} ] ; "+
244
                "set data2 to map( lambda x: { label:x['b'], value:x['a'] }, data); "+
245
                "cast(to_json(data2) as String); " +
246
                "end";
247
248
        Code code = compiler.compileExpression(source);
249
        assertEquals("BLOCK(LET('data', LIST(DICT('a', 10, 'b', 'primero'), DICT('a', 20, 'b', 'segundo'))), LET('data2', map(CREATE_FUNCTION(LIST('x'), DICT('label', GETITEM(\"x\", 'b'), 'value', GETITEM(\"x\", 'a'))), \"data\")), CAST(to_json(\"data2\"), 'String'))", code.toString());
250
251
        Object v = interpreter.run(code);
252
        assertEquals("[{\"label\":\"primero\",\"value\":10},{\"label\":\"segundo\",\"value\":20}]", (String)v);
253
    }
254 44139 jjdelcerro
}