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