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 @ 44139

History | View | Annotate | Download (3.8 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.spi.AbstractCodeToStringConverter;
6
import org.gvsig.expressionevaluator.Code;
7
import org.gvsig.expressionevaluator.CodeToStringConverter;
8
import org.gvsig.expressionevaluator.Codes;
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
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
18

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

    
25
    public TestCodeToStringConverter(String testName) {
26
        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
        SQLLexicalAnalyzer lexer = new SQLLexicalAnalyzer();
45
        return lexer;
46
    }
47
        
48
    protected Compiler createCompiler() {
49
        Compiler compiler = new DefaultCompiler();
50
        compiler.setLexicalAnalyzer(createLexicalAnalyzer());
51
        return compiler;
52
    }
53

    
54
    private static class SimpleCodeToStringConverter extends AbstractCodeToStringConverter {
55

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

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

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

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

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

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

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