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


Reply via email to