You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2010/01/06 18:36:44 UTC

svn commit: r896559 [2/2] - in /tapestry/tapestry5/trunk/tapestry-core/src: main/java/org/apache/tapestry5/annotations/ main/java/org/apache/tapestry5/internal/ main/java/org/apache/tapestry5/internal/services/ main/java/org/apache/tapestry5/internal/s...

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TransformMethodSignature.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TransformMethodSignature.java?rev=896559&r1=896558&r2=896559&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TransformMethodSignature.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TransformMethodSignature.java Wed Jan  6 17:35:59 2010
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007 The Apache Software Foundation
+// Copyright 2006, 2007, 2010 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -159,7 +159,7 @@
 
     /**
      * Returns the long form description of the signature. This includes modifiers, return type, method name, parameters
-     * and thrown exceptions, formatter approximately as it would appear in Java source (except that parameter names,
+     * and thrown exceptions, formatted approximately as it would appear in Java source (except that parameter names,
      * which are not known, do no appear).
      */
     @Override

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/app1/Index.tml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/app1/Index.tml?rev=896559&r1=896558&r2=896559&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/app1/Index.tml (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/app1/Index.tml Wed Jan  6 17:35:59 2010
@@ -127,6 +127,11 @@
             <a href="InvalidTemplateExtend">Invalid Template Extend Demo</a>
             -- template uses extend, but component doesn't have a super-class
         </li>
+        
+        <li>
+          <a href="PageResetFailure">PageReset Annotation Failure</a>
+          -- error when @PageReset is on a method with parameters
+        </li>
     </ul>
 
 </html>

Added: tapestry/tapestry5/trunk/tapestry-core/src/test/app1/PageResetDemo.tml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/app1/PageResetDemo.tml?rev=896559&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/app1/PageResetDemo.tml (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/app1/PageResetDemo.tml Wed Jan  6 17:35:59 2010
@@ -0,0 +1,19 @@
+<html t:type="Border" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
+
+  <h1>PageReset Annotation Demo</h1>
+
+  <p>
+    The current click count is:
+    <span id="current">${count}</span>
+  </p>
+
+  <ul>
+    <li>
+      <t:actionlink t:id="increment">increment</t:actionlink>
+    </li>
+    <li>
+      <t:pagelink page="pageResetDemo">refresh</t:pagelink>
+    </li>
+  </ul>
+
+</html>
\ No newline at end of file

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/CoreBehaviorsTests.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/CoreBehaviorsTests.java?rev=896559&r1=896558&r2=896559&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/CoreBehaviorsTests.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/CoreBehaviorsTests.java Wed Jan  6 17:35:59 2010
@@ -1447,4 +1447,39 @@
 
         assertText("message", "TestOnly service message");
     }
+
+    /** TAP5-948 */
+    @Test
+    public void page_reset_annotation()
+    {
+        clickThru("PageReset Annotation Demo");
+
+        assertText("current", "0");
+
+        clickAndWait("link=increment");
+
+        assertText("current", "1");
+
+        clickAndWait("link=increment");
+
+        assertText("current", "2");
+
+        clickAndWait("link=refresh");
+
+        assertText("current", "2");
+
+        clickAndWait("link=Back to index");
+        clickAndWait("link=PageReset Annotation Demo");
+
+        assertText("current", "0");
+    }
+
+    /** TAP5-948 */
+    @Test
+    public void page_reset_annotation_on_bad_method()
+    {
+        clickThru("PageReset Annotation Failure");
+
+        assertTextPresent("Method void reset(java.lang.String) of class org.apache.tapestry5.integration.app1.pages.PageResetFailure is invalid: methods with the @PageReset annotation must return void, and have no parameters or thrown exceptions.");
+    }
 }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java?rev=896559&r1=896558&r2=896559&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java Wed Jan  6 17:35:59 2010
