Skip to content

Commit f3da7b8

Browse files
committed
Polish HtmlUnitRequestBuilder
1 parent 93c07e7 commit f3da7b8

File tree

1 file changed

+76
-72
lines changed

1 file changed

+76
-72
lines changed

spring-test/src/main/java/org/springframework/test/web/servlet/htmlunit/HtmlUnitRequestBuilder.java

Lines changed: 76 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import org.springframework.test.web.servlet.SmartRequestBuilder;
4343
import org.springframework.test.web.servlet.request.RequestPostProcessor;
4444
import org.springframework.util.Assert;
45+
import org.springframework.util.ObjectUtils;
4546
import org.springframework.web.util.UriComponents;
4647
import org.springframework.web.util.UriComponentsBuilder;
4748

@@ -104,27 +105,27 @@ public MockHttpServletRequest buildRequest(ServletContext servletContext) {
104105
String httpMethod = this.webRequest.getHttpMethod().name();
105106
UriComponents uriComponents = uriComponents();
106107

107-
MockHttpServletRequest result = new HtmlUnitMockHttpServletRequest(servletContext, httpMethod,
108+
MockHttpServletRequest request = new HtmlUnitMockHttpServletRequest(servletContext, httpMethod,
108109
uriComponents.getPath());
109-
parent(result, this.parentBuilder);
110-
result.setServerName(uriComponents.getHost()); // needs to be first for additional headers
111-
authType(result);
112-
result.setCharacterEncoding(charset);
113-
content(result, charset);
114-
contextPath(result, uriComponents);
115-
contentType(result);
116-
cookies(result);
117-
headers(result);
118-
locales(result);
119-
servletPath(uriComponents, result);
120-
params(result, uriComponents);
121-
ports(uriComponents, result);
122-
result.setProtocol("HTTP/1.1");
123-
result.setQueryString(uriComponents.getQuery());
124-
result.setScheme(uriComponents.getScheme());
125-
pathInfo(uriComponents,result);
126-
127-
return postProcess(result);
110+
parent(request, this.parentBuilder);
111+
request.setServerName(uriComponents.getHost()); // needs to be first for additional headers
112+
authType(request);
113+
request.setCharacterEncoding(charset);
114+
content(request, charset);
115+
contextPath(request, uriComponents);
116+
contentType(request);
117+
cookies(request);
118+
headers(request);
119+
locales(request);
120+
servletPath(uriComponents, request);
121+
params(request, uriComponents);
122+
ports(uriComponents, request);
123+
request.setProtocol("HTTP/1.1");
124+
request.setQueryString(uriComponents.getQuery());
125+
request.setScheme(uriComponents.getScheme());
126+
pathInfo(uriComponents,request);
127+
128+
return postProcess(request);
128129
}
129130

130131
private MockHttpServletRequest postProcess(MockHttpServletRequest request) {
@@ -137,12 +138,12 @@ private MockHttpServletRequest postProcess(MockHttpServletRequest request) {
137138
return request;
138139
}
139140

140-
private void parent(MockHttpServletRequest result, RequestBuilder parent) {
141+
private void parent(MockHttpServletRequest request, RequestBuilder parent) {
141142
if (parent == null) {
142143
return;
143144
}
144145

145-
MockHttpServletRequest parentRequest = parent.buildRequest(result.getServletContext());
146+
MockHttpServletRequest parentRequest = parent.buildRequest(request.getServletContext());
146147

147148
// session
148149
HttpSession parentSession = parentRequest.getSession(false);
@@ -151,7 +152,7 @@ private void parent(MockHttpServletRequest result, RequestBuilder parent) {
151152
while (attrNames.hasMoreElements()) {
152153
String attrName = attrNames.nextElement();
153154
Object attrValue = parentSession.getAttribute(attrName);
154-
result.getSession().setAttribute(attrName, attrValue);
155+
request.getSession().setAttribute(attrName, attrValue);
155156
}
156157
}
157158

@@ -162,7 +163,7 @@ private void parent(MockHttpServletRequest result, RequestBuilder parent) {
162163
Enumeration<String> attrValues = parentRequest.getHeaders(attrName);
163164
while (attrValues.hasMoreElements()) {
164165
String attrValue = attrValues.nextElement();
165-
result.addHeader(attrName, attrValue);
166+
request.addHeader(attrName, attrValue);
166167
}
167168
}
168169

@@ -171,20 +172,20 @@ private void parent(MockHttpServletRequest result, RequestBuilder parent) {
171172
for (Map.Entry<String, String[]> parentParam : parentParams.entrySet()) {
172173
String paramName = parentParam.getKey();
173174
String[] paramValues = parentParam.getValue();
174-
result.addParameter(paramName, paramValues);
175+
request.addParameter(paramName, paramValues);
175176
}
176177

177178
// cookie
178179
Cookie[] parentCookies = parentRequest.getCookies();
179-
if (parentCookies != null) {
180-
result.setCookies(parentCookies);
180+
if (!ObjectUtils.isEmpty(parentCookies)) {
181+
request.setCookies(parentCookies);
181182
}
182183

183184
// request attribute
184185
Enumeration<String> parentAttrNames = parentRequest.getAttributeNames();
185186
while (parentAttrNames.hasMoreElements()) {
186187
String parentAttrName = parentAttrNames.nextElement();
187-
result.setAttribute(parentAttrName, parentRequest.getAttribute(parentAttrName));
188+
request.setAttribute(parentAttrName, parentRequest.getAttribute(parentAttrName));
188189
}
189190
}
190191

@@ -214,47 +215,47 @@ private void authType(MockHttpServletRequest request) {
214215
}
215216
}
216217

217-
private void content(MockHttpServletRequest result, String charset) {
218+
private void content(MockHttpServletRequest request, String charset) {
218219
String requestBody = this.webRequest.getRequestBody();
219220
if (requestBody == null) {
220221
return;
221222
}
222223
try {
223-
result.setContent(requestBody.getBytes(charset));
224+
request.setContent(requestBody.getBytes(charset));
224225
}
225226
catch (UnsupportedEncodingException e) {
226227
throw new RuntimeException(e);
227228
}
228229
}
229230

230-
private void contentType(MockHttpServletRequest result) {
231+
private void contentType(MockHttpServletRequest request) {
231232
String contentType = header("Content-Type");
232-
result.setContentType(contentType == null ? MediaType.ALL_VALUE.toString() : contentType);
233+
request.setContentType(contentType == null ? MediaType.ALL_VALUE.toString() : contentType);
233234
}
234235

235-
private void contextPath(MockHttpServletRequest result, UriComponents uriComponents) {
236+
private void contextPath(MockHttpServletRequest request, UriComponents uriComponents) {
236237
if (this.contextPath == null) {
237238
List<String> pathSegments = uriComponents.getPathSegments();
238239
if (pathSegments.isEmpty()) {
239-
result.setContextPath("");
240+
request.setContextPath("");
240241
}
241242
else {
242-
result.setContextPath("/" + pathSegments.get(0));
243+
request.setContextPath("/" + pathSegments.get(0));
243244
}
244245
}
245246
else {
246247
if (!uriComponents.getPath().startsWith(this.contextPath)) {
247248
throw new IllegalArgumentException(uriComponents.getPath() + " should start with contextPath "
248249
+ this.contextPath);
249250
}
250-
result.setContextPath(this.contextPath);
251+
request.setContextPath(this.contextPath);
251252
}
252253
}
253254

254-
private void cookies(MockHttpServletRequest result) {
255-
String cookieHeaderValue = header("Cookie");
256-
Cookie[] parentCookies = result.getCookies();
255+
private void cookies(MockHttpServletRequest request) {
257256
List<Cookie> cookies = new ArrayList<Cookie>();
257+
258+
String cookieHeaderValue = header("Cookie");
258259
if (cookieHeaderValue != null) {
259260
StringTokenizer tokens = new StringTokenizer(cookieHeaderValue, "=;");
260261
while (tokens.hasMoreTokens()) {
@@ -264,29 +265,32 @@ private void cookies(MockHttpServletRequest result) {
264265
+ "'. Full cookie was " + cookieHeaderValue);
265266
}
266267
String cookieValue = tokens.nextToken().trim();
267-
processCookie(result, cookies, new Cookie(cookieName, cookieValue));
268+
processCookie(request, cookies, new Cookie(cookieName, cookieValue));
268269
}
269270
}
270271

271272
Set<com.gargoylesoftware.htmlunit.util.Cookie> managedCookies = this.webClient.getCookies(this.webRequest.getUrl());
272273
for (com.gargoylesoftware.htmlunit.util.Cookie cookie : managedCookies) {
273-
processCookie(result, cookies, new Cookie(cookie.getName(), cookie.getValue()));
274+
processCookie(request, cookies, new Cookie(cookie.getName(), cookie.getValue()));
274275
}
276+
277+
Cookie[] parentCookies = request.getCookies();
275278
if (parentCookies != null) {
276279
for (Cookie cookie : parentCookies) {
277280
cookies.add(cookie);
278281
}
279282
}
280-
if (!cookies.isEmpty()) {
281-
result.setCookies(cookies.toArray(new Cookie[0]));
283+
284+
if (!ObjectUtils.isEmpty(cookies)) {
285+
request.setCookies(cookies.toArray(new Cookie[cookies.size()]));
282286
}
283287
}
284288

285-
private void processCookie(MockHttpServletRequest result, List<Cookie> cookies, Cookie cookie) {
289+
private void processCookie(MockHttpServletRequest request, List<Cookie> cookies, Cookie cookie) {
286290
cookies.add(cookie);
287291
if ("JSESSIONID".equals(cookie.getName())) {
288-
result.setRequestedSessionId(cookie.getValue());
289-
result.setSession(httpSession(result, cookie.getValue()));
292+
request.setRequestedSessionId(cookie.getValue());
293+
request.setSession(httpSession(request, cookie.getValue()));
290294
}
291295
}
292296

@@ -302,9 +306,9 @@ private String header(String headerName) {
302306
return this.webRequest.getAdditionalHeaders().get(headerName);
303307
}
304308

305-
private void headers(MockHttpServletRequest result) {
309+
private void headers(MockHttpServletRequest request) {
306310
for (Entry<String, String> header : this.webRequest.getAdditionalHeaders().entrySet()) {
307-
result.addHeader(header.getKey(), header.getValue());
311+
request.addHeader(header.getKey(), header.getValue());
308312
}
309313
}
310314

@@ -340,33 +344,33 @@ private com.gargoylesoftware.htmlunit.util.Cookie createCookie(MockHttpServletRe
340344
request.getContextPath() + "/", null, request.isSecure(), true);
341345
}
342346

343-
private void locales(MockHttpServletRequest result) {
347+
private void locales(MockHttpServletRequest request) {
344348
String locale = header("Accept-Language");
345349
if (locale == null) {
346-
result.addPreferredLocale(Locale.getDefault());
350+
request.addPreferredLocale(Locale.getDefault());
347351
}
348352
else {
349353
String[] locales = locale.split(", ");
350354
for (int i = locales.length - 1; i >= 0; i--) {
351-
result.addPreferredLocale(parseLocale(locales[i]));
355+
request.addPreferredLocale(parseLocale(locales[i]));
352356
}
353357
}
354358
}
355359

356-
private void params(MockHttpServletRequest result, UriComponents uriComponents) {
360+
private void params(MockHttpServletRequest request, UriComponents uriComponents) {
357361
for (Entry<String, List<String>> values : uriComponents.getQueryParams().entrySet()) {
358362
String name = values.getKey();
359363
for (String value : values.getValue()) {
360364
try {
361-
result.addParameter(name, URLDecoder.decode(value, "UTF-8"));
365+
request.addParameter(name, URLDecoder.decode(value, "UTF-8"));
362366
}
363367
catch (UnsupportedEncodingException e) {
364368
throw new RuntimeException(e);
365369
}
366370
}
367371
}
368372
for (NameValuePair param : this.webRequest.getRequestParameters()) {
369-
result.addParameter(param.getName(), param.getValue());
373+
request.addParameter(param.getName(), param.getValue());
370374
}
371375
}
372376

@@ -387,35 +391,35 @@ private Locale parseLocale(String locale) {
387391
return new Locale(language, country, qualifier);
388392
}
389393

390-
private void pathInfo(UriComponents uriComponents, MockHttpServletRequest result) {
391-
result.setPathInfo(null);
394+
private void pathInfo(UriComponents uriComponents, MockHttpServletRequest request) {
395+
request.setPathInfo(null);
392396
}
393397

394-
private void servletPath(MockHttpServletRequest result, String requestPath) {
395-
String servletPath = requestPath.substring(result.getContextPath().length());
398+
private void servletPath(MockHttpServletRequest request, String requestPath) {
399+
String servletPath = requestPath.substring(request.getContextPath().length());
396400
if ("".equals(servletPath)) {
397401
servletPath = null;
398402
}
399-
result.setServletPath(servletPath);
403+
request.setServletPath(servletPath);
400404
}
401405

402-
private void servletPath(UriComponents uriComponents, MockHttpServletRequest result) {
403-
if ("".equals(result.getPathInfo())) {
404-
result.setPathInfo(null);
406+
private void servletPath(UriComponents uriComponents, MockHttpServletRequest request) {
407+
if ("".equals(request.getPathInfo())) {
408+
request.setPathInfo(null);
405409
}
406-
servletPath(result, uriComponents.getPath());
410+
servletPath(request, uriComponents.getPath());
407411
}
408412

409-
private void ports(UriComponents uriComponents, MockHttpServletRequest result) {
413+
private void ports(UriComponents uriComponents, MockHttpServletRequest request) {
410414
int serverPort = uriComponents.getPort();
411-
result.setServerPort(serverPort);
415+
request.setServerPort(serverPort);
412416
if (serverPort == -1) {
413417
int portConnection = this.webRequest.getUrl().getDefaultPort();
414-
result.setLocalPort(serverPort);
415-
result.setRemotePort(portConnection);
418+
request.setLocalPort(serverPort);
419+
request.setRemotePort(portConnection);
416420
}
417421
else {
418-
result.setRemotePort(serverPort);
422+
request.setRemotePort(serverPort);
419423
}
420424
}
421425

@@ -457,8 +461,8 @@ private HtmlUnitMockHttpServletRequest(ServletContext servletContext, String met
457461
}
458462

459463
public HttpSession getSession(boolean create) {
460-
HttpSession result = super.getSession(false);
461-
if (result == null && create) {
464+
HttpSession session = super.getSession(false);
465+
if (session == null && create) {
462466
HtmlUnitMockHttpSession newSession = new HtmlUnitMockHttpSession(this);
463467
setSession(newSession);
464468
newSession.setNew(true);
@@ -467,9 +471,9 @@ public HttpSession getSession(boolean create) {
467471
HtmlUnitRequestBuilder.this.sessions.put(sessionid, newSession);
468472
}
469473
addSessionCookie(this, sessionid);
470-
result = newSession;
474+
session = newSession;
471475
}
472-
return result;
476+
return session;
473477
}
474478

475479
public HttpSession getSession() {

0 commit comments

Comments
 (0)