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(); } }