@@ -65,6 +65,10 @@
 
     private static final List<Item> ITEMS = CollectionFactory
             .newList(
+
+                    new Item("PageResetDemo", "PageReset Annotation Demo",
+                            "Use of PageReset annotation to re-initialize page state"),
+
                     new Item("TestOnlyServiceDemo", "Test Only Service Demo",
                             "IoC module available via web.xml configuration"),
 

Added: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/PageResetDemo.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/PageResetDemo.java?rev=896559&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/PageResetDemo.java (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/PageResetDemo.java Wed Jan  6 17:35:59 2010
@@ -0,0 +1,37 @@
+// Copyright 2010 The Apache Software Foundation
+//
+// Licensed 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.tapestry5.integration.app1.pages;
+
+import org.apache.tapestry5.annotations.PageReset;
+import org.apache.tapestry5.annotations.Persist;
+import org.apache.tapestry5.annotations.Property;
+
+public class PageResetDemo
+{
+    @Property
+    @Persist
+    private int count;
+
+    void onActionFromIncrement()
+    {
+        count++;
+    }
+
+    @PageReset
+    void reset()
+    {
+        count = 0;
+    }
+}

Propchange: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/PageResetDemo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/PageResetFailure.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/PageResetFailure.java?rev=896559&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/PageResetFailure.java (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/PageResetFailure.java Wed Jan  6 17:35:59 2010
@@ -0,0 +1,26 @@
+// Copyright 2010 The Apache Software Foundation
+//
+// Licensed 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.tapestry5.integration.app1.pages;
+
+import org.apache.tapestry5.annotations.PageReset;
+
+public class PageResetFailure
+{
+    @PageReset
+    void reset(String whatGoesHere)
+    {
+
+    }
+}

Propchange: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/PageResetFailure.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventDispatcherTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventDispatcherTest.java?rev=896559&r1=896558&r2=896559&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventDispatcherTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventDispatcherTest.java Wed Jan  6 17:35:59 2010
@@ -49,12 +49,8 @@
         replay();
 
         Dispatcher dispatcher = new ComponentEventDispatcher(null,
-                                                             new ComponentEventLinkEncoderImpl(null, contextPathEncoder,
-                                                                                               null, request, response,
-                                                                                               null,
-                                                                                               null,
-                                                                                               null,
-                                                                                               true));
+                new ComponentEventLinkEncoderImpl(null, contextPathEncoder, null, request,
+                        response, null, null, null, true, null));
 
         assertFalse(dispatcher.dispatch(request, response));
 
@@ -73,7 +69,8 @@
     @Test
     public void event_on_page_with_name_and_dotted_parameters() throws Exception
     {
-        test("/foo/MyPage:myevent/1.2.3/4.5.6", "foo", "foo/MyPage", "", "myevent", "1.2.3", "4.5.6");
+        test("/foo/MyPage:myevent/1.2.3/4.5.6", "foo", "foo/MyPage", "", "myevent", "1.2.3",
+                "4.5.6");
     }
 
     /**
@@ -82,7 +79,8 @@
     @Test
     public void event_on_page_dotted_parameters() throws Exception
     {
-        test("/foo/MyPage:action/1.2.3/4.5.6", "foo", "foo/MyPage", "", EventConstants.ACTION, "1.2.3", "4.5.6");
+        test("/foo/MyPage:action/1.2.3/4.5.6", "foo", "foo/MyPage", "", EventConstants.ACTION,
+                "1.2.3", "4.5.6");
     }
 
     @Test
@@ -100,14 +98,15 @@
     @Test
     public void default_event_with_nested_id_and_context() throws Exception
     {
-        test("/foo/MyPage.fred/fee/fie/foe/fum", "foo", "foo/MyPage", "fred", EventConstants.ACTION, "fee", "fie",
-             "foe", "fum");
+        test("/foo/MyPage.fred/fee/fie/foe/fum", "foo", "foo/MyPage", "fred",
+                EventConstants.ACTION, "fee", "fie", "foe", "fum");
     }
 
     @Test
     public void default_event_with_context_that_includes_a_colon() throws Exception
     {
-        test("/foo/MyPage.underdog/a:b:c/d", "foo", "foo/MyPage", "underdog", EventConstants.ACTION, "a:b:c", "d");
+        test("/foo/MyPage.underdog/a:b:c/d", "foo", "foo/MyPage", "underdog",
+                EventConstants.ACTION, "a:b:c", "d");
     }
 
     @Test
@@ -125,7 +124,8 @@
     @Test
     public void nested_component_event_with_context() throws Exception
     {
-        test("/foo/MyPage.nested:trigger/foo/bar/baz", "foo", "foo/MyPage", "nested", "trigger", "foo", "bar", "baz");
+        test("/foo/MyPage.nested:trigger/foo/bar/baz", "foo", "foo/MyPage", "nested", "trigger",
+                "foo", "bar", "baz");
     }
 
     @Test
@@ -137,14 +137,10 @@
         ComponentClassResolver resolver = mockComponentClassResolver();
         LocalizationSetter ls = mockLocalizationSetter();
 
-        ComponentEventRequestParameters expectedParameters = new ComponentEventRequestParameters("mypage", "mypage", "",
-                                                                                                 "eventname",
-                                                                                                 new URLEventContext(
-                                                                                                         contextValueEncoder,
-                                                                                                         new String[] {
-                                                                                                                 "alpha",
-                                                                                                                 "beta" }),
-                                                                                                 new EmptyEventContext());
+        ComponentEventRequestParameters expectedParameters = new ComponentEventRequestParameters(
+                "mypage", "mypage", "", "eventname", new URLEventContext(contextValueEncoder,
+                        new String[]
+                        { "alpha", "beta" }), new EmptyEventContext());
 
         train_getPath(request, "/mypage:eventname");
 
@@ -152,6 +148,8 @@
 
         train_isPageName(resolver, "mypage", true);
 
+        train_canonicalizePageName(resolver, "mypage", "mypage");
+
         train_getParameter(request, InternalConstants.PAGE_CONTEXT_NAME, "alpha/beta");
 
         train_getParameter(request, InternalConstants.CONTAINER_PAGE_NAME, null);
@@ -160,14 +158,9 @@
 
         replay();
 
-        Dispatcher dispatcher = new ComponentEventDispatcher(handler, new ComponentEventLinkEncoderImpl(resolver,
-                                                                                                        contextPathEncoder,
-                                                                                                        ls, request,
-                                                                                                        response,
-                                                                                                        null,
-                                                                                                        null,
-                                                                                                        null,
-                                                                                                        true));
+        Dispatcher dispatcher = new ComponentEventDispatcher(handler,
+                new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, ls, request,
+                        response, null, null, null, true, null));
 
         assertTrue(dispatcher.dispatch(request, response));
 
@@ -183,10 +176,9 @@
         ComponentClassResolver resolver = mockComponentClassResolver();
         LocalizationSetter ls = mockLocalizationSetter();
 
-        ComponentEventRequestParameters expectedParameters = new ComponentEventRequestParameters("activepage", "mypage",
-                                                                                                 "", "eventname",
-                                                                                                 new EmptyEventContext(),
-                                                                                                 new EmptyEventContext());
+        ComponentEventRequestParameters expectedParameters = new ComponentEventRequestParameters(
+                "activepage", "mypage", "", "eventname", new EmptyEventContext(),
+                new EmptyEventContext());
 
         train_getPath(request, "/activepage:eventname");
 
@@ -194,22 +186,21 @@
 
         train_isPageName(resolver, "activepage", true);
 
+        train_canonicalizePageName(resolver, "activepage", "activepage");
+
         train_getParameter(request, InternalConstants.PAGE_CONTEXT_NAME, null);
 
         train_getParameter(request, InternalConstants.CONTAINER_PAGE_NAME, "mypage");
 
+        train_canonicalizePageName(resolver, "mypage", "mypage");
+
         handler.handleComponentEvent(expectedParameters);
 
         replay();
 
-        Dispatcher dispatcher = new ComponentEventDispatcher(handler, new ComponentEventLinkEncoderImpl(resolver,
-                                                                                                        contextPathEncoder,
-                                                                                                        ls, request,
-                                                                                                        response,
-                                                                                                        null,
-                                                                                                        null,
-                                                                                                        null,
-                                                                                                        true));
+        Dispatcher dispatcher = new ComponentEventDispatcher(handler,
+                new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, ls, request,
+                        response, null, null, null, true, null));
 
         assertTrue(dispatcher.dispatch(request, response));
 
@@ -231,23 +222,17 @@
 
         replay();
 
-        Dispatcher dispatcher = new ComponentEventDispatcher(null, new ComponentEventLinkEncoderImpl(resolver,
-                                                                                                     contextPathEncoder,
-                                                                                                     ls, request,
-                                                                                                     response,
-                                                                                                     null,
-                                                                                                     null,
-                                                                                                     null,
-                                                                                                     true));
+        Dispatcher dispatcher = new ComponentEventDispatcher(null,
+                new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, ls, request,
+                        response, null, null, null, true, null));
 
         assertFalse(dispatcher.dispatch(request, response));
 
         verify();
     }
 
-    private void test(String requestPath, String localeName, String containerPageName, String nestedComponentId,
-                      String eventType,
-                      String... eventContext) throws IOException
+    private void test(String requestPath, String localeName, String containerPageName,
+            String nestedComponentId, String eventType, String... eventContext) throws IOException
     {
         ComponentRequestHandler handler = mockComponentRequestHandler();
         Request request = mockRequest();
@@ -255,14 +240,9 @@
         ComponentClassResolver resolver = mockComponentClassResolver();
         LocalizationSetter localizationSetter = mockLocalizationSetter();
 
-        ComponentEventRequestParameters expectedParameters = new ComponentEventRequestParameters(containerPageName,
-                                                                                                 containerPageName,
-                                                                                                 nestedComponentId,
-                                                                                                 eventType,
-                                                                                                 new EmptyEventContext(),
-                                                                                                 new URLEventContext(
-                                                                                                         contextValueEncoder,
-                                                                                                         eventContext));
+        ComponentEventRequestParameters expectedParameters = new ComponentEventRequestParameters(
+                containerPageName, containerPageName, nestedComponentId, eventType,
+                new EmptyEventContext(), new URLEventContext(contextValueEncoder, eventContext));
 
         train_getPath(request, requestPath);
 
@@ -270,6 +250,8 @@
 
         train_isPageName(resolver, containerPageName, true);
 
+        train_canonicalizePageName(resolver, containerPageName, containerPageName);
+
         train_getParameter(request, InternalConstants.PAGE_CONTEXT_NAME, null);
 
         train_getParameter(request, InternalConstants.CONTAINER_PAGE_NAME, null);
@@ -278,11 +260,9 @@
 
         replay();
 
-        Dispatcher dispatcher = new ComponentEventDispatcher(
-                handler, new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, localizationSetter, request,
-                                                           response, null, null,
-                                                           null,
-                                                           true));
+        Dispatcher dispatcher = new ComponentEventDispatcher(handler,
+                new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, localizationSetter,
+                        request, response, null, null, null, true, null));
 
         assertTrue(dispatcher.dispatch(request, response));
 

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImplTest.java?rev=896559&r1=896558&r2=896559&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImplTest.java Wed Jan  6 17:35:59 2010
@@ -24,7 +24,7 @@
 
 /**
  * Most of the testing is implemented through legacy tests against code that uses CELE.
- *
+ * 
  * @since 5.1.0.1
  */
 public class ComponentEventLinkEncoderImplTest extends InternalBaseTestCase
@@ -45,6 +45,7 @@
         Response response = mockResponse();
         RequestPathOptimizer optimizer = mockRequestPathOptimizer();
         ContextPathEncoder contextPathEncoder = getService(ContextPathEncoder.class);
+        RequestGlobals globals = mockRequestGlobals(null);
 
         expect(manager.getBaseURL("MyPage")).andReturn(null);
         train_getContextPath(request, "/myapp");
@@ -53,12 +54,12 @@
 
         replay();
 
-        ComponentEventLinkEncoder encoder = new ComponentEventLinkEncoderImpl(null, contextPathEncoder, null, request,
-                                                                              response,
-                                                                              manager, optimizer, null,
-                                                                              false);
+        ComponentEventLinkEncoder encoder = new ComponentEventLinkEncoderImpl(null,
+                contextPathEncoder, null, request, response, manager, optimizer, null, false,
+                globals);
 
-        PageRenderRequestParameters parameters = new PageRenderRequestParameters("MyPage", new EmptyEventContext());
+        PageRenderRequestParameters parameters = new PageRenderRequestParameters("MyPage",
+                new EmptyEventContext());
 
         Link link = encoder.createPageRenderLink(parameters);
 
@@ -67,6 +68,15 @@
         verify();
     }
 
+    private RequestGlobals mockRequestGlobals(String activePageName)
+    {
+        RequestGlobals rg = mockRequestGlobals();
+
+        expect(rg.getActivePageName()).andReturn(activePageName).atLeastOnce();
+
+        return rg;
+    }
+
     @Test
     public void index_stripped_off()
     {
@@ -75,6 +85,7 @@
         Response response = mockResponse();
         RequestPathOptimizer optimizer = mockRequestPathOptimizer();
         ContextPathEncoder contextPathEncoder = getService(ContextPathEncoder.class);
+        RequestGlobals globals = mockRequestGlobals(null);
 
         expect(manager.getBaseURL("admin/Index")).andReturn(null);
         train_getContextPath(request, "");
@@ -83,14 +94,12 @@
 
         replay();
 
-        ComponentEventLinkEncoder encoder = new ComponentEventLinkEncoderImpl(null, contextPathEncoder, null, request,
-                                                                              response,
-                                                                              manager, optimizer, null,
-                                                                              false);
+        ComponentEventLinkEncoder encoder = new ComponentEventLinkEncoderImpl(null,
+                contextPathEncoder, null, request, response, manager, optimizer, null, false,
+                globals);
 
         PageRenderRequestParameters parameters = new PageRenderRequestParameters("admin/Index",
-                                                                                 new ArrayEventContext(typeCoercer,
-                                                                                                       "abc"));
+                new ArrayEventContext(typeCoercer, "abc"));
 
         Link link = encoder.createPageRenderLink(parameters);
 
@@ -107,6 +116,7 @@
         Response response = mockResponse();
         RequestPathOptimizer optimizer = mockRequestPathOptimizer();
         ContextPathEncoder contextPathEncoder = getService(ContextPathEncoder.class);
+        RequestGlobals globals = mockRequestGlobals(null);
 
         expect(manager.getBaseURL("Index")).andReturn(null);
         train_getContextPath(request, "");
@@ -115,12 +125,12 @@
 
         replay();
 
-        ComponentEventLinkEncoder encoder = new ComponentEventLinkEncoderImpl(null, contextPathEncoder, null, request,
-                                                                              response,
-                                                                              manager, optimizer, null,
-                                                                              false);
+        ComponentEventLinkEncoder encoder = new ComponentEventLinkEncoderImpl(null,
+                contextPathEncoder, null, request, response, manager, optimizer, null, false,
+                globals);
 
-        PageRenderRequestParameters parameters = new PageRenderRequestParameters("Index", new EmptyEventContext());
+        PageRenderRequestParameters parameters = new PageRenderRequestParameters("Index",
+                new EmptyEventContext());
 
         Link link = encoder.createPageRenderLink(parameters);
 

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PageRenderDispatcherTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PageRenderDispatcherTest.java?rev=896559&r1=896558&r2=896559&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PageRenderDispatcherTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PageRenderDispatcherTest.java Wed Jan  6 17:35:59 2010
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007, 2008, 2009 The Apache Software Foundation
+// Copyright 2006, 2007, 2008, 2009, 2010 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
 import org.apache.tapestry5.ComponentEventCallback;
 import org.apache.tapestry5.EventConstants;
 import org.apache.tapestry5.EventContext;
+import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.internal.structure.ComponentPageElement;
 import org.apache.tapestry5.internal.structure.Page;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
@@ -53,12 +54,8 @@
 
         replay();
 
-        Dispatcher d = new PageRenderDispatcher(null,
-                                                new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, ls,
-                                                                                  request, response,
-                                                                                  null, null,
-                                                                                  null,
-                                                                                  true));
+        Dispatcher d = new PageRenderDispatcher(null, new ComponentEventLinkEncoderImpl(resolver,
+                contextPathEncoder, ls, request, response, null, null, null, true, null));
 
         assertFalse(d.dispatch(request, response));
 
