/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2002-2008, Open Source Geospatial Foundation (OSGeo) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package org.geotools.filter.text.cql2; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import org.geotools.factory.CommonFactoryFinder; import org.geotools.factory.Hints; import org.junit.Assert; import org.junit.Test; import org.opengis.filter.Filter; import org.opengis.filter.FilterFactory; import org.opengis.filter.expression.Literal; import org.opengis.filter.temporal.AnyInteracts; import org.opengis.filter.temporal.Begins; import org.opengis.filter.temporal.BegunBy; import org.opengis.filter.temporal.EndedBy; import org.opengis.filter.temporal.Ends; import org.opengis.filter.temporal.Meets; import org.opengis.filter.temporal.MetBy; import org.opengis.filter.temporal.OverlappedBy; import org.opengis.filter.temporal.TContains; import org.opengis.filter.temporal.TEquals; import org.opengis.filter.temporal.TOverlaps; /** * FilterToCQLTest * * Unit test for {@link FilterToCQL} * * @author Johann Sorel * * * * @source $URL$ */ public class FilterToCQLTest{ @Test public void testSample() throws Exception { Filter filter = CQL.toFilter(FilterCQLSample.LESS_FILTER_SAMPLE); FilterToCQL toCQL = new FilterToCQL(); String output = filter.accept( toCQL, null ).toString(); Assert.assertNotNull( output ); Assert.assertEquals( FilterCQLSample.LESS_FILTER_SAMPLE, output ); } @Test public void testNotBetween() throws Exception { cqlTest( "NOT (ATTR1 BETWEEN 10 AND 20)" ); } @Test public void testANDOR() throws Exception { cqlTest( "((ATTR1 < 10 AND ATTR2 < 2) OR ATTR3 > 10)" ); } /** (ATTR1 > 10 OR ATTR2 < 2) */ @Test public void testOR() throws Exception { cqlTest( "(ATTR1 > 10 OR ATTR2 < 2)" ); } @Test public void testLike() throws Exception { cqlTest( "ATTR1 LIKE '%ABC%'" ); } @Test public void testBbox() throws Exception { cqlTest( "BBOX(the_geom, 10.0,20.0,30.0,40.0)" ); } @Test public void testAfter() throws Exception{ cqlTest("attr AFTER 2006-12-31T01:30:00Z"); } @Test public void testBefore() throws Exception{ cqlTest("attr BEFORE 2006-12-31T01:30:00Z"); } @Test public void testBeforeAndAfter() throws Exception{ cqlTest("(dateAttr AFTER 2006-10-10T01:30:00Z AND dateAttr BEFORE 2010-12-31T01:30:00Z)"); } @Test public void testDuring() throws Exception{ cqlTest("dateAttr DURING 2006-10-10T01:30:00Z/2010-12-31T01:30:00Z"); } @Test (expected=UnsupportedOperationException.class) public void testEndedByUnsuported() throws Exception{ FilterFactory ff = CommonFactoryFinder.getFilterFactory((Hints) null); EndedBy filter = ff.endedBy(ff.property("date"), newSampleDate()); FilterToCQL toCQL = new FilterToCQL(); filter.accept( toCQL, null ).toString(); } @Test (expected=UnsupportedOperationException.class) public void testEndsUnsuported() throws Exception{ FilterFactory ff = CommonFactoryFinder.getFilterFactory((Hints) null); Ends filter = ff.ends(ff.property("date"), newSampleDate()); FilterToCQL toCQL = new FilterToCQL(); filter.accept( toCQL, null ).toString(); } @Test (expected=UnsupportedOperationException.class) public void testMeetsUnsuported() throws Exception{ FilterFactory ff = CommonFactoryFinder.getFilterFactory((Hints) null); Meets filter = ff.meets(ff.property("date"), newSampleDate()); FilterToCQL toCQL = new FilterToCQL(); filter.accept( toCQL, null ).toString(); } @Test (expected=UnsupportedOperationException.class) public void testMetByUnsuported() throws Exception{ FilterFactory ff = CommonFactoryFinder.getFilterFactory((Hints) null); MetBy filter = ff.metBy(ff.property("date"), newSampleDate()); FilterToCQL toCQL = new FilterToCQL(); filter.accept( toCQL, null ).toString(); } @Test (expected=UnsupportedOperationException.class) public void testOverlappedByUnsuported() throws Exception{ FilterFactory ff = CommonFactoryFinder.getFilterFactory((Hints) null); OverlappedBy filter = ff.overlappedBy(ff.property("date"), newSampleDate()); FilterToCQL toCQL = new FilterToCQL(); filter.accept( toCQL, null ).toString(); } @Test (expected=UnsupportedOperationException.class) public void testTContainsUnsuported() throws Exception{ FilterFactory ff = CommonFactoryFinder.getFilterFactory((Hints) null); TContains filter = ff.tcontains(ff.property("date"), newSampleDate()); FilterToCQL toCQL = new FilterToCQL(); filter.accept( toCQL, null ).toString(); } @Test (expected=UnsupportedOperationException.class) public void testTEqualsUnsuported() throws Exception{ FilterFactory ff = CommonFactoryFinder.getFilterFactory((Hints) null); TEquals filter = ff.tequals(ff.property("date"), newSampleDate()); FilterToCQL toCQL = new FilterToCQL(); filter.accept( toCQL, null ).toString(); } @Test (expected=UnsupportedOperationException.class) public void testTOverlapsUnsuported() throws Exception{ FilterFactory ff = CommonFactoryFinder.getFilterFactory((Hints) null); TOverlaps filter = ff.toverlaps(ff.property("date"), newSampleDate()); FilterToCQL toCQL = new FilterToCQL(); filter.accept( toCQL, null ).toString(); } protected Literal newSampleDate() throws ParseException{ SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); Date dateTime = dateFormatter.parse("2006-11-30T01:30:00Z"); FilterFactory ff = CommonFactoryFinder.getFilterFactory((Hints) null); return ff.literal(dateTime); } @Test (expected=UnsupportedOperationException.class) public void testBeginsUnsuported() throws Exception{ FilterFactory ff = CommonFactoryFinder.getFilterFactory((Hints) null); Begins filter = ff.begins(ff.property("date"), newSampleDate()); FilterToCQL toCQL = new FilterToCQL(); filter.accept( toCQL, null ).toString(); } @Test (expected=UnsupportedOperationException.class) public void testBegunByUnsuported() throws Exception{ FilterFactory ff = CommonFactoryFinder.getFilterFactory((Hints) null); BegunBy filter = ff.begunBy(ff.property("date"), newSampleDate()); FilterToCQL toCQL = new FilterToCQL(); filter.accept( toCQL, null ).toString(); } @Test (expected=UnsupportedOperationException.class) public void testAnyInteractsUnsuported() throws Exception{ FilterFactory ff = CommonFactoryFinder.getFilterFactory((Hints) null); AnyInteracts filter = ff.anyInteracts(ff.property("date"), newSampleDate()); FilterToCQL toCQL = new FilterToCQL(); filter.accept( toCQL, null ).toString(); } @Test public void testIntersects() throws Exception{ cqlTest("INTERSECTS(the_geom, POINT (1 2))"); } protected void cqlTest( String cql ) throws Exception { Filter filter = CQL.toFilter(cql); Assert.assertNotNull( filter ); FilterToCQL toCQL = new FilterToCQL(); String output = filter.accept( toCQL, null ).toString(); Assert.assertNotNull( output ); Assert.assertEquals( cql,output ); } }