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

History | View | Annotate | Download (6.49 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
        return symbolTable;
66
    }
67

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

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

    
96
    public void testDate() {
97
        ExpressionBuilder builder = createExpressionBuilder();
98

    
99
        Value v = builder.date( builder.constant("2020-02-18"));
100

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

    
105
    public void testTime() {
106
        ExpressionBuilder builder = createExpressionBuilder();
107

    
108
        Value v = builder.time( builder.constant("19:01:00"));
109

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

    
113
    public void testTimestamp() {
114
        ExpressionBuilder builder = createExpressionBuilder();
115

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

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

    
121
    public void testCurrentDate() {
122
        ExpressionBuilder builder = createExpressionBuilder();
123

    
124
        Value v = builder.current_date();
125

    
126
        assertEquals("CURRENT_DATE()", v.toString());
127
    }
128

    
129
    public void testCurrentTime() {
130
        ExpressionBuilder builder = createExpressionBuilder();
131

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

    
137
    public void testCurrentTimestamp() {
138
        ExpressionBuilder builder = createExpressionBuilder();
139

    
140
        Value v = builder.current_timestamp();
141

    
142
        assertEquals("CURRENT_TIMESTAMP()", v.toString());
143
    }
144

    
145
    public void testExtractDay() {
146
        ExpressionBuilder builder = createExpressionBuilder();
147

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

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

    
156
    public void testToDate() {
157
        ExpressionBuilder builder = createExpressionBuilder();
158

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

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

    
167
    public void testToTimestamp() {
168
        ExpressionBuilder builder = createExpressionBuilder();
169

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

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

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

    
205
        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());
206
        
207
    }
208

    
209

    
210

    
211
}