@@ -82,12 +79,8 @@
 
         replay();
 
-        Dispatcher d = new PageRenderDispatcher(null,
-                                                new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, ls,
-                                                                                  request, response,
-                                                                                  null, null,
-                                                                                  null,
-                                                                                  true));
+        Dispatcher d = new PageRenderDispatcher(null, new ComponentEventLinkEncoderImpl(resolver,
+                contextPathEncoder, ls, request, response, null, null, null, true, null));
 
         assertFalse(d.dispatch(request, response));
 
@@ -110,18 +103,23 @@
 
         replay();
 
-        Dispatcher d = new PageRenderDispatcher(null,
-                                                new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, ls,
-                                                                                  request, response,
-                                                                                  null, null,
-                                                                                  null,
-                                                                                  true));
+        Dispatcher d = new PageRenderDispatcher(null, new ComponentEventLinkEncoderImpl(resolver,
+                contextPathEncoder, ls, request, response, null, null, null, true, null));
 
         assertFalse(d.dispatch(request, response));
 
         verify();
     }
 
+    private Request mockRequest(boolean isLoopback)
+    {
+        Request request = mockRequest();
+
+        train_getParameter(request, InternalConstants.LOOPBACK, isLoopback ? "t" : null);
+
+        return request;
+    }
+
     /**
      * TAPESTRY-2226
      */
