Polish MVC config tests
This commit is contained in:
parent
1cf0fb8174
commit
aa064d7653
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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));
|
||||||
if (converter instanceof MappingJackson2XmlHttpMessageConverter) {
|
assertFalse(mapper.getDeserializationConfig().isEnabled(FAIL_ON_UNKNOWN_PROPERTIES));
|
||||||
assertEquals(XmlMapper.class, objectMapper.getClass());
|
if (converter instanceof MappingJackson2XmlHttpMessageConverter) {
|
||||||
}
|
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 {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue