package org.geoserver.filter.function; import java.util.Collection; import org.geoserver.data.test.MockData; import org.geoserver.test.GeoServerTestSupport; import org.geotools.factory.CommonFactoryFinder; import org.opengis.filter.FilterFactory2; import org.opengis.filter.expression.Function; public class QueryLayerFunctionTest extends GeoServerTestSupport { FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2(null); public void testQuerySingle() { Function function = ff.function("querySingle", // ff.literal(getLayerId(MockData.BUILDINGS)), // ff.literal("ADDRESS"), // ff.literal("FID = '113'")); assertTrue(function instanceof QueryFunction); String result = (String) function.evaluate(null); assertEquals("123 Main Street", result); } public void testQueryCollection() { Function function = ff.function("queryCollection", // ff.literal(getLayerId(MockData.BUILDINGS)), // ff.literal("ADDRESS"), // ff.literal("INCLUDE")); assertTrue(function instanceof QueryFunction); Collection result = (Collection) function.evaluate(null); assertEquals(2, result.size()); assertTrue(result.contains("123 Main Street")); assertTrue(result.contains("215 Main Street")); } public void testQueryTooMany() throws Exception { try { // force the reload, otherwise the changed properties won't be noticed System.setProperty("QUERY_LAYER_MAX_FEATURES", "3"); getGeoServer().reload(); Function function = ff.function("queryCollection", // ff.literal(getLayerId(MockData.ROAD_SEGMENTS)), // ff.literal("the_geom"), // ff.literal("INCLUDE")); assertTrue(function instanceof QueryFunction); try { function.evaluate(null); fail("Should have failed with an exception"); } catch(IllegalStateException e) { // fine } } finally { System.clearProperty("QUERY_LAYER_MAX_FEATURES"); } } }