@@ -129,7 +127,7 @@
     public void page_activation_context_for_root_index_page() throws Exception
     {
         ComponentClassResolver resolver = mockComponentClassResolver();
-        Request request = mockRequest();
+        Request request = mockRequest(false);
         Response response = mockResponse();
         Page page = mockPage();
         ComponentPageElement rootElement = mockComponentPageElement();
@@ -146,29 +144,30 @@
         train_isPageName(resolver, "foo", false);
         train_isPageName(resolver, "", true);
 
-        train_get(cache, "", page);
+        train_canonicalizePageName(resolver, "", "index");
+
+        train_get(cache, "index", page);
 
         train_getRootElement(page, rootElement);
 
-        train_triggerContextEvent(rootElement, EventConstants.ACTIVATE, new Object[] { "foo", "bar" }, false);
+        train_triggerContextEvent(rootElement, EventConstants.ACTIVATE, new Object[]
+        { "foo", "bar" }, false);
+
+        page.pageReset();
 
         renderer.renderPageResponse(page);
 
         replay();
 
-        Dispatcher d = new PageRenderDispatcher(wrap(cache, processor, renderer),
-                                                new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, ls,
-                                                                                  request, response,
-                                                                                  null, null,
-                                                                                  null,
-                                                                                  true));
+        Dispatcher d = new PageRenderDispatcher(wrap(cache, processor, renderer, request),
+                new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, ls, request,
+                        response, null, null, null, true, null));
 
         assertTrue(d.dispatch(request, response));
 
         verify();
     }
 
