View Javadoc
1   /*
2    * Copyright 2008 FatWire Corporation. All Rights Reserved.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *    http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package com.fatwire.gst.foundation.facade.assetapi;
18  
19  import com.fatwire.assetapi.query.Condition;
20  import com.fatwire.assetapi.query.ConditionExpression;
21  import com.fatwire.assetapi.query.OpTypeEnum;
22  import com.fatwire.assetapi.query.QueryProperties;
23  import junit.framework.Assert;
24  import junit.framework.TestCase;
25  
26  import java.util.List;
27  
28  public class ConditionParserTest extends TestCase {
29  
30      public void testParseNumber() {
31          ConditionParser parser = new ConditionParser();
32          Condition c = parser.parse("name = 123");
33          Assert.assertEquals("name", c.getExpression().getAttributeName());
34          Assert.assertEquals(OpTypeEnum.EQUALS, c.getExpression().getOpType());
35          List<?> vals = c.getExpression().getValues();
36          Assert.assertEquals(1, vals.size());
37          Object o = vals.get(0);
38  
39          Assert.assertEquals("123", o);
40      }
41  
42      public void testParseLessThan() {
43          ConditionParser parser = new ConditionParser();
44          Condition c = parser.parse("name < 123");
45          Assert.assertEquals("name", c.getExpression().getAttributeName());
46          Assert.assertEquals(OpTypeEnum.LESS_THAN, c.getExpression().getOpType());
47          List<?> vals = c.getExpression().getValues();
48          Assert.assertEquals(1, vals.size());
49          Object o = vals.get(0);
50  
51          Assert.assertEquals("123", o);
52      }
53  
54      public void testParseBetween() {
55          ConditionParser parser = new ConditionParser();
56          Condition c = parser.parse("size{123,130}");
57          Assert.assertEquals("size", c.getExpression().getAttributeName());
58          Assert.assertEquals(OpTypeEnum.BETWEEN, c.getExpression().getOpType());
59          List<?> vals = c.getExpression().getValues();
60          Assert.assertEquals(2, vals.size());
61  
62          Assert.assertEquals("123", vals.get(0));
63          Assert.assertEquals("130", vals.get(1));
64  
65      }
66  
67      public void testParseSimpleOr() {
68          ConditionParser parser = new ConditionParser();
69          Condition c = parser.parse("size=[123,130]");
70          assertNotNull(c);
71          List<?> vals = c.getExpression().getValues();
72          assertEquals(2, vals.size());
73          assertEquals("123", vals.get(0));
74          assertEquals("130", vals.get(1));
75  
76      }
77  
78      public void testValueSplit() {
79          ConditionParser parser = new ConditionParser();
80          String[] c = parser.valueSplit("john,'mary','mary poppins','barker,john'");
81          assertEquals(4, c.length);
82          assertEquals("john", c[0]);
83          assertEquals("mary", c[1]);
84          assertEquals("mary poppins", c[2]);
85          assertEquals("barker,john", c[3]);
86  
87      }
88  
89      public void testParseSimpleOr_with_quotes() {
90          ConditionParser parser = new ConditionParser();
91          Condition c = parser.parse("name=[john,'mary','mary poppins','barker,john']");
92          assertNotNull(c);
93          List<?> vals = c.getExpression().getValues();
94          Assert.assertEquals(4, vals.size());
95  
96          Assert.assertEquals("john", vals.get(0));
97          Assert.assertEquals("mary", vals.get(1));
98          Assert.assertEquals("mary poppins", vals.get(2));
99          assertEquals("barker,john", vals.get(3));
100 
101     }
102 
103     void print(Condition c) {
104         if (c == null) {
105             return;
106         }
107         System.out.println("JoinType: " + c.getJoinType());
108         ConditionExpression e = c.getExpression();
109         if (e != null) {
110             QueryProperties p = e.getProperties();
111 
112             System.out.println("ConditionExpression: " + e.getAttributeName() + " " + e.getOpType() + " "
113                     + e.getValues() + ": " + (p != null ? p.getIsBasicSearch() : ""));
114         }
115         if (c.getLeftCondition() != null) {
116             System.out.println("left:");
117             print(c.getLeftCondition());
118         }
119         if (c.getRightCondition() != null) {
120             System.out.println("right:");
121             print(c.getRightCondition());
122         }
123     }
124 
125     void checkValue(Condition c, String expectedName, OpTypeEnum op, String expected) {
126         assertNotNull("expression is null", c.getExpression());
127         Assert.assertEquals(expectedName, c.getExpression().getAttributeName());
128         Assert.assertEquals(op, c.getExpression().getOpType());
129         List<?> vals = c.getExpression().getValues();
130         Assert.assertEquals(1, vals.size());
131         Assert.assertEquals(expected, vals.get(0));
132     }
133 
134     public void testParseLike() {
135         ConditionParser parser = new ConditionParser();
136         Condition c = parser.parse("name~foo");
137         Assert.assertEquals("name", c.getExpression().getAttributeName());
138         Assert.assertEquals(OpTypeEnum.LIKE, c.getExpression().getOpType());
139         List<?> vals = c.getExpression().getValues();
140         Assert.assertEquals(1, vals.size());
141 
142         Assert.assertEquals("foo", vals.get(0));
143 
144     }
145 
146     public void testParseFloat() {
147         ConditionParser parser = new ConditionParser();
148         Condition c = parser.parse("name = 123.0");
149         Assert.assertEquals("name", c.getExpression().getAttributeName());
150         Assert.assertEquals(OpTypeEnum.EQUALS, c.getExpression().getOpType());
151         List<?> vals = c.getExpression().getValues();
152         Assert.assertEquals(1, vals.size());
153         Object o = vals.get(0);
154 
155         Assert.assertEquals(new Float(123.0).toString(), o);
156     }
157 
158     public void testParseNoSpace() {
159         ConditionParser parser = new ConditionParser();
160         Condition c = parser.parse("name=123.0");
161         Assert.assertEquals("name", c.getExpression().getAttributeName());
162         Assert.assertEquals(OpTypeEnum.EQUALS, c.getExpression().getOpType());
163         List<?> vals = c.getExpression().getValues();
164         Assert.assertEquals(1, vals.size());
165         Object o = vals.get(0);
166 
167         Assert.assertEquals("123.0", o);
168     }
169 
170     public void testParseDoubleSpace() {
171         ConditionParser parser = new ConditionParser();
172         Condition c = parser.parse("name=  123.0");
173         Assert.assertEquals("name", c.getExpression().getAttributeName());
174         Assert.assertEquals(OpTypeEnum.EQUALS, c.getExpression().getOpType());
175         List<?> vals = c.getExpression().getValues();
176         Assert.assertEquals(1, vals.size());
177         Object o = vals.get(0);
178 
179         Assert.assertEquals("123.0", o);
180     }
181 
182     public void testParseQuote() {
183         ConditionParser parser = new ConditionParser();
184         Condition c = parser.parse("name='foo'");
185         Assert.assertEquals("name", c.getExpression().getAttributeName());
186         Assert.assertEquals(OpTypeEnum.EQUALS, c.getExpression().getOpType());
187         List<?> vals = c.getExpression().getValues();
188         Assert.assertEquals(1, vals.size());
189         Object o = vals.get(0);
190 
191         Assert.assertEquals("foo", o);
192     }
193 
194     public void testParseQuoteWithSpace() {
195         ConditionParser parser = new ConditionParser();
196         Condition c = parser.parse("name='foo bar'");
197         Assert.assertEquals("name", c.getExpression().getAttributeName());
198         Assert.assertEquals(OpTypeEnum.EQUALS, c.getExpression().getOpType());
199         List<?> vals = c.getExpression().getValues();
200         Assert.assertEquals(1, vals.size());
201         Object o = vals.get(0);
202 
203         Assert.assertEquals("foo bar", o);
204     }
205 
206     public void testParseQuoteStartWithSpace() {
207         ConditionParser parser = new ConditionParser();
208         Condition c = parser.parse("name=' foo bar'");
209         Assert.assertEquals("name", c.getExpression().getAttributeName());
210         Assert.assertEquals(OpTypeEnum.EQUALS, c.getExpression().getOpType());
211         List<?> vals = c.getExpression().getValues();
212         Assert.assertEquals(1, vals.size());
213         Object o = vals.get(0);
214 
215         Assert.assertEquals(" foo bar", o);
216     }
217 
218     public void testToOpType() {
219         ConditionParser parser = new ConditionParser();
220         OpTypeEnum e = parser.toOpType("=");
221         Assert.assertEquals(OpTypeEnum.EQUALS, e);
222     }
223 
224 }