package org.geotools.filter.expression;
import static org.junit.Assert.*;
import org.geotools.factory.CommonFactoryFinder;
import org.junit.Test;
import org.opengis.filter.FilterFactory;
import org.opengis.filter.expression.Expression;
/**
* ExpressionBuilder is the main entry point from a fluent programming point of view. We will mostly
* test using this as a starting point; and break out other test cases on an as needed basis.
*
* @source $URL$
*/
public class ExpressionBuilderTest {
@Test
public void testLiteral() {
FilterFactory ff = CommonFactoryFinder.getFilterFactory2(null);
ExpressionBuilder b = new ExpressionBuilder();
Expression e;
b.literal("hello world");
e = b.build();
assertEquals(ff.literal("hello world"), e);
assertEquals(ff.literal(1), b.literal().value(1).build());
b.literal().value(1);
e = b.build(); // ensure delegate works
assertEquals(ff.literal(1), e);
assertEquals(ff.literal(null), b.literal(null).build());
assertEquals(null, b.unset().build());
assertEquals(ff.literal(2), b.reset(ff.literal(2)).build());
}
@Test
public void testNullHandling() {
FilterFactory ff = CommonFactoryFinder.getFilterFactory2(null);
ExpressionBuilder b = new ExpressionBuilder();
Expression e;
assertEquals(Expression.NIL, b.reset().build());
assertEquals(null, b.reset(null).build());
}
@Test
public void testPropertyName() {
FilterFactory ff = CommonFactoryFinder.getFilterFactory2(null);
ExpressionBuilder b = new ExpressionBuilder();
Expression e;
assertEquals(ff.property("x"), b.property("x").build());
assertEquals(ff.property("x"), b.property().property("x").build());
assertEquals(ff.property("x"), b.property().name("x").build());
assertEquals(ff.property(null), b.property(null).build());
}
@Test
public void testFunction() {
FilterFactory ff = CommonFactoryFinder.getFilterFactory2(null);
ExpressionBuilder b = new ExpressionBuilder();
Expression e;
// function
assertEquals(ff.function("pi"), b.function().name("pi").build());
assertEquals(ff.function("abs", ff.literal(-2)), b.function().name("abs").param().literal(-2).build());
assertEquals(ff.function("abs", ff.literal(-2)), b.function("abs").param().literal(-2).build());
assertEquals(ff.function("min", ff.literal(1), ff.literal(2)),
b.function("min").param().literal(1).param().literal(2).build());
assertEquals(ff.function("min", ff.literal(1), ff.literal(2)),
b.function("min").literal(1).literal(2).build());
assertEquals(ff.function("max", ff.literal(1), ff.property("x")),
b.function("max").literal(1).property("x").build());
assertEquals(ff.function("max", ff.literal(1), ff.property("x")),
b.function("max").literal(1).param().property("x").build());
}
@Test
public void testAdd() {
FilterFactory ff = CommonFactoryFinder.getFilterFactory2(null);
ExpressionBuilder b = new ExpressionBuilder();
Expression e;
assertEquals(
ff.add( ff.literal(1), ff.literal(2)),
b.add().expr1().literal(1).expr2().literal(2).build());
assertEquals(
ff.add( ff.literal(1), ff.literal(2)),
b.add().expr1(1).expr2(2).build());
}
}