Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java?view=diff&rev=550147&r1=550146&r2=550147 ============================================================================== --- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java (original) +++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java Sat Jun 23 18:13:03 2007 @@ -51,7 +51,6 @@ import org.apache.tapestry.annotations.SetupRender; import org.apache.tapestry.beaneditor.Validate; import org.apache.tapestry.corelib.data.GridPagerPosition; -import org.apache.tapestry.dom.DefaultMarkupModel; import org.apache.tapestry.dom.Document; import org.apache.tapestry.grid.GridDataSource; import org.apache.tapestry.internal.InternalConstants; @@ -67,7 +66,6 @@ import org.apache.tapestry.internal.bindings.ValidateBindingFactory; import org.apache.tapestry.internal.grid.ListGridDataSource; import org.apache.tapestry.internal.grid.NullDataSource; -import org.apache.tapestry.internal.services.ActionLinkHandler; import org.apache.tapestry.internal.services.AliasImpl; import org.apache.tapestry.internal.services.AliasManagerImpl; import org.apache.tapestry.internal.services.ApplicationGlobalsImpl; @@ -84,11 +82,11 @@ import org.apache.tapestry.internal.services.ClasspathAssetAliasManagerImpl; import org.apache.tapestry.internal.services.CommonResourcesInjectionProvider; import org.apache.tapestry.internal.services.ComponentActionDispatcher; +import org.apache.tapestry.internal.services.ComponentActionRequestHandlerImpl; import org.apache.tapestry.internal.services.ComponentClassResolverImpl; import org.apache.tapestry.internal.services.ComponentDefaultProviderImpl; import org.apache.tapestry.internal.services.ComponentInstanceResultProcessor; import org.apache.tapestry.internal.services.ComponentInstantiatorSource; -import org.apache.tapestry.internal.services.ComponentInvocationMap; import org.apache.tapestry.internal.services.ComponentLifecycleMethodWorker; import org.apache.tapestry.internal.services.ComponentMessagesSourceImpl; import org.apache.tapestry.internal.services.ComponentResourcesInjectionProvider; @@ -118,7 +116,7 @@ import org.apache.tapestry.internal.services.InternalModule; import org.apache.tapestry.internal.services.LinkActionResponseGenerator; import org.apache.tapestry.internal.services.LinkFactory; -import org.apache.tapestry.internal.services.MarkupWriterImpl; +import org.apache.tapestry.internal.services.MarkupWriterFactoryImpl; import org.apache.tapestry.internal.services.MetaDataLocatorImpl; import org.apache.tapestry.internal.services.MetaWorker; import org.apache.tapestry.internal.services.MixinAfterWorker; @@ -126,15 +124,13 @@ import org.apache.tapestry.internal.services.ObjectComponentEventResultProcessor; import org.apache.tapestry.internal.services.OnEventWorker; import org.apache.tapestry.internal.services.PageLifecycleAnnotationWorker; -import org.apache.tapestry.internal.services.PageLinkHandler; import org.apache.tapestry.internal.services.PageRenderDispatcher; +import org.apache.tapestry.internal.services.PageRenderRequestHandlerImpl; import org.apache.tapestry.internal.services.PageRenderSupportImpl; import org.apache.tapestry.internal.services.PageResponseRenderer; import org.apache.tapestry.internal.services.ParameterWorker; import org.apache.tapestry.internal.services.PersistWorker; import org.apache.tapestry.internal.services.PersistentFieldManagerImpl; -import org.apache.tapestry.internal.services.StringValueEncoder; -import org.apache.tapestry.internal.services.ValueEncoderSourceImpl; import org.apache.tapestry.internal.services.PropertyConduitSourceImpl; import org.apache.tapestry.internal.services.RenderCommandWorker; import org.apache.tapestry.internal.services.RequestGlobalsImpl; @@ -153,6 +149,7 @@ import org.apache.tapestry.internal.services.StaticFilesFilter; import org.apache.tapestry.internal.services.StreamResponseResultProcessor; import org.apache.tapestry.internal.services.StringResultProcessor; +import org.apache.tapestry.internal.services.StringValueEncoder; import org.apache.tapestry.internal.services.SupportsInformalParametersWorker; import org.apache.tapestry.internal.services.TranslatorDefaultSourceImpl; import org.apache.tapestry.internal.services.TranslatorSourceImpl; @@ -160,6 +157,7 @@ import org.apache.tapestry.internal.services.UpdateListenerHub; import org.apache.tapestry.internal.services.ValidationConstraintGeneratorImpl; import org.apache.tapestry.internal.services.ValidationMessagesSourceImpl; +import org.apache.tapestry.internal.services.ValueEncoderSourceImpl; import org.apache.tapestry.ioc.AnnotationProvider; import org.apache.tapestry.ioc.Configuration; import org.apache.tapestry.ioc.Location; @@ -180,7 +178,6 @@ import org.apache.tapestry.ioc.services.ClassFactory; import org.apache.tapestry.ioc.services.Coercion; import org.apache.tapestry.ioc.services.CoercionTuple; -import org.apache.tapestry.ioc.services.ComponentDefaultProvider; import org.apache.tapestry.ioc.services.PipelineBuilder; import org.apache.tapestry.ioc.services.PropertyAccess; import org.apache.tapestry.ioc.services.PropertyShadowBuilder; @@ -233,18 +230,7 @@ binder.bind(BeanModelSource.class, BeanModelSourceImpl.class); binder.bind(BeanBlockSource.class, BeanBlockSourceImpl.class); binder.bind(ComponentDefaultProvider.class, ComponentDefaultProviderImpl.class); - } - - public static MarkupWriterFactory build(final ComponentInvocationMap componentInvocationMap) - { - // Temporary ... - return new MarkupWriterFactory() - { - public MarkupWriter newMarkupWriter() - { - return new MarkupWriterImpl(new DefaultMarkupModel(), componentInvocationMap); - } - }; + binder.bind(MarkupWriterFactory.class, MarkupWriterFactoryImpl.class); } public static Alias build(Log log, @@ -1306,9 +1292,9 @@ ResourceStreamer streamer, - PageLinkHandler pageLinkHandler, + PageRenderRequestHandler pageRenderRequestHandler, - ActionLinkHandler actionLinkHandler, + ComponentActionRequestHandler componentActionRequestHandler, ComponentClassResolver componentClassResolver, @@ -1318,7 +1304,7 @@ // Looks for the root path and renders the start page configuration.add("RootPath", new RootPathDispatcher(componentClassResolver, - pageLinkHandler, _pageResponseRenderer, startPageName), "before:Asset"); + pageRenderRequestHandler, _pageResponseRenderer, startPageName), "before:Asset"); // This goes first because an asset to be streamed may have an file extension, such as // ".html", that will confuse the later dispatchers. @@ -1329,19 +1315,33 @@ "before:PageRender"); configuration.add("PageRender", new PageRenderDispatcher(componentClassResolver, - pageLinkHandler, _pageResponseRenderer)); + pageRenderRequestHandler)); - configuration.add( - "ComponentAction", - new ComponentActionDispatcher(actionLinkHandler), - "after:PageRender"); + configuration.add("ComponentAction", new ComponentActionDispatcher( + componentActionRequestHandler), "after:PageRender"); } + /** + * Contributes meta data defaults: + * <dl> + * <dt>[EMAIL PROTECTED] PersistentFieldManagerImpl#META_KEY} + * <dd>[EMAIL PROTECTED] PersistentFieldManagerImpl#DEFAULT_STRATEGY} + * <dt>[EMAIL PROTECTED] TapestryConstants#RESPONSE_CONTENT_TYPE} + * <dd>text/html + * <dt>[EMAIL PROTECTED] TapestryConstants#RESPONSE_ENCODING} + * <dd>UTF-8 + * </dl> + * + * @param configuration + */ public void contributeMetaDataLocator(MappedConfiguration<String, String> configuration) { configuration.add( PersistentFieldManagerImpl.META_KEY, PersistentFieldManagerImpl.DEFAULT_STRATEGY); + + configuration.add(TapestryConstants.RESPONSE_CONTENT_TYPE, "text/html"); + configuration.add(TapestryConstants.RESPONSE_ENCODING, "UTF-8"); } /** @@ -1498,4 +1498,27 @@ configuration.add(String.class, new GenericValueEncoderFactory(new StringValueEncoder())); configuration.add(Enum.class, new EnumValueEncoderFactory()); } + + public PageRenderRequestHandler buildPageRenderRequestHandler( + List<PageRenderRequestFilter> configuration, Log log, ServiceResources resources) + { + return _pipelineBuilder.build( + log, + PageRenderRequestHandler.class, + PageRenderRequestFilter.class, + configuration, + resources.autobuild(PageRenderRequestHandlerImpl.class)); + } + + public ComponentActionRequestHandler buildComponentActionRequestHandler( + List<ComponentActionRequestFilter> configuration, Log log, ServiceResources resources) + { + return _pipelineBuilder.build( + log, + ComponentActionRequestHandler.class, + ComponentActionRequestFilter.class, + configuration, + resources.autobuild(ComponentActionRequestHandlerImpl.class)); + } + }
Modified: tapestry/tapestry5/trunk/tapestry-core/src/site/apt/guide/localization.apt URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/site/apt/guide/localization.apt?view=diff&rev=550147&r1=550146&r2=550147 ============================================================================== --- tapestry/tapestry5/trunk/tapestry-core/src/site/apt/guide/localization.apt (original) +++ tapestry/tapestry5/trunk/tapestry-core/src/site/apt/guide/localization.apt Sat Jun 23 18:13:03 2007 @@ -91,7 +91,7 @@ greeting=Bienvenue en arriere +----+ - Programattically, you may inject your component message catalog into your class, as an instance of the Messages interface: + Programatically, you may inject your component message catalog into your class, as an instance of the Messages interface: +----+ @Inject @@ -153,5 +153,18 @@ Tapestry does not yet support changing the locale, but that will be available shortly. The intent is to mimic Tapestry 4 behavior: store a cookie on the client to provide the default for the locale on the next visit, and store a locale name in the session (if a session exists). <<TODO: I believe this has been implemented by Kent.>> + +Output Content Type and Charset + + When Tapestry renders a page, the very first step is to determine the output content type and charset. + + This information is obtained from meta data on the page itself. Meta data is specified using the + {{{../apidocs/org/apache/tapestry/annotations/Meta.html}Meta}} annotation. + + First, the response content type is obtained via meta-data key "tapestry.response-content-type". This value defaults to "text/html". + + Next, the encoding is obtained via meta-data key "tapestry.response-encoding". This value defaults to "UTF-8". This is only necessary if + the content type does not provide a charset parameter (i.e., "text/html;charset=ISO-8559-1"). The encoding becomes the charset. + Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/IntegrationTests.java URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/IntegrationTests.java?view=diff&rev=550147&r1=550146&r2=550147 ============================================================================== --- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/IntegrationTests.java (original) +++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/IntegrationTests.java Sat Jun 23 18:13:03 2007 @@ -1,17 +1,17 @@ -// Copyright 2006, 2007 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. - +// Copyright 2006, 2007 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.tapestry.integration; import java.io.BufferedInputStream; Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ComponentActionDispatcherTest.java URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ComponentActionDispatcherTest.java?view=diff&rev=550147&r1=550146&r2=550147 ============================================================================== --- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ComponentActionDispatcherTest.java (original) +++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ComponentActionDispatcherTest.java Sat Jun 23 18:13:03 2007 @@ -23,6 +23,7 @@ import org.apache.tapestry.internal.InternalConstants; import org.apache.tapestry.internal.test.InternalBaseTestCase; import org.apache.tapestry.services.ActionResponseGenerator; +import org.apache.tapestry.services.ComponentActionRequestHandler; import org.apache.tapestry.services.Dispatcher; import org.apache.tapestry.services.Request; import org.apache.tapestry.services.Response; @@ -33,7 +34,7 @@ @Test public void no_dot_or_colon_in_path() throws Exception { - ActionLinkHandler handler = newActionLinkHandler(); + ComponentActionRequestHandler handler = newComponentActionRequestHandler(); Request request = mockRequest(); Response response = mockResponse(); @@ -48,9 +49,9 @@ verify(); } - protected final ActionLinkHandler newActionLinkHandler() + protected final ComponentActionRequestHandler newComponentActionRequestHandler() { - return newMock(ActionLinkHandler.class); + return newMock(ComponentActionRequestHandler.class); } @Test @@ -125,7 +126,7 @@ @Test public void page_activation_context_in_request() throws Exception { - ActionLinkHandler handler = newActionLinkHandler(); + ComponentActionRequestHandler handler = newComponentActionRequestHandler(); Request request = mockRequest(); Response response = mockResponse(); ActionResponseGenerator generator = newMock(ActionResponseGenerator.class); @@ -157,7 +158,7 @@ private void test(String requestPath, String logicalPageName, String nestedComponentId, String eventType, String... context) throws IOException { - ActionLinkHandler handler = newActionLinkHandler(); + ComponentActionRequestHandler handler = newComponentActionRequestHandler(); Request request = mockRequest(); Response response = mockResponse(); ActionResponseGenerator generator = newMock(ActionResponseGenerator.class); Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ComponentDefaultProviderImplTest.java URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ComponentDefaultProviderImplTest.java?view=diff&rev=550147&r1=550146&r2=550147 ============================================================================== --- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ComponentDefaultProviderImplTest.java (original) +++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/ComponentDefaultProviderImplTest.java Sat Jun 23 18:13:03 2007 @@ -20,11 +20,11 @@ import org.apache.tapestry.internal.test.InternalBaseTestCase; import org.apache.tapestry.ioc.Messages; import org.apache.tapestry.ioc.services.ClassPropertyAdapter; -import org.apache.tapestry.ioc.services.ComponentDefaultProvider; import org.apache.tapestry.ioc.services.PropertyAccess; import org.apache.tapestry.ioc.services.PropertyAdapter; import org.apache.tapestry.runtime.Component; import org.apache.tapestry.services.BindingSource; +import org.apache.tapestry.services.ComponentDefaultProvider; import org.testng.annotations.Test; public class ComponentDefaultProviderImplTest extends InternalBaseTestCase Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/MetaDataLocatorImplTest.java URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/MetaDataLocatorImplTest.java?view=diff&rev=550147&r1=550146&r2=550147 ============================================================================== --- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/MetaDataLocatorImplTest.java (original) +++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/MetaDataLocatorImplTest.java Sat Jun 23 18:13:03 2007 @@ -22,7 +22,6 @@ import org.apache.tapestry.ComponentResources; import org.apache.tapestry.internal.test.InternalBaseTestCase; import org.apache.tapestry.model.ComponentModel; -import org.apache.tapestry.services.ComponentClassResolver; import org.apache.tapestry.services.MetaDataLocator; import org.testng.annotations.Test; @@ -70,7 +69,6 @@ ComponentResources containerResources = mockComponentResources(); ComponentModel model = mockComponentModel(); ComponentModel containerModel = mockComponentModel(); - ComponentClassResolver resolver = mockComponentClassResolver(); String key = "foo.bar"; String value = "zaphod"; @@ -178,7 +176,6 @@ { ComponentResources resources = mockComponentResources(); ComponentModel model = mockComponentModel(); - ComponentClassResolver resolver = mockComponentClassResolver(); String key = "foo.bar"; String value = "zaphod"; Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/PageRenderDispatcherTest.java URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/PageRenderDispatcherTest.java?view=diff&rev=550147&r1=550146&r2=550147 ============================================================================== --- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/PageRenderDispatcherTest.java (original) +++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/PageRenderDispatcherTest.java Sat Jun 23 18:13:03 2007 @@ -26,6 +26,7 @@ import org.apache.tapestry.services.ComponentClassResolver; import org.apache.tapestry.services.ComponentEventResultProcessor; import org.apache.tapestry.services.Dispatcher; +import org.apache.tapestry.services.PageRenderRequestHandler; import org.apache.tapestry.services.Request; import org.apache.tapestry.services.Response; import org.testng.annotations.Test; @@ -38,7 +39,7 @@ ComponentClassResolver resolver = mockComponentClassResolver(); PageResponseRenderer renderer = mockPageResponseRenderer(); RequestPageCache cache = mockRequestPageCache(); - PageLinkHandler handler = new PageLinkHandlerImpl(cache, null); + PageRenderRequestHandler handler = new PageRenderRequestHandlerImpl(cache, null, null, null); Request request = mockRequest(); Response response = mockResponse(); @@ -48,7 +49,7 @@ replay(); - Dispatcher d = new PageRenderDispatcher(resolver, handler, renderer); + Dispatcher d = new PageRenderDispatcher(resolver, handler); assertFalse(d.dispatch(request, response)); @@ -61,7 +62,7 @@ { ComponentClassResolver resolver = mockComponentClassResolver(); PageResponseRenderer renderer = mockPageResponseRenderer(); - PageLinkHandler handler = newMock(PageLinkHandler.class); + PageRenderRequestHandler handler = newMock(PageRenderRequestHandler.class); Request request = mockRequest(); Response response = mockResponse(); @@ -69,7 +70,7 @@ replay(); - Dispatcher d = new PageRenderDispatcher(resolver, handler, renderer); + Dispatcher d = new PageRenderDispatcher(resolver, handler); assertFalse(d.dispatch(request, response)); @@ -119,9 +120,9 @@ replay(); - PageLinkHandler handler = new PageLinkHandlerImpl(cache, processor); + PageRenderRequestHandler handler = new PageRenderRequestHandlerImpl(cache, processor, renderer, response); - Dispatcher d = new PageRenderDispatcher(resolver, handler, renderer); + Dispatcher d = new PageRenderDispatcher(resolver, handler); assertTrue(d.dispatch(request, response)); @@ -167,9 +168,9 @@ replay(); - PageLinkHandler handler = new PageLinkHandlerImpl(cache, processor); + PageRenderRequestHandler handler = new PageRenderRequestHandlerImpl(cache, processor, renderer, response); - Dispatcher d = new PageRenderDispatcher(resolver, handler, renderer); + Dispatcher d = new PageRenderDispatcher(resolver, handler); assertTrue(d.dispatch(request, response)); Added: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/RequestEncodingInitializerImplTest.java URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/RequestEncodingInitializerImplTest.java?view=auto&rev=550147 ============================================================================== --- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/RequestEncodingInitializerImplTest.java (added) +++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/RequestEncodingInitializerImplTest.java Sat Jun 23 18:13:03 2007 @@ -0,0 +1,104 @@ +// Copyright 2007 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.tapestry.internal.services; + +import org.apache.tapestry.TapestryConstants; +import org.apache.tapestry.internal.InternalComponentResources; +import org.apache.tapestry.internal.structure.ComponentPageElement; +import org.apache.tapestry.internal.structure.Page; +import org.apache.tapestry.internal.test.InternalBaseTestCase; +import org.apache.tapestry.services.MetaDataLocator; +import org.apache.tapestry.services.Request; +import org.testng.annotations.Test; + +public class RequestEncodingInitializerImplTest extends InternalBaseTestCase +{ + @Test + public void encoding_in_content_type() + { + RequestPageCache cache = mockRequestPageCache(); + Page page = mockPage(); + ComponentPageElement element = mockComponentPageElement(); + InternalComponentResources resources = mockInternalComponentResources(); + MetaDataLocator locator = mockMetaDataLocator(); + Request request = mockRequest(); + String pageName = "MyPage"; + + train_get(cache, pageName, page); + train_getRootElement(page, element); + train_getComponentResources(element, resources); + + train_findMeta( + locator, + TapestryConstants.RESPONSE_CONTENT_TYPE, + resources, + "text/html;charset=zebra"); + + request.setEncoding("zebra"); + + replay(); + + RequestEncodingInitializer init = new RequestEncodingInitializerImpl(cache, locator, + request); + + init.initializeRequestEncoding(pageName); + + verify(); + } + + @Test + public void encoding_on_second_meta_data() + { + RequestPageCache cache = mockRequestPageCache(); + Page page = mockPage(); + ComponentPageElement element = mockComponentPageElement(); + InternalComponentResources resources = mockInternalComponentResources(); + MetaDataLocator locator = mockMetaDataLocator(); + Request request = mockRequest(); + String pageName = "MyPage"; + String encoding = "ostritch"; + + train_get(cache, pageName, page); + train_getRootElement(page, element); + train_getComponentResources(element, resources); + + train_findMeta(locator, TapestryConstants.RESPONSE_CONTENT_TYPE, resources, "text/html"); + + train_findMeta(locator, TapestryConstants.RESPONSE_ENCODING, resources, encoding); + + request.setEncoding(encoding); + + replay(); + + RequestEncodingInitializer init = new RequestEncodingInitializerImpl(cache, locator, + request); + + init.initializeRequestEncoding(pageName); + + verify(); + } + + protected final void train_findMeta(MetaDataLocator locator, String metaDataKey, + InternalComponentResources resources, String metaDataValue) + { + expect(locator.findMeta(metaDataKey, resources)).andReturn(metaDataValue); + } + + protected final MetaDataLocator mockMetaDataLocator() + { + return newMock(MetaDataLocator.class); + } + +} Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/RequestImplTest.java URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/RequestImplTest.java?view=diff&rev=550147&r1=550146&r2=550147 ============================================================================== --- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/RequestImplTest.java (original) +++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/RequestImplTest.java Sat Jun 23 18:13:03 2007 @@ -12,51 +12,96 @@ // See the License for the specific language governing permissions and // limitations under the License. -package org.apache.tapestry.internal.services; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; - -import org.apache.tapestry.internal.test.InternalBaseTestCase; -import org.apache.tapestry.services.Request; -import org.apache.tapestry.services.Session; -import org.testng.annotations.Test; - -public class RequestImplTest extends InternalBaseTestCase -{ - @Test - public void get_session_doesnt_exist() - { - HttpServletRequest sr = mockHttpServletRequest(); - - train_getSession(sr, false, null); - - replay(); - - Request request = new RequestImpl(sr); - - assertNull(request.getSession(false)); - - verify(); - } - - @Test - public void force_session_create() - { - HttpServletRequest sr = mockHttpServletRequest(); - HttpSession ss = mockHttpSession(); - - train_getSession(sr, true, ss); - - train_getAttribute(ss, "foo", "bar"); - - replay(); - - Request request = new RequestImpl(sr); - Session session = request.getSession(true); - - assertEquals(session.getAttribute("foo"), "bar"); - - verify(); - } -} +package org.apache.tapestry.internal.services; + +import java.io.UnsupportedEncodingException; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; + +import org.apache.tapestry.internal.test.InternalBaseTestCase; +import org.apache.tapestry.services.Request; +import org.apache.tapestry.services.Session; +import org.testng.annotations.Test; + +public class RequestImplTest extends InternalBaseTestCase +{ + @Test + public void get_session_doesnt_exist() + { + HttpServletRequest sr = mockHttpServletRequest(); + + train_getSession(sr, false, null); + + replay(); + + Request request = new RequestImpl(sr); + + assertNull(request.getSession(false)); + + verify(); + } + + @Test + public void force_session_create() + { + HttpServletRequest sr = mockHttpServletRequest(); + HttpSession ss = mockHttpSession(); + + train_getSession(sr, true, ss); + + train_getAttribute(ss, "foo", "bar"); + + replay(); + + Request request = new RequestImpl(sr); + Session session = request.getSession(true); + + assertEquals(session.getAttribute("foo"), "bar"); + + verify(); + } + + @Test + public void set_encoding_success() throws Exception + { + HttpServletRequest sr = mockHttpServletRequest(); + + String encoding = "the-encoding"; + + sr.setCharacterEncoding(encoding); + + replay(); + + new RequestImpl(sr).setEncoding(encoding); + + verify(); + } + + @Test + public void set_encoding_failure() throws Exception + { + HttpServletRequest sr = mockHttpServletRequest(); + + String encoding = "the-encoding"; + UnsupportedEncodingException exception = new UnsupportedEncodingException("Oops."); + + sr.setCharacterEncoding(encoding); + getMocksControl().andThrow(exception); + + replay(); + + try + { + new RequestImpl(sr).setEncoding(encoding); + unreachable(); + } + catch (RuntimeException ex) + { + assertSame(ex.getCause(), exception); + } + + verify(); + + } +} Added: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/util/ContentTypeTest.java URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/util/ContentTypeTest.java?view=auto&rev=550147 ============================================================================== --- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/util/ContentTypeTest.java (added) +++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/util/ContentTypeTest.java Sat Jun 23 18:13:03 2007 @@ -0,0 +1,129 @@ +// Copyright 2007 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.tapestry.internal.util; + +import java.util.List; + +import org.apache.tapestry.internal.util.ContentType; +import org.testng.Assert; +import org.testng.annotations.Test; + +public class ContentTypeTest extends Assert +{ + @Test + public void simple_equals() + { + ContentType master = new ContentType("text/html"); + + assertFalse(master.equals(null)); + assertFalse(master.equals(this)); + assertTrue(master.equals(master)); + assertTrue(master.equals(new ContentType("text/html"))); + assertFalse(master.equals(new ContentType("foo/bar"))); + assertFalse(master.equals(new ContentType("text/plain"))); + } + + @Test + public void equals_with_parameters() + { + ContentType master = new ContentType("text/html;charset=utf-8"); + + assertFalse(master.equals(new ContentType("text/html"))); + assertTrue(master.equals(new ContentType("text/html;charset=utf-8"))); + assertFalse(master.equals(new ContentType("text/html;charset=utf-8;foo=bar"))); + + // Check that keys are case insensitive + + assertTrue(master.equals(new ContentType("text/html;Charset=utf-8"))); + + master = new ContentType("text/html;foo=bar;biff=bazz"); + + assertTrue(master.equals(new ContentType("text/html;foo=bar;biff=bazz"))); + assertTrue(master.equals(new ContentType("text/html;Foo=bar;Biff=bazz"))); + assertTrue(master.equals(new ContentType("text/html;biff=bazz;foo=bar"))); + } + + @Test + public void parse_with_parameters() throws Exception + { + ContentType contentType = new ContentType("text/html;charset=utf-8"); + + assertEquals(contentType.getBaseType(), "text"); + + assertEquals(contentType.getSubType(), "html"); + + assertEquals(contentType.getMimeType(), "text/html"); + + List<String> parameterNames = contentType.getParameterNames(); + assertEquals(parameterNames.size(), 1); + + assertEquals(parameterNames.get(0), "charset"); + + String charset = contentType.getParameter("charset"); + assertEquals(charset, "utf-8"); + + String nonexistant = contentType.getParameter("nonexistant"); + assertTrue(nonexistant == null); + } + + @Test + public void parse_without_parameters() throws Exception + { + ContentType contentType = new ContentType("text/html"); + + assertEquals(contentType.getBaseType(), "text"); + + assertEquals(contentType.getSubType(), "html"); + + assertEquals(contentType.getMimeType(), "text/html"); + + assertTrue(contentType.getParameterNames().isEmpty()); + } + + @Test + public void unparse_with_parameters() throws Exception + { + ContentType contentType = new ContentType(); + + contentType.setBaseType("text"); + contentType.setSubType("html"); + contentType.setParameter("charset", "utf-8"); + + assertEquals(contentType.unparse(), "text/html;charset=utf-8"); + } + + @Test + public void unparse_no_parameters() throws Exception + { + ContentType contentType = new ContentType(); + + contentType.setBaseType("text"); + contentType.setSubType("html"); + + assertEquals(contentType.unparse(), "text/html"); + } + + @Test + public void to_string_is_unparse() + { + ContentType contentType = new ContentType(); + + contentType.setBaseType("text"); + contentType.setSubType("html"); + contentType.setParameter("charset", "utf-8"); + + assertEquals(contentType.toString(), contentType.unparse()); + } +}
