package org.infinispan.objectfilter.impl.syntax.parser;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import org.infinispan.objectfilter.ParsingException;
import org.infinispan.objectfilter.impl.syntax.ConstantBooleanExpr;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
/**
* @author anistor@redhat.com
* @since 7.0
*/
public abstract class AbstractParsingTest<TypeMetadata> {
@Rule
public ExpectedException expectedException = ExpectedException.none();
protected final ObjectPropertyHelper<TypeMetadata> propertyHelper;
protected AbstractParsingTest(ObjectPropertyHelper<TypeMetadata> propertyHelper) {
this.propertyHelper = propertyHelper;
}
@Test
public void testWhereTautology() {
String queryString = "FROM org.infinispan.objectfilter.test.model.Person WHERE true";
IckleParsingResult<TypeMetadata> result = IckleParser.parse(queryString, propertyHelper);
assertEquals(ConstantBooleanExpr.TRUE, result.getWhereClause());
assertNull(result.getHavingClause());
}
@Test
public void testWhereContradiction() {
String queryString = "FROM org.infinispan.objectfilter.test.model.Person WHERE false";
IckleParsingResult<TypeMetadata> result = IckleParser.parse(queryString, propertyHelper);
assertEquals(ConstantBooleanExpr.FALSE, result.getWhereClause());
assertNull(result.getHavingClause());
}
@Test
public void testRaiseExceptionDueToUnconsumedTokens() {
expectedException.expect(ParsingException.class);
expectedException.expectMessage("ISPN028526");
String queryString = "FROM IndexedEntity u WHERE u.name = 'John' blah blah blah";
IckleParser.parse(queryString, propertyHelper);
}
@Test
public void testInvalidNumericLiteral() throws Exception {
expectedException.expect(ParsingException.class);
expectedException.expectMessage("ISPN028505");
String queryString = "from org.infinispan.objectfilter.test.model.Person where age = 'xyz'";
IckleParser.parse(queryString, propertyHelper);
}
@Test
public void testInvalidDateLiteral() throws Exception {
expectedException.expect(ParsingException.class);
expectedException.expectMessage("ISPN028506");
String queryString = "from org.infinispan.objectfilter.test.model.Person where lastUpdate = '20140101zzzzzzzz'";
IckleParser.parse(queryString, propertyHelper);
}
@Test
public void testInvalidEnumLiteral() throws Exception {
expectedException.expect(ParsingException.class);
expectedException.expectMessage("ISPN028508");
String queryString = "from org.infinispan.objectfilter.test.model.Person where gender = 'SomeUndefinedValue'";
IckleParser.parse(queryString, propertyHelper);
}
@Test
public void testInvalidBooleanLiteral() throws Exception {
expectedException.expect(ParsingException.class);
expectedException.expectMessage("ISPN028507");
String queryString = "from org.infinispan.objectfilter.test.model.Person where deleted = 'maybe'";
IckleParser.parse(queryString, propertyHelper);
}
@Test
public void testInvalidPredicateOnEmbeddedEntity() throws Exception {
expectedException.expect(ParsingException.class);
expectedException.expectMessage("ISPN028504");
String queryString = "from org.infinispan.objectfilter.test.model.Person where address = 5";
IckleParser.parse(queryString, propertyHelper);
}
@Test
public void testInvalidPredicateOnCollectionOfEmbeddedEntity() throws Exception {
expectedException.expect(ParsingException.class);
expectedException.expectMessage("ISPN028504");
String queryString = "from org.infinispan.objectfilter.test.model.Person where phoneNumbers = 5";
IckleParser.parse(queryString, propertyHelper);
}
@Test
public void testFullTextQueryNotAccepted() throws Exception {
expectedException.expect(ParsingException.class);
expectedException.expectMessage("ISPN028521");
String queryString = "from org.infinispan.objectfilter.test.model.Person where name : 'Joe'";
IckleParser.parse(queryString, propertyHelper);
}
}