1616
1717package org .springframework .web .servlet .support ;
1818
19+ import static org .junit .Assert .assertEquals ;
20+ import static org .junit .Assert .assertFalse ;
21+ import static org .junit .Assert .assertNotNull ;
22+ import static org .junit .Assert .assertTrue ;
23+
1924import java .util .Collections ;
25+ import java .util .EnumSet ;
2026import java .util .LinkedHashMap ;
2127import java .util .Map ;
2228
29+ import javax .servlet .DispatcherType ;
30+ import javax .servlet .Filter ;
31+ import javax .servlet .FilterRegistration .Dynamic ;
2332import javax .servlet .Servlet ;
2433import javax .servlet .ServletException ;
2534import javax .servlet .ServletRegistration ;
2635
2736import org .junit .Before ;
2837import org .junit .Test ;
29-
3038import org .springframework .context .annotation .Bean ;
3139import org .springframework .context .annotation .Configuration ;
3240import org .springframework .mock .web .MockServletContext ;
3341import org .springframework .web .context .WebApplicationContext ;
3442import org .springframework .web .context .support .AnnotationConfigWebApplicationContext ;
43+ import org .springframework .web .filter .HiddenHttpMethodFilter ;
3544import org .springframework .web .servlet .DispatcherServlet ;
3645
37- import static org .junit .Assert .*;
38-
3946/**
4047 * Test case for {@link AbstractAnnotationConfigDispatcherServletInitializer}.
4148 *
@@ -45,6 +52,8 @@ public class AnnotationConfigDispatcherServletInitializerTests {
4552
4653 private static final String SERVLET_NAME = "myservlet" ;
4754
55+ private static final String FILTER_NAME = "hiddenHttpMethodFilter" ;
56+
4857 private static final String ROLE_NAME = "role" ;
4958
5059 private static final String SERVLET_MAPPING = "/myservlet" ;
@@ -55,14 +64,21 @@ public class AnnotationConfigDispatcherServletInitializerTests {
5564
5665 private Map <String , Servlet > servlets ;
5766
58- private Map <String , MockDynamic > registrations ;
67+ private Map <String , MockServletRegistration > servletRegistrations ;
68+
69+ private Map <String , Filter > filters ;
70+
71+ private Map <String , MockFilterRegistration > filterRegistrations ;
72+
5973
6074 @ Before
6175 public void setUp () throws Exception {
6276 servletContext = new MyMockServletContext ();
6377 initializer = new MyAnnotationConfigDispatcherServletInitializer ();
64- servlets = new LinkedHashMap <String , Servlet >(2 );
65- registrations = new LinkedHashMap <String , MockDynamic >(2 );
78+ servlets = new LinkedHashMap <String , Servlet >(1 );
79+ servletRegistrations = new LinkedHashMap <String , MockServletRegistration >(1 );
80+ filters = new LinkedHashMap <String , Filter >(1 );
81+ filterRegistrations = new LinkedHashMap <String , MockFilterRegistration >();
6682 }
6783
6884 @ Test
@@ -73,29 +89,82 @@ public void register() throws ServletException {
7389 assertNotNull (servlets .get (SERVLET_NAME ));
7490
7591 DispatcherServlet servlet = (DispatcherServlet ) servlets .get (SERVLET_NAME );
76- WebApplicationContext servletContext = servlet .getWebApplicationContext ();
77- ((AnnotationConfigWebApplicationContext ) servletContext ).refresh ();
92+ WebApplicationContext dispatcherServletContext = servlet .getWebApplicationContext ();
93+ ((AnnotationConfigWebApplicationContext ) dispatcherServletContext ).refresh ();
94+
95+ assertTrue (dispatcherServletContext .containsBean ("bean" ));
96+ assertTrue (dispatcherServletContext .getBean ("bean" ) instanceof MyBean );
97+
98+ assertEquals (1 , servletRegistrations .size ());
99+ assertNotNull (servletRegistrations .get (SERVLET_NAME ));
100+
101+ MockServletRegistration servletRegistration = servletRegistrations .get (SERVLET_NAME );
102+
103+ assertEquals (Collections .singleton (SERVLET_MAPPING ), servletRegistration .getMappings ());
104+ assertEquals (1 , servletRegistration .getLoadOnStartup ());
105+ assertEquals (ROLE_NAME , servletRegistration .getRunAsRole ());
106+ assertTrue (servletRegistration .isAsyncSupported ());
107+
108+ assertEquals (1 , filterRegistrations .size ());
109+ assertNotNull (filterRegistrations .get (FILTER_NAME ));
110+
111+ MockFilterRegistration filterRegistration = filterRegistrations .get (FILTER_NAME );
112+
113+ assertTrue (filterRegistration .isAsyncSupported ());
114+ assertEquals (EnumSet .of (DispatcherType .REQUEST , DispatcherType .FORWARD , DispatcherType .INCLUDE , DispatcherType .ASYNC ),
115+ filterRegistration .getMappings ().get (SERVLET_NAME ));
116+ }
117+
118+ @ Test
119+ public void asyncSupportedFalse () throws ServletException {
120+ initializer = new MyAnnotationConfigDispatcherServletInitializer () {
121+ @ Override
122+ protected boolean isAsyncSupported () {
123+ return false ;
124+ }
125+ };
126+
127+ initializer .onStartup (servletContext );
128+
129+ MockServletRegistration servletRegistration = servletRegistrations .get (SERVLET_NAME );
130+ assertFalse (servletRegistration .isAsyncSupported ());
78131
79- assertTrue (servletContext .containsBean ("bean" ));
80- assertTrue (servletContext .getBean ("bean" ) instanceof MyBean );
132+ MockFilterRegistration filterRegistration = filterRegistrations .get (FILTER_NAME );
133+ assertFalse (filterRegistration .isAsyncSupported ());
134+ assertEquals (EnumSet .of (DispatcherType .REQUEST , DispatcherType .FORWARD , DispatcherType .INCLUDE ),
135+ filterRegistration .getMappings ().get (SERVLET_NAME ));
136+ }
137+
138+ @ Test
139+ public void noFilters () throws ServletException {
140+ initializer = new MyAnnotationConfigDispatcherServletInitializer () {
141+ @ Override
142+ protected Filter [] getServletFilters () {
143+ return null ;
144+ }
145+ };
81146
82- assertEquals (1 , registrations .size ());
83- assertNotNull (registrations .get (SERVLET_NAME ));
147+ initializer .onStartup (servletContext );
84148
85- MockDynamic registration = registrations .get (SERVLET_NAME );
86- assertEquals (Collections .singleton (SERVLET_MAPPING ), registration .getMappings ());
87- assertEquals (1 , registration .getLoadOnStartup ());
88- assertEquals (ROLE_NAME , registration .getRunAsRole ());
149+ assertEquals (0 , filterRegistrations .size ());
89150 }
90151
152+
91153 private class MyMockServletContext extends MockServletContext {
92154
93155 @ Override
94- public ServletRegistration .Dynamic addServlet (String servletName ,
95- Servlet servlet ) {
156+ public ServletRegistration .Dynamic addServlet (String servletName , Servlet servlet ) {
96157 servlets .put (servletName , servlet );
97- MockDynamic registration = new MockDynamic ();
98- registrations .put (servletName , registration );
158+ MockServletRegistration registration = new MockServletRegistration ();
159+ servletRegistrations .put (servletName , registration );
160+ return registration ;
161+ }
162+
163+ @ Override
164+ public Dynamic addFilter (String filterName , Filter filter ) {
165+ filters .put (filterName , filter );
166+ MockFilterRegistration registration = new MockFilterRegistration ();
167+ filterRegistrations .put (filterName , registration );
99168 return registration ;
100169 }
101170 }
@@ -118,6 +187,11 @@ protected String[] getServletMappings() {
118187 return new String []{"/myservlet" };
119188 }
120189
190+ @ Override
191+ protected Filter [] getServletFilters () {
192+ return new Filter [] { new HiddenHttpMethodFilter () };
193+ }
194+
121195 @ Override
122196 protected void customizeRegistration (ServletRegistration .Dynamic registration ) {
123197 registration .setRunAsRole ("role" );
0 commit comments