-
     @Test
     public void no_extra_context_without_final_slash() throws Exception
     {
@@ -187,7 +186,7 @@
         PageResponseRenderer renderer = mockPageResponseRenderer();
         RequestPageCache cache = mockRequestPageCache();
         ComponentEventResultProcessor processor = newComponentEventResultProcessor();
-        Request request = mockRequest();
+        Request request = mockRequest(false);
         Response response = mockResponse();
         Page page = mockPage();
         ComponentPageElement rootElement = mockComponentPageElement();
@@ -200,21 +199,22 @@
 
         train_isPageName(resolver, "foo/Bar", true);
 
-        train_get(cache, "foo/Bar", page);
+        train_canonicalizePageName(resolver, "foo/Bar", "foo/bar");
+
+        train_get(cache, "foo/bar", page);
         train_getRootElement(page, rootElement);
 
         train_triggerContextEvent(rootElement, EventConstants.ACTIVATE, new Object[0], false);
 
+        page.pageReset();
+
         renderer.renderPageResponse(page);
 
         replay();
 
-        Dispatcher d = new PageRenderDispatcher(wrap(cache, processor, renderer),
-                                                new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, ls,
-                                                                                  request, response,
-                                                                                  null, null,
-                                                                                  null,
-                                                                                  true));
+        Dispatcher d = new PageRenderDispatcher(wrap(cache, processor, renderer, request),
+                new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, ls, request,
+                        response, null, null, null, true, null));
 
         assertTrue(d.dispatch(request, response));
 
