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 / TestCreateFunction.java @ 45739

History | View | Annotate | Download (6.36 KB)

1
package org.gvsig.expresionevaluator.impl;
2

    
3
import java.net.URL;
4
import java.text.ParseException;
5
import junit.framework.TestCase;
6
import static junit.framework.TestCase.assertEquals;
7
import org.gvsig.expressionevaluator.LexicalAnalyzer;
8
import org.gvsig.expressionevaluator.Compiler;
9
import org.gvsig.expressionevaluator.SymbolTable;
10
import org.gvsig.expressionevaluator.Interpreter;
11
import org.gvsig.expressionevaluator.Code;
12
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
13
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
14
import org.gvsig.expressionevaluator.MutableSymbolTable;
15
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
16
import org.gvsig.tools.resourcesstorage.AbstractResourcesStorage;
17
import org.gvsig.tools.resourcesstorage.URLResource;
18

    
19
public class TestCreateFunction extends TestCase {
20

    
21
    private static class Test1ResourcesStorage extends AbstractResourcesStorage {
22

    
23
        public Test1ResourcesStorage() {
24
            
25
        }
26
        
27
        @Override
28
        public Resource getResource(String resourceName) {
29
            URL url = this.getClass().getResource("/org/gvsig/expressionevaluator/impl/"+resourceName+".cosa");
30
            if( url == null ) {
31
                return null;
32
            }
33
            Resource res = new URLResource(resourceName+".cosa", url);
34
            return res;
35
        }        
36
    }
37
    
38
    public TestCreateFunction(String testName) {
39
        super(testName);
40
    }
41
    
42
    @Override
43
    protected void setUp() throws Exception {
44
        super.setUp();
45
        new DefaultLibrariesInitializer().fullInitialize();
46
    }
47
    
48
    @Override
49
    protected void tearDown() throws Exception {
50
        super.tearDown();
51
    }
52

    
53
    // TODO add test methods here. The name must begin with 'test'. For example:
54
    // public void testHello() {}
55

    
56
    
57
    protected LexicalAnalyzer createLexicalAnalyzer() {
58
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
59
        LexicalAnalyzer lexer = manager.createLexicalAnalyzer();
60
        return lexer;
61
    }
62

    
63
    protected org.gvsig.expressionevaluator.Compiler createCompiler() {
64
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
65
        Compiler compiler = manager.createCompiler();
66
        compiler.setLexicalAnalyzer(createLexicalAnalyzer());
67
        return compiler;
68
    }
69

    
70
    
71
    protected SymbolTable createSymbolTable() {
72
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
73
        MutableSymbolTable symbolTable = manager.createSymbolTable();
74
        symbolTable.setVar("precio", 200);
75
        symbolTable.setVar("1990", 0.168873933773767);
76
        return symbolTable;
77
    }
78
    
79
    protected Interpreter createInterpreter(SymbolTable symbolTable) {
80
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
81
        manager.setScriptsResourcesStorage(new Test1ResourcesStorage());
82
        Interpreter interpreter = manager.createInterpreter();
83
        interpreter.setSymbolTable(symbolTable);
84
        return interpreter;
85
    }
86
    
87
    public void testStringUtilsCapitalize() {
88
        SymbolTable symbolTable = createSymbolTable();
89
        Compiler compiler = createCompiler();
90
        Interpreter interpreter = createInterpreter(symbolTable);
91
        
92
        String source = "BEGIN "
93
                + "CREATE FUNCTION CAPITALIZE(s) AS "
94
                + "'org.apache.commons.lang3.StringUtils', 'capitalize' "
95
                + "LANGUAGE 'java';"
96
                + "CAPITALIZE('hola');"
97
                + "END";
98
        
99
        Code code = compiler.compileExpression(source);
100
        assertEquals("BLOCK(CREATE_FUNCTION('CAPITALIZE', LIST('s'), NULL, 'org.apache.commons.lang3.StringUtils', 'capitalize', 'java'), CAPITALIZE('hola'))", code.toString());
101
        Object v = interpreter.run(code);
102
        assertEquals("Hola", v.toString());
103
    }
104
    
105
    public void testSQRT() {
106
        SymbolTable symbolTable = createSymbolTable();
107
        Compiler compiler = createCompiler();
108
        Interpreter interpreter = createInterpreter(symbolTable);
109
        
110
        String source = "BEGIN "
111
                + "CREATE FUNCTION SQUARE(num) AS BEGIN RETURN num*num; END; "
112
                + "SQUARE(4);"
113
                + "END";
114
        
115
        Code code = compiler.compileExpression(source);
116
        assertEquals("BLOCK(CREATE_FUNCTION('SQUARE', LIST('num'), RETURN((\"num\" * \"num\")), NULL, NULL, NULL), SQUARE(4))", code.toString());
117
        Object v = interpreter.run(code);
118
        assertEquals(16, ((Number)v).intValue());
119
    }
120
    
121
    public void testSQRTScriptEngine() {
122
        SymbolTable symbolTable = createSymbolTable();
123
        Compiler compiler = createCompiler();
124
        Interpreter interpreter = createInterpreter(symbolTable);
125
        
126
        String source = "BEGIN "
127
                + "CREATE FUNCTION SQUARE(num) AS 'testlib', 'SQUARE';"
128
                + "SQUARE(4);"
129
                + "END";
130
        
131
        Code code = compiler.compileExpression(source);
132
        assertEquals("BLOCK(CREATE_FUNCTION('SQUARE', LIST('num'), NULL, 'testlib', 'SQUARE', NULL), SQUARE(4))", code.toString());
133
        Object v = interpreter.run(code);
134
        assertEquals(16, ((Number)v).intValue());
135
    }
136

    
137
    public void testLambda1() throws ParseException {
138
        SymbolTable symbolTable = createSymbolTable();
139
        Compiler compiler = createCompiler();
140
        Interpreter interpreter = createInterpreter(symbolTable);
141
        
142
        String source = "begin set x to 10 ; set fn = lambda : x * 2; fn(); end";
143

    
144
        Code code = compiler.compileExpression(source);
145
        assertEquals("BLOCK(LET('x', 10), LET('fn', CREATE_FUNCTION(NULL, (\"x\" * 2))), fn())", code.toString());
146

    
147
        Object v = interpreter.run(code);
148
        assertEquals(20, ((Number)v).intValue());
149
    }
150

    
151
    public void testLambda1WithArgs() throws ParseException {
152
        SymbolTable symbolTable = createSymbolTable();
153
        Compiler compiler = createCompiler();
154
        Interpreter interpreter = createInterpreter(symbolTable);
155
        
156
        String source = "begin set x to 10 ; set fn = lambda n : (x * 2) + n; fn(3); end";
157

    
158
        Code code = compiler.compileExpression(source);
159
        assertEquals("BLOCK(LET('x', 10), LET('fn', CREATE_FUNCTION(LIST('n'), ((\"x\" * 2) + \"n\"))), fn(3))", code.toString());
160

    
161
        Object v = interpreter.run(code);
162
        assertEquals(23, ((Number)v).intValue());
163
    }
164
    
165
}