/* (c) 2014 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.filter.function; import static org.junit.Assert.*; import java.util.Collection; import org.geoserver.data.test.MockData; import org.geoserver.test.GeoServerSystemTestSupport; import org.geotools.factory.CommonFactoryFinder; import org.junit.Test; import org.opengis.filter.FilterFactory2; import org.opengis.filter.expression.Function; public class QueryLayerFunctionTest extends GeoServerSystemTestSupport { FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2(null); @Test 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); } @Test 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")); } @Test 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"); } } }