@@ -239,7 +239,7 @@
         ComponentClassResolver resolver = mockComponentClassResolver();
         PageResponseRenderer renderer = mockPageResponseRenderer();
         RequestPageCache cache = mockRequestPageCache();
-        Request request = mockRequest();
+        Request request = mockRequest(false);
         Response response = mockResponse();
         Page page = mockPage();
         ComponentPageElement rootElement = mockComponentPageElement();
@@ -256,31 +256,34 @@
 
         train_isPageName(resolver, "foo/Bar", true);
 
-        train_get(cache, "foo/Bar", page);
+        train_canonicalizePageName(resolver, "foo/Bar", "foo/bar");
+
+        train_get(cache, "foo/bar", page);
         train_getRootElement(page, rootElement);
 
-        train_triggerContextEvent(rootElement, EventConstants.ACTIVATE, new Object[] { "zip", "zoom" }, false);
+        train_triggerContextEvent(rootElement, EventConstants.ACTIVATE, new Object[]
+        { "zip", "zoom" }, false);
+
+        page.pageReset();
 
         renderer.renderPageResponse(page);
 
         replay();
 
-        Dispatcher d = new PageRenderDispatcher(wrap(cache, processor, renderer),
-                                                new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, ls,
-                                                                                  request, response,
-                                                                                  null, null,
-                                                                                  null,
-                                                                                  true));
+        Dispatcher d = new PageRenderDispatcher(wrap(cache, processor, renderer, request),
+                new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, ls, request,
+                        response, null, null, null, true, null));
 
         assertTrue(d.dispatch(request, response));
 
         verify();
     }
 
