package org.geowebcache.service.gmaps; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletResponse; import junit.framework.TestCase; import org.geowebcache.GeoWebCacheException; import org.geowebcache.conveyor.ConveyorTile; import org.geowebcache.filter.parameters.ParameterFilter; import org.geowebcache.filter.parameters.RegexParameterFilter; import org.geowebcache.grid.GridSetBroker; import org.geowebcache.layer.TileLayerDispatcher; import org.geowebcache.layer.TileLayerDispatcherMock; import org.geowebcache.layer.wms.WMSLayer; import org.geowebcache.service.ServiceException; import org.geowebcache.storage.StorageBroker; import org.springframework.mock.web.MockHttpServletRequest; public class GMapsConverterTest extends TestCase { @Override protected void setUp() throws Exception { super.setUp(); } /** * see http://code.google.com/apis/maps/documentation/overlays.html# Custom_Map_Types * * @throws Exception */ public void testGMapsConverter() throws Exception { /* Check origin location */ int x = 0; int y = 0; int z = 0; long[] gridLoc = GMapsConverter.convert(z, x, y); long[] solution = { 0, 0, 0 }; assert (Arrays.equals(gridLoc, solution)); /* Check zoomlevel */ x = 0; y = 0; z = 1; solution[0] = 0; solution[1] = 1; solution[2] = 1; gridLoc = GMapsConverter.convert(z, x, y); assert (Arrays.equals(gridLoc, solution)); /* Check top right */ x = 1; y = 0; z = 1; solution[0] = 1; solution[1] = 1; solution[2] = 1; gridLoc = GMapsConverter.convert(z, x, y); assert (Arrays.equals(gridLoc, solution)); /* Check top right, zoomlevel */ x = 3; y = 0; z = 2; solution[0] = 3; solution[1] = 3; solution[2] = 2; gridLoc = GMapsConverter.convert(z, x, y); assert (Arrays.equals(gridLoc, solution)); /* Check middle */ x = 2; y = 1; z = 2; solution[0] = 2; solution[1] = 2; solution[2] = 2; gridLoc = GMapsConverter.convert(z, x, y); assert (Arrays.equals(gridLoc, solution)); // System.out.println(Arrays.toString(solution)); // System.out.println(Arrays.toString(gridLoc)); } private static final String CQL_FILTER_PARAMETER_NAME = "CQL_FILTER"; private static final String CQL_FILTER_PARAMETER_VALUE = "value='x'"; private static final String TEST_LAYER_NAME = "testLayer"; public void testConveyorCreation() { StorageBroker sb = null; List<ParameterFilter> filters = new ArrayList<ParameterFilter>(); RegexParameterFilter parameterFilter = new RegexParameterFilter(); parameterFilter.setKey(CQL_FILTER_PARAMETER_NAME); parameterFilter.setDefaultValue(""); parameterFilter.setRegex("value='.*'"); filters.add(parameterFilter); WMSLayer wmsLayer = new WMSLayer(TEST_LAYER_NAME, null, null, null, null, null, filters, null, null, true, null); TileLayerDispatcher tld = new TileLayerDispatcherMock(wmsLayer); GridSetBroker gsb = new GridSetBroker(true, true); wmsLayer.initialize(gsb); MockHttpServletRequest request = new MockHttpServletRequest(); HttpServletResponse response = null; request.addParameter(CQL_FILTER_PARAMETER_NAME, CQL_FILTER_PARAMETER_VALUE); request.addParameter("layers", new String[] { TEST_LAYER_NAME }); request.addParameter("zoom", "12"); request.addParameter("x", "0"); request.addParameter("y", "0"); GMapsConverter converter = new GMapsConverter(sb, tld, gsb); try { ConveyorTile conveyorTile = converter.getConveyor(request, response); Map<String, String> parameters = conveyorTile.getParameters(); assertNotNull(parameters); // assertTrue(parameters.contains(URLEncoder.encode(CQL_FILTER_PARAMETER_VALUE,"UTF8"))); assertEquals(CQL_FILTER_PARAMETER_VALUE, URLDecoder.decode(parameters.get(CQL_FILTER_PARAMETER_NAME), "UTF8")); } catch (ServiceException e) { fail(); } catch (GeoWebCacheException e) { fail(); } catch (UnsupportedEncodingException e) { fail(); } } }