Repository: wicket
Updated Branches:
  refs/heads/wicket-6.x 3ac7cfcc9 -> dc6b2f4f5


WICKET-6316 encoding bookmarkable URLs for stateless pages in wicket tester


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/dc6b2f4f
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/dc6b2f4f
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/dc6b2f4f

Branch: refs/heads/wicket-6.x
Commit: dc6b2f4f5dbfb262a52f5ff403ec04e2c73ba82f
Parents: 3ac7cfc
Author: Pedro Henrique Oliveira dos Santos <[email protected]>
Authored: Sat Feb 4 19:04:09 2017 -0200
Committer: Pedro Henrique Oliveira dos Santos <[email protected]>
Committed: Sat Feb 4 19:04:09 2017 -0200

----------------------------------------------------------------------
 .../wicket/util/tester/BaseWicketTester.java    | 20 ++++-
 .../ListenerInterfaceRequestHandlerTest.java    | 90 +++++++++++++-------
 2 files changed, 76 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/dc6b2f4f/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java 
b/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
index 4e4332b..7c58bcf 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
@@ -39,8 +39,6 @@ import javax.servlet.ServletContext;
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpSession;
 
-import junit.framework.AssertionFailedError;
-
 import org.apache.wicket.Application;
 import org.apache.wicket.Component;
 import org.apache.wicket.IPageManagerProvider;
@@ -62,6 +60,7 @@ import org.apache.wicket.ajax.markup.html.AjaxLink;
 import org.apache.wicket.ajax.markup.html.IAjaxLink;
 import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
 import org.apache.wicket.behavior.AbstractAjaxBehavior;
+import 
org.apache.wicket.core.request.handler.BookmarkableListenerInterfaceRequestHandler;
 import org.apache.wicket.core.request.handler.BookmarkablePageRequestHandler;
 import org.apache.wicket.core.request.handler.IPageProvider;
 import org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler;
@@ -138,6 +137,8 @@ import org.apache.wicket.util.visit.IVisitor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import junit.framework.AssertionFailedError;
+
 /**
  * A helper class to ease unit testing of Wicket applications without the need 
for a servlet
  * container. See javadoc of <code>WicketTester</code> for example usage. This 
class can be used as
@@ -1092,8 +1093,19 @@ public class BaseWicketTester
 
                // there are two ways to do this. RequestCycle could be forced 
to call the handler
                // directly but constructing and parsing the URL increases the 
chance of triggering bugs
-               IRequestHandler handler = new 
ListenerInterfaceRequestHandler(new PageAndComponentProvider(
-                       component.getPage(), component), listener);
+               Page page = component.getPage();
+               PageAndComponentProvider pageAndComponentProvider = new 
PageAndComponentProvider(page,
+                               component);
+
+               IRequestHandler handler = null;
+               if (page.isPageStateless() || (page.isBookmarkable() && 
page.wasCreatedBookmarkable()))
+               {
+                       handler = new 
BookmarkableListenerInterfaceRequestHandler(pageAndComponentProvider, listener);
+               }
+               else
+               {
+                       handler = new 
ListenerInterfaceRequestHandler(pageAndComponentProvider, listener);
+               }
 
                Url url = urlFor(handler);
                request.setUrl(url);

http://git-wip-us.apache.org/repos/asf/wicket/blob/dc6b2f4f/wicket-core/src/test/java/org/apache/wicket/core/request/handler/ListenerInterfaceRequestHandlerTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/core/request/handler/ListenerInterfaceRequestHandlerTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/ListenerInterfaceRequestHandlerTest.java
index 306d65e..ce54361 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/core/request/handler/ListenerInterfaceRequestHandlerTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/ListenerInterfaceRequestHandlerTest.java
@@ -36,18 +36,14 @@ import org.apache.wicket.markup.Markup;
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.form.IOnChangeListener;
 import org.apache.wicket.markup.html.link.ILinkListener;
-import org.apache.wicket.markup.html.link.Link;
 import org.apache.wicket.markup.html.link.StatelessLink;
-import org.apache.wicket.request.IRequestCycle;
 import org.apache.wicket.request.Url;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.resource.DummyPage;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
 import org.apache.wicket.util.resource.StringResourceStream;
-import org.hamcrest.CoreMatchers;
 import org.junit.Test;
-import org.mockito.Mockito;
 
 /**
  * Tests for {@link ListenerInterfaceRequestHandler}
@@ -64,15 +60,15 @@ public class ListenerInterfaceRequestHandlerTest extends 
WicketTestCase
                // non-existing component on fresh page is ignored
                PageAndComponentProvider freshPage = new 
PageAndComponentProvider(DummyPage.class, null,
                                "foo");
-               new ListenerInterfaceRequestHandler(freshPage, 
IOnChangeListener.INTERFACE).respond(tester
-                               .getRequestCycle());
+               new ListenerInterfaceRequestHandler(freshPage, 
IOnChangeListener.INTERFACE)
+                               .respond(tester.getRequestCycle());
 
                // non-existing component on old page fails
                PageAndComponentProvider oldPage = new 
PageAndComponentProvider(new DummyPage(), "foo");
                try
                {
-                       new ListenerInterfaceRequestHandler(oldPage, 
IOnChangeListener.INTERFACE).respond(tester
-                                       .getRequestCycle());
+                       new ListenerInterfaceRequestHandler(oldPage, 
IOnChangeListener.INTERFACE)
+                                       .respond(tester.getRequestCycle());
                        fail();
                }
                catch (WicketRuntimeException ex)
@@ -106,18 +102,19 @@ public class ListenerInterfaceRequestHandlerTest extends 
WicketTestCase
                assertTrue("A new page must be create ", lastRenderedPageId > 
initialPageId);
        }
 
-       private void executeAjaxUrlWithLastBaseUrl(Url url) throws IOException,
-               ResourceStreamNotFoundException, ParseException
+       private void executeAjaxUrlWithLastBaseUrl(Url url)
+                       throws IOException, ResourceStreamNotFoundException, 
ParseException
        {
                tester.getRequest().setUrl(url);
                tester.getRequest().addHeader("Wicket-Ajax-BaseURL",
-                       tester.getWicketAjaxBaseUrlEncodedInLastResponse());
+                               
tester.getWicketAjaxBaseUrlEncodedInLastResponse());
                tester.getRequest().addHeader("Wicket-Ajax", "true");
                tester.processRequest();
        }
 
        /**
-        * Test page for 
#recreateThePageWhenListenereInterfaceIsExecutedOnExpiredPage()
+        * Test page for
+        * #recreateThePageWhenListenereInterfaceIsExecutedOnExpiredPage()
         */
        public static class AjaxLinkExpirePage extends WebPage implements 
