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 2007/06/24 03:13:05 UTC

svn commit: r550147 [2/2] - in /tapestry/tapestry5/trunk/tapestry-core/src: main/java/org/apache/tapestry/ main/java/org/apache/tapestry/corelib/base/ main/java/org/apache/tapestry/corelib/components/ main/java/org/apache/tapestry/internal/services/ ma...

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>{@link PersistentFieldManagerImpl#META_KEY}
+     * <dd>{@link PersistentFieldManagerImpl#DEFAULT_STRATEGY}
+     * <dt>{@link TapestryConstants#RESPONSE_CONTENT_TYPE}
+     * <dd>text/html
+     * <dt>{@link 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());
+    }
+}