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

History | View | Annotate | Download (7.39 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.dataTypes.DataTypes;
19
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
20

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

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

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

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

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

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

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

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

    
63
    protected SymbolTable createSymbolTable() {
64
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
65
        MutableSymbolTable symbolTable = manager.createSymbolTable();
66
        return symbolTable;
67
    }
68

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

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

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

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

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

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

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

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

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

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

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

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

    
125
        Value v = builder.current_date();
126

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

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

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

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

    
141
        Value v = builder.current_timestamp();
142

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

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

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

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

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

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

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

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

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

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

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

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

    
210
    public void testConstant() {
211
        ExpressionBuilder builder = createExpressionBuilder();
212

    
213
        Value v = builder.constant(10,DataTypes.INT);
214
        assertEquals("10", v.toString());
215

    
216
        v = builder.constant("10",DataTypes.INT);
217
        assertEquals("10", v.toString());
218

    
219
        v = builder.constant(10,DataTypes.LONG);
220
        assertEquals("10", v.toString());
221

    
222
        v = builder.constant("10",DataTypes.LONG);
223
        assertEquals("10", v.toString());
224

    
225
        v = builder.constant(10.5,DataTypes.DOUBLE);
226
        assertEquals("10.5", v.toString());
227

    
228
        v = builder.constant("10.5",DataTypes.DOUBLE);
229
//        assertEquals("10.5", v.toString());
230

    
231
        v = builder.constant(10,DataTypes.STRING);
232
        assertEquals("'10'", v.toString());
233

    
234
        v = builder.constant(10.5,DataTypes.STRING);
235
//        assertEquals("'10.5'", v.toString());
236

    
237
    }
238

    
239
}