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