protected boolean processRequest()

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;
		}
	}