// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.io.remotecontrol.handler; import static org.junit.Assert.assertEquals; import java.util.Collections; import java.util.HashMap; import java.util.Map; import org.junit.Test; import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault; import org.openstreetmap.josm.io.remotecontrol.handler.RequestHandler.RequestHandlerBadRequestException; /** * Unit tests of {@link RequestHandler} class. */ public class RequestHandlerTest { Map<String, String> getRequestParameter(String url) throws RequestHandlerBadRequestException { final RequestHandler req = new RequestHandler() { @Override protected void validateRequest() throws RequestHandlerBadRequestException { } @Override protected void handleRequest() throws RequestHandlerErrorException, RequestHandlerBadRequestException { } @Override public String getPermissionMessage() { return null; } @Override public PermissionPrefWithDefault getPermissionPref() { return null; } @Override public String[] getMandatoryParams() { return new String[0]; } }; req.setUrl(url); return req.args; } /** * Test request parameter - case 1 * @throws RequestHandlerBadRequestException never */ @Test public void testRequestParameter1() throws RequestHandlerBadRequestException { final Map<String, String> expected = new HashMap<>(); expected.put("query", "a"); expected.put("b", "=c"); assertEquals(expected, getRequestParameter("http://example.com/?query=a&b==c")); } /** * Test request parameter - case 2 * @throws RequestHandlerBadRequestException never */ @Test public void testRequestParameter2() throws RequestHandlerBadRequestException { assertEquals(Collections.singletonMap("query", "a&b==c"), getRequestParameter("http://example.com/?query=a%26b==c")); } /** * Test request parameter - case 3 * @throws RequestHandlerBadRequestException never */ @Test public void testRequestParameter3() throws RequestHandlerBadRequestException { assertEquals(Collections.singleton("blue+light blue"), getRequestParameter("http://example.com/blue+light%20blue?blue%2Blight+blue").keySet()); } /** * Test request parameter - case 4 * @see <a href="http://blog.lunatech.com/2009/02/03/what-every-web-developer-must-know-about-url-encoding"> * What every web developer must know about URL encoding</a> * @throws RequestHandlerBadRequestException never */ @Test public void testRequestParameter4() throws RequestHandlerBadRequestException { assertEquals(Collections.singletonMap("/?:@-._~!$'()* ,;", "/?:@-._~!$'()* ,;=="), getRequestParameter( "http://example.com/:@-._~!$&'()*+,=;:@-._~!$&'()*+,=:@-._~!$&'()*+,==?/?:@-._~!$'()*+,;=/?:@-._~!$'()*+,;==#/?:@-._~!$&'()*+,;=" )); } /** * Test request parameter - case 5 * @throws RequestHandlerBadRequestException never */ @Test public void testRequestParameter5() throws RequestHandlerBadRequestException { final Map<String, String> expected = new HashMap<>(); expected.put("space", " "); expected.put("tab", "\t"); assertEquals(expected, getRequestParameter("http://example.com/?space=%20&tab=%09")); } /** * Test request parameter - case 6 * @throws RequestHandlerBadRequestException never */ @Test public void testRequestParameter6() throws RequestHandlerBadRequestException { final Map<String, String> expected = new HashMap<>(); expected.put("addtags", "wikipedia:de=Weiße_Gasse|maxspeed=5"); expected.put("select", "way23071688,way23076176,way23076177,"); expected.put("left", "13.739727546842"); expected.put("right", "13.740890970188"); expected.put("top", "51.049987191025"); expected.put("bottom", "51.048466954325"); assertEquals(expected, getRequestParameter("http://localhost:8111/load_and_zoom"+ "?addtags=wikipedia%3Ade=Wei%C3%9Fe_Gasse%7Cmaxspeed=5"+ "&select=way23071688,way23076176,way23076177,"+ "&left=13.739727546842&right=13.740890970188&top=51.049987191025&bottom=51.048466954325")); } /** * Test request parameter - invalid case * @throws RequestHandlerBadRequestException always */ @Test(expected = RequestHandlerBadRequestException.class) public void testRequestParameterInvalid() throws RequestHandlerBadRequestException { getRequestParameter("http://localhost:8111/load_and_zoom"+ "?addtags=wikipedia:de=Wei%C3%9Fe_Gasse|maxspeed=5"+ "&select=way23071688,way23076176,way23076177,"+ "&left=13.739727546842&right=13.740890970188&top=51.049987191025&bottom=51.048466954325"); } }