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 java.util.List;
20  
21  import junit.framework.Assert;
22  import junit.framework.TestCase;
23  
24  import com.fatwire.assetapi.query.Condition;
25  import com.fatwire.assetapi.query.ConditionExpression;
26  import com.fatwire.assetapi.query.OpTypeEnum;
27  import com.fatwire.assetapi.query.QueryProperties;
28  
29  public class ConditionParserTest extends TestCase {
30  
31      public void testParseNumber() {
32          ConditionParser parser = new ConditionParser();
33          Condition c = parser.parse("name = 123");
34          Assert.assertEquals("name", c.getExpression().getAttributeName());
35          Assert.assertEquals(OpTypeEnum.EQUALS, c.getExpression().getOpType());
36          List<?> vals = c.getExpression().getValues();
37          Assert.assertEquals(1, vals.size());
38          Object o = vals.get(0);
39  
40          Assert.assertEquals("123", o);
41      }
42  
43      public void testParseLessThan() {
44          ConditionParser parser = new ConditionParser();
45          Condition c = parser.parse("name < 123");
46          Assert.assertEquals("name", c.getExpression().getAttributeName());
47          Assert.assertEquals(OpTypeEnum.LESS_THAN, c.getExpression().getOpType());
48          List<?> vals = c.getExpression().getValues();
49          Assert.assertEquals(1, vals.size());
50          Object o = vals.get(0);
51  
52          Assert.assertEquals("123", o);
53      }
54  
55      public void testParseBetween() {
56          ConditionParser parser = new ConditionParser();
57          Condition c = parser.parse("size{123,130}");
58          Assert.assertEquals("size", c.getExpression().getAttributeName());
59          Assert.assertEquals(OpTypeEnum.BETWEEN, c.getExpression().getOpType());
60          List<?> vals = c.getExpression().getValues();
61          Assert.assertEquals(2, vals.size());
62  
63          Assert.assertEquals("123", vals.get(0));
64          Assert.assertEquals("130", vals.get(1));
65  
66      }
67  
68      public void testParseSimpleOr() {
69          ConditionParser parser = new ConditionParser();
70          Condition c = parser.parse("size=[123,130]");
71          assertNotNull(c);
72          List<?> vals = c.getExpression().getValues();
73          assertEquals(2, vals.size());
74          assertEquals("123", vals.get(0));
75          assertEquals("130", vals.get(1));
76  
77      }
78  
79      public void testValueSplit() {
80          ConditionParser parser = new ConditionParser();
81          String[] c = parser.valueSplit("john,'mary','mary poppins','barker,john'");
82          assertEquals(4, c.length);
83          assertEquals("john", c[0]);
84          assertEquals("mary", c[1]);
85          assertEquals("mary poppins", c[2]);
86          assertEquals("barker,john", c[3]);
87  
88      }
89  
90      public void testParseSimpleOr_with_quotes() {
91          ConditionParser parser = new ConditionParser();
92          Condition c = parser.parse("name=[john,'mary','mary poppins','barker,john']");
93          assertNotNull(c);
94          List<?> vals = c.getExpression().getValues();
95          Assert.assertEquals(4, vals.size());
96  
97          Assert.assertEquals("john", vals.get(0));
98          Assert.assertEquals("mary", vals.get(1));
99          Assert.assertEquals("mary poppins", vals.get(2));
100         assertEquals("barker,john", vals.get(3));
101 
102     }
103 
104     void print(Condition c) {
105         if (c == null)
106             return;
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 }