package org.springframework.web.servlet.mvc;
import junit.framework.TestCase;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.web.annotation.WebParam;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerMethod;
/**
* @author Arjen Poutsma
*/
public class WebParamHandlerMethodAdapterTests extends TestCase {
private WebParamHandlerMethodAdapter adapter;
private boolean supportedMavInvoked;
private boolean supportedVoidInvoked;
private boolean supportedTypesInvoked;
@Override
protected void setUp() throws Exception {
adapter = new WebParamHandlerMethodAdapter();
}
public void testUnsupportedInvalidParam() throws NoSuchMethodException {
HandlerMethod endpoint = new HandlerMethod(this, "unsupportedInvalidParamType", new Class[]{Byte.TYPE});
assertFalse("Method supported", adapter.supports(endpoint));
}
public void testUnsupportedInvalidReturnType() throws NoSuchMethodException {
HandlerMethod endpoint = new HandlerMethod(this, "unsupportedInvalidReturnType", new Class[]{String.class});
assertFalse("Method supported", adapter.supports(endpoint));
}
public void testUnsupportedInvalidParams() throws NoSuchMethodException {
HandlerMethod endpoint =
new HandlerMethod(this, "unsupportedInvalidParams", new Class[]{String.class, String.class});
assertFalse("Method supported", adapter.supports(endpoint));
}
public void testSupportedTypes() throws NoSuchMethodException {
HandlerMethod endpoint = new HandlerMethod(this, "supportedTypes",
new Class[]{Boolean.TYPE, Double.TYPE, Float.TYPE, Integer.TYPE, Long.TYPE, String.class});
assertTrue("Not all types supported", adapter.supports(endpoint));
}
public void testSupportsMav() throws NoSuchMethodException {
HandlerMethod endpoint = new HandlerMethod(this, "supportedMav", new Class[]{String.class});
assertTrue("Source method not supported", adapter.supports(endpoint));
}
public void testSupportsVoid() throws NoSuchMethodException {
HandlerMethod endpoint = new HandlerMethod(this, "supportedVoid", new Class[]{Integer.TYPE});
assertTrue("void method not supported", adapter.supports(endpoint));
}
public void testInvokeTypes() throws Exception {
MockHttpServletRequest request = new MockHttpServletRequest();
request.addParameter("boolean", "true");
request.addParameter("double", "42");
request.addParameter("float", "42");
request.addParameter("integer", "42");
request.addParameter("long", "42");
request.addParameter("string", "text");
MockHttpServletResponse response = new MockHttpServletResponse();
HandlerMethod endpoint = new HandlerMethod(this, "supportedTypes",
new Class[]{Boolean.TYPE, Double.TYPE, Float.TYPE, Integer.TYPE, Long.TYPE, String.class});
ModelAndView result = adapter.handle(request, response, endpoint);
assertNull("ModelAndView returned", result);
assertTrue("Method not invoked", supportedTypesInvoked);
}
public void testInvokeVoid() throws Exception {
MockHttpServletRequest request = new MockHttpServletRequest();
request.addParameter("id", "42");
MockHttpServletResponse response = new MockHttpServletResponse();
HandlerMethod endpoint = new HandlerMethod(this, "supportedVoid", new Class[]{Integer.TYPE});
ModelAndView result = adapter.handle(request, response, endpoint);
assertNull("No ModelAndView returned", result);
assertTrue("Method not invoked", supportedVoidInvoked);
}
public void testInvokeMav() throws Exception {
MockHttpServletRequest request = new MockHttpServletRequest();
request.addParameter("id", "42");
MockHttpServletResponse response = new MockHttpServletResponse();
HandlerMethod endpoint = new HandlerMethod(this, "supportedMav", new Class[]{String.class});
ModelAndView result = adapter.handle(request, response, endpoint);
assertNotNull("No ModelAndView returned", result);
assertTrue("Method not invoked", supportedMavInvoked);
}
public void supportedVoid(@WebParam(value = "id", required = true)int id) {
assertEquals("Invalid parameter", 42, id);
supportedVoidInvoked = true;
}
public ModelAndView supportedMav(@WebParam("id")String id) {
assertEquals("Invalid parameter", "42", id);
supportedMavInvoked = true;
return new ModelAndView();
}
public void supportedTypes(@WebParam("boolean")boolean b,
@WebParam("double")double d,
@WebParam("float")float f,
@WebParam("integer")int i,
@WebParam("long")long l,
@WebParam("string")String s) {
supportedTypesInvoked = true;
assertTrue("Invalid boolean value", b);
assertEquals("Invalid double value", 42D, d, 0.00001D);
assertEquals("Invalid float value", 42F, f, 0.00001F);
assertEquals("Invalid integer value", 42, i);
assertEquals("Invalid long value", 42L, l);
assertEquals("Invalid String value", "text", s);
}
public void unsupportedInvalidParams(@WebParam("param")String param1, String param2) {
}
public String unsupportedInvalidReturnType(@WebParam("param")String param1) {
return null;
}
public void unsupportedInvalidParamType(@WebParam("param")byte param1) {
}
}