/* Copyright (c) 2001 - 2008 TOPP - www.openplans.org. All rights reserved. * This code is licensed under the GPL 2.0 license, availible at the root * application directory. */ package org.vfny.geoserver.wms.responses.map.kml; import static org.custommonkey.xmlunit.XMLAssert.assertXpathEvaluatesTo; import java.io.File; import java.util.Map; import junit.framework.Test; import org.custommonkey.xmlunit.XMLUnit; import org.custommonkey.xmlunit.XpathEngine; import org.geoserver.catalog.FeatureTypeInfo; import org.geoserver.data.test.TestData; import org.geoserver.test.GeoServerAbstractTestSupport; import org.geoserver.wms.MapLayerInfo; import org.geoserver.wms.WMSMockData; import org.geoserver.wms.WMSTestSupport; import org.geotools.data.FeatureSource; import org.geotools.feature.FeatureCollection; import org.geotools.feature.FeatureCollections; import org.geotools.map.DefaultMapLayer; import org.geotools.map.MapLayer; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; import org.vfny.geoserver.wms.WMSMapContext; import org.vfny.geoserver.wms.requests.GetMapRequest; import org.w3c.dom.Document; import com.mockrunner.mock.web.MockHttpServletRequest; import com.vividsolutions.jts.geom.Point; /** * Unit test suite for {@link KMLLegendTransformer} * * @author Gabriel Roldan (OpenGeo) * @version $Id$ * @todo this test does not need to extend GeoServerAbstractTestSupport but just TestCase. For the * time being, its a workaround for the build to keep going until we find out why these tests * produce other ones to fail */ public class KMLLegendTransformerTest extends GeoServerAbstractTestSupport { private WMSMockData mockData; /** * The map context for the transformer constructor. It shouldn't be needed, see the comment at * {@link KMLLegendTransformer#KMLLegendTransformer(WMSMapContext)} */ private WMSMapContext mapContext; /** * The layer to encode the legend url for */ private MapLayer mapLayer; /** * This is a READ ONLY TEST so we can use one time setup */ public static Test suite() { return new OneTimeTestSetup(new KMLLegendTransformerTest()); } @Override protected TestData buildTestData() throws Exception { return new TestData() { public File getDataDirectoryRoot() { return null; } public boolean isTestDataAvailable() { return false; } public void setUp() throws Exception { } public void tearDown() throws Exception { } }; } /** * @see junit.framework.TestCase#setUp() */ @Override protected void setUpInternal() throws Exception { mockData = new WMSMockData(); mockData.setUp(); // Map<String, String> namespaces = new HashMap<String, String>(); // namespaces.put("atom", "http://purl.org/atom/ns#"); // XMLUnit.setXpathNamespaceContext(new SimpleNamespaceContext(namespaces)); MapLayerInfo layer = mockData.addFeatureTypeLayer("TestPoints", Point.class); mapContext = new WMSMapContext(); GetMapRequest request = mockData.createRequest(); request.setLayers(new MapLayerInfo[] { layer }); FeatureSource<SimpleFeatureType, SimpleFeature> featureSource; featureSource = (FeatureSource<SimpleFeatureType, SimpleFeature>) ((FeatureTypeInfo)layer.getFeature()).getFeatureSource(null, null); mapLayer = new DefaultMapLayer(featureSource, mockData.getDefaultStyle().getStyle()); MockHttpServletRequest httpreq = (MockHttpServletRequest) request.getHttpServletRequest(); httpreq.setScheme("http"); httpreq.setServerName("geoserver.org"); httpreq.setServerPort(8181); httpreq.setContextPath("/geoserver"); mapContext.setRequest(request); } /** * @see junit.framework.TestCase#tearDown() */ @Override protected void tearDownInternal() throws Exception { } /** * Test method for * {@link KMLLegendTransformer#KMLLegendTransformer(org.vfny.geoserver.wms.WMSMapContext)}. * * @throws Exception */ public void testKMLLegendTransformer() throws Exception { FeatureCollection<SimpleFeatureType, SimpleFeature> features = FeatureCollections .newCollection(); XpathEngine xpath = XMLUnit.newXpathEngine(); KMLLegendTransformer transformer = new KMLLegendTransformer(mapContext); transformer.setIndentation(2); Document dom = WMSTestSupport.transform(mapLayer, transformer); assertXpathEvaluatesTo("Legend", "//kml/ScreenOverlay/name", dom); assertXpathEvaluatesTo("0", "//kml/ScreenOverlay/overlayXY/@x", dom); assertXpathEvaluatesTo("0", "//kml/ScreenOverlay/overlayXY/@y", dom); assertXpathEvaluatesTo("pixels", "//kml/ScreenOverlay/overlayXY/@xunits", dom); assertXpathEvaluatesTo("pixels", "//kml/ScreenOverlay/overlayXY/@yunits", dom); Map<String, String> expectedKVP = KMLReflectorTest .toKvp("http://geoserver.org:8181/geoserver/wms?service=wms&width=20&height=20&style=Default+Style&request=GetLegendGraphic&layer=&format=image%2Fpng&version=1.1.1"); Map<String, String> resultantKVP = KMLReflectorTest.toKvp(xpath.evaluate( "//kml/ScreenOverlay/Icon/href", dom)); KMLReflectorTest.assertMapsEqual(expectedKVP, resultantKVP); } }