package org.geoserver.python.filter;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.geoserver.platform.GeoServerResourceLoader;
import org.geoserver.python.Python;
import org.geotools.factory.CommonFactoryFinder;
import org.geotools.feature.simple.SimpleFeatureBuilder;
import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
import org.junit.BeforeClass;
import org.junit.Test;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.filter.FilterFactory;
public class PythonFilterFunctionAdapterTest {
static Python py;
static PythonFilterFunctionAdapter adapter;
@BeforeClass
public static void setUpData() throws Exception {
GeoServerResourceLoader loader = new GeoServerResourceLoader(new File("target"));
py = new Python(loader);
File f = new File("target", "foo_function.py");
FileUtils.copyURLToFile(PythonFilterFunctionAdapterTest.class.getResource("foo_function.py"), f);
adapter = new PythonFilterFunctionAdapter(f, py);
}
@Test
public void testGetNames() {
assertTrue(adapter.getNames().contains("foo"));
}
@Test
public void testGetParameterNames() {
assertTrue(adapter.getParameterNames("foo").contains("bar"));
assertTrue(adapter.getParameterNames("foo").contains("baz"));
}
@Test
public void testEvaluate() {
FilterFactory ff = CommonFactoryFinder.getFilterFactory(null);
List args = Arrays.asList(ff.literal("one"), ff.literal("two"));
Object result = adapter.evaluate("foo", null, args );
assertEquals("bam", result);
}
@Test
public void testEvaluateFeature() {
SimpleFeatureTypeBuilder tb = new SimpleFeatureTypeBuilder();
tb.setName("geotools");
tb.add("foo", String.class);
SimpleFeatureBuilder b = new SimpleFeatureBuilder(tb.buildFeatureType());
b.add("baz");
SimpleFeature f = b.buildFeature(null);
assertEquals(false, adapter.evaluate("acme", f, null ));
b.add("bar");
f = b.buildFeature(null);
assertEquals(true, adapter.evaluate("acme", f, null ));
}
}