Author: pedro
Date: Fri May 6 04:42:39 2011
New Revision: 1100050
URL: http://svn.apache.org/viewvc?rev=1100050&view=rev
Log:
Testing page not touched while responding its children in an AJAX request.
Issue: WICKET-3667
Added:
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/handler/PageIdPoliticTest.java
Added:
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/handler/PageIdPoliticTest.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/handler/PageIdPoliticTest.java?rev=1100050&view=auto
==============================================================================
---
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/handler/PageIdPoliticTest.java
(added)
+++
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/handler/PageIdPoliticTest.java
Fri May 6 04:42:39 2011
@@ -0,0 +1,128 @@
+package org.apache.wicket.request.handler;
+
+import java.nio.charset.Charset;
+
+import junit.framework.TestCase;
+
+import org.apache.wicket.IPageManagerProvider;
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.IMarkupResourceStreamProvider;
+import org.apache.wicket.markup.html.WebComponent;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.mock.MockApplication;
+import org.apache.wicket.page.IPageManager;
+import org.apache.wicket.page.IPageManagerContext;
+import org.apache.wicket.page.PersistentPageManager;
+import org.apache.wicket.pageStore.DefaultPageStore;
+import org.apache.wicket.pageStore.IPageStore;
+import org.apache.wicket.request.Url;
+import org.apache.wicket.util.resource.IResourceStream;
+import org.apache.wicket.util.resource.StringResourceStream;
+import org.apache.wicket.util.tester.WicketTester;
+import org.apache.wicket.versioning.InMemoryPageStore;
+
+/**
+ * @author Pedro Santos
+ */
+public class PageIdPoliticTest extends TestCase
+{
+ private WicketTester tester;
+ private InMemoryPageStore dataStore;
+ private MockApplication application;
+ private int storeCount;
+
+ /**
+ * Asserting that page don't get touched in an AJAX request that is
only repaint its children. <br />
+ * In this case no new page id is being generated and none new page
needs to be touched to be
+ * stored again.<br />
+ * By asserting this requirement we improve memory usage and avoid
problems of exhaust it.
+ *
+ * @see <a
href="https://issues.apache.org/jira/browse/WICKET-3667">WICKET-3667</a>
+ */
+ public void testPageNotTouchedInAjaxRequest()
+ {
+ TestPage testPage = new TestPage();
+ Url ajaxUrl =
Url.parse(testPage.eventBehavior.getCallbackUrl().toString(),
+
Charset.forName(tester.getRequest().getCharacterEncoding()));
+ tester.startPage(TestPage.class);
+ int referenceStoreCount = storeCount;
+ tester.executeAjaxUrl(ajaxUrl);
+ assertEquals(referenceStoreCount, storeCount);
+ }
+
+ @Override
+ protected void setUp() throws Exception
+ {
+ application = new MockApplication();
+ dataStore = new InMemoryPageStore()
+ {
+ @Override
+ public void storeData(String sessionId, int pageId,
byte[] pageAsBytes)
+ {
+ super.storeData(sessionId, pageId, pageAsBytes);
+ storeCount++;
+ }
+ };
+ tester = new WicketTester(application)
+ {
+ @Override
+ protected IPageManagerProvider
newTestPageManagerProvider()
+ {
+ return new IPageManagerProvider()
+ {
+ public IPageManager
get(IPageManagerContext pageManagerContext)
+ {
+ IPageStore pageStore = new
DefaultPageStore(application.getName(),
+ dataStore, 4);
+ return new
PersistentPageManager(application.getName(), pageStore,
+ pageManagerContext);
+ }
+ };
+ };
+ };
+ }
+
+ @Override
+ protected void tearDown() throws Exception
+ {
+ tester.destroy();
+ }
+
+ /** */
+ public static class TestPage extends WebPage implements
IMarkupResourceStreamProvider
+ {
+ /** */
+ private static final long serialVersionUID = 1L;
+ AjaxEventBehavior eventBehavior;
+
+ /**
+ * Construct.
+ */
+ public TestPage()
+ {
+ WebComponent component;
+ component = new WebComponent("component");
+ component.add(eventBehavior = new
AjaxEventBehavior("onclick")
+ {
+ /** */
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected void onEvent(AjaxRequestTarget target)
+ {
+ }
+ });
+ add(component);
+ }
+
+ public IResourceStream getMarkupResourceStream(MarkupContainer
container,
+ Class<?> containerClass)
+ {
+ return new StringResourceStream(
+ "<html><body><a
wicket:id=\"component\"></a></body></html>");
+ }
+
+ }
+}