-    private ComponentRequestHandler wrap(RequestPageCache cache, ComponentEventResultProcessor processor,
-                                         PageResponseRenderer renderer)
+    private ComponentRequestHandler wrap(RequestPageCache cache,
+            ComponentEventResultProcessor processor, PageResponseRenderer renderer, Request request)
     {
-        PageRenderRequestHandler prh = new PageRenderRequestHandlerImpl(cache, processor, renderer);
+        PageRenderRequestHandler prh = new PageRenderRequestHandlerImpl(cache, processor, renderer,
+                request);
 
         return new ComponentRequestHandlerTerminator(null, prh);
     }
@@ -290,8 +293,8 @@
         return newMock(ComponentEventResultProcessor.class);
     }
 
-    private void train_triggerContextEvent(ComponentPageElement element, String eventType, final Object[] context,
-                                           final boolean handled)
+    private void train_triggerContextEvent(ComponentPageElement element, String eventType,
+            final Object[] context, final boolean handled)
     {
         IAnswer<Boolean> answer = new IAnswer<Boolean>()
         {
@@ -308,12 +311,12 @@
                     assertEquals(ec.get(Object.class, i), context[i]);
                 }
 
-
                 return handled;
             }
         };
 
-        expect(element.triggerContextEvent(eq(eventType), isA(EventContext.class),
-                                           isA(ComponentEventCallback.class))).andAnswer(answer);
+        expect(
+                element.triggerContextEvent(eq(eventType), isA(EventContext.class),
+                        isA(ComponentEventCallback.class))).andAnswer(answer);
     }
 }

