Repository: wicket
Updated Branches:
  refs/heads/wicket-7.x c21b09bc8 -> da4f51fba


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/da4f51fb
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/da4f51fb
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/da4f51fb

Branch: refs/heads/wicket-7.x
Commit: da4f51fba485fde0ed82ced19fe6ae0ac02513f8
Parents: c21b09b
Author: Pedro Henrique Oliveira dos Santos <[email protected]>
Authored: Sat Feb 4 19:11:51 2017 -0200
Committer: Pedro Henrique Oliveira dos Santos <[email protected]>
Committed: Sat Feb 4 19:11:51 2017 -0200

----------------------------------------------------------------------
 .../wicket/util/tester/BaseWicketTester.java    | 18 ++++-
 .../ListenerInterfaceRequestHandlerTest.java    | 73 ++++++++++++++------
 2 files changed, 67 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/da4f51fb/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 10c99ae..726ebe1 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
@@ -61,6 +61,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;
@@ -1108,8 +1109,21 @@ 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/da4f51fb/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 5bb53ee..b034396 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
@@ -35,9 +35,7 @@ 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;
@@ -45,9 +43,7 @@ import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
 import org.apache.wicket.util.resource.StringResourceStream;
 import org.apache.wicket.util.tester.WicketTestCase;
-import org.hamcrest.CoreMatchers;
 import org.junit.Test;
-import org.mockito.Mockito;
 
 /**
  * Tests for {@link ListenerInterfaceRequestHandler}
@@ -64,8 +60,8 @@ 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");
@@ -106,8 +102,8 @@ 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",
@@ -167,19 +163,38 @@ public class ListenerInterfaceRequestHandlerTest extends 
WicketTestCase
        }
 
        @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 +202,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