/* * Geotoolkit - An Open Source Java GIS Toolkit * http://www.geotoolkit.org * * (C) 2002-2008, Open Source Geospatial Foundation (OSGeo) * (C) 2009, Geomatys * * 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.geotoolkit.filter; import java.sql.Timestamp; import java.util.Date; import java.util.HashSet; import java.util.Set; import org.junit.Test; import org.opengis.filter.Filter; import org.opengis.filter.Id; import org.opengis.filter.Not; import org.opengis.filter.PropertyIsBetween; import org.opengis.filter.PropertyIsLike; import org.opengis.filter.expression.Expression; import org.opengis.filter.expression.Literal; import org.opengis.filter.expression.PropertyName; import org.opengis.filter.identity.Identifier; import static org.geotoolkit.test.Assert.*; import static org.geotoolkit.filter.FilterTestConstants.*; /** * * @author Johann Sorel (Geomatys) * @module */ public class FilterTest extends org.geotoolkit.test.TestBase { public FilterTest() { } @Test public void testId() { Set<Identifier> ids = new HashSet<Identifier>(); ids.add(FF.featureId("dummyid")); ids.add(FF.featureId("dummyid2")); ids.add(FF.featureId("dummyid45")); Id id = FF.id(ids); //test serialize assertSerializedEquals(id); assertFalse(id.evaluate(CANDIDATE_1)); ids.add(FF.featureId("testFeatureType.1")); id = FF.id(ids); assertTrue(id.evaluate(CANDIDATE_1)); } @Test public void testLiteral(){ Literal literal; literal = FF.literal(RIGHT_GEOMETRY); //we do not serialize on geometries, JTS does not provide an hashcode assertEquals(RIGHT_GEOMETRY, literal.getValue()); assertNotNull(FF.literal(true)); assertNotNull(FF.literal("a text string")); assertNotNull(FF.literal('x')); assertNotNull(FF.literal(122)); assertNotNull(FF.literal(45.56d)); assertSerializedEquals(FF.literal(true)); assertSerializedEquals(FF.literal("a text string")); assertSerializedEquals(FF.literal('x')); assertSerializedEquals(FF.literal(122)); assertSerializedEquals(FF.literal(45.56d)); } @Test public void testNot(){ Filter filter = FF.equals(FF.property("testString"), FF.literal("test string data")); assertTrue(filter.evaluate(CANDIDATE_1)); //test serialize assertSerializedEquals(filter); Not not = FF.not(filter); assertFalse(not.evaluate(CANDIDATE_1)); //test serialize assertSerializedEquals(not); } @Test public void testIsBetween(){ PropertyName property = FF.property("testInteger"); int ibefore = 12; int iafter = 250; PropertyIsBetween between = FF.between(property, FF.literal(ibefore), FF.literal(iafter)); assertTrue(between.evaluate(CANDIDATE_1)); assertSerializedEquals(between); //test serialize ibefore = 112; iafter = 360; between = FF.between(property, FF.literal(ibefore), FF.literal(iafter)); assertFalse(between.evaluate(CANDIDATE_1)); property = FF.property("date"); Date dbefore = new Date(DATE.getTime()-360000); Date dafter = new Date(DATE.getTime()+360000); between = FF.between(property, FF.literal(dbefore), FF.literal(dafter)); assertTrue(between.evaluate(CANDIDATE_1)); dbefore = new Date(DATE.getTime()+10000); dafter = new Date(DATE.getTime()+360000); between = FF.between(property, FF.literal(dbefore), FF.literal(dafter)); assertFalse(between.evaluate(CANDIDATE_1)); assertSerializedEquals(between); //test serialize //test against strings between = FF.between(property, FF.literal("1850-09-01Z"), FF.literal("2210-11-01Z")); assertTrue(between.evaluate(CANDIDATE_1)); between = FF.between(property, FF.literal("2150-09-01Z"), FF.literal("2210-11-01Z")); assertFalse(between.evaluate(CANDIDATE_1)); //test against timestamp dbefore = new Timestamp(DATE.getTime()+10000); dafter = new Timestamp(DATE.getTime()+360000); between = FF.between(property, FF.literal(dbefore), FF.literal(dafter)); assertFalse(between.evaluate(CANDIDATE_1)); dbefore = new Timestamp(DATE.getTime()-360000); dafter = new Timestamp(DATE.getTime()+360000); between = FF.between(property, FF.literal(dbefore), FF.literal(dafter)); assertTrue(between.evaluate(CANDIDATE_1)); assertSerializedEquals(between); //test serialize //test timestamp against string property = FF.property("datetime2"); between = FF.between(property, FF.literal("1850-09-01Z"), FF.literal("2210-11-01Z")); assertTrue(between.evaluate(CANDIDATE_1)); assertSerializedEquals(between); //test serialize between = FF.between(property, FF.literal("2150-09-01Z"), FF.literal("2210-11-01Z")); assertFalse(between.evaluate(CANDIDATE_1)); } @Test public void testIsLike(){ PropertyName testAttribute = FF.property("testString"); PropertyIsLike filter = FF.like(testAttribute, "test*", "*", ".", "!"); assertTrue(filter.evaluate(CANDIDATE_1)); assertSerializedEquals(filter); //test serialize // Test for false positive. filter = FF.like(testAttribute, "cows*", "*", ".", "!"); assertFalse(filter.evaluate(CANDIDATE_1)); // Test we don't match if single character is missing filter = FF.like(testAttribute, "test*a.", "*", ".", "!"); assertFalse(filter.evaluate(CANDIDATE_1)); // Test we do match if the single char is there filter = FF.like(testAttribute, "test*dat.", "*", ".", "!"); assertTrue(filter.evaluate(CANDIDATE_1)); } @Test public void testIsNull(){ Filter filter = FF.isNull(FF.property("testNull")); assertTrue(filter.evaluate(CANDIDATE_1)); filter = FF.isNull(FF.property("testString")); assertFalse(filter.evaluate(CANDIDATE_1)); assertSerializedEquals(filter); //test serialize } @Test public void testPropertyName(){ Expression exp = FF.property("testString"); assertEquals(exp.evaluate(CANDIDATE_1), "test string data"); assertSerializedEquals(exp); //test serialize } }