@ -56,6 +56,7 @@ import static org.mockito.Mockito.*;
@@ -56,6 +56,7 @@ import static org.mockito.Mockito.*;
*
* @author Rossen Stoyanchev
* @author Sam Brannen
* @author Juergen Hoeller
* /
public class ServletInvocableHandlerMethodTests {
@ -126,9 +127,7 @@ public class ServletInvocableHandlerMethodTests {
@@ -126,9 +127,7 @@ public class ServletInvocableHandlerMethodTests {
this . mavContainer . isRequestHandled ( ) ) ;
}
// SPR-9159
@Test
@Test // SPR-9159
public void invokeAndHandle_NotVoidWithResponseStatusAndReason ( ) throws Exception {
ServletInvocableHandlerMethod handlerMethod = getHandlerMethod ( new Handler ( ) , "responseStatusWithReason" ) ;
handlerMethod . invokeAndHandle ( this . webRequest , this . mavContainer ) ;
@ -138,7 +137,7 @@ public class ServletInvocableHandlerMethodTests {
@@ -138,7 +137,7 @@ public class ServletInvocableHandlerMethodTests {
assertEquals ( "400 Bad Request" , this . response . getErrorMessage ( ) ) ;
}
@Test ( expected = HttpMessageNotWritableException . class )
@Test ( expected = HttpMessageNotWritableException . class )
public void invokeAndHandle_Exception ( ) throws Exception {
this . returnValueHandlers . addHandler ( new ExceptionRaisingReturnValueHandler ( ) ) ;
@ -169,23 +168,47 @@ public class ServletInvocableHandlerMethodTests {
@@ -169,23 +168,47 @@ public class ServletInvocableHandlerMethodTests {
@Test
public void wrapConcurrentResult_MethodLevelResponseBody ( ) throws Exception {
wrapConcurrentResult_ResponseBody ( new MethodLevelResponseBodyHandler ( ) ) ;
wrapConcurrentResult_ResponseBody ( new MethodLevelResponseBodyHandler ( ) , "bar" , String . class ) ;
}
@Test
public void wrapConcurrentResult_MethodLevelResponseBodyEmpty ( ) throws Exception {
wrapConcurrentResult_ResponseBody ( new MethodLevelResponseBodyHandler ( ) , null , String . class ) ;
}
@Test
public void wrapConcurrentResult_TypeLevelResponseBody ( ) throws Exception {
wrapConcurrentResult_ResponseBody ( new TypeLevelResponseBodyHandler ( ) ) ;
wrapConcurrentResult_ResponseBody ( new TypeLevelResponseBodyHandler ( ) , "bar" , String . class ) ;
}
@Test
public void wrapConcurrentResult_TypeLevelResponseBodyEmpty ( ) throws Exception {
wrapConcurrentResult_ResponseBody ( new TypeLevelResponseBodyHandler ( ) , null , String . class ) ;
}
@Test
public void wrapConcurrentResult_DeferredResultSubclass ( ) throws Exception {
wrapConcurrentResult_ResponseBody ( new DeferredResultSubclassHandler ( ) , "bar" , String . class ) ;
}
private void wrapConcurrentResult_ResponseBody ( Object handler ) throws Exception {
@Test
public void wrapConcurrentResult_DeferredResultSubclassEmpty ( ) throws Exception {
wrapConcurrentResult_ResponseBody ( new DeferredResultSubclassHandler ( ) , null , CustomDeferredResult . class ) ;
}
private void wrapConcurrentResult_ResponseBody ( Object handler , Object result , Class < ? > expectedReturnType )
throws Exception {
List < HttpMessageConverter < ? > > converters = new ArrayList < > ( ) ;
converters . add ( new StringHttpMessageConverter ( ) ) ;
this . returnValueHandlers . addHandler ( new ModelAndViewMethodReturnValueHandler ( ) ) ;
this . returnValueHandlers . addHandler ( new RequestResponseBodyMethodProcessor ( converters ) ) ;
ServletInvocableHandlerMethod handlerMethod = getHandlerMethod ( handler , "handle" ) ;
handlerMethod = handlerMethod . wrapConcurrentResult ( "bar" ) ;
handlerMethod . invokeAndHandle ( this . webRequest , this . mavContainer ) ;
assertEquals ( "bar" , this . response . getContentAsString ( ) ) ;
handlerMethod = handlerMethod . wrapConcurrentResult ( result ) ;
handlerMethod . invokeAndHandle ( this . webRequest , this . mavContainer ) ;
assertEquals ( ( result ! = null ? result . toString ( ) : "" ) , this . response . getContentAsString ( ) ) ;
assertEquals ( expectedReturnType , handlerMethod . getReturnValueType ( result ) . getParameterType ( ) ) ;
}
@Test
@ -200,9 +223,7 @@ public class ServletInvocableHandlerMethodTests {
@@ -200,9 +223,7 @@ public class ServletInvocableHandlerMethodTests {
assertEquals ( "bar" , this . response . getContentAsString ( ) ) ;
}
// SPR-12287
@Test
@Test // SPR-12287
public void wrapConcurrentResult_ResponseEntityNullBody ( ) throws Exception {
List < HttpMessageConverter < ? > > converters = new ArrayList < > ( ) ;
converters . add ( new StringHttpMessageConverter ( ) ) ;
@ -256,9 +277,7 @@ public class ServletInvocableHandlerMethodTests {
@@ -256,9 +277,7 @@ public class ServletInvocableHandlerMethodTests {
assertEquals ( "" , this . response . getContentAsString ( ) ) ;
}
// SPR-12287 (16/Oct/14 comments)
@Test
@Test // SPR-12287 (16/Oct/14 comments)
public void responseEntityRawTypeWithNullBody ( ) throws Exception {
List < HttpMessageConverter < ? > > converters = Collections . singletonList ( new StringHttpMessageConverter ( ) ) ;
List < Object > advice = Collections . singletonList ( mock ( ResponseBodyAdvice . class ) ) ;
@ -281,6 +300,7 @@ public class ServletInvocableHandlerMethodTests {
@@ -281,6 +300,7 @@ public class ServletInvocableHandlerMethodTests {
return handlerMethod ;
}
@SuppressWarnings ( "unused" )
@ResponseStatus
@Retention ( RetentionPolicy . RUNTIME )
@ -290,6 +310,7 @@ public class ServletInvocableHandlerMethodTests {
@@ -290,6 +310,7 @@ public class ServletInvocableHandlerMethodTests {
HttpStatus responseStatus ( ) default HttpStatus . INTERNAL_SERVER_ERROR ;
}
@SuppressWarnings ( "unused" )
private static class Handler {
@ -321,6 +342,7 @@ public class ServletInvocableHandlerMethodTests {
@@ -321,6 +342,7 @@ public class ServletInvocableHandlerMethodTests {
}
}
@SuppressWarnings ( "unused" )
@ResponseStatus ( HttpStatus . BAD_REQUEST )
private static class ResponseStatusHandler {
@ -329,6 +351,7 @@ public class ServletInvocableHandlerMethodTests {
@@ -329,6 +351,7 @@ public class ServletInvocableHandlerMethodTests {
}
}
private static class MethodLevelResponseBodyHandler {
@ResponseBody
@ -337,6 +360,7 @@ public class ServletInvocableHandlerMethodTests {
@@ -337,6 +360,7 @@ public class ServletInvocableHandlerMethodTests {
}
}
@SuppressWarnings ( "unused" )
@ResponseBody
private static class TypeLevelResponseBodyHandler {
@ -346,6 +370,20 @@ public class ServletInvocableHandlerMethodTests {
@@ -346,6 +370,20 @@ public class ServletInvocableHandlerMethodTests {
}
}
private static class DeferredResultSubclassHandler {
@ResponseBody
public CustomDeferredResult handle ( ) {
return new CustomDeferredResult ( ) ;
}
}
private static class CustomDeferredResult extends DeferredResult < String > {
}
@SuppressWarnings ( "unused" )
private static class ResponseEntityHandler {
@ -358,6 +396,7 @@ public class ServletInvocableHandlerMethodTests {
@@ -358,6 +396,7 @@ public class ServletInvocableHandlerMethodTests {
}
}
private static class ExceptionRaisingReturnValueHandler implements HandlerMethodReturnValueHandler {
@Override
@ -372,6 +411,7 @@ public class ServletInvocableHandlerMethodTests {
@@ -372,6 +411,7 @@ public class ServletInvocableHandlerMethodTests {
}
}
@SuppressWarnings ( "unused" )
private static class AsyncHandler {
@ -384,4 +424,4 @@ public class ServletInvocableHandlerMethodTests {
@@ -384,4 +424,4 @@ public class ServletInvocableHandlerMethodTests {
}
}
}
}