/* (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.script.wps;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import org.geotools.data.Parameter;
import org.geotools.feature.NameImpl;
import org.opengis.feature.type.Name;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.io.WKTReader;
public abstract class ScriptProcessTest extends ScriptProcessTestSupport {
@Override
public String getProcessName() {
return "buffer";
}
public void testLookupHook() throws Exception {
assertNotNull(getScriptManager().lookupWpsHook(script));
}
public void testName() throws Exception {
ScriptProcessFactory pf = new ScriptProcessFactory(scriptMgr);
assertEquals(1, pf.getNames().size());
Name name = pf.getNames().iterator().next();
assertEquals("buffer", name.getLocalPart());
}
public void testTitle() throws Exception {
ScriptProcessFactory pf = new ScriptProcessFactory(scriptMgr);
Name buffer = pf.getNames().iterator().next();
assertEquals("Buffer", pf.getTitle(buffer).toString());
}
public void testDescription() throws Exception {
ScriptProcessFactory pf = new ScriptProcessFactory(scriptMgr);
Name buffer = pf.getNames().iterator().next();
assertEquals("Buffers a geometry", pf.getDescription(buffer).toString());
}
public void testInputs() throws Exception {
ScriptProcessFactory pf = new ScriptProcessFactory(scriptMgr);
Name buffer = pf.getNames().iterator().next();
Map<String, Parameter<?>> inputs = pf.getParameterInfo(buffer);
assertNotNull(inputs);
assertTrue(inputs.containsKey("geom"));
assertTrue(Geometry.class.isAssignableFrom(inputs.get("geom").type));
assertEquals("The geometry to buffer", inputs.get("geom").description.toString());
assertTrue(inputs.containsKey("distance"));
assertTrue(Number.class.isAssignableFrom(inputs.get("distance").type));
assertEquals("The buffer distance", inputs.get("distance").description.toString());
}
public void testOutputs() throws Exception {
ScriptProcessFactory pf = new ScriptProcessFactory(scriptMgr);
Name buffer = pf.getNames().iterator().next();
Map<String, Parameter<?>> outputs = pf.getResultInfo(buffer, null);
assertNotNull(outputs);
assertTrue(outputs.containsKey("result"));
assertTrue(Geometry.class.isAssignableFrom(outputs.get("result").type));
assertEquals("The buffered geometry", outputs.get("result").description.toString());
}
public void testRun() throws Exception {
ScriptProcessFactory pf = new ScriptProcessFactory(scriptMgr);
Name buffer = pf.getNames().iterator().next();
assertEquals(getNamespace(), buffer.getNamespaceURI());
assertEquals(getProcessName(), buffer.getLocalPart());
org.geotools.process.Process p = pf.create(buffer);
Geometry g = new WKTReader().read("POINT(0 0)");
Map inputs = new HashMap();
inputs.put("geom", g);
inputs.put("distance", 1);
Map outputs = p.execute(inputs, null);
Geometry h = (Geometry) outputs.get("result");
assertTrue(h.equals(g.buffer(1)));
}
public void testRunMultipleOutputs() throws Exception {
String pname = "buffer-multipleOutputs";
File script = copyScriptIfExists(pname);
if (script != null) {
ScriptProcessFactory pf = new ScriptProcessFactory(scriptMgr);
Name buffer = new NameImpl(getNamespace(), pname);
org.geotools.process.Process p = pf.create(buffer);
Map inputs = new HashMap();
inputs.put("geom", new WKTReader().read("POINT(0 0)"));
inputs.put("distance", 1d);
Map outputs = p.execute(inputs, null);
assertEquals(2, outputs.size());
assertNotNull((Geometry) outputs.get("geom"));
assertEquals(1d, (Double) outputs.get("distance"), 0.1);
}
else {
System.out.println("Script " + pname + " does not exist, skipping test");
}
}
}