You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2010/04/07 01:01:06 UTC
svn commit: r931362 - in /tapestry/tapestry5/trunk/tapestry-core/src:
main/java/org/apache/tapestry5/internal/services/
main/java/org/apache/tapestry5/services/
test/java/org/apache/tapestry5/internal/services/
Author: hlship
Date: Tue Apr 6 23:01:05 2010
New Revision: 931362
URL: http://svn.apache.org/viewvc?rev=931362&view=rev
Log:
TAP5-1099: Introduce public service responsible for handling page activation
Added:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageActivator.java (with props)
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageActivatorImpl.java (with props)
Removed:
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PageRenderDispatcherTest.java
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxComponentEventRequestHandler.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventRequestHandlerImpl.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageRenderRequestHandlerImpl.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImplTest.java
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PageRenderRequestHandlerImplTest.java
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxComponentEventRequestHandler.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxComponentEventRequestHandler.java?rev=931362&r1=931361&r2=931362&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxComponentEventRequestHandler.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxComponentEventRequestHandler.java Tue Apr 6 23:01:05 2010
@@ -48,13 +48,17 @@ public class AjaxComponentEventRequestHa
private final AjaxPartialResponseRenderer partialRenderer;
+ private final PageActivator pageActivator;
+
public AjaxComponentEventRequestHandler(RequestPageCache cache, Request request, PageRenderQueue queue, @Ajax
- ComponentEventResultProcessor resultProcessor, PageContentTypeAnalyzer pageContentTypeAnalyzer,
- Environment environment, AjaxPartialResponseRenderer partialRenderer)
+ ComponentEventResultProcessor resultProcessor, PageActivator pageActivator,
+ PageContentTypeAnalyzer pageContentTypeAnalyzer, Environment environment,
+ AjaxPartialResponseRenderer partialRenderer)
{
this.cache = cache;
this.queue = queue;
this.resultProcessor = resultProcessor;
+ this.pageActivator = pageActivator;
this.pageContentTypeAnalyzer = pageContentTypeAnalyzer;
this.request = request;
this.environment = environment;
@@ -78,16 +82,9 @@ public class AjaxComponentEventRequestHa
}
};
- ComponentResultProcessorWrapper callback = new ComponentResultProcessorWrapper(interceptor);
-
- activePage.getRootElement().triggerContextEvent(EventConstants.ACTIVATE, parameters.getPageActivationContext(),
- callback);
-
- if (callback.isAborted())
- {
- callback.rethrow();
+ if (pageActivator.activatePage(activePage.getRootElement().getComponentResources(), parameters
+ .getPageActivationContext(), interceptor))
return;
- }
// If we end up doing a partial render, the page render queue service needs to know the
// page that will be rendered (for logging purposes, if nothing else).
@@ -106,6 +103,8 @@ public class AjaxComponentEventRequestHa
// pass its event handler return values to the correct result processor.
// This is certainly the case for forms.
+ TrackableComponentEventCallback callback = new ComponentResultProcessorWrapper(interceptor);
+
environment.push(ComponentEventResultProcessor.class, interceptor);
environment.push(TrackableComponentEventCallback.class, callback);
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventRequestHandlerImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventRequestHandlerImpl.java?rev=931362&r1=931361&r2=931362&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventRequestHandlerImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventRequestHandlerImpl.java Tue Apr 6 23:01:05 2010
@@ -17,7 +17,6 @@ package org.apache.tapestry5.internal.se
import java.io.IOException;
import org.apache.tapestry5.TrackableComponentEventCallback;
-import org.apache.tapestry5.EventConstants;
import org.apache.tapestry5.internal.structure.ComponentPageElement;
import org.apache.tapestry5.internal.structure.Page;
import org.apache.tapestry5.ioc.annotations.Primary;
@@ -38,6 +37,8 @@ public class ComponentEventRequestHandle
private final Response response;
+ private final PageActivator pageActivator;
+
private final ActionRenderResponseGenerator generator;
private final Environment environment;
@@ -48,13 +49,14 @@ public class ComponentEventRequestHandle
RequestPageCache cache, Response response,
- ActionRenderResponseGenerator generator,
+ PageActivator pageActivator,
- Environment environment)
+ ActionRenderResponseGenerator generator, Environment environment)
{
this.resultProcessor = resultProcessor;
this.cache = cache;
this.response = response;
+ this.pageActivator = pageActivator;
this.generator = generator;
this.environment = environment;
}
@@ -63,25 +65,17 @@ public class ComponentEventRequestHandle
{
Page activePage = cache.get(parameters.getActivePageName());
+ if (pageActivator.activatePage(activePage.getRootElement().getComponentResources(), parameters
+ .getPageActivationContext(), resultProcessor))
+ return;
+
+ Page containerPage = cache.get(parameters.getContainingPageName());
+
TrackableComponentEventCallback callback = new ComponentResultProcessorWrapper(resultProcessor);
environment.push(ComponentEventResultProcessor.class, resultProcessor);
environment.push(TrackableComponentEventCallback.class, callback);
- // If activating the page returns a "navigational result", then don't trigger the action
- // on the component.
-
- activePage.getRootElement().triggerContextEvent(EventConstants.ACTIVATE, parameters.getPageActivationContext(),
- callback);
-
- if (callback.isAborted())
- {
- callback.rethrow();
- return;
- }
-
- Page containerPage = cache.get(parameters.getContainingPageName());
-
ComponentPageElement element = containerPage.getComponentElementByNestedId(parameters.getNestedComponentId());
boolean handled = element
Added: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageActivator.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageActivator.java?rev=931362&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageActivator.java (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageActivator.java Tue Apr 6 23:01:05 2010
@@ -0,0 +1,46 @@
+// 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 java.io.IOException;
+
+import org.apache.tapestry5.ComponentResources;
+import org.apache.tapestry5.EventConstants;
+import org.apache.tapestry5.EventContext;
+import org.apache.tapestry5.services.ComponentEventResultProcessor;
+
+/**
+ * Responsible for firing the {@linkplain EventConstants#ACTIVATE} event on the page.
+ *
+ * @since 5.2.0
+ */
+public interface PageActivator
+{
+ /**
+ * Activates the page.
+ *
+ * @param pageResources
+ * resource for the page
+ * @param activationContext
+ * the page activation context
+ * @param resultProcessor
+ * responsible for handling the value returned from the event handler method
+ * @return true if result processor received a non-null value (indicating that the processing of the request
+ * should terminate)
+ */
+ @SuppressWarnings("unchecked")
+ boolean activatePage(ComponentResources pageResources, EventContext activationContext,
+ ComponentEventResultProcessor resultProcessor) throws IOException;
+}
Propchange: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageActivator.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageActivatorImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageActivatorImpl.java?rev=931362&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageActivatorImpl.java (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageActivatorImpl.java Tue Apr 6 23:01:05 2010
@@ -0,0 +1,45 @@
+// 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 java.io.IOException;
+
+import org.apache.tapestry5.ComponentResources;
+import org.apache.tapestry5.EventConstants;
+import org.apache.tapestry5.EventContext;
+import org.apache.tapestry5.TrackableComponentEventCallback;
+import org.apache.tapestry5.services.ComponentEventResultProcessor;
+
+public class PageActivatorImpl implements PageActivator
+{
+
+ @SuppressWarnings("unchecked")
+ public boolean activatePage(ComponentResources pageResources, EventContext activationContext,
+ ComponentEventResultProcessor resultProcessor) throws IOException
+ {
+ TrackableComponentEventCallback callback = new ComponentResultProcessorWrapper(resultProcessor);
+
+ pageResources.triggerContextEvent(EventConstants.ACTIVATE, activationContext, callback);
+
+ if (callback.isAborted())
+ {
+ callback.rethrow();
+ return true;
+ }
+
+ return false;
+ }
+
+}
Propchange: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageActivatorImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageRenderRequestHandlerImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageRenderRequestHandlerImpl.java?rev=931362&r1=931361&r2=931362&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageRenderRequestHandlerImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageRenderRequestHandlerImpl.java Tue Apr 6 23:01:05 2010
@@ -16,8 +16,6 @@ package org.apache.tapestry5.internal.se
import java.io.IOException;
-import org.apache.tapestry5.TrackableComponentEventCallback;
-import org.apache.tapestry5.EventConstants;
import org.apache.tapestry5.internal.structure.Page;
import org.apache.tapestry5.ioc.annotations.Primary;
import org.apache.tapestry5.services.ComponentEventResultProcessor;
@@ -39,30 +37,26 @@ public class PageRenderRequestHandlerImp
private final PageResponseRenderer pageResponseRenderer;
+ private final PageActivator pageActivator;
+
public PageRenderRequestHandlerImpl(RequestPageCache cache, @Traditional
@Primary
- ComponentEventResultProcessor resultProcessor, PageResponseRenderer pageResponseRenderer)
+ ComponentEventResultProcessor resultProcessor, PageResponseRenderer pageResponseRenderer,
+ PageActivator pageActivator)
{
this.cache = cache;
this.resultProcessor = resultProcessor;
this.pageResponseRenderer = pageResponseRenderer;
+ this.pageActivator = pageActivator;
}
public void handle(PageRenderRequestParameters parameters) throws IOException
{
Page page = cache.get(parameters.getLogicalPageName());
- TrackableComponentEventCallback callback = new ComponentResultProcessorWrapper(resultProcessor);
-
- page.getRootElement().triggerContextEvent(EventConstants.ACTIVATE, parameters.getActivationContext(), callback);
-
- // The handler will have asked the result processor to send a response.
-
- if (callback.isAborted())
- {
- callback.rethrow();
+ if (pageActivator.activatePage(page.getRootElement().getComponentResources(),
+ parameters.getActivationContext(), resultProcessor))
return;
- }
if (!parameters.isLoopback())
page.pageReset();
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java?rev=931362&r1=931361&r2=931362&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java Tue Apr 6 23:01:05 2010
@@ -357,6 +357,7 @@ public final class TapestryModule
binder.bind(AssetPathAuthorizer.class, RegexAuthorizer.class).withId("RegexAuthorizer");
binder.bind(ValidatorMacro.class, ValidatorMacroImpl.class);
binder.bind(PropertiesFileParser.class, PropertiesFileParserImpl.class);
+ binder.bind(PageActivator.class, PageActivatorImpl.class);
}
// ========================================================================
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=931362&r1=931361&r2=931362&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 Tue Apr 6 23:01:05 2010
@@ -1,10 +1,10 @@
-// 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.
// You may obtain a copy of the License at
//
-// http://www.apache.org/licenses/LICENSE-2.0
+// 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,
@@ -16,9 +16,16 @@ package org.apache.tapestry5.internal.se
import org.apache.tapestry5.Link;
import org.apache.tapestry5.internal.EmptyEventContext;
+import org.apache.tapestry5.internal.InternalConstants;
import org.apache.tapestry5.internal.test.InternalBaseTestCase;
import org.apache.tapestry5.ioc.services.TypeCoercer;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.ComponentClassResolver;
+import org.apache.tapestry5.services.ComponentEventLinkEncoder;
+import org.apache.tapestry5.services.ContextPathEncoder;
+import org.apache.tapestry5.services.LocalizationSetter;
+import org.apache.tapestry5.services.PageRenderRequestParameters;
+import org.apache.tapestry5.services.Request;
+import org.apache.tapestry5.services.Response;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
@@ -31,10 +38,13 @@ public class ComponentEventLinkEncoderIm
{
private TypeCoercer typeCoercer;
+ private ContextPathEncoder contextPathEncoder;
+
@BeforeClass
public void setup()
{
typeCoercer = getService(TypeCoercer.class);
+ contextPathEncoder = getService(ContextPathEncoder.class);
}
@Test
@@ -53,11 +63,10 @@ public class ComponentEventLinkEncoderIm
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);
- PageRenderRequestParameters parameters = new PageRenderRequestParameters("MyPage",
- new EmptyEventContext());
+ PageRenderRequestParameters parameters = new PageRenderRequestParameters("MyPage", new EmptyEventContext());
Link link = encoder.createPageRenderLink(parameters);
@@ -82,11 +91,11 @@ public class ComponentEventLinkEncoderIm
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);
- PageRenderRequestParameters parameters = new PageRenderRequestParameters("admin/Index",
- new ArrayEventContext(typeCoercer, "abc"));
+ PageRenderRequestParameters parameters = new PageRenderRequestParameters("admin/Index", new ArrayEventContext(
+ typeCoercer, "abc"));
Link link = encoder.createPageRenderLink(parameters);
@@ -111,17 +120,221 @@ public class ComponentEventLinkEncoderIm
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);
- PageRenderRequestParameters parameters = new PageRenderRequestParameters("Index",
- new EmptyEventContext());
+ PageRenderRequestParameters parameters = new PageRenderRequestParameters("Index", new EmptyEventContext());
Link link = encoder.createPageRenderLink(parameters);
assertEquals(link.toAbsoluteURI(), "MAGIC");
verify();
+ }
+
+ @Test
+ public void empty_path() throws Exception
+ {
+ ComponentClassResolver resolver = mockComponentClassResolver();
+ Request request = mockRequest();
+ Response response = mockResponse();
+ LocalizationSetter ls = mockLocalizationSetter();
+
+ train_getPath(request, "");
+
+ train_setLocaleFromLocaleName(ls, "", false);
+
+ train_isPageName(resolver, "", false);
+
+ replay();
+
+ ComponentEventLinkEncoderImpl linkEncoder = new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, ls,
+ request, response, null, null, null, true);
+
+ PageRenderRequestParameters parameters = linkEncoder.decodePageRenderRequest(request);
+
+ assertNull(parameters);
+
+ verify();
+ }
+
+ @Test
+ public void not_a_page_request() throws Exception
+ {
+ ComponentClassResolver resolver = mockComponentClassResolver();
+ Request request = mockRequest();
+ Response response = mockResponse();
+ LocalizationSetter ls = mockLocalizationSetter();
+
+ stub_isPageName(resolver, false);
+
+ train_setLocaleFromLocaleName(ls, "foo", false);
+ train_getPath(request, "/foo/Bar.baz");
+
+ replay();
+
+ ComponentEventLinkEncoderImpl linkEncoder = new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, ls,
+ request, response, null, null, null, true);
+
+ PageRenderRequestParameters parameters = linkEncoder.decodePageRenderRequest(request);
+
+ assertNull(parameters);
+
+ verify();
+ }
+
+ @Test
+ public void just_the_locale_name() throws Exception
+ {
+ ComponentClassResolver resolver = mockComponentClassResolver();
+ Request request = mockRequest();
+ Response response = mockResponse();
+ LocalizationSetter ls = mockLocalizationSetter();
+
+ train_getPath(request, "/en");
+
+ train_setLocaleFromLocaleName(ls, "en", true);
+
+ train_isPageName(resolver, "", false);
+
+ replay();
+
+ ComponentEventLinkEncoderImpl linkEncoder = new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, ls,
+ request, response, null, null, null, true);
+
+ PageRenderRequestParameters parameters = linkEncoder.decodePageRenderRequest(request);
+
+ assertNull(parameters);
+
+ verify();
+ }
+
+ private Request mockRequest(boolean isLoopback)
+ {
+ Request request = mockRequest();
+
+ train_getParameter(request, InternalConstants.LOOPBACK, isLoopback ? "t" : null);
+
+ return request;
+ }
+
+ /**
+ * TAPESTRY-2226
+ */
+ @Test
+ public void page_activation_context_for_root_index_page() throws Exception
+ {
+ ComponentClassResolver resolver = mockComponentClassResolver();
+ Request request = mockRequest(false);
+ LocalizationSetter ls = mockLocalizationSetter();
+
+ train_getPath(request, "/foo/bar");
+
+ train_setLocaleFromLocaleName(ls, "foo", false);
+
+ train_isPageName(resolver, "foo/bar", false);
+ train_isPageName(resolver, "foo", false);
+ train_isPageName(resolver, "", true);
+
+ train_canonicalizePageName(resolver, "", "index");
+
+ replay();
+
+ ComponentEventLinkEncoderImpl linkEncoder = new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, ls,
+ request, null, null, null, null, true);
+
+ PageRenderRequestParameters parameters = linkEncoder.decodePageRenderRequest(request);
+
+ assertEquals(parameters.getLogicalPageName(), "index");
+ assertArraysEqual(parameters.getActivationContext().toStrings(), "foo", "bar");
+ assertFalse(parameters.isLoopback());
+
+ verify();
+ }
+
+ @Test
+ public void no_extra_context_without_final_slash() throws Exception
+ {
+ no_extra_context(false);
+ }
+
+ @Test
+ public void no_extra_context_with_final_slash() throws Exception
+ {
+ no_extra_context(true);
+ }
+
+ private void no_extra_context(boolean finalSlash) throws Exception
+ {
+ ComponentClassResolver resolver = mockComponentClassResolver();
+ Request request = mockRequest(false);
+ LocalizationSetter ls = mockLocalizationSetter();
+
+ String path = "/foo/Bar" + (finalSlash ? "/" : "");
+ train_getPath(request, path);
+
+ train_setLocaleFromLocaleName(ls, "foo", false);
+
+ train_isPageName(resolver, "foo/Bar", true);
+
+ train_canonicalizePageName(resolver, "foo/Bar", "foo/bar");
+
+ replay();
+ ComponentEventLinkEncoderImpl linkEncoder = new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, ls,
+ request, null, null, null, null, true);
+
+ PageRenderRequestParameters parameters = linkEncoder.decodePageRenderRequest(request);
+
+ assertEquals(parameters.getLogicalPageName(), "foo/bar");
+ assertEquals(parameters.getActivationContext().getCount(), 0);
+ assertFalse(parameters.isLoopback());
+
+ verify();
+ }
+
+ @Test
+ public void context_passed_in_path_without_final_slash() throws Exception
+ {
+ context_passed_in_path(false);
+ }
+
+ @Test
+ public void context_passed_in_path_with_final_slash() throws Exception
+ {
+ context_passed_in_path(true);
+ }
+
+ private void context_passed_in_path(boolean finalSlash) throws Exception
+ {
+ ComponentClassResolver resolver = mockComponentClassResolver();
+ Request request = mockRequest(true);
+ LocalizationSetter ls = mockLocalizationSetter();
+
+ String path = "/foo/Bar/zip/zoom" + (finalSlash ? "/" : "");
+ train_getPath(request, path);
+
+ train_setLocaleFromLocaleName(ls, "foo", false);
+
+ train_isPageName(resolver, "foo/Bar/zip/zoom", false);
+
+ train_isPageName(resolver, "foo/Bar/zip", false);
+
+ train_isPageName(resolver, "foo/Bar", true);
+
+ train_canonicalizePageName(resolver, "foo/Bar", "foo/bar");
+
+ replay();
+
+ ComponentEventLinkEncoderImpl linkEncoder = new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, ls,
+ request, null, null, null, null, true);
+
+ PageRenderRequestParameters parameters = linkEncoder.decodePageRenderRequest(request);
+
+ assertEquals(parameters.getLogicalPageName(), "foo/bar");
+ assertArraysEqual(parameters.getActivationContext().toStrings(), "zip", "zoom");
+ assertTrue(parameters.isLoopback());
+
+ verify();
}
}
Modified: 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=931362&r1=931361&r2=931362&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PageRenderRequestHandlerImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PageRenderRequestHandlerImplTest.java Tue Apr 6 23:01:05 2010
@@ -4,7 +4,7 @@
// 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
+// 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,
@@ -14,16 +14,14 @@
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.InternalComponentResources;
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.easymock.EasyMock;
import org.testng.annotations.Test;
public class PageRenderRequestHandlerImplTest extends InternalBaseTestCase
@@ -37,15 +35,14 @@ public class PageRenderRequestHandlerImp
Page page = mockPage();
EventContext context = mockEventContext();
ComponentPageElement root = mockComponentPageElement();
+ InternalComponentResources pageResources = mockInternalComponentResources();
+ PageActivator activator = newMock(PageActivator.class);
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_getComponentResources(root, pageResources);
+ expect(activator.activatePage(pageResources, context, processor)).andReturn(false);
// Skips the pageReset()
@@ -53,11 +50,9 @@ public class PageRenderRequestHandlerImp
replay();
- PageRenderRequestHandler handler = new PageRenderRequestHandlerImpl(cache, processor,
- renderer);
+ PageRenderRequestHandler handler = new PageRenderRequestHandlerImpl(cache, processor, renderer, activator);
- PageRenderRequestParameters parameters = new PageRenderRequestParameters("foo/Bar",
- context, true);
+ PageRenderRequestParameters parameters = new PageRenderRequestParameters("foo/Bar", context, true);
handler.handle(parameters);