package org.geoserver.script.wps; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.HashMap; import java.util.Map; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import net.sf.json.JSON; import net.sf.json.JSONObject; import net.sf.json.JSONSerializer; import org.junit.Test; import org.w3c.dom.Document; import static org.custommonkey.xmlunit.XMLAssert.*; public class MapPPIOTest { @Test public void testXML() throws Exception { Map map = new HashMap(); map.put("name", "bomb"); map.put("price", 12.99); MapXMLPPIO ppio = new MapXMLPPIO(); ByteArrayOutputStream bout = new ByteArrayOutputStream(); ppio.encode(map, bout); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); Document dom = dom(bin); assertEquals("map", dom.getDocumentElement().getLocalName()); assertXpathEvaluatesTo("bomb", "/map/name", dom); assertXpathEvaluatesTo("12.99", "/map/price", dom); } @Test public void testJSON() throws Exception { Map map = new HashMap(); map.put("name", "bomb"); map.put("price", 12.99); ByteArrayOutputStream bout = new ByteArrayOutputStream(); new MapJSONPPIO().encode(map, bout); JSON json = JSONSerializer.toJSON(new String(bout.toByteArray())); JSONObject obj = (JSONObject) json; assertEquals("bomb", obj.getString("name")); assertEquals(12.99, obj.getDouble("price"), 0.1); } Document dom(InputStream input) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setNamespaceAware( true ); factory.setValidating( false ); DocumentBuilder builder = factory.newDocumentBuilder(); return builder.parse( input ); } void print(Document document, OutputStream output) { try { Transformer tx = TransformerFactory.newInstance().newTransformer(); tx.setOutputProperty(OutputKeys.INDENT, "yes"); tx.transform(new DOMSource(document), new StreamResult(output)); } catch (Exception e) { throw new RuntimeException(e); } } }