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 18:51:50 UTC
[wicket] branch wicket-8.x updated: WICKET-6637 clear scheduled
handler
This is an automated email from the ASF dual-hosted git repository.
svenmeier pushed a commit to branch wicket-8.x
in repository https://gitbox.apache.org/repos/asf/wicket.git
The following commit(s) were added to refs/heads/wicket-8.x by this push:
new d76695e WICKET-6637 clear scheduled handler
d76695e is described below
commit d76695ed9561aac21059d7c11ed69a12a9defe58
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 | 69 +++++++++++++++++-----
2 files changed, 55 insertions(+), 18 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 5e864bf..1a88ba3 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
@@ -311,8 +311,6 @@ public class RequestCycle implements IRequestCycle, IEventSink
*/
private boolean executeExceptionRequestHandler(Exception exception, int retryCount)
{
- scheduleRequestHandlerAfterCurrent(null);
-
IRequestHandler handler = handleException(exception);
if (handler == null)
{
@@ -320,6 +318,8 @@ public class RequestCycle implements IRequestCycle, IEventSink
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 3530421..82466fa 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.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.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.After;
import org.junit.Before;
@@ -73,8 +78,7 @@ public 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 @@ public class RequestCycleListenerTest extends RequestHandlerExecutorTest
@Override
public void respond(IRequestCycle requestCycle)
{
- if (exception != null)
- {
- throw exception;
- }
+ cycleConsumer.accept(requestCycle);
+
responses++;
}
@@ -147,7 +149,7 @@ public 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 @@ public 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 @@ public 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 @@ public class RequestCycleListenerTest extends RequestHandlerExecutorTest
detaches++;
}
};
- cycle = newRequestCycle(new ReplaceHandlerException(replacement, true));
+ cycle = newRequestCycle(rc -> { throw new ReplaceHandlerException(replacement, true); });
cycle.scheduleRequestHandlerAfterCurrent(new IRequestHandler()
{
@Override
@@ -215,7 +217,7 @@ public class RequestCycleListenerTest extends RequestHandlerExecutorTest
// 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 @@ public 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 @@ public 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,8 +265,9 @@ public 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());
+ cycle.processRequestAndDetach();
// the first handler returned is used to handle the exception
assertEquals(401, errorCode);
@@ -276,9 +279,43 @@ public 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
+ public 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 +325,7 @@ public 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