in wicket-tester/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java [684:793]
protected boolean processRequest(final MockHttpServletRequest forcedRequest,
final IRequestHandler forcedRequestHandler, final boolean redirect)
{
if (forcedRequest != null)
{
request = forcedRequest;
}
forcedHandler = forcedRequestHandler;
if (!redirect && getRequest().getHeader("Wicket-Ajax") == null)
{
lastRenderedPage = null;
}
// Add or replace any system provided header entry with the user provided.
if ((request != null) && (preHeader != null))
{
for (Map.Entry<String, String> entry : preHeader.entrySet())
{
if (Strings.isEmpty(entry.getKey()) == false)
{
request.setHeader(entry.getKey(), entry.getValue());
}
}
// Reset the user provided headers
preHeader = null;
}
applyRequest();
requestCycle.scheduleRequestHandlerAfterCurrent(null);
try
{
if (!requestCycle.processRequestAndDetach())
{
return false;
}
}
finally
{
recordRequestResponse();
setupNextRequestCycle();
}
try
{
if (isFollowRedirects() && lastResponse.isRedirect())
{
if (redirectCount++ >= 100)
{
throw new AssertionError("Possible infinite redirect detected. Bailing out.");
}
Url newUrl = Url.parse(lastResponse.getRedirectLocation(),
Charset.forName(request.getCharacterEncoding()));
if (isExternalRedirect(lastRequest.getUrl(), newUrl))
{
// we can't handle external redirects here
// just bail out here and let the user's test code
// check #assertRedirectUrl
return true;
}
if (newUrl.isFull() || newUrl.isContextAbsolute())
{
request.setUrl(newUrl);
final String protocol = newUrl.getProtocol();
if (protocol != null)
{
request.setScheme(protocol);
}
request.setSecure("https".equals(protocol));
if (newUrl.getHost() != null)
{
request.setServerName(newUrl.getHost());
}
if (newUrl.getPort() != null)
{
request.setServerPort(newUrl.getPort());
}
}
else
{
// append redirect URL to current URL (what browser would do)
Url mergedURL = new Url(lastRequest.getUrl().getSegments(),
newUrl.getQueryParameters());
mergedURL.concatSegments(newUrl.getSegments());
request.setUrl(mergedURL);
}
processRequest(null, null, true);
--redirectCount;
}
return true;
}
finally
{
redirectCount = 0;
}
}