Author: mgrigorov
Date: Tue Jul 19 12:14:12 2011
New Revision: 1148291
URL: http://svn.apache.org/viewvc?rev=1148291&view=rev
Log:
WICKET-3913 WicketTester doesn't changes from panel to page
Reset 'startComponent' if the newly rendered page has different type than the
previous (and the previous is not null).
Added:
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/MockPanelWithLink.java
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterTest.java
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java?rev=1148291&r1=1148290&r2=1148291&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
(original)
+++
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
Tue Jul 19 12:14:12 2011
@@ -360,8 +360,8 @@ public class BaseWicketTester
request.setURL(request.getContextPath() +
request.getServletPath() + "/");
// assign protocol://host:port to next request unless the last
request was ajax
- final boolean assignBaseLocation =
- lastRequest != null &&
lastRequest.getHeader("Wicket-Ajax") == null;
+ final boolean assignBaseLocation = lastRequest != null &&
+ lastRequest.getHeader("Wicket-Ajax") == null;
// resume request processing with scheme://host:port from last
request
if (assignBaseLocation)
@@ -371,7 +371,7 @@ public class BaseWicketTester
request.setServerName(lastRequest.getServerName());
request.setServerPort(lastRequest.getServerPort());
}
-
+
response = new MockHttpServletResponse(request);
ServletWebRequest servletWebRequest = newServletWebRequest();
@@ -615,7 +615,7 @@ public class BaseWicketTester
request.setUrl(newUrl);
final String protocol =
newUrl.getProtocol();
-
+
if (protocol != null)
{
request.setScheme(protocol);
@@ -636,7 +636,7 @@ public class BaseWicketTester
{
// append redirect URL to current URL
(what browser would do)
Url mergedURL = new
Url(lastRequest.getUrl().getSegments(),
- newUrl.getQueryParameters());
+ newUrl.getQueryParameters());
mergedURL.concatSegments(newUrl.getSegments());
request.setUrl(mergedURL);
@@ -2443,6 +2443,8 @@ public class BaseWicketTester
{
private final IPageRendererProvider delegate;
+ private Page lastPage;
+
public
LastPageRecordingPageRendererProvider(IPageRendererProvider delegate)
{
this.delegate = delegate;
@@ -2450,7 +2452,14 @@ public class BaseWicketTester
public PageRenderer get(RenderPageRequestHandler handler)
{
- lastRenderedPage =
(Page)handler.getPageProvider().getPageInstance();
+ Page newPage =
(Page)handler.getPageProvider().getPageInstance();
+ if (startComponent != null && lastPage != null &&
+ lastPage.getPageClass() !=
newPage.getPageClass())
+ {
+ // WICKET-3913: reset startComponent if a new
page type is rendered
+ startComponent = null;
+ }
+ lastRenderedPage = lastPage = newPage;
return delegate.get(handler);
}
}
Added:
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/MockPanelWithLink.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/MockPanelWithLink.java?rev=1148291&view=auto
==============================================================================
---
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/MockPanelWithLink.java
(added)
+++
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/MockPanelWithLink.java
Tue Jul 19 12:14:12 2011
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket;
+
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.AjaxFallbackLink;
+import org.apache.wicket.markup.IMarkupCacheKeyProvider;
+import org.apache.wicket.markup.IMarkupResourceStreamProvider;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.util.resource.IResourceStream;
+import org.apache.wicket.util.resource.StringResourceStream;
+
+/**
+ * A panel with a link. The link can be used both as normal and Ajax.
+ */
+public abstract class MockPanelWithLink extends Panel
+ implements
+ IMarkupResourceStreamProvider,
+ IMarkupCacheKeyProvider
+{
+
+ /**
+ * Construct.
+ *
+ * @param id
+ * the component id
+ */
+ public MockPanelWithLink(String id)
+ {
+ super(id);
+
+ add(new AjaxFallbackLink<Void>("link")
+ {
+ @Override
+ public void onClick(AjaxRequestTarget target)
+ {
+ MockPanelWithLink.this.onLinkClick(target);
+ }
+ });
+ }
+
+ /**
+ * The callback to execute when the link is clicked.
+ *
+ * @param target
+ * the current Ajax request target. May be {@code null} if
+ * {@link BaseWicketTester#clickLink(String, false)} is used.
+ */
+ protected abstract void onLinkClick(AjaxRequestTarget target);
+
+ public String getCacheKey(MarkupContainer container, Class<?>
containerClass)
+ {
+ // no caching
+ return null;
+ }
+
+ public IResourceStream getMarkupResourceStream(MarkupContainer
container,
+ Class<?> containerClass)
+ {
+ return new StringResourceStream("<wicket:panel><a
wicket:id='link'>Link</a></wicket:panel>");
+ }
+
+
+}
Modified:
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterTest.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterTest.java?rev=1148291&r1=1148290&r2=1148291&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterTest.java
(original)
+++
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterTest.java
Tue Jul 19 12:14:12 2011
@@ -28,6 +28,7 @@ import org.apache.wicket.Component;
import org.apache.wicket.MockPageParametersAware;
import org.apache.wicket.MockPageWithLink;
import org.apache.wicket.MockPageWithOneComponent;
+import org.apache.wicket.MockPanelWithLink;
import org.apache.wicket.Page;
import org.apache.wicket.Session;
import org.apache.wicket.WicketTestCase;
@@ -52,6 +53,7 @@ import org.apache.wicket.request.mapper.
import
org.apache.wicket.request.resource.PackageResource.PackageResourceBlockedException;
import org.apache.wicket.resource.DummyPage;
import org.apache.wicket.util.string.StringValue;
+import org.apache.wicket.util.tester.DummyHomePage.TestLink;
import org.apache.wicket.util.tester.MockPageParameterPage.MockInnerClassPage;
import
org.apache.wicket.util.tester.MockPageWithFormAndAjaxFormSubmitBehavior.Pojo;
import org.apache.wicket.util.tester.apps_1.Book;
@@ -950,6 +952,8 @@ public class WicketTesterTest extends Wi
/**
* <a
href="https://issues.apache.org/jira/browse/WICKET-3716">WICKET-3716</a>
+ *
+ * @throws Exception
*/
@Test
public void testAssertRenderedPageErrorMessage() throws Exception
@@ -961,4 +965,24 @@ public class WicketTesterTest extends Wi
assertEquals(String.format("classes not the same, expected
'%s', current '%s'",
DummyPage.class, MockPageParametersAware.class),
result.getMessage());
}
+
+ /**
+ * https://issues.apache.org/jira/browse/WICKET-3913
+ */
+ @Test
+ public void testStartPanelGoesToAnotherPage()
+ {
+ tester.startComponentInPage(new MockPanelWithLink("testPanel")
+ {
+ @Override
+ protected void onLinkClick(AjaxRequestTarget target)
+ {
+ setResponsePage(DummyHomePage.class);
+ }
+ });
+ tester.clickLink("link");
+
+ tester.assertRenderedPage(DummyHomePage.class);
+ tester.assertComponent("testPage", TestLink.class);
+ }
}