Polish MVC config tests

This commit is contained in:
Rossen Stoyanchev 2016-01-29 14:58:32 -05:00
parent 1cf0fb8174
commit aa064d7653
2 changed files with 48 additions and 44 deletions

View File

@ -25,6 +25,7 @@ import org.springframework.beans.DirectFieldAccessor;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader; import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.core.MethodParameter; import org.springframework.core.MethodParameter;
import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.ResourceHttpMessageConverter; import org.springframework.http.converter.ResourceHttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter;
@ -62,17 +63,18 @@ public class AnnotationDrivenBeanDefinitionParserTests {
@Before @Before
public void setup() { public void setup() {
appContext = new GenericWebApplicationContext(); this.appContext = new GenericWebApplicationContext();
} }
@Test @Test
public void testMessageCodesResolver() { public void testMessageCodesResolver() {
loadBeanDefinitions("mvc-config-message-codes-resolver.xml"); loadBeanDefinitions("mvc-config-message-codes-resolver.xml");
RequestMappingHandlerAdapter adapter = appContext.getBean(RequestMappingHandlerAdapter.class); RequestMappingHandlerAdapter adapter = this.appContext.getBean(RequestMappingHandlerAdapter.class);
assertNotNull(adapter); assertNotNull(adapter);
Object initializer = adapter.getWebBindingInitializer(); Object initializer = adapter.getWebBindingInitializer();
assertNotNull(initializer); assertNotNull(initializer);
MessageCodesResolver resolver = ((ConfigurableWebBindingInitializer) initializer).getMessageCodesResolver(); MessageCodesResolver resolver =
((ConfigurableWebBindingInitializer) initializer).getMessageCodesResolver();
assertNotNull(resolver); assertNotNull(resolver);
assertEquals(TestMessageCodesResolver.class, resolver.getClass()); assertEquals(TestMessageCodesResolver.class, resolver.getClass());
assertEquals(false, new DirectFieldAccessor(adapter).getPropertyValue("ignoreDefaultModelOnRedirect")); assertEquals(false, new DirectFieldAccessor(adapter).getPropertyValue("ignoreDefaultModelOnRedirect"));
@ -81,7 +83,7 @@ public class AnnotationDrivenBeanDefinitionParserTests {
@Test @Test
public void testPathMatchingConfiguration() { public void testPathMatchingConfiguration() {
loadBeanDefinitions("mvc-config-path-matching.xml"); loadBeanDefinitions("mvc-config-path-matching.xml");
RequestMappingHandlerMapping hm = appContext.getBean(RequestMappingHandlerMapping.class); RequestMappingHandlerMapping hm = this.appContext.getBean(RequestMappingHandlerMapping.class);
assertNotNull(hm); assertNotNull(hm);
assertTrue(hm.useSuffixPatternMatch()); assertTrue(hm.useSuffixPatternMatch());
assertFalse(hm.useTrailingSlashMatch()); assertFalse(hm.useTrailingSlashMatch());
@ -96,17 +98,17 @@ public class AnnotationDrivenBeanDefinitionParserTests {
@Test @Test
public void testMessageConverters() { public void testMessageConverters() {
loadBeanDefinitions("mvc-config-message-converters.xml"); loadBeanDefinitions("mvc-config-message-converters.xml");
verifyMessageConverters(appContext.getBean(RequestMappingHandlerAdapter.class), true); verifyMessageConverters(this.appContext.getBean(RequestMappingHandlerAdapter.class), true);
verifyMessageConverters(appContext.getBean(ExceptionHandlerExceptionResolver.class), true); verifyMessageConverters(this.appContext.getBean(ExceptionHandlerExceptionResolver.class), true);
verifyRequestResponseBodyAdvice(appContext.getBean(RequestMappingHandlerAdapter.class)); verifyRequestResponseBodyAdvice(this.appContext.getBean(RequestMappingHandlerAdapter.class));
verifyResponseBodyAdvice(appContext.getBean(ExceptionHandlerExceptionResolver.class)); verifyResponseBodyAdvice(this.appContext.getBean(ExceptionHandlerExceptionResolver.class));
} }
@Test @Test
public void testMessageConvertersWithoutDefaultRegistrations() { public void testMessageConvertersWithoutDefaultRegistrations() {
loadBeanDefinitions("mvc-config-message-converters-defaults-off.xml"); loadBeanDefinitions("mvc-config-message-converters-defaults-off.xml");
verifyMessageConverters(appContext.getBean(RequestMappingHandlerAdapter.class), false); verifyMessageConverters(this.appContext.getBean(RequestMappingHandlerAdapter.class), false);
verifyMessageConverters(appContext.getBean(ExceptionHandlerExceptionResolver.class), false); verifyMessageConverters(this.appContext.getBean(ExceptionHandlerExceptionResolver.class), false);
} }
@Test @Test
@ -153,16 +155,16 @@ public class AnnotationDrivenBeanDefinitionParserTests {
@Test @Test
public void beanNameUrlHandlerMapping() { public void beanNameUrlHandlerMapping() {
loadBeanDefinitions("mvc-config.xml"); loadBeanDefinitions("mvc-config.xml");
BeanNameUrlHandlerMapping mapping = appContext.getBean(BeanNameUrlHandlerMapping.class); BeanNameUrlHandlerMapping mapping = this.appContext.getBean(BeanNameUrlHandlerMapping.class);
assertNotNull(mapping); assertNotNull(mapping);
assertEquals(2, mapping.getOrder()); assertEquals(2, mapping.getOrder());
} }
private void loadBeanDefinitions(String fileName) { private void loadBeanDefinitions(String fileName) {
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(appContext); XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this.appContext);
ClassPathResource resource = new ClassPathResource(fileName, AnnotationDrivenBeanDefinitionParserTests.class); Resource resource = new ClassPathResource(fileName, AnnotationDrivenBeanDefinitionParserTests.class);
reader.loadBeanDefinitions(resource); reader.loadBeanDefinitions(resource);
appContext.refresh(); this.appContext.refresh();
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@ -173,9 +175,9 @@ public class AnnotationDrivenBeanDefinitionParserTests {
assertTrue(value instanceof List); assertTrue(value instanceof List);
List<HttpMessageConverter<?>> converters = (List<HttpMessageConverter<?>>) value; List<HttpMessageConverter<?>> converters = (List<HttpMessageConverter<?>>) value;
if (hasDefaultRegistrations) { if (hasDefaultRegistrations) {
assertTrue("Default converters are registered in addition to custom ones", converters.size() > 2); assertTrue("Default and custom converter expected", converters.size() > 2);
} else { } else {
assertTrue("Default converters should not be registered", converters.size() == 2); assertTrue("Only custom converters expected", converters.size() == 2);
} }
assertTrue(converters.get(0) instanceof StringHttpMessageConverter); assertTrue(converters.get(0) instanceof StringHttpMessageConverter);
assertTrue(converters.get(1) instanceof ResourceHttpMessageConverter); assertTrue(converters.get(1) instanceof ResourceHttpMessageConverter);

View File

@ -20,8 +20,6 @@ import java.util.List;
import java.util.Locale; import java.util.Locale;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper; import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import org.joda.time.DateTime; import org.joda.time.DateTime;
@ -87,6 +85,8 @@ import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.ViewResolverComposite; import org.springframework.web.servlet.view.ViewResolverComposite;
import org.springframework.web.util.UrlPathHelper; import org.springframework.web.util.UrlPathHelper;
import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES;
import static com.fasterxml.jackson.databind.MapperFeature.DEFAULT_VIEW_INCLUSION;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotNull;
@ -142,6 +142,7 @@ public class WebMvcConfigurationSupportTests {
HttpServletRequest request = new MockHttpServletRequest("GET", "/testController"); HttpServletRequest request = new MockHttpServletRequest("GET", "/testController");
HandlerExecutionChain chain = handlerMapping.getHandler(request); HandlerExecutionChain chain = handlerMapping.getHandler(request);
assertNotNull(chain);
assertNotNull(chain.getInterceptors()); assertNotNull(chain.getInterceptors());
assertEquals(3, chain.getInterceptors().length); assertEquals(3, chain.getInterceptors().length);
assertEquals(ConversionServiceExposingInterceptor.class, chain.getInterceptors()[1].getClass()); assertEquals(ConversionServiceExposingInterceptor.class, chain.getInterceptors()[1].getClass());
@ -175,19 +176,20 @@ public class WebMvcConfigurationSupportTests {
RequestMappingHandlerAdapter adapter = context.getBean(RequestMappingHandlerAdapter.class); RequestMappingHandlerAdapter adapter = context.getBean(RequestMappingHandlerAdapter.class);
List<HttpMessageConverter<?>> converters = adapter.getMessageConverters(); List<HttpMessageConverter<?>> converters = adapter.getMessageConverters();
assertEquals(9, converters.size()); assertEquals(9, converters.size());
for(HttpMessageConverter<?> converter : converters) { converters.stream()
if (converter instanceof AbstractJackson2HttpMessageConverter) { .filter(converter -> converter instanceof AbstractJackson2HttpMessageConverter)
ObjectMapper objectMapper = ((AbstractJackson2HttpMessageConverter)converter).getObjectMapper(); .forEach(converter -> {
assertFalse(objectMapper.getDeserializationConfig().isEnabled(MapperFeature.DEFAULT_VIEW_INCLUSION)); ObjectMapper mapper = ((AbstractJackson2HttpMessageConverter) converter).getObjectMapper();
assertFalse(objectMapper.getSerializationConfig().isEnabled(MapperFeature.DEFAULT_VIEW_INCLUSION)); assertFalse(mapper.getDeserializationConfig().isEnabled(DEFAULT_VIEW_INCLUSION));
assertFalse(objectMapper.getDeserializationConfig().isEnabled(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)); assertFalse(mapper.getSerializationConfig().isEnabled(DEFAULT_VIEW_INCLUSION));
assertFalse(mapper.getDeserializationConfig().isEnabled(FAIL_ON_UNKNOWN_PROPERTIES));
if (converter instanceof MappingJackson2XmlHttpMessageConverter) { if (converter instanceof MappingJackson2XmlHttpMessageConverter) {
assertEquals(XmlMapper.class, objectMapper.getClass()); assertEquals(XmlMapper.class, mapper.getClass());
}
}
} }
});
ConfigurableWebBindingInitializer initializer = (ConfigurableWebBindingInitializer) adapter.getWebBindingInitializer(); ConfigurableWebBindingInitializer initializer =
(ConfigurableWebBindingInitializer) adapter.getWebBindingInitializer();
assertNotNull(initializer); assertNotNull(initializer);
ConversionService conversionService = initializer.getConversionService(); ConversionService conversionService = initializer.getConversionService();
@ -331,8 +333,8 @@ public class WebMvcConfigurationSupportTests {
@EnableWebMvc @EnableWebMvc
@Configuration @Configuration @SuppressWarnings("unused")
public static class WebConfig { static class WebConfig {
@Bean(name="/testController") @Bean(name="/testController")
public TestController testController() { public TestController testController() {
@ -348,8 +350,8 @@ public class WebMvcConfigurationSupportTests {
} }
@Configuration @Configuration @SuppressWarnings("unused")
public static class ViewResolverConfig { static class ViewResolverConfig {
@Bean @Bean
public ViewResolver beanNameViewResolver() { public ViewResolver beanNameViewResolver() {
@ -360,7 +362,7 @@ public class WebMvcConfigurationSupportTests {
@EnableWebMvc @EnableWebMvc
@Configuration @Configuration
public static class CustomViewResolverOrderConfig extends WebMvcConfigurerAdapter { static class CustomViewResolverOrderConfig extends WebMvcConfigurerAdapter {
@Override @Override
public void configureViewResolvers(ViewResolverRegistry registry) { public void configureViewResolvers(ViewResolverRegistry registry) {
@ -374,19 +376,19 @@ public class WebMvcConfigurationSupportTests {
static class CustomArgumentResolverConfig extends WebMvcConfigurerAdapter { static class CustomArgumentResolverConfig extends WebMvcConfigurerAdapter {
@Override @Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) { public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
argumentResolvers.add(new TestArgumentResolver()); resolvers.add(new TestArgumentResolver());
} }
@Override @Override
public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> returnValueHandlers) { public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> handlers) {
returnValueHandlers.add(new TestReturnValueHandler()); handlers.add(new TestReturnValueHandler());
} }
} }
@Controller @Controller @SuppressWarnings("unused")
public static class TestController { private static class TestController {
@RequestMapping("/") @RequestMapping("/")
public void handle() { public void handle() {
@ -402,7 +404,7 @@ public class WebMvcConfigurationSupportTests {
@Controller @Controller
@Scope("prototype") @Scope("prototype")
public static class ScopedController { private static class ScopedController {
@RequestMapping("/scoped") @RequestMapping("/scoped")
public void handle() { public void handle() {
@ -412,7 +414,7 @@ public class WebMvcConfigurationSupportTests {
@Controller @Controller
@Scope(value="prototype", proxyMode=ScopedProxyMode.TARGET_CLASS) @Scope(value="prototype", proxyMode=ScopedProxyMode.TARGET_CLASS)
public static class ScopedProxyController { static class ScopedProxyController {
@RequestMapping("/scopedProxy") @RequestMapping("/scopedProxy")
public void handle() { public void handle() {
@ -422,7 +424,7 @@ public class WebMvcConfigurationSupportTests {
@ResponseStatus(code = HttpStatus.BAD_REQUEST, reason = "exception.user.exists") @ResponseStatus(code = HttpStatus.BAD_REQUEST, reason = "exception.user.exists")
@SuppressWarnings("serial") @SuppressWarnings("serial")
public static class UserAlreadyExistsException extends RuntimeException { private static class UserAlreadyExistsException extends RuntimeException {
} }
private static class TestArgumentResolver implements HandlerMethodArgumentResolver { private static class TestArgumentResolver implements HandlerMethodArgumentResolver {