Added: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PageRenderRequestHandlerImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PageRenderRequestHandlerImplTest.java?rev=896559&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PageRenderRequestHandlerImplTest.java (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PageRenderRequestHandlerImplTest.java Wed Jan  6 17:35:59 2010
@@ -0,0 +1,70 @@
+// Copyright 2010 The Apache Software Foundation
+//
+// Licensed 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.tapestry5.internal.services;
+
+import org.apache.tapestry5.ComponentEventCallback;
+import org.apache.tapestry5.EventConstants;
+import org.apache.tapestry5.EventContext;
+import org.apache.tapestry5.internal.InternalConstants;
+import org.apache.tapestry5.internal.structure.ComponentPageElement;
+import org.apache.tapestry5.internal.structure.Page;
+import org.apache.tapestry5.internal.test.InternalBaseTestCase;
+import org.apache.tapestry5.services.ComponentEventResultProcessor;
+import org.apache.tapestry5.services.PageRenderRequestHandler;
+import org.apache.tapestry5.services.PageRenderRequestParameters;
+import org.apache.tapestry5.services.Request;
+import org.easymock.EasyMock;
+import org.testng.annotations.Test;
+
+public class PageRenderRequestHandlerImplTest extends InternalBaseTestCase
+{
+    @Test
+    public void loopback_request() throws Exception
+    {
+        RequestPageCache cache = mockRequestPageCache();
+        Request request = mockRequest();
+        ComponentEventResultProcessor processor = mockComponentEventResultProcessor();
+        PageResponseRenderer renderer = mockPageResponseRenderer();
+        Page page = mockPage();
+        EventContext context = mockEventContext();
+        ComponentPageElement root = mockComponentPageElement();
+
+        train_get(cache, "foo/Bar", page);
+
+        train_getRootElement(page, root);
+
+        expect(
+                root.triggerContextEvent(EasyMock.eq(EventConstants.ACTIVATE), EasyMock
+                        .same(context), EasyMock.isA(ComponentEventCallback.class))).andReturn(
+                false);
+
+        train_getParameter(request, InternalConstants.LOOPBACK, "T");
+
+        // Skips the pageReset()
+
+        renderer.renderPageResponse(page);
+
+        replay();
+
+        PageRenderRequestHandler handler = new PageRenderRequestHandlerImpl(cache, processor,
+                renderer, request);
+
+        PageRenderRequestParameters parameters = new PageRenderRequestParameters("foo/Bar", context);
+
+        handler.handle(parameters);
+
+        verify();
+    }
+}

Propchange: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PageRenderRequestHandlerImplTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/urlrewriter/IntegrationTests.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/urlrewriter/IntegrationTests.java?rev=896559&r1=896558&r2=896559&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/urlrewriter/IntegrationTests.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/urlrewriter/IntegrationTests.java Wed Jan  6 17:35:59 2010
@@ -1,4 +1,4 @@
-// Copyright 2009 The Apache Software Foundation
+// Copyright 2009, 2010 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -42,7 +42,7 @@
     {
 
         open(BASE_URL);
-        assertAttribute("//a[@class='self']/@href", "/");
+        assertAttribute("//a[@class='self']/@href", "?t:lb=t");
         assertAttribute("//a[@class='dummy']/@href", "/notdummy");
 
 //        final String url = String.format("http://%s:%d/", SUBDOMAIN, JETTY_PORT);