You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by sv...@apache.org on 2019/02/18 19:14:39 UTC
[wicket] branch master updated: WICKET-6637 clear scheduled handler
This is an automated email from the ASF dual-hosted git repository.
svenmeier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/wicket.git
The following commit(s) were added to refs/heads/master by this push:
new 3704144 WICKET-6637 clear scheduled handler
3704144 is described below
commit 3704144b73521c6b10de5fa7864773230762e86c
Author: Sven Meier <sv...@apache.org>
AuthorDate: Mon Feb 18 19:05:20 2019 +0100
WICKET-6637 clear scheduled handler
after resolving handler
---
.../apache/wicket/request/cycle/RequestCycle.java | 4 +-
.../request/cycle/RequestCycleListenerTest.java | 70 ++++++++++++++++------
2 files changed, 55 insertions(+), 19 deletions(-)
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java b/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java
index 37b63b0..38b7f93 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java
@@ -312,8 +312,6 @@ public class RequestCycle implements IRequestCycle, IEventSink, IMetadataContext
*/
private boolean executeExceptionRequestHandler(Exception exception, int retryCount)
{
- scheduleRequestHandlerAfterCurrent(null);
-
IRequestHandler handler = handleException(exception);
if (handler == null)
{
@@ -321,6 +319,8 @@ public class RequestCycle implements IRequestCycle, IEventSink, IMetadataContext
return false;
}
+ scheduleRequestHandlerAfterCurrent(null);
+
try
{
listeners.onExceptionRequestHandlerResolved(this, handler, exception);
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestCycleListenerTest.java b/wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestCycleListenerTest.java
index e6f3c45..caa89f9 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestCycleListenerTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestCycleListenerTest.java
@@ -19,10 +19,14 @@ package org.apache.wicket.request.cycle;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
+import java.util.function.Consumer;
+
import org.apache.wicket.Application;
import org.apache.wicket.ThreadContext;
+import org.apache.wicket.WicketRuntimeException;
import org.apache.wicket.mock.MockWebRequest;
import org.apache.wicket.protocol.http.mock.MockServletContext;
import org.apache.wicket.request.IExceptionMapper;
@@ -33,6 +37,7 @@ import org.apache.wicket.request.Request;
import org.apache.wicket.request.RequestHandlerExecutor.ReplaceHandlerException;
import org.apache.wicket.request.Response;
import org.apache.wicket.request.Url;
+import org.apache.wicket.request.handler.EmptyRequestHandler;
import org.apache.wicket.resource.DummyApplication;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
@@ -73,8 +78,7 @@ class RequestCycleListenerTest extends RequestHandlerExecutorTest
ThreadContext.detach();
}
-
- private RequestCycle newRequestCycle(final RuntimeException exception)
+ private RequestCycle newRequestCycle(final Consumer<IRequestCycle> cycleConsumer)
{
final Response originalResponse = newResponse();
Request request = new MockWebRequest(Url.parse("http://wicket.apache.org"));
@@ -83,10 +87,8 @@ class RequestCycleListenerTest extends RequestHandlerExecutorTest
@Override
public void respond(IRequestCycle requestCycle)
{
- if (exception != null)
- {
- throw exception;
- }
+ cycleConsumer.accept(requestCycle);
+
responses++;
}
@@ -147,7 +149,7 @@ class RequestCycleListenerTest extends RequestHandlerExecutorTest
IncrementingListener incrementingListener = new IncrementingListener();
Application.get().getRequestCycleListeners().add(incrementingListener);
- RequestCycle cycle = newRequestCycle((RuntimeException)null);
+ RequestCycle cycle = newRequestCycle(rc -> {});
incrementingListener.assertValues(0, 0, 0, 0, 0, 0);
assertValues(0, 0, 0);
@@ -158,7 +160,7 @@ class RequestCycleListenerTest extends RequestHandlerExecutorTest
assertValues(0, 1, 1);
// TEST WITH TWO LISTENERS
- cycle = newRequestCycle((RuntimeException)null);
+ cycle = newRequestCycle(rc -> {});
cycle.getListeners().add(incrementingListener);
assertTrue(cycle.processRequestAndDetach());
// 0 exceptions mapped, all other 2 due to two listeners
@@ -168,7 +170,7 @@ class RequestCycleListenerTest extends RequestHandlerExecutorTest
// TEST WITH TWO LISTENERS AND AN EXCEPTION DURING RESPONSE
- cycle = newRequestCycle(new RuntimeException("testing purposes only"));
+ cycle = newRequestCycle(rc -> { throw new RuntimeException("testing purposes only"); });
cycle.getListeners().add(incrementingListener);
assertFalse(cycle.processRequestAndDetach());
// 0 executed
@@ -192,7 +194,7 @@ class RequestCycleListenerTest extends RequestHandlerExecutorTest
detaches++;
}
};
- cycle = newRequestCycle(new ReplaceHandlerException(replacement, true));
+ cycle = newRequestCycle(rc -> { throw new ReplaceHandlerException(replacement, true); });
cycle.scheduleRequestHandlerAfterCurrent(new IRequestHandler()
{
@Override
@@ -210,12 +212,12 @@ class RequestCycleListenerTest extends RequestHandlerExecutorTest
assertTrue(cycle.processRequestAndDetach());
// 2 resolved, 1 executed, 0 exception mapped
incrementingListener.assertValues(1, 1, 2, 1, 0, 1);
- // 0 exception mapped, 1 responded, 2 detached
+ // 0 exception mapped, 1 responded, 2 detached
assertValues(0, 1, 2);
// TEST A REPLACE EXCEPTION DURING RESPONSE
- cycle = newRequestCycle(new ReplaceHandlerException(replacement, false));
+ cycle = newRequestCycle(rc -> { throw new ReplaceHandlerException(replacement, false); });
cycle.scheduleRequestHandlerAfterCurrent(new IRequestHandler()
{
@Override
@@ -233,7 +235,7 @@ class RequestCycleListenerTest extends RequestHandlerExecutorTest
assertTrue(cycle.processRequestAndDetach());
// 2 resolved, 2 executed, 0 exception mapped
incrementingListener.assertValues(1, 1, 3, 2, 0, 1);
- // 0 exception mapped, 2 responded, 3 detached
+ // 0 exception mapped, 2 responded, 3 detached
assertValues(0, 2, 3);
}
@@ -245,7 +247,7 @@ class RequestCycleListenerTest extends RequestHandlerExecutorTest
Application.get().getRequestCycleListeners().add(incrementingListener);
Application.get().getRequestCycleListeners().add(new ErrorCodeListener(401));
- RequestCycle cycle = newRequestCycle(new RuntimeException("testing purposes only"));
+ RequestCycle cycle = newRequestCycle(rc -> { throw new RuntimeException("testing purposes only"); });
assertTrue(cycle.processRequestAndDetach());
assertEquals(401, errorCode);
@@ -263,7 +265,7 @@ class RequestCycleListenerTest extends RequestHandlerExecutorTest
Application.get().getRequestCycleListeners().add(new ErrorCodeListener(401));
Application.get().getRequestCycleListeners().add(new ErrorCodeListener(402));
- RequestCycle cycle = newRequestCycle(new RuntimeException("testing purposes only"));
+ RequestCycle cycle = newRequestCycle(rc -> { throw new RuntimeException("testing purposes only"); });
assertTrue(cycle.processRequestAndDetach());
// the first handler returned is used to handle the exception
@@ -276,9 +278,43 @@ class RequestCycleListenerTest extends RequestHandlerExecutorTest
{
Application.get().getRequestCycleListeners().add(new RepeatListener());
- RequestCycle cycle = newRequestCycle(new RuntimeException("testing purposes only"));
+ RequestCycle cycle = newRequestCycle(requestCycle -> { throw new RuntimeException("testing purposes only"); });
assertFalse(cycle.processRequestAndDetach());
}
+
+ @Test
+ void scheduledHandlerAvailableForExceptionListener()
+ {
+ IRequestHandler scheduledHandler = new EmptyRequestHandler();
+
+ Application.get().getRequestCycleListeners().add(new IRequestCycleListener()
+ {
+ @Override
+ public IRequestHandler onException(RequestCycle cycle, Exception ex)
+ {
+ // scheduled still scheduled
+ assertEquals(scheduledHandler, cycle.find(scheduledHandler.getClass()).get());
+
+ return new IRequestHandler()
+ {
+ @Override
+ public void respond(IRequestCycle requestCycle)
+ {
+ // no longer scheduled
+ assertNull(((RequestCycle)requestCycle).getRequestHandlerScheduledAfterCurrent());
+ }
+ };
+ }
+ });
+
+ RequestCycle cycle = newRequestCycle(requestCycle ->
+ {
+ // schedule and fail immediately
+ requestCycle.scheduleRequestHandlerAfterCurrent(scheduledHandler);
+ throw new WicketRuntimeException();
+ });
+ assertTrue(cycle.processRequestAndDetach());
+ }
/**
* @throws Exception
@@ -288,7 +324,7 @@ class RequestCycleListenerTest extends RequestHandlerExecutorTest
{
// this test is a little flaky because it depends on the ordering of listeners which is not
// guaranteed
- RequestCycle cycle = newRequestCycle((RuntimeException)null);
+ RequestCycle cycle = newRequestCycle(rc -> {});
IncrementingListener incrementingListener = new IncrementingListener()
{
@Override