IMarkupResourceStreamProvider
        {
@@ -144,11 +141,11 @@ public class ListenerInterfaceRequestHandlerTest extends 
WicketTestCase
 
                @Override
                public IResourceStream getMarkupResourceStream(MarkupContainer 
container,
-                       Class<?> containerClass)
+                               Class<?> containerClass)
                {
 
                        return new StringResourceStream(
-                               "<html><body><a 
wicket:id='test'>Link</a></body></html>");
+                                       "<html><body><a 
wicket:id='test'>Link</a></body></html>");
                }
 
        }
@@ -161,25 +158,44 @@ public class ListenerInterfaceRequestHandlerTest extends 
WicketTestCase
        {
                PageAndComponentProvider provider = new 
PageAndComponentProvider(Page.class, "link");
                ListenerInterfaceRequestHandler handler = new 
ListenerInterfaceRequestHandler(provider,
-                       
RequestListenerInterface.forName(ILinkListener.class.getSimpleName()));
+                               
RequestListenerInterface.forName(ILinkListener.class.getSimpleName()));
                assertFalse("Handler should not report a page instance is 
available ",
-                       handler.isPageInstanceCreated());
+                               handler.isPageInstanceCreated());
        }
 
        @Test
-       public void skipListenerIfExpiredPage()
+       public void executeStatelessLinkInAFreshPage()
        {
-               
tester.getApplication().getRootRequestMapperAsCompound().add(new 
MountedMapper("/segment", NotExpiredPage.class));
-               tester.startPage(NotExpiredPage.class);
+               tester.startPage(StatelessPage.class);
+
+               tester.clickLink("statelessLink");
+
+               StatelessPage page = 
(StatelessPage)tester.getLastRenderedPage();
+               assertThat(page.invoked, is(true));
+               assertThat(page.executedInAnFreshPage, is(true));
+       }
+
+       @Test
+       public void executeStatelessLinkInAFreshPageAtASegment()
+       {
+               tester.getApplication().getRootRequestMapperAsCompound()
+                               .add(new MountedMapper("/segment", 
TemporarilyStateful.class));
+               tester.startPage(TemporarilyStateful.class);
+
                tester.clickLink("statelessLink");
-               NotExpiredPage page = 
(NotExpiredPage)tester.getLastRenderedPage();
+
+               TemporarilyStateful page = 
(TemporarilyStateful)tester.getLastRenderedPage();
                assertThat(page.invoked, is(true));
+               assertThat(page.executedInAnFreshPage, is(true));
        }
 
-       public static class NotExpiredPage extends WebPage
+       public static class StatelessPage extends WebPage
        {
                public boolean invoked;
-               public NotExpiredPage(PageParameters pageParameters)
+               public boolean executedInAnFreshPage;
+               private boolean initialState = true;
+
+               public StatelessPage(PageParameters pageParameters)
                {
                        super(pageParameters);
                        add(new StatelessLink<Object>("statelessLink")
@@ -187,24 +203,38 @@ public class ListenerInterfaceRequestHandlerTest extends 
WicketTestCase
                                public void onClick()
                                {
                                        invoked = true;
-                               }
-                       });
-                       add(new Link<Object>("statefullLink")
-                       {
-                               public void onClick()
-                               {
+                                       executedInAnFreshPage = initialState;
                                }
                        });
                }
+
                @Override
                public IMarkupFragment getMarkup()
                {
-                       return Markup.of("<html><body><a 
wicket:id=\"statelessLink\"></a><a 
wicket:id=\"statefullLink\"></a></body></html>");
+                       return Markup.of("<html><body><a 
wicket:id=\"statelessLink\"></a></body></html>");
+               }
+
+               @Override
+               protected void onBeforeRender()
+               {
+                       initialState = false;
+                       super.onBeforeRender();
                }
+       }
+       public static class TemporarilyStateful extends StatelessPage
+       {
+
+               public TemporarilyStateful(PageParameters pageParameters)
+               {
+                       super(pageParameters);
+                       setStatelessHint(false);
+               }
+
+
                @Override
                protected void onBeforeRender()
                {
-                       get("statefullLink").setVisible(false);
+                       setStatelessHint(true);
                        super.onBeforeRender();
                }
        }

Reply via email to