Author: dashorst
Date: Tue Apr 26 12:24:45 2011
New Revision: 1096739

URL: http://svn.apache.org/viewvc?rev=1096739&view=rev
Log:
No more calling of requestcyclelistener#onScheduleHandler with null handler
Issue: WICKET-3646

Modified:
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java
    
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderApplication.java
    
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderPage.html
    
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderPage.java
    
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderTest.java
    
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestCycleListenerTest.java

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java?rev=1096739&r1=1096738&r2=1096739&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java
 (original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java
 Tue Apr 26 12:24:45 2011
@@ -668,7 +668,10 @@ public class RequestCycle implements IRe
        {
                // just delegating the call to {@link IRequestHandlerExecutor} 
and invoking listeners
                requestHandlerExecutor.schedule(handler);
-               listeners.onRequestHandlerScheduled(handler);
+
+               // only forward calls to the listeners when handler is null
+               if (handler != null)
+                       listeners.onRequestHandlerScheduled(handler);
        }
 
        /**

Modified: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderApplication.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderApplication.java?rev=1096739&r1=1096738&r2=1096739&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderApplication.java
 (original)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderApplication.java
 Tue Apr 26 12:24:45 2011
@@ -88,5 +88,11 @@ class MultiRequestCycleListenerCallOrder
                        callSequence.add(name + ".onException");
                        return null;
                }
+
+               @Override
+               public String toString()
+               {
+                       return "Listener " + name;
+               }
        }
 }

Modified: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderPage.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderPage.html?rev=1096739&r1=1096738&r2=1096739&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderPage.html
 (original)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderPage.html
 Tue Apr 26 12:24:45 2011
@@ -3,5 +3,7 @@
        <head>
        </head>
        <body>
+               <a href="#" wicket:id="link">Click me to start global 
thermonuclear war</a>
+               <a href="#" wicket:id="ajax">Click me to start global 
thermonuclear war with that new spanking ajax technology</a>
        </body>
 </html>

Modified: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderPage.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderPage.java?rev=1096739&r1=1096738&r2=1096739&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderPage.java
 (original)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderPage.java
 Tue Apr 26 12:24:45 2011
@@ -16,13 +16,40 @@
  */
 package org.apache.wicket.request.cycle;
 
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.AjaxLink;
 import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.link.Link;
 
-class MultiRequestCycleListenerCallOrderPage extends WebPage
+/**
+ */
+public class MultiRequestCycleListenerCallOrderPage extends WebPage
 {
        private static final long serialVersionUID = 1L;
 
+       /**
+        * Construct.
+        */
        public MultiRequestCycleListenerCallOrderPage()
        {
+               add(new Link<Void>("link")
+               {
+                       private static final long serialVersionUID = 1L;
+
+                       @Override
+                       public void onClick()
+                       {
+                       }
+               });
+
+               add(new AjaxLink<Void>("ajax")
+               {
+                       private static final long serialVersionUID = 1L;
+
+                       @Override
+                       public void onClick(AjaxRequestTarget target)
+                       {
+                       }
+               });
        }
 }

Modified: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderTest.java?rev=1096739&r1=1096738&r2=1096739&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderTest.java
 (original)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderTest.java
 Tue Apr 26 12:24:45 2011
@@ -17,9 +17,10 @@
 package org.apache.wicket.request.cycle;
 
 import static java.util.Arrays.asList;
-import static org.hamcrest.CoreMatchers.equalTo;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.List;
 
 import org.apache.wicket.util.tester.WicketTester;
 import org.junit.Before;
@@ -35,30 +36,114 @@ public class MultiRequestCycleListenerCa
        private MultiRequestCycleListenerCallOrderApplication application;
 
        /**
-        * setUp()
         */
        @Before
        public void setUp()
        {
                application = new 
MultiRequestCycleListenerCallOrderApplication();
                tester = new WicketTester(application);
+               application.callSequence.clear();
        }
 
        /**
-        * callSequenceIsFirstInLastOut()
         */
        @Test
-       public void callSequenceIsFirstInLastOut()
+       public void bookmarkableCallSequenceIsFirstInLastOut()
+       {
+               // start and render the test page
+               tester.startPage(MultiRequestCycleListenerCallOrderPage.class);
+
+               // assert rendered page class
+               
tester.assertRenderedPage(MultiRequestCycleListenerCallOrderPage.class);
+
+               List<String> primaryRequest = asList("first.onBeginRequest", 
"second.onBeginRequest",
+                       "first.onRequestHandlerResolved", 
"second.onRequestHandlerResolved",
+                       "second.onEndRequest", "first.onEndRequest", 
"second.onDetach", "first.onDetach");
+               List<String> redirectRequest = asList("first.onBeginRequest", 
"second.onBeginRequest",
+                       "first.onRequestHandlerResolved", 
"second.onRequestHandlerResolved",
+                       "second.onEndRequest", "first.onEndRequest", 
"second.onDetach", "first.onDetach");
+
+               List<String> expected = new ArrayList<String>();
+               expected.addAll(primaryRequest);
+               expected.addAll(redirectRequest);
+               assertEquals(expected.toString(), 
application.callSequence.toString());
+       }
+
+       /**
+        */
+       @Test
+       public void sessionRelativePageRequestCallSequenceIsFirstInLastOut()
        {
                // start and render the test page
                tester.startPage(new MultiRequestCycleListenerCallOrderPage());
                // assert rendered page class
                
tester.assertRenderedPage(MultiRequestCycleListenerCallOrderPage.class);
 
-               assertThat(
-                       application.callSequence,
-                       is(equalTo(asList("first.onBeginRequest", 
"second.onBeginRequest",
-                               "first.onRequestHandlerResolved", 
"second.onRequestHandlerResolved",
-                               "second.onEndRequest", "first.onEndRequest", 
"second.onDetach", "first.onDetach"))));
+               List<String> primaryRequest = asList("first.onBeginRequest", 
"second.onBeginRequest",
+                       "first.onRequestHandlerResolved", 
"second.onRequestHandlerResolved",
+                       "second.onEndRequest", "first.onEndRequest", 
"second.onDetach", "first.onDetach");
+               List<String> redirectRequest = asList("first.onBeginRequest", 
"second.onBeginRequest",
+                       "first.onRequestHandlerResolved", 
"second.onRequestHandlerResolved",
+                       "second.onEndRequest", "first.onEndRequest", 
"second.onDetach", "first.onDetach");
+
+               List<String> expected = new ArrayList<String>();
+               expected.addAll(primaryRequest);
+               expected.addAll(redirectRequest);
+               assertEquals(expected.toString(), 
application.callSequence.toString());
+       }
+
+       /**
+        */
+       @Test
+       public void linkListenerCallSequenceIsFirstInLastOut()
+       {
+               // start and render the test page
+               tester.startPage(new MultiRequestCycleListenerCallOrderPage());
+               // assert rendered page class
+               
tester.assertRenderedPage(MultiRequestCycleListenerCallOrderPage.class);
+
+               application.callSequence.clear();
+
+               tester.clickLink("link");
+
+               List<String> primaryRequest = asList("first.onBeginRequest", 
"second.onBeginRequest",
+                       "first.onRequestHandlerResolved", 
"second.onRequestHandlerResolved",
+                       "first.onRequestHandlerScheduled", 
"second.onRequestHandlerScheduled",
+                       "second.onEndRequest", "first.onEndRequest", 
"second.onDetach", "first.onDetach");
+               List<String> redirectRequest = asList("first.onBeginRequest", 
"second.onBeginRequest",
+                       "first.onRequestHandlerResolved", 
"second.onRequestHandlerResolved",
+                       "second.onEndRequest", "first.onEndRequest", 
"second.onDetach", "first.onDetach");
+
+               List<String> expected = new ArrayList<String>();
+               expected.addAll(primaryRequest);
+               expected.addAll(redirectRequest);
+
+               assertEquals(expected.toString(), 
application.callSequence.toString());
+       }
+
+       /**
+        */
+       @Test
+       public void ajaxlinkListenerCallSequenceIsFirstInLastOut()
+       {
+               // start and render the test page
+               tester.startPage(new MultiRequestCycleListenerCallOrderPage());
+               // assert rendered page class
+               
tester.assertRenderedPage(MultiRequestCycleListenerCallOrderPage.class);
+
+               application.callSequence.clear();
+
+               tester.clickLink("ajax", true);
+
+               List<String> primaryRequest = asList("first.onBeginRequest", 
"second.onBeginRequest",
+                       "first.onRequestHandlerResolved", 
"second.onRequestHandlerResolved",
+                       "first.onRequestHandlerScheduled", 
"second.onRequestHandlerScheduled",
+                       "second.onEndRequest", "first.onEndRequest", 
"second.onDetach", "first.onDetach");
+
+               // with ajax requests we don't expect a redirect
+               List<String> expected = new ArrayList<String>();
+               expected.addAll(primaryRequest);
+
+               assertEquals(expected.toString(), 
application.callSequence.toString());
        }
 }

Modified: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestCycleListenerTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestCycleListenerTest.java?rev=1096739&r1=1096738&r2=1096739&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestCycleListenerTest.java
 (original)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestCycleListenerTest.java
 Tue Apr 26 12:24:45 2011
@@ -197,7 +197,7 @@ public class RequestCycleListenerTest ex
 
                assertEquals(401, errorCode);
                assertEquals(1, incrementingListener.exceptionResolutions);
-               assertEquals(1, incrementingListener.schedules);
+               assertEquals(0, incrementingListener.schedules);
 
                // two listeners that return a request handler should cause an 
exception
                Application.get().getRequestCycleListeners().add(new 
ErrorCodeListener(401));


Reply via email to