package org.geotools.styling.css.util; import static org.junit.Assert.*; import java.util.Date; import org.geotools.filter.text.cql2.CQL; import org.geotools.filter.text.ecql.ECQL; import org.junit.Before; import org.junit.Test; import org.opengis.filter.Filter; import com.vividsolutions.jts.geom.Geometry; public class FilterTypeVisitorTest { private FilterTypeVisitor visitor; private TypeAggregator aggregator; @Before public void setup() { aggregator = new TypeAggregator(); visitor = new FilterTypeVisitor(aggregator); } @Test public void testGreterThan() throws Exception { Filter filter = CQL.toFilter("myAtt > 10"); filter.accept(visitor, null); assertEquals(1, aggregator.types.size()); assertEquals(Long.class, aggregator.types.get("myAtt")); } @Test public void testTimeEquals() throws Exception { Filter filter = CQL.toFilter("time TEQUALS 2006-11-30T01:30:00Z"); filter.accept(visitor, null); assertEquals(1, aggregator.types.size()); assertEquals(Date.class, aggregator.types.get("time")); } @Test public void testBetween() throws Exception { Filter filter = CQL.toFilter("a between 10 and 20.5"); filter.accept(visitor, null); assertEquals(1, aggregator.types.size()); assertEquals(Double.class, aggregator.types.get("a")); } @Test public void testMath() throws Exception { Filter filter = ECQL.toFilter("a + 3 > 5"); filter.accept(visitor, null); assertEquals(1, aggregator.types.size()); assertEquals(Double.class, aggregator.types.get("a")); } @Test public void testAnd() throws Exception { Filter filter = ECQL.toFilter("a > 5 and a < 10.0"); filter.accept(visitor, null); assertEquals(1, aggregator.types.size()); assertEquals(Double.class, aggregator.types.get("a")); } @Test public void testGeometry() throws Exception { Filter filter = ECQL.toFilter("CONTAINS(geom, POINT(1 2))"); filter.accept(visitor, null); assertEquals(1, aggregator.types.size()); assertEquals(Geometry.class, aggregator.types.get("geom")); } @Test public void testFunction() throws Exception { Filter filter = ECQL.toFilter("CONTAINS(buffer(geom, distance), POINT(1 2))"); filter.accept(visitor, null); assertEquals(2, aggregator.types.size()); assertEquals(Geometry.class, aggregator.types.get("geom")); assertEquals(Number.class, aggregator.types.get("distance")); } }