1717package org .springframework .test .web .servlet .setup ;
1818
1919import org .springframework .mock .web .MockServletConfig ;
20- import org .springframework .test .web .servlet .*;
20+ import org .springframework .test .web .servlet .MockMvc ;
21+ import org .springframework .test .web .servlet .MockMvcBuilderSupport ;
22+ import org .springframework .test .web .servlet .RequestBuilder ;
23+ import org .springframework .test .web .servlet .ResultHandler ;
24+ import org .springframework .test .web .servlet .ResultMatcher ;
25+ import org .springframework .test .web .servlet .request .ConfigurableSmartRequestBuilder ;
26+ import org .springframework .test .web .servlet .request .MockMvcRequestBuilders ;
27+ import org .springframework .test .web .servlet .request .RequestPostProcessor ;
2128import org .springframework .util .Assert ;
2229import org .springframework .web .context .WebApplicationContext ;
2330
3845 * @since 4.0
3946 */
4047public abstract class AbstractMockMvcBuilder <B extends AbstractMockMvcBuilder <B >>
41- extends MockMvcBuilderSupport implements MockMvcBuilder {
48+ extends MockMvcBuilderSupport implements ConfigurableMockMvcBuilder < B > {
4249
4350 private List <Filter > filters = new ArrayList <Filter >();
4451
@@ -53,27 +60,6 @@ public abstract class AbstractMockMvcBuilder<B extends AbstractMockMvcBuilder<B>
5360 private final List <MockMvcConfigurer > configurers = new ArrayList <MockMvcConfigurer >(4 );
5461
5562
56-
57- /**
58- * Add filters mapped to any request (i.e. "/*"). For example:
59- *
60- * <pre class="code">
61- * mockMvcBuilder.addFilters(springSecurityFilterChain);
62- * </pre>
63- *
64- * <p>is the equivalent of the following web.xml configuration:
65- *
66- * <pre class="code">
67- * <filter-mapping>
68- * <filter-name>springSecurityFilterChain</filter-name>
69- * <url-pattern>/*</url-pattern>
70- * </filter-mapping>
71- * </pre>
72- *
73- * <p>Filters will be invoked in the order in which they are provided.
74- *
75- * @param filters the filters to add
76- */
7763 @ SuppressWarnings ("unchecked" )
7864 public final <T extends B > T addFilters (Filter ... filters ) {
7965 Assert .notNull (filters , "filters cannot be null" );
@@ -85,27 +71,6 @@ public final <T extends B> T addFilters(Filter... filters) {
8571 return (T ) this ;
8672 }
8773
88- /**
89- * Add a filter mapped to a specific set of patterns. For example:
90- *
91- * <pre class="code">
92- * mockMvcBuilder.addFilters(myResourceFilter, "/resources/*");
93- * </pre>
94- *
95- * <p>is the equivalent of:
96- *
97- * <pre class="code">
98- * <filter-mapping>
99- * <filter-name>myResourceFilter</filter-name>
100- * <url-pattern>/resources/*</url-pattern>
101- * </filter-mapping>
102- * </pre>
103- *
104- * <p>Filters will be invoked in the order in which they are provided.
105- *
106- * @param filter the filter to add
107- * @param urlPatterns URL patterns to map to; if empty, "/*" is used by default
108- */
10974 @ SuppressWarnings ("unchecked" )
11075 public final <T extends B > T addFilter (Filter filter , String ... urlPatterns ) {
11176
@@ -120,70 +85,32 @@ public final <T extends B> T addFilter(Filter filter, String... urlPatterns) {
12085 return (T ) this ;
12186 }
12287
123- /**
124- * Define default request properties that should be merged into all
125- * performed requests. In effect this provides a mechanism for defining
126- * common initialization for all requests such as the content type, request
127- * parameters, session attributes, and any other request property.
128- *
129- * <p>Properties specified at the time of performing a request override the
130- * default properties defined here.
131- *
132- * @param requestBuilder a RequestBuilder; see static factory methods in
133- * {@link org.springframework.test.web.servlet.request.MockMvcRequestBuilders}
134- * .
135- */
13688 @ SuppressWarnings ("unchecked" )
13789 public final <T extends B > T defaultRequest (RequestBuilder requestBuilder ) {
13890 this .defaultRequestBuilder = requestBuilder ;
13991 return (T ) this ;
14092 }
14193
142- /**
143- * Define a global expectation that should <em>always</em> be applied to
144- * every response. For example, status code 200 (OK), content type
145- * {@code "application/json"}, etc.
146- *
147- * @param resultMatcher a ResultMatcher; see static factory methods in
148- * {@link org.springframework.test.web.servlet.result.MockMvcResultMatchers}
149- */
15094 @ SuppressWarnings ("unchecked" )
15195 public final <T extends B > T alwaysExpect (ResultMatcher resultMatcher ) {
15296 this .globalResultMatchers .add (resultMatcher );
15397 return (T ) this ;
15498 }
15599
156- /**
157- * Define a global action that should <em>always</em> be applied to every
158- * response. For example, writing detailed information about the performed
159- * request and resulting response to {@code System.out}.
160- *
161- * @param resultHandler a ResultHandler; see static factory methods in
162- * {@link org.springframework.test.web.servlet.result.MockMvcResultHandlers}
163- */
164100 @ SuppressWarnings ("unchecked" )
165101 public final <T extends B > T alwaysDo (ResultHandler resultHandler ) {
166102 this .globalResultHandlers .add (resultHandler );
167103 return (T ) this ;
168104 }
169105
170- /**
171- * Whether to enable the DispatcherServlet property
172- * {@link org.springframework.web.servlet.DispatcherServlet#setDispatchOptionsRequest
173- * dispatchOptionsRequest} which allows processing of HTTP OPTIONS requests.
174- */
175106 @ SuppressWarnings ("unchecked" )
176107 public final <T extends B > T dispatchOptions (boolean dispatchOptions ) {
177108 this .dispatchOptions = dispatchOptions ;
178109 return (T ) this ;
179110 }
180111
181- /**
182- * Add a {@code MockMvcConfigurer} which encapsulates ways to further configure
183- * this MockMvcBuilder with some specific purpose in mind.
184- */
185112 @ SuppressWarnings ("unchecked" )
186- public final <T extends B > T add (MockMvcConfigurer configurer ) {
113+ public final <T extends B > T apply (MockMvcConfigurer configurer ) {
187114 configurer .afterConfigurerAdded (this );
188115 this .configurers .add (configurer );
189116 return (T ) this ;
@@ -202,7 +129,15 @@ public final MockMvc build() {
202129 MockServletConfig mockServletConfig = new MockServletConfig (servletContext );
203130
204131 for (MockMvcConfigurer configurer : this .configurers ) {
205- configurer .beforeMockMvcCreated (this , this .defaultRequestBuilder , wac );
132+ RequestPostProcessor processor = configurer .beforeMockMvcCreated (this , wac );
133+ if (processor != null ) {
134+ if (this .defaultRequestBuilder == null ) {
135+ this .defaultRequestBuilder = MockMvcRequestBuilders .get ("/" );
136+ }
137+ if (this .defaultRequestBuilder instanceof ConfigurableSmartRequestBuilder ) {
138+ ((ConfigurableSmartRequestBuilder ) this .defaultRequestBuilder ).with (processor );
139+ }
140+ }
206141 }
207142
208143 Filter [] filterArray = this .filters .toArray (new Filter [this .filters .size ()]);
@@ -218,4 +153,4 @@ public final MockMvc build() {
218153 */
219154 protected abstract WebApplicationContext initWebAppContext ();
220155
221- }
156+ }
0 commit comments