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 / TestSQLLexer.java @ 44098

History | View | Annotate | Download (8.66 KB)

1
package org.gvsig.expresionevaluator.impl;
2

    
3
import org.gvsig.expressionevaluator.impl.SQLLexicalAnalyzer;
4
import junit.framework.TestCase;
5
import org.gvsig.expressionevaluator.LexicalAnalyzer;
6
import org.gvsig.expressionevaluator.LexicalAnalyzer.Token;
7
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
8

    
9
public class TestSQLLexer extends TestCase {
10

    
11
    public TestSQLLexer(String testName) {
12
        super(testName);
13
    }
14

    
15
    @Override
16
    protected void setUp() throws Exception {
17
        super.setUp();
18
        new DefaultLibrariesInitializer().fullInitialize();
19
    }
20

    
21
    @Override
22
    protected void tearDown() throws Exception {
23
        super.tearDown();
24
    }
25

    
26
    // TODO add test methods here. The name must begin with 'test'. For example:
27
    // public void testHello() {}
28

    
29
    protected LexicalAnalyzer createLexicalAnalyzer(String expression) {
30
        SQLLexicalAnalyzer lex = new SQLLexicalAnalyzer(expression);
31
        return lex;
32
    }
33
    
34
    public void testIdentifier1() {
35
        String expression = "precio";
36

    
37
        LexicalAnalyzer lex = createLexicalAnalyzer(expression);
38
        Token t1 = lex.next();
39
        assertEquals(Token.IDENTIFIER, t1.getType());
40
        assertEquals("precio", t1.getLiteral());
41
    }
42

    
43
    public void testIdentifier2() {
44
        String expression = "\"precio\"";
45

    
46
        LexicalAnalyzer lex = createLexicalAnalyzer(expression);
47
        Token t1 = lex.next();
48
        assertEquals(Token.IDENTIFIER, t1.getType());
49
        assertEquals("precio", t1.getLiteral());
50
    }
51

    
52
    public void testIdentifier3() {
53
        String expression = "[precio]";
54

    
55
        LexicalAnalyzer lex = createLexicalAnalyzer(expression);
56
        Token t1 = lex.next();
57
        assertEquals(Token.IDENTIFIER, t1.getType());
58
        assertEquals("precio", t1.getLiteral());
59
    }
60

    
61
    public void testTrue() {
62
        String expression = "true";
63

    
64
        LexicalAnalyzer lex = createLexicalAnalyzer(expression);
65
        Token t1 = lex.next();
66
        assertEquals(Token.TRUE, t1.getType());
67
        assertEquals("true", t1.getLiteral());
68
    }
69

    
70
    public void testFalse() {
71
        String expression = "false";
72

    
73
        LexicalAnalyzer lex = createLexicalAnalyzer(expression);
74
        Token t1 = lex.next();
75
        assertEquals(Token.FALSE, t1.getType());
76
        assertEquals("false", t1.getLiteral());
77
    }
78

    
79
    public void testNull() {
80
        String expression = "null";
81

    
82
        LexicalAnalyzer lex = createLexicalAnalyzer(expression);
83
        Token t1 = lex.next();
84
        assertEquals(Token.NULL, t1.getType());
85
        assertEquals("null", t1.getLiteral());
86
        assertNotNull(t1.getValue());
87
    }
88

    
89
    public void testIsNull() {
90
        String expression = "isnull";
91

    
92
        LexicalAnalyzer lex = createLexicalAnalyzer(expression);
93
        Token t1 = lex.next();
94
        assertEquals(Token.ISNULL, t1.getType());
95
        assertEquals("isnull", t1.getLiteral());
96
        assertNotNull(t1.getValue());
97
    }
98

    
99
    public void testNotNull() {
100
        String expression = "notnull";
101

    
102
        LexicalAnalyzer lex = createLexicalAnalyzer(expression);
103
        Token t1 = lex.next();
104
        assertEquals(Token.NOTNULL, t1.getType());
105
        assertEquals("notnull", t1.getLiteral());
106
        assertNotNull(t1.getValue());
107
    }
108

    
109
    public void testNotTrue() {
110
        String expression = "not true";
111

    
112
        LexicalAnalyzer lex = createLexicalAnalyzer(expression);
113
        Token t1 = lex.next();
114
        assertEquals(Token.OP_NOT, t1.getType());
115
        assertEquals("not", t1.getLiteral());
116
        t1 = lex.next();
117
        assertEquals(Token.TRUE, t1.getType());
118
        assertEquals("true", t1.getLiteral());
119
    }
120

    
121
    public void testInteger() {
122
        String expression = "23";
123

    
124
        LexicalAnalyzer lex = createLexicalAnalyzer(expression);
125
        Token t1 = lex.next();
126
        assertEquals(Token.INTEGER_LITERAL, t1.getType());
127
        assertEquals("23", t1.getLiteral());
128
        assertEquals(new Long(23), t1.getValue());
129
    }
130

    
131
    public void testDecimal() {
132
        String expression = "23.1";
133

    
134
        LexicalAnalyzer lex = createLexicalAnalyzer(expression);
135
        Token t1 = lex.next();
136
        assertEquals(Token.FLOATING_POINT_LITERAL, t1.getType());
137
        assertEquals("23.1", t1.getLiteral());
138
        assertEquals(new Double(23.1), t1.getValue());
139
    }
140

    
141
    public void testStringLiteral1() {
142
        String expression = "'hola macu'";
143

    
144
        LexicalAnalyzer lex = createLexicalAnalyzer(expression);
145
        Token t1 = lex.next();
146
        assertEquals(Token.STRING_LITERAL, t1.getType());
147
        assertEquals("hola macu", t1.getLiteral());
148
        assertEquals("hola macu", t1.getValue());
149
    }
150
    
151
    public void testStringLiteral2() {
152
        String expression = "'hola''s macu'";
153

    
154
        LexicalAnalyzer lex = createLexicalAnalyzer(expression);
155
        Token t1 = lex.next();
156
        assertEquals(Token.STRING_LITERAL, t1.getType());
157
        assertEquals("hola's macu", t1.getLiteral());
158
        assertEquals("hola's macu", t1.getValue());
159
    }
160
    
161
    public void operator(String operatorName, int operatorId) {
162
        String expression = "precio " + operatorName + " 23";
163

    
164
        LexicalAnalyzer lex = createLexicalAnalyzer(expression);
165
        Token t1 = lex.next();
166
        assertEquals(Token.IDENTIFIER, t1.getType());
167
        assertEquals("precio", t1.getLiteral());
168

    
169
        Token t2 = lex.next();
170
        assertEquals(operatorId, t2.getType());
171
        assertEquals(operatorName, t2.getLiteral());
172

    
173
        Token t3 = lex.next();
174
        assertEquals(Token.INTEGER_LITERAL, t3.getType());
175
        assertEquals("23", t3.getLiteral());
176
        assertEquals(new Long(23), t3.getValue());
177
    }
178
    
179
    public void testOperators() {
180

    
181
        operator("=", Token.OP_EQ);
182
        operator("<>", Token.OP_NE);
183
        operator(">", Token.OP_GT);
184
        operator(">=", Token.OP_GE);
185
        operator("<", Token.OP_LT);
186
        operator("<=", Token.OP_LE);
187
        operator("like", Token.PRED_LIKE);
188
        operator("ilike", Token.PRED_ILIKE);
189
        operator("+", Token.OP_ADD);
190
        operator("-", Token.OP_SUBST);
191
        operator("*", Token.OP_MULT);
192
//        operator("^", Token.OP_POW);
193
        operator("or", Token.OP_OR);
194
        operator("and", Token.OP_AND);
195
        operator("%", Token.OP_MOD);
196
        operator("is", Token.PRED_IS);
197
        operator("->", Token.OP_GETATTR);
198
        operator(".", Token.OP_GETATTR);
199

    
200
    }
201

    
202
    public void testPar() {
203
        String expression = "precio = ( 23 + 5 )";
204

    
205
        LexicalAnalyzer lex = createLexicalAnalyzer(expression);
206
        Token t1 = lex.next();
207
        assertEquals(Token.IDENTIFIER, t1.getType());
208
        assertEquals("precio", t1.getLiteral());
209

    
210
        t1 = lex.next();
211
        assertEquals(Token.OP_EQ, t1.getType());
212
        assertEquals("=", t1.getLiteral());
213

    
214
        t1 = lex.next();
215
        assertEquals(Token.PARENTHESIS_OPEN, t1.getType());
216
        assertEquals("(", t1.getLiteral());
217

    
218
        t1 = lex.next();
219
        assertEquals(Token.INTEGER_LITERAL, t1.getType());
220
        assertEquals("23", t1.getLiteral());
221
        assertEquals(new Long(23), t1.getValue());
222

    
223
        t1 = lex.next();
224
        assertEquals(Token.OP_ADD, t1.getType());
225
        assertEquals("+", t1.getLiteral());
226

    
227
        t1 = lex.next();
228
        assertEquals(Token.INTEGER_LITERAL, t1.getType());
229
        assertEquals("5", t1.getLiteral());
230
        assertEquals(new Long(5), t1.getValue());
231

    
232
        t1 = lex.next();
233
        assertEquals(Token.PARENTHESIS_CLOSE, t1.getType());
234
        assertEquals(")", t1.getLiteral());
235
    }
236
    
237
    public void testFuncWithArgs() {
238
        String expression = "precio = add(23, 5)";
239

    
240
        LexicalAnalyzer lex = createLexicalAnalyzer(expression);
241
        Token t1 = lex.next();
242
        assertEquals(Token.IDENTIFIER, t1.getType());
243
        assertEquals("precio", t1.getLiteral());
244

    
245
        t1 = lex.next();
246
        assertEquals(Token.OP_EQ, t1.getType());
247
        assertEquals("=", t1.getLiteral());
248

    
249
        t1 = lex.next();
250
        assertEquals(Token.IDENTIFIER, t1.getType());
251
        assertEquals("add", t1.getLiteral());
252

    
253
        t1 = lex.next();
254
        assertEquals(Token.PARENTHESIS_OPEN, t1.getType());
255
        assertEquals("(", t1.getLiteral());
256

    
257
        t1 = lex.next();
258
        assertEquals(Token.INTEGER_LITERAL, t1.getType());
259
        assertEquals("23", t1.getLiteral());
260
        assertEquals(new Long(23), t1.getValue());
261

    
262
        t1 = lex.next();
263
        assertEquals(Token.COMA, t1.getType());
264
        assertEquals(",", t1.getLiteral());
265

    
266
        t1 = lex.next();
267
        assertEquals(Token.INTEGER_LITERAL, t1.getType());
268
        assertEquals("5", t1.getLiteral());
269
        assertEquals(new Long(5), t1.getValue());
270

    
271
        t1 = lex.next();
272
        assertEquals(Token.PARENTHESIS_CLOSE, t1.getType());
273
        assertEquals(")", t1.getLiteral());
274
    }
275
}