/*
* Copyright 2008 FatWire Corporation. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.fatwire.gst.foundation.facade.assetapi;
import com.fatwire.assetapi.query.Condition;
import com.fatwire.assetapi.query.ConditionExpression;
import com.fatwire.assetapi.query.OpTypeEnum;
import com.fatwire.assetapi.query.QueryProperties;
import junit.framework.Assert;
import junit.framework.TestCase;
import java.util.List;
public class ConditionParserTest extends TestCase {
public void testParseNumber() {
ConditionParser parser = new ConditionParser();
Condition c = parser.parse("name = 123");
Assert.assertEquals("name", c.getExpression().getAttributeName());
Assert.assertEquals(OpTypeEnum.EQUALS, c.getExpression().getOpType());
List<?> vals = c.getExpression().getValues();
Assert.assertEquals(1, vals.size());
Object o = vals.get(0);
Assert.assertEquals("123", o);
}
public void testParseLessThan() {
ConditionParser parser = new ConditionParser();
Condition c = parser.parse("name < 123");
Assert.assertEquals("name", c.getExpression().getAttributeName());
Assert.assertEquals(OpTypeEnum.LESS_THAN, c.getExpression().getOpType());
List<?> vals = c.getExpression().getValues();
Assert.assertEquals(1, vals.size());
Object o = vals.get(0);
Assert.assertEquals("123", o);
}
public void testParseBetween() {
ConditionParser parser = new ConditionParser();
Condition c = parser.parse("size{123,130}");
Assert.assertEquals("size", c.getExpression().getAttributeName());
Assert.assertEquals(OpTypeEnum.BETWEEN, c.getExpression().getOpType());
List<?> vals = c.getExpression().getValues();
Assert.assertEquals(2, vals.size());
Assert.assertEquals("123", vals.get(0));
Assert.assertEquals("130", vals.get(1));
}
public void testParseSimpleOr() {
ConditionParser parser = new ConditionParser();
Condition c = parser.parse("size=[123,130]");
assertNotNull(c);
List<?> vals = c.getExpression().getValues();
assertEquals(2, vals.size());
assertEquals("123", vals.get(0));
assertEquals("130", vals.get(1));
}
public void testValueSplit() {
ConditionParser parser = new ConditionParser();
String[] c = parser.valueSplit("john,'mary','mary poppins','barker,john'");
assertEquals(4, c.length);
assertEquals("john", c[0]);
assertEquals("mary", c[1]);
assertEquals("mary poppins", c[2]);
assertEquals("barker,john", c[3]);
}
public void testParseSimpleOr_with_quotes() {
ConditionParser parser = new ConditionParser();
Condition c = parser.parse("name=[john,'mary','mary poppins','barker,john']");
assertNotNull(c);
List<?> vals = c.getExpression().getValues();
Assert.assertEquals(4, vals.size());
Assert.assertEquals("john", vals.get(0));
Assert.assertEquals("mary", vals.get(1));
Assert.assertEquals("mary poppins", vals.get(2));
assertEquals("barker,john", vals.get(3));
}
void print(Condition c) {
if (c == null) {
return;
}
System.out.println("JoinType: " + c.getJoinType());
ConditionExpression e = c.getExpression();
if (e != null) {
QueryProperties p = e.getProperties();
System.out.println("ConditionExpression: " + e.getAttributeName() + " " + e.getOpType() + " "
+ e.getValues() + ": " + (p != null ? p.getIsBasicSearch() : ""));
}
if (c.getLeftCondition() != null) {
System.out.println("left:");
print(c.getLeftCondition());
}
if (c.getRightCondition() != null) {
System.out.println("right:");
print(c.getRightCondition());
}
}
void checkValue(Condition c, String expectedName, OpTypeEnum op, String expected) {
assertNotNull("expression is null", c.getExpression());
Assert.assertEquals(expectedName, c.getExpression().getAttributeName());
Assert.assertEquals(op, c.getExpression().getOpType());
List<?> vals = c.getExpression().getValues();
Assert.assertEquals(1, vals.size());
Assert.assertEquals(expected, vals.get(0));
}
public void testParseLike() {
ConditionParser parser = new ConditionParser();
Condition c = parser.parse("name~foo");
Assert.assertEquals("name", c.getExpression().getAttributeName());
Assert.assertEquals(OpTypeEnum.LIKE, c.getExpression().getOpType());
List<?> vals = c.getExpression().getValues();
Assert.assertEquals(1, vals.size());
Assert.assertEquals("foo", vals.get(0));
}
public void testParseFloat() {
ConditionParser parser = new ConditionParser();
Condition c = parser.parse("name = 123.0");
Assert.assertEquals("name", c.getExpression().getAttributeName());
Assert.assertEquals(OpTypeEnum.EQUALS, c.getExpression().getOpType());
List<?> vals = c.getExpression().getValues();
Assert.assertEquals(1, vals.size());
Object o = vals.get(0);
Assert.assertEquals(new Float(123.0).toString(), o);
}
public void testParseNoSpace() {
ConditionParser parser = new ConditionParser();
Condition c = parser.parse("name=123.0");
Assert.assertEquals("name", c.getExpression().getAttributeName());
Assert.assertEquals(OpTypeEnum.EQUALS, c.getExpression().getOpType());
List<?> vals = c.getExpression().getValues();
Assert.assertEquals(1, vals.size());
Object o = vals.get(0);
Assert.assertEquals("123.0", o);
}
public void testParseDoubleSpace() {
ConditionParser parser = new ConditionParser();
Condition c = parser.parse("name= 123.0");
Assert.assertEquals("name", c.getExpression().getAttributeName());
Assert.assertEquals(OpTypeEnum.EQUALS, c.getExpression().getOpType());
List<?> vals = c.getExpression().getValues();
Assert.assertEquals(1, vals.size());
Object o = vals.get(0);
Assert.assertEquals("123.0", o);
}
public void testParseQuote() {
ConditionParser parser = new ConditionParser();
Condition c = parser.parse("name='foo'");
Assert.assertEquals("name", c.getExpression().getAttributeName());
Assert.assertEquals(OpTypeEnum.EQUALS, c.getExpression().getOpType());
List<?> vals = c.getExpression().getValues();
Assert.assertEquals(1, vals.size());
Object o = vals.get(0);
Assert.assertEquals("foo", o);
}
public void testParseQuoteWithSpace() {
ConditionParser parser = new ConditionParser();
Condition c = parser.parse("name='foo bar'");
Assert.assertEquals("name", c.getExpression().getAttributeName());
Assert.assertEquals(OpTypeEnum.EQUALS, c.getExpression().getOpType());
List<?> vals = c.getExpression().getValues();
Assert.assertEquals(1, vals.size());
Object o = vals.get(0);
Assert.assertEquals("foo bar", o);
}
public void testParseQuoteStartWithSpace() {
ConditionParser parser = new ConditionParser();
Condition c = parser.parse("name=' foo bar'");
Assert.assertEquals("name", c.getExpression().getAttributeName());
Assert.assertEquals(OpTypeEnum.EQUALS, c.getExpression().getOpType());
List<?> vals = c.getExpression().getValues();
Assert.assertEquals(1, vals.size());
Object o = vals.get(0);
Assert.assertEquals(" foo bar", o);
}
public void testToOpType() {
ConditionParser parser = new ConditionParser();
OpTypeEnum e = parser.toOpType("=");
Assert.assertEquals(OpTypeEnum.EQUALS, e);
}
}