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 / TestCodeToStringConverter.java @ 43989

History | View | Annotate | Download (3.78 KB)

1
package org.gvsig.expresionevaluator.impl;
2

    
3
import static junit.framework.Assert.assertEquals;
4
import junit.framework.TestCase;
5
import org.gvsig.expressionevaluator.impl.ExpressionEvaluatorImplLibrary;
6
import org.gvsig.expressionevaluator.spi.AbstractCodeToStringConverter;
7
import org.gvsig.expressionevaluator.Code;
8
import org.gvsig.expressionevaluator.CodeToStringConverter;
9
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
10
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
11
import org.gvsig.expressionevaluator.Function;
12
import org.gvsig.expressionevaluator.Compiler;
13
import org.gvsig.expressionevaluator.LexicalAnalyzer;
14
import org.gvsig.expressionevaluator.SymbolTable;
15
import org.gvsig.expressionevaluator.impl.DefaultCompiler;
16
import org.gvsig.expressionevaluator.impl.SQLLexicalAnalyzer;
17

    
18
/**
19
 *
20
 * @author jjdelcerro
21
 */
22
public class TestCodeToStringConverter extends TestCase {
23

    
24
    public TestCodeToStringConverter(String testName) {
25
        super(testName);
26
    }
27

    
28
    @Override
29
    protected void setUp() throws Exception {
30
        super.setUp();
31
        new ExpressionEvaluatorImplLibrary().initialize();
32
    }
33

    
34
    @Override
35
    protected void tearDown() throws Exception {
36
        super.tearDown();
37
    }
38

    
39
    // TODO add test methods here. The name must begin with 'test'. For example:
40
    // public void testHello() {}
41
    
42
    protected LexicalAnalyzer createLexicalAnalyzer() {
43
        SQLLexicalAnalyzer lexer = new SQLLexicalAnalyzer();
44
        return lexer;
45
    }
46
        
47
    protected Compiler createCompiler() {
48
        Compiler compiler = new DefaultCompiler();
49
        compiler.setLexicalAnalyzer(createLexicalAnalyzer());
50
        return compiler;
51
    }
52

    
53
    private static class SimpleCodeToStringConverter extends AbstractCodeToStringConverter {
54

    
55
        public SimpleCodeToStringConverter() {
56
            super();
57
            initFunctions();
58
        }
59

    
60
        private void initFunctions() {
61
            ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
62
            SymbolTable symbolTable = manager.getSymbolTable("SQL");
63
            for (Function function : symbolTable.functions()) {
64
                this.addSupportedFunction(function.name());
65
            }
66
            symbolTable = manager.getSymbolTable("OGC");
67
            for (Function function : symbolTable.functions()) {
68
                this.addSupportedFunction(function.name());
69
            }
70
        }
71

    
72
        @Override
73
        protected String functionToString(String functionName, Code.Caller.Arguments args) {
74
            switch (functionName.toLowerCase()) {
75
                case "date":
76
                    return "DATE " + toString(args.get(0)) + " ";
77
                case "time":
78
                    return "TIME " + toString(args.get(0)) + " ";
79
                case "timestamp":
80
                    return "TIMESTAMP " + toString(args.get(0)) + " ";
81
            }
82
            return super.functionToString(functionName, args);
83
        }
84

    
85
    }
86
        
87
    public void testSimpleExpression() {
88
        String source = "(precio + 10) * 2 + 20 + 30 / 2";
89

    
90
        CodeToStringConverter converter = new SimpleCodeToStringConverter();
91
        Compiler compiler = createCompiler();
92
        
93
        Code code = compiler.compileExpression(source);
94
        assertEquals("(((\"precio\" + 10) * 2) + 20) + (30 / 2)", converter.toString(code));
95
    }    
96

    
97
    public void testFunctionExpression1() {
98
        String source = "(precio + 10) * abs(2 + 20) + 30 / 2";
99

    
100
        CodeToStringConverter converter = new SimpleCodeToStringConverter();
101
        Compiler compiler = createCompiler();
102
        
103
        Code code = compiler.compileExpression(source);
104
        assertEquals(true, converter.isValid(code));
105
        assertEquals("((\"precio\" + 10) * (abs(2 + 20))) + (30 / 2)", converter.toString(code));
106
    }    
107
}