/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package response;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import org.apache.wicket.Page;
import org.apache.wicket.WicketTestCase;
import org.apache.wicket.protocol.http.MockWebApplication;
import org.apache.wicket.protocol.http.WebRequestCycle;
import org.apache.wicket.request.target.component.BookmarkablePageRequestTarget;
import org.apache.wicket.response.StringResponse;
import org.apache.wicket.settings.IExceptionSettings;

public class StringResponseTest extends WicketTestCase
{
	public void testBrokenPage() {
		tester.setupRequestAndResponse();
		tester.getApplication().getRequestCycleSettings().setUnexpectedExceptionDisplay(IExceptionSettings.SHOW_EXCEPTION_PAGE);

		WebRequestCycle cycle = tester.createRequestCycle();
		cycle.setResponse(new StringResponse());
		try
		{
			cycle.request(new BookmarkablePageRequestTarget(BrokenPage.class));
			Method method = MockWebApplication.class.getDeclaredMethod("generateLastRenderedPage", new Class[]{WebRequestCycle.class});
			method.setAccessible(true);
			Page page = (Page)method.invoke(tester, new Object[]{cycle});
			WebRequestCycle cycle2 = tester.createRequestCycle();
			cycle2.setResponse(new StringResponse());
			page.render();
		}
		catch (IllegalArgumentException e)
		{
			throw new RuntimeException(e);
		}
		catch (IllegalAccessException e)
		{
			throw new RuntimeException(e);
		}
		catch (InvocationTargetException e)
		{
			throw new RuntimeException(e);
		}
		catch (SecurityException e)
		{
			throw new RuntimeException(e);
		}
		catch (NoSuchMethodException e)
		{
			throw new RuntimeException(e);
		}
		finally
		{
			cycle.getResponse().close();
		}
	}
}

@@ -969,24 +969,87 @@
 etTestCase;%0A
+import org.apache.wicket.markup.html.pages.ExceptionErrorPage;%0A
 import org.a
@@ -1690,24 +1690,143 @@
 ;%0A%09%09try%0A%09%09%7B%0A
+%09%09%09// Decompose processRequestCycle() as error pages are not rendered in WicketTester, the exception is thrown instead%0A
 %09%09%09cycle.req
@@ -2107,16 +2107,104 @@
 ycle%7D);%0A
+%09%09%09assertTrue(%22Page is not an ExceptionErrorPage%22, page instanceof ExceptionErrorPage);%0A
 %09%09%09WebRe
@@ -2297,16 +2297,76 @@
 nse());%0A
+%09%09%09// Render the error page to exercise configureResponse()%0A
 %09%09%09page.

Add some comments