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 / TestDateExpressionBuilder.java @ 44763

History | View | Annotate | Download (6.59 KB)

1
package org.gvsig.expresionevaluator.impl;
2

    
3
import java.text.ParseException;
4
import java.text.SimpleDateFormat;
5
import java.util.Date;
6
import junit.framework.TestCase;
7
import org.gvsig.expressionevaluator.Code;
8
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
9
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
10
import org.gvsig.expressionevaluator.Interpreter;
11
import org.gvsig.expressionevaluator.LexicalAnalyzer;
12
import org.gvsig.expressionevaluator.SymbolTable;
13
import org.gvsig.expressionevaluator.Compiler;
14
import org.gvsig.expressionevaluator.ExpressionBuilder;
15
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
16
import org.gvsig.expressionevaluator.ExpressionUtils;
17
import org.gvsig.expressionevaluator.MutableSymbolTable;
18
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
19

    
20
/**
21
 *
22
 * @author jjdelcerro
23
 */
24
public class TestDateExpressionBuilder extends TestCase {
25

    
26
    public TestDateExpressionBuilder(String testName) {
27
        super(testName);
28
    }
29

    
30
    @Override
31
    protected void setUp() throws Exception {
32
        super.setUp();
33
        new DefaultLibrariesInitializer().fullInitialize();
34
    }
35

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

    
41
    // TODO add test methods here. The name must begin with 'test'. For example:
42
    // public void testHello() {}
43

    
44
    protected ExpressionBuilder createExpressionBuilder() {
45
        ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
46
        return builder;
47
    }
48

    
49
    protected LexicalAnalyzer createLexicalAnalyzer() {
50
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
51
        LexicalAnalyzer lexer = manager.createLexicalAnalyzer();
52
        return lexer;
53
    }
54

    
55
    protected org.gvsig.expressionevaluator.Compiler createCompiler() {
56
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
57
        Compiler compiler = manager.createCompiler();
58
        compiler.setLexicalAnalyzer(createLexicalAnalyzer());
59
        return compiler;
60
    }
61

    
62
    protected SymbolTable createSymbolTable() {
63
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
64
        MutableSymbolTable symbolTable = manager.createSymbolTable();
65
        symbolTable.setVar("precio", 200);
66
        symbolTable.setVar("1990", 0.168873933773767);
67
        return symbolTable;
68
    }
69

    
70
    protected Interpreter createInterpreter(SymbolTable symbolTable) {
71
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
72
        Interpreter interpreter = manager.createInterpreter();
73
        interpreter.setSymbolTable(symbolTable);
74
        return interpreter;
75
    }
76
    
77
    protected Object execute(Value value) {
78
        Compiler compiler = createCompiler();
79
        SymbolTable symbolTable = createSymbolTable();
80
        Interpreter interpreter = createInterpreter(symbolTable);
81
        
82
        String source = value.toString();
83
        Code code = compiler.compileExpression(source);
84
        Object v = interpreter.run(code);      
85
        
86
        return v;
87
    }
88
    
89
    private void link(Code code) {
90
      code.link(createSymbolTable());
91
    }
92

    
93
    private Date date(String x) throws ParseException {
94
        Date d = new SimpleDateFormat("yyyy-M-d H:mm:ss").parse(x);
95
        return d;
96
    }
97

    
98
    public void testDate() {
99
        ExpressionBuilder builder = createExpressionBuilder();
100

    
101
        Value v = builder.date( builder.constant("2020-02-18"));
102

    
103
        assertEquals("DATE '2020-02-18'", v.toString());
104
        
105
    }
106

    
107
    public void testTime() {
108
        ExpressionBuilder builder = createExpressionBuilder();
109

    
110
        Value v = builder.time( builder.constant("19:01:00"));
111

    
112
        assertEquals("TIME '19:01:00'", v.toString());
113
    }
114

    
115
    public void testTimestamp() {
116
        ExpressionBuilder builder = createExpressionBuilder();
117

    
118
        Value v = builder.timestamp(builder.constant("2020-02-18 19:01:00"));
119

    
120
        assertEquals("TIMESTAMP '2020-02-18 19:01:00'", v.toString());
121
    }
122

    
123
    public void testCurrentDate() {
124
        ExpressionBuilder builder = createExpressionBuilder();
125

    
126
        Value v = builder.current_date();
127

    
128
        assertEquals("CURRENT_DATE()", v.toString());
129
    }
130

    
131
    public void testCurrentTime() {
132
        ExpressionBuilder builder = createExpressionBuilder();
133

    
134
        Value v = builder.current_time();
135
        
136
        assertEquals("CURRENT_TIME()", v.toString());
137
    }
138

    
139
    public void testCurrentTimestamp() {
140
        ExpressionBuilder builder = createExpressionBuilder();
141

    
142
        Value v = builder.current_timestamp();
143

    
144
        assertEquals("CURRENT_TIMESTAMP()", v.toString());
145
    }
146

    
147
    public void testExtractDay() {
148
        ExpressionBuilder builder = createExpressionBuilder();
149

    
150
        Value v = builder.extract(
151
                builder.constant("DAY"),
152
                builder.date(builder.constant("2020-02-18"))
153
        );
154

    
155
        assertEquals("EXTRACT(DAY FROM DATE '2020-02-18')", v.toString());
156
    }
157

    
158
    public void testToDate() {
159
        ExpressionBuilder builder = createExpressionBuilder();
160

    
161
        Value v = builder.to_date(
162
                builder.constant("05 Dec 2000"),
163
                builder.constant("DD MMM YYYY")
164
        );
165

    
166
        assertEquals("TO_DATE('05 Dec 2000', 'DD MMM YYYY')", v.toString());
167
    }
168

    
169
    public void testToTimestamp() {
170
        ExpressionBuilder builder = createExpressionBuilder();
171

    
172
        Value v = builder.to_timestamp(
173
                builder.constant("05 Dec 2000"),
174
                builder.constant("DD MMM YYYY")
175
        );
176

    
177
        assertEquals("TO_TIMESTAMP('05 Dec 2000', 'DD MMM YYYY')", v.toString());
178
    }
179

    
180
    public void testUseCaseFilter1() throws ParseException {
181
        ExpressionBuilder builder = createExpressionBuilder();
182
        
183
        Date dd = date("2020-02-20 16:30:50");
184
        Value v = builder.or(
185
          builder.and(
186
            builder.gt(
187
                    builder.column("Time"), 
188
                    builder.time(builder.constant("01:02:03"))
189
            ),
190
            builder.lt(
191
                    builder.column("Time"), 
192
                    builder.time(dd)
193
            )
194
          ),
195
          builder.and(
196
            builder.gt(
197
                    builder.column("Date"), 
198
                    builder.date(builder.constant("2019-02-17"))
199
            ),
200
            builder.lt(
201
                    builder.column("Date"), 
202
                    builder.date(dd)
203
            )
204
          )
205
        );
206

    
207
        assertEquals("(( (\"Time\") > (TIME '01:02:03') ) AND ( (\"Time\") < (TIME '16:30:50') )) OR (( (\"Date\") > (DATE '2019-02-17') ) AND ( (\"Date\") < (DATE '2020-02-20') ))", v.toString());
208
        
209
    }
210

    
211

    
212

    
213
}