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 2008/12/22 18:44:05 UTC

svn commit: r728732 [3/3] - in /tapestry/tapestry5/branches/5.0: ./ quickstart/ quickstart/src/main/resources/archetype-resources/ src/site/apt/ src/site/apt/guide/ tapestry-annotations/ tapestry-component-report/ tapestry-core/ tapestry-core/src/main/...

Modified: tapestry/tapestry5/branches/5.0/tapestry-core/src/test/java/org/apache/tapestry5/internal/structure/ComponentPageElementImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.0/tapestry-core/src/test/java/org/apache/tapestry5/internal/structure/ComponentPageElementImplTest.java?rev=728732&r1=728731&r2=728732&view=diff
==============================================================================
--- tapestry/tapestry5/branches/5.0/tapestry-core/src/test/java/org/apache/tapestry5/internal/structure/ComponentPageElementImplTest.java (original)
+++ tapestry/tapestry5/branches/5.0/tapestry-core/src/test/java/org/apache/tapestry5/internal/structure/ComponentPageElementImplTest.java Mon Dec 22 09:44:01 2008
@@ -23,7 +23,6 @@
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
 import org.apache.tapestry5.ioc.Location;
 import org.apache.tapestry5.ioc.internal.util.TapestryException;
-import org.apache.tapestry5.ioc.services.TypeCoercer;
 import org.apache.tapestry5.model.ComponentModel;
 import org.apache.tapestry5.model.ParameterModel;
 import org.apache.tapestry5.runtime.Component;
@@ -50,17 +49,19 @@
         Page page = newPage(PAGE_NAME);
         Component component = mockComponent();
         ComponentModel model = mockComponentModel();
-        TypeCoercer coercer = mockTypeCoercer();
         Logger logger = mockLogger();
+        Logger eventLogger = mockLogger();
+        PageResources pr = mockPageResources(logger, eventLogger);
 
         train_getLogger(model, logger);
+        train_isDebugEnabled(eventLogger, false);
 
-        Instantiator ins = newInstantiator(component, model);
+        Instantiator ins = mockInstantiator(component, model);
 
         replay();
 
 
-        ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, null);
+        ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, pr);
 
         ComponentResources resources = cpe.getComponentResources();
 
@@ -83,17 +84,19 @@
         Page page = newPage(PAGE_NAME);
         Component component = mockComponent();
         ComponentModel model = mockComponentModel();
-        TypeCoercer coercer = mockTypeCoercer();
         Block block = mockBlock();
         Logger logger = mockLogger();
+        Logger eventLogger = mockLogger();
+        PageResources pr = mockPageResources(logger, eventLogger);
 
-        Instantiator ins = newInstantiator(component, model);
+        Instantiator ins = mockInstantiator(component, model);
 
         train_getLogger(model, logger);
+        train_isDebugEnabled(eventLogger, false);
 
         replay();
 
-        ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, null);
+        ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, pr);
 
         ComponentResources resources = cpe.getComponentResources();
 
@@ -113,12 +116,14 @@
         Component component = mockComponent();
         ComponentModel model = mockComponentModel();
         Binding binding = mockBinding();
-        TypeCoercer coercer = mockTypeCoercer();
         Logger logger = mockLogger();
+        Logger eventLogger = mockLogger();
+        PageResources pr = mockPageResources(logger, eventLogger);
 
-        Instantiator ins = newInstantiator(component, model);
+        Instantiator ins = mockInstantiator(component, model);
 
         train_getLogger(model, logger);
+        train_isDebugEnabled(eventLogger, false);
 
         train_getParameterModel(model, "barney", null);
 
@@ -126,7 +131,7 @@
 
         replay();
 
-        ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, null);
+        ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, pr);
 
         ComponentResources resources = cpe.getComponentResources();
         assertFalse(resources.isBound("fred"));
@@ -145,18 +150,20 @@
         Page page = newPage(PAGE_NAME);
         Component component = mockComponent();
         ComponentModel model = mockComponentModel();
-        TypeCoercer coercer = mockTypeCoercer();
         Block block1 = mockBlock();
         Block block2 = mockBlock();
         Logger logger = mockLogger();
+        Logger eventLogger = mockLogger();
+        PageResources pr = mockPageResources(logger, eventLogger);
 
         train_getLogger(model, logger);
+        train_isDebugEnabled(eventLogger, false);
 
-        Instantiator ins = newInstantiator(component, model);
+        Instantiator ins = mockInstantiator(component, model);
 
         replay();
 
-        ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, null);
+        ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, pr);
 
         cpe.addBlock("myblock", block1);
 
@@ -181,13 +188,15 @@
         Component component = mockComponent();
         ComponentModel model = mockComponentModel();
         Binding binding = mockBinding();
-        TypeCoercer coercer = mockTypeCoercer();
         ParameterModel pmodel = mockParameterModel();
         Logger logger = mockLogger();
+        Logger eventLogger = mockLogger();
+        PageResources pr = mockPageResources(logger, eventLogger);
 
         train_getLogger(model, logger);
+        train_isDebugEnabled(eventLogger, false);
 
-        Instantiator ins = newInstantiator(component, model);
+        Instantiator ins = mockInstantiator(component, model);
 
         train_getParameterNames(model, "barney");
         train_getParameterModel(model, "barney", pmodel);
@@ -196,7 +205,7 @@
 
         replay();
 
-        ComponentPageElementImpl cpe = new ComponentPageElementImpl(page, ins, null);
+        ComponentPageElementImpl cpe = new ComponentPageElementImpl(page, ins, pr);
 
         cpe.bindParameter("barney", binding);
 
@@ -212,12 +221,14 @@
         Component component = mockComponent();
         ComponentModel model = mockComponentModel();
         ParameterModel pmodel = mockParameterModel();
-        TypeCoercer coercer = mockTypeCoercer();
         Logger logger = mockLogger();
+        Logger eventLogger = mockLogger();
+        PageResources pr = mockPageResources(logger, eventLogger);
 
         train_getLogger(model, logger);
+        train_isDebugEnabled(eventLogger, false);
 
-        Instantiator ins = newInstantiator(component, model);
+        Instantiator ins = mockInstantiator(component, model);
 
         train_getParameterNames(model, "barney");
         train_getParameterModel(model, "barney", pmodel);
@@ -227,7 +238,7 @@
 
         replay();
 
-        ComponentPageElementImpl cpe = new ComponentPageElementImpl(page, ins, null);
+        ComponentPageElementImpl cpe = new ComponentPageElementImpl(page, ins, pr);
 
         cpe.containingPageDidLoad();
 
@@ -244,12 +255,14 @@
         ComponentModel model = mockComponentModel();
         ParameterModel pmodel = mockParameterModel();
         Location l = mockLocation();
-        TypeCoercer coercer = mockTypeCoercer();
         Logger logger = mockLogger();
+        Logger eventLogger = mockLogger();
+        PageResources pr = mockPageResources(logger, eventLogger);
 
         train_getLogger(model, logger);
+        train_isDebugEnabled(eventLogger, false);
 
-        Instantiator ins = newInstantiator(component, model);
+        Instantiator ins = mockInstantiator(component, model);
 
         train_getComponentResources(container, containerResources);
 
@@ -274,7 +287,7 @@
 
         replay();
 
-        ComponentPageElementImpl cpe = new ComponentPageElementImpl(page, container, "myid", null, ins, l, null);
+        ComponentPageElementImpl cpe = new ComponentPageElementImpl(page, container, "myid", null, ins, l, pr);
 
         try
         {
@@ -290,108 +303,18 @@
         verify();
     }
 
-    @Test
-    public void is_invariant()
+    protected final PageResources mockPageResources(Logger componentLogger, Logger eventLogger)
     {
-        Page page = newPage(PAGE_NAME);
-        Component component = mockComponent();
-        ComponentModel model = mockComponentModel();
-        Binding binding = mockBinding();
-        TypeCoercer coercer = mockTypeCoercer();
-        ParameterModel pmodel = mockParameterModel();
-        Logger logger = mockLogger();
-
-        train_getLogger(model, logger);
-
-        Instantiator ins = newInstantiator(component, model);
-
-        train_getParameterModel(model, "barney", pmodel);
-
-        train_isInvariant(binding, true);
-
-        replay();
-
-        ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, null);
-
-        assertFalse(cpe.getComponentResources().isInvariant("fred"));
-
-        cpe.bindParameter("barney", binding);
+        PageResources resources = newMock(PageResources.class);
 
-        assertFalse(cpe.getComponentResources().isInvariant("fred"));
-        assertTrue(cpe.getComponentResources().isInvariant("barney"));
+        train_getEventLogger(resources, componentLogger, eventLogger);
 
-        verify();
+        return resources;
     }
 
-    @Test
-    public void read_binding()
+    protected final void train_getEventLogger(PageResources resources, Logger componentLogger, Logger eventLogger)
     {
-        Page page = newPage(PAGE_NAME);
-        Component component = mockComponent();
-        ComponentModel model = mockComponentModel();
-        Binding binding = mockBinding();
-        PageResources resources = mockPageResources();
-        Logger logger = mockLogger();
-
-        train_getLogger(model, logger);
-
-        train_getSupportsInformalParameters(model, true);
-
-        Long boundValue = new Long(23);
-
-        Instantiator ins = newInstantiator(component, model);
-
-        train_getParameterModel(model, "barney", null);
-
-        train_get(binding, boundValue);
-
-        train_coerce(resources, boundValue, Long.class, boundValue);
-
-        replay();
-
-        ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, resources);
-
-        cpe.bindParameter("barney", binding);
-
-        assertSame(cpe.getComponentResources().readParameter("barney", Long.class), boundValue);
-
-        verify();
-    }
-
-
-    @Test
-    public void write_binding()
-    {
-        Page page = newPage(PAGE_NAME);
-        Component component = mockComponent();
-        ComponentModel model = mockComponentModel();
-        PageResources resources = mockPageResources();
-        Binding binding = mockBinding();
-        Logger logger = mockLogger();
-
-        train_getLogger(model, logger);
-
-        Instantiator ins = newInstantiator(component, model);
-
-        train_getParameterModel(model, "barney", null);
-
-        train_getSupportsInformalParameters(model, true);
-
-        expect(binding.getBindingType()).andReturn(Integer.class);
-
-        train_coerce(resources, 23, Integer.class, 23);
-
-        binding.set(23);
-
-        replay();
-
-        ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, resources);
-
-        cpe.bindParameter("barney", binding);
-
-        cpe.getComponentResources().writeParameter("barney", 23);
-
-        verify();
+        expect(resources.getEventLogger(componentLogger)).andReturn(eventLogger);
     }
 
     @Test
@@ -401,16 +324,22 @@
         Component component = mockComponent();
         ComponentModel model = mockComponentModel();
         Logger logger = mockLogger();
+        Logger eventLogger = mockLogger();
+        PageResources pr = mockPageResources(logger, eventLogger);
 
         train_getLogger(model, logger);
+        train_isDebugEnabled(eventLogger, false);
+
+        Instantiator ins = mockInstantiator(component, model);
+        Instantiator ins2 = mockInstantiator(component, model);
 
-        Instantiator ins = newInstantiator(component, model);
-        Instantiator ins2 = newInstantiator(component, model);
+        train_getEventLogger(pr, logger, eventLogger);
+        train_isDebugEnabled(eventLogger, false);
 
         replay();
 
-        ComponentPageElementImpl cpe = new ComponentPageElementImpl(page, ins, null);
-        cpe.addEmbeddedElement(new ComponentPageElementImpl(page, cpe, "nested", null, ins2, null, null));
+        ComponentPageElementImpl cpe = new ComponentPageElementImpl(page, ins, pr);
+        cpe.addEmbeddedElement(new ComponentPageElementImpl(page, cpe, "nested", null, ins2, null, pr));
 
         try
         {
@@ -435,17 +364,20 @@
         ComponentPageElement childElement = mockComponentPageElement();
         Component childComponent = mockComponent();
         Logger logger = mockLogger();
+        Logger eventLogger = mockLogger();
+        PageResources pr = mockPageResources(logger, eventLogger);
 
         train_getLogger(model, logger);
+        train_isDebugEnabled(eventLogger, false);
 
-        Instantiator ins = newInstantiator(component, model);
+        Instantiator ins = mockInstantiator(component, model);
 
         train_getId(childElement, "child");
         train_getComponent(childElement, childComponent);
 
         replay();
 
-        ComponentPageElementImpl cpe = new ComponentPageElementImpl(page, ins, null);
+        ComponentPageElementImpl cpe = new ComponentPageElementImpl(page, ins, pr);
 
         cpe.addEmbeddedElement(childElement);
 
@@ -468,10 +400,13 @@
         ComponentPageElement child2 = mockComponentPageElement();
         Location l = mockLocation();
         Logger logger = mockLogger();
+        Logger eventLogger = mockLogger();
+        PageResources pr = mockPageResources(logger, eventLogger);
 
         train_getLogger(model, logger);
+        train_isDebugEnabled(eventLogger, false);
 
-        Instantiator ins = newInstantiator(pageComponent, model);
+        Instantiator ins = mockInstantiator(pageComponent, model);
 
         train_getId(child1, "Child");
         train_getId(child2, "CHILD");
@@ -480,7 +415,7 @@
 
         replay();
 
-        ComponentPageElementImpl cpe = new ComponentPageElementImpl(page, ins, null);
+        ComponentPageElementImpl cpe = new ComponentPageElementImpl(page, ins, pr);
 
         cpe.addEmbeddedElement(child1);
 
@@ -504,22 +439,24 @@
         Page page = newPage(PAGE_NAME);
         Component component = mockComponent();
         ComponentModel model = mockComponentModel();
-        TypeCoercer coercer = mockTypeCoercer();
         final String mixinClassName = "foo.Bar";
         Component mixin = mockComponent();
         ComponentModel mixinModel = mockComponentModel();
         Logger logger = mockLogger();
+        Logger eventLogger = mockLogger();
+        PageResources pr = mockPageResources(logger, eventLogger);
 
         train_getLogger(model, logger);
+        train_isDebugEnabled(eventLogger, false);
 
-        Instantiator ins = newInstantiator(component, model);
-        Instantiator mixinIns = newInstantiator(mixin, mixinModel);
+        Instantiator ins = mockInstantiator(component, model);
+        Instantiator mixinIns = mockInstantiator(mixin, mixinModel);
 
         train_getComponentClassName(mixinModel, mixinClassName);
 
         replay();
 
-        ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, null);
+        ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, pr);
 
         cpe.addMixin(mixinIns);
 
@@ -534,21 +471,23 @@
         Page page = newPage(PAGE_NAME);
         Component component = mockComponent();
         ComponentModel model = mockComponentModel();
-        TypeCoercer coercer = mockTypeCoercer();
         Component mixin = mockComponent();
         ComponentModel mixinModel = mockComponentModel();
         Logger logger = mockLogger();
+        Logger eventLogger = mockLogger();
+        PageResources pr = mockPageResources(logger, eventLogger);
 
         train_getLogger(model, logger);
+        train_isDebugEnabled(eventLogger, false);
 
-        Instantiator ins = newInstantiator(component, model);
-        Instantiator mixinIns = newInstantiator(mixin, mixinModel);
+        Instantiator ins = mockInstantiator(component, model);
+        Instantiator mixinIns = mockInstantiator(mixin, mixinModel);
 
         train_getComponentClassName(mixinModel, "foo.Bar");
 
         replay();
 
-        ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, null);
+        ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, pr);
 
         cpe.addMixin(mixinIns);
 
@@ -573,20 +512,22 @@
         ComponentModel model = mockComponentModel();
         ComponentModel mixinModel = mockComponentModel();
         Component mixin = mockComponent();
-        TypeCoercer coercer = mockTypeCoercer();
         Binding binding = mockBinding();
         Logger logger = mockLogger();
+        Logger eventLogger = mockLogger();
+        PageResources pr = mockPageResources(logger, eventLogger);
 
         train_getLogger(model, logger);
+        train_isDebugEnabled(eventLogger, false);
 
-        Instantiator ins = newInstantiator(component, model);
-        Instantiator mixinInstantiator = newInstantiator(mixin, mixinModel);
+        Instantiator ins = mockInstantiator(component, model);
+        Instantiator mixinInstantiator = mockInstantiator(mixin, mixinModel);
 
         train_getComponentClassName(mixinModel, "foo.Fred");
 
         replay();
 
-        ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, null);
+        ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, pr);
 
         cpe.addMixin(mixinInstantiator);
 
@@ -604,7 +545,7 @@
         verify();
     }
 
-    private Instantiator newInstantiator(Component component, ComponentModel model)
+    private Instantiator mockInstantiator(Component component, ComponentModel model)
     {
         Instantiator ins = newMock(Instantiator.class);
 

Modified: tapestry/tapestry5/branches/5.0/tapestry-core/src/test/java/org/apache/tapestry5/internal/structure/ExpansionPageElementImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.0/tapestry-core/src/test/java/org/apache/tapestry5/internal/structure/ExpansionPageElementImplTest.java?rev=728732&r1=728731&r2=728732&view=diff
==============================================================================
--- tapestry/tapestry5/branches/5.0/tapestry-core/src/test/java/org/apache/tapestry5/internal/structure/ExpansionPageElementImplTest.java (original)
+++ tapestry/tapestry5/branches/5.0/tapestry-core/src/test/java/org/apache/tapestry5/internal/structure/ExpansionPageElementImplTest.java Mon Dec 22 09:44:01 2008
@@ -1,25 +1,26 @@
-// 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, 2008 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.structure;
 
-import org.apache.tapestry5.Binding;
-import org.apache.tapestry5.MarkupWriter;
-import org.apache.tapestry5.internal.test.InternalBaseTestCase;
-import org.apache.tapestry5.ioc.services.TypeCoercer;
-import org.apache.tapestry5.runtime.RenderQueue;
-import org.testng.annotations.Test;
+import org.apache.tapestry5.Binding;
+import org.apache.tapestry5.MarkupWriter;
+import org.apache.tapestry5.internal.test.InternalBaseTestCase;
+import org.apache.tapestry5.ioc.services.TypeCoercer;
+import org.apache.tapestry5.runtime.RenderCommand;
+import org.apache.tapestry5.runtime.RenderQueue;
+import org.testng.annotations.Test;
 
 public class ExpansionPageElementImplTest extends InternalBaseTestCase
 {
@@ -37,7 +38,7 @@
 
         replay();
 
-        PageElement element = new ExpansionPageElement(binding, coercer);
+        RenderCommand element = new ExpansionPageElement(binding, coercer);
 
         verify();
 
@@ -76,7 +77,7 @@
 
         replay();
 
-        PageElement element = new ExpansionPageElement(binding, coercer);
+        RenderCommand element = new ExpansionPageElement(binding, coercer);
 
         verify();
 

Modified: tapestry/tapestry5/branches/5.0/tapestry-core/src/test/java/org/apache/tapestry5/internal/test/InternalBaseTestCase.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.0/tapestry-core/src/test/java/org/apache/tapestry5/internal/test/InternalBaseTestCase.java?rev=728732&r1=728731&r2=728732&view=diff
==============================================================================
--- tapestry/tapestry5/branches/5.0/tapestry-core/src/test/java/org/apache/tapestry5/internal/test/InternalBaseTestCase.java (original)
+++ tapestry/tapestry5/branches/5.0/tapestry-core/src/test/java/org/apache/tapestry5/internal/test/InternalBaseTestCase.java Mon Dec 22 09:44:01 2008
@@ -22,7 +22,6 @@
 import org.apache.tapestry5.internal.services.*;
 import org.apache.tapestry5.internal.structure.ComponentPageElement;
 import org.apache.tapestry5.internal.structure.Page;
-import org.apache.tapestry5.internal.structure.PageElement;
 import org.apache.tapestry5.internal.structure.PageResources;
 import org.apache.tapestry5.ioc.*;
 import org.apache.tapestry5.ioc.def.ContributionDef;
@@ -37,6 +36,7 @@
 import org.apache.tapestry5.model.EmbeddedComponentModel;
 import org.apache.tapestry5.model.MutableComponentModel;
 import org.apache.tapestry5.runtime.Component;
+import org.apache.tapestry5.runtime.RenderCommand;
 import org.apache.tapestry5.runtime.RenderQueue;
 import org.apache.tapestry5.services.ComponentClassResolver;
 import org.apache.tapestry5.services.Request;
@@ -239,9 +239,9 @@
         expect(model.getComponentClassName()).andReturn(className).atLeastOnce();
     }
 
-    protected final PageElement mockPageElement()
+    protected final RenderCommand mockRenderCommand()
     {
-        return newMock(PageElement.class);
+        return newMock(RenderCommand.class);
     }
 
     protected final void train_getParameterNames(EmbeddedComponentModel model, String... names)

Modified: tapestry/tapestry5/branches/5.0/tapestry-core/src/test/java/org/apache/tapestry5/internal/transform/RenderPhaseMethodWorkerTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.0/tapestry-core/src/test/java/org/apache/tapestry5/internal/transform/RenderPhaseMethodWorkerTest.java?rev=728732&r1=728731&r2=728732&view=diff
==============================================================================
--- tapestry/tapestry5/branches/5.0/tapestry-core/src/test/java/org/apache/tapestry5/internal/transform/RenderPhaseMethodWorkerTest.java (original)
+++ tapestry/tapestry5/branches/5.0/tapestry-core/src/test/java/org/apache/tapestry5/internal/transform/RenderPhaseMethodWorkerTest.java Mon Dec 22 09:44:01 2008
@@ -23,10 +23,6 @@
 import org.apache.tapestry5.test.TapestryTestCase;
 import org.testng.annotations.Test;
 
-/**
- * Of course, we're committing the cardinal sin of testing the code that's generated, rather than the *behavior* of the
- * generated code. Fortunately, we back all this up with lots and lots of integration testing.
- */
 public class RenderPhaseMethodWorkerTest extends TapestryTestCase
 {
     @Test

Modified: tapestry/tapestry5/branches/5.0/tapestry-core/src/test/resources/log4j.properties
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.0/tapestry-core/src/test/resources/log4j.properties?rev=728732&r1=728731&r2=728732&view=diff
==============================================================================
--- tapestry/tapestry5/branches/5.0/tapestry-core/src/test/resources/log4j.properties (original)
+++ tapestry/tapestry5/branches/5.0/tapestry-core/src/test/resources/log4j.properties Mon Dec 22 09:44:01 2008
@@ -23,5 +23,8 @@
 
 log4j.category.org.apache.tapestry5.integration.app2=debug
 
+log4j.category.tapestry.render=debug
+log4j.category.org.apache.tapestry5.internal.services.InternalModule.PageResponseRenderer=debug
+
 # log4j.category.org.apache.tapestry5.corelib.components=debug
 

Modified: tapestry/tapestry5/branches/5.0/tapestry-hibernate/pom.xml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.0/tapestry-hibernate/pom.xml?rev=728732&r1=728731&r2=728732&view=diff
==============================================================================
--- tapestry/tapestry5/branches/5.0/tapestry-hibernate/pom.xml (original)
+++ tapestry/tapestry5/branches/5.0/tapestry-hibernate/pom.xml Mon Dec 22 09:44:01 2008
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.apache.tapestry</groupId>
         <artifactId>tapestry-project</artifactId>
-        <version>5.0.18</version>
+        <version>5.0.19-SNAPSHOT</version>
     </parent>
     <inceptionYear>2007</inceptionYear>
 

Modified: tapestry/tapestry5/branches/5.0/tapestry-ioc/pom.xml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.0/tapestry-ioc/pom.xml?rev=728732&r1=728731&r2=728732&view=diff
==============================================================================
--- tapestry/tapestry5/branches/5.0/tapestry-ioc/pom.xml (original)
+++ tapestry/tapestry5/branches/5.0/tapestry-ioc/pom.xml Mon Dec 22 09:44:01 2008
@@ -8,7 +8,7 @@
     <parent>
         <groupId>org.apache.tapestry</groupId>
         <artifactId>tapestry-project</artifactId>
-        <version>5.0.18</version>
+        <version>5.0.19-SNAPSHOT</version>
     </parent>
     <name>Tapestry Inversion of Control Container</name>
     <description>

Modified: tapestry/tapestry5/branches/5.0/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/TypeCoercerImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.0/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/TypeCoercerImpl.java?rev=728732&r1=728731&r2=728732&view=diff
==============================================================================
--- tapestry/tapestry5/branches/5.0/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/TypeCoercerImpl.java (original)
+++ tapestry/tapestry5/branches/5.0/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/TypeCoercerImpl.java Mon Dec 22 09:44:01 2008
@@ -15,8 +15,8 @@
 package org.apache.tapestry5.ioc.internal.services;
 
 import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
-import static org.apache.tapestry5.ioc.internal.util.CollectionFactory.*;
-import static org.apache.tapestry5.ioc.internal.util.Defense.notNull;
+import static org.apache.tapestry5.ioc.internal.util.CollectionFactory.newList;
+import org.apache.tapestry5.ioc.internal.util.Defense;
 import org.apache.tapestry5.ioc.internal.util.InheritanceSearch;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 import org.apache.tapestry5.ioc.services.ClassFabUtils;
@@ -28,53 +28,75 @@
 
 public class TypeCoercerImpl implements TypeCoercer
 {
-    // Read only after constructor
+    // Constructed from the service's configuration.
 
     private final Map<Class, List<CoercionTuple>> sourceTypeToTuple = CollectionFactory.newMap();
 
-    // Access to the cache must be thread safe
-
-    private final Map<CacheKey, Coercion> cache = CollectionFactory.newConcurrentMap();
-
-    static class CacheKey
+    /**
+     * A coercion to a specific target type.  Manages a cache of coercions to specific types.
+     */
+    private class TargetCoercion
     {
-        private final Class sourceClass;
+        private final Class type;
 
-        private final Class targetClass;
+        private final Map<Class, Coercion> cache = CollectionFactory.newConcurrentMap();
 
-        CacheKey(final Class sourceClass, final Class targetClass)
+        TargetCoercion(Class type)
         {
-            this.sourceClass = sourceClass;
-            this.targetClass = targetClass;
+            this.type = type;
         }
 
-        @Override
-        public boolean equals(Object obj)
+        void clearCache()
         {
-            if (obj == null) return false;
+            cache.clear();
+        }
 
-            if (!(obj instanceof CacheKey)) return false;
+        Object coerce(Object input)
+        {
+
+            Class sourceType = input != null ? input.getClass() : void.class;
+
+            if (type.isAssignableFrom(sourceType)) return input;
 
-            CacheKey other = (CacheKey) obj;
+            Coercion c = getCoercion(sourceType);
 
-            return sourceClass.equals(other.sourceClass)
-                    && targetClass.equals(other.targetClass);
+            try
+            {
+                return type.cast(c.coerce(input));
+            }
+            catch (Exception ex)
+            {
+                throw new RuntimeException(ServiceMessages.failedCoercion(
+                        input,
+                        type,
+                        c,
+                        ex), ex);
+            }
         }
 
-        @Override
-        public int hashCode()
+        String explain(Class sourceType)
         {
-            return sourceClass.hashCode() * 27 % targetClass.hashCode();
+            return getCoercion(sourceType).toString();
         }
 
-        @Override
-        public String toString()
+        private Coercion getCoercion(Class sourceType)
         {
-            return String.format("CacheKey[%s --> %s]", sourceClass.getName(), targetClass
-                    .getName());
+            Coercion c = cache.get(sourceType);
+
+            if (c == null)
+            {
+                c = findOrCreateCoercion(sourceType, type);
+                cache.put(sourceType, c);
+            }
+            return c;
         }
     }
 
+    /**
+     * Map from a target type to a TargetCoercion for that type.
+     */
+    private final Map<Class, TargetCoercion> typeToTargetCoercion = new WeakHashMap<Class, TargetCoercion>();
+
     private static final Coercion COERCION_NULL_TO_OBJECT = new Coercion<Void, Object>()
     {
         public Object coerce(Void input)
@@ -102,49 +124,20 @@
     @SuppressWarnings("unchecked")
     public Object coerce(Object input, Class targetType)
     {
-        notNull(targetType, "targetType");
-
-        // Treat null as void in terms of locating a coercion.
-
-        Class sourceType = input != null ? input.getClass() : void.class;
-
-        // The caller may ask for the value in a primitive type, but the best we can do is the
-        // equivalent wrapper type.
+        Defense.notNull(targetType, "targetType");
 
         Class effectiveTargetType = ClassFabUtils.getWrapperType(targetType);
 
-        // Is a coercion even necessary? Not if the target type is assignable from the
-        // input value.
-
-        if (effectiveTargetType.isAssignableFrom(sourceType)) return input;
+        if (effectiveTargetType.isInstance(input)) return input;
 
-        Coercion coercion = findCoercion(sourceType, effectiveTargetType);
-
-        Object result;
-
-        try
-        {
-            result = coercion.coerce(input);
-        }
-        catch (Exception ex)
-        {
-            throw new RuntimeException(ServiceMessages.failedCoercion(
-                    input,
-                    targetType,
-                    coercion,
-                    ex), ex);
-        }
-
-        // Double check that the coercer provided a result of the correct type
-
-        return effectiveTargetType.cast(result);
+        return getTargetCoercion(effectiveTargetType).coerce(input);
     }
 
     @SuppressWarnings("unchecked")
     public <S, T> String explain(Class<S> inputType, Class<T> targetType)
     {
-        notNull(inputType, "inputType");
-        notNull(targetType, "targetType");
+        Defense.notNull(inputType, "inputType");
+        Defense.notNull(targetType, "targetType");
 
         Class effectiveTargetType = ClassFabUtils.getWrapperType(targetType);
 
@@ -153,29 +146,35 @@
 
         if (effectiveTargetType.isAssignableFrom(inputType)) return "";
 
-        Coercion coercion = findCoercion(inputType, effectiveTargetType);
-
-        return coercion.toString();
+        return getTargetCoercion(targetType).explain(inputType);
     }
 
-    private Coercion findCoercion(Class sourceType, Class targetType)
+    private synchronized TargetCoercion getTargetCoercion(Class targetType)
     {
-        CacheKey key = new CacheKey(sourceType, targetType);
-
-        Coercion result = cache.get(key);
+        TargetCoercion tc = typeToTargetCoercion.get(targetType);
 
-        if (result == null)
+        if (tc == null)
         {
-            result = findOrCreateCoercion(sourceType, targetType);
-            cache.put(key, result);
+            tc = new TargetCoercion(targetType);
+            typeToTargetCoercion.put(targetType, tc);
         }
 
-        return result;
+        return tc;
     }
 
-    public void clearCache()
+    public synchronized void clearCache()
     {
-        cache.clear();
+        // There's no need to clear the typeToTargetCoercion map, as it is a WeakHashMap and
+        // will release the keys for classes that are no longer in existence.  On the other hand,
+        // there's likely all sorts of references to unloaded classes inside each TargetCoercion's
+        // individual cache, so clear all those.
+
+        for (TargetCoercion tc : typeToTargetCoercion.values())
+        {
+            // Can tc ever be null?
+
+            tc.clearCache();
+        }
     }
 
     /**
@@ -211,8 +210,8 @@
         // a tuple twice, but it's more likely that different threads are looking
         // for different source/target coercions.
 
-        Set<CoercionTuple> consideredTuples = newSet();
-        LinkedList<CoercionTuple> queue = newLinkedList();
+        Set<CoercionTuple> consideredTuples = CollectionFactory.newSet();
+        LinkedList<CoercionTuple> queue = CollectionFactory.newLinkedList();
 
         seedQueue(sourceType, consideredTuples, queue);
 
@@ -378,5 +377,4 @@
             }
         }
     }
-
 }

Modified: tapestry/tapestry5/branches/5.0/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/util/CollectionFactory.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.0/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/util/CollectionFactory.java?rev=728732&r1=728731&r2=728732&view=diff
==============================================================================
--- tapestry/tapestry5/branches/5.0/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/util/CollectionFactory.java (original)
+++ tapestry/tapestry5/branches/5.0/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/util/CollectionFactory.java Mon Dec 22 09:44:01 2008
@@ -39,14 +39,12 @@
  */
 public final class CollectionFactory
 {
-    private static final int INITIAL_HASHMAP_CAPACITY = 31;
-
     /**
      * Constructs and returns a generic {@link HashMap} instance.
      */
     public static <K, V> Map<K, V> newMap()
     {
-        return new HashMap<K, V>(INITIAL_HASHMAP_CAPACITY);
+        return new HashMap<K, V>();
     }
 
     /**
@@ -84,7 +82,7 @@
      */
     public static <K, V> ConcurrentMap<K, V> newConcurrentMap()
     {
-        return new ConcurrentHashMap<K, V>(INITIAL_HASHMAP_CAPACITY);
+        return new ConcurrentHashMap<K, V>();
     }
 
     /**

Modified: tapestry/tapestry5/branches/5.0/tapestry-project.ipr
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.0/tapestry-project.ipr?rev=728732&r1=728731&r2=728732&view=diff
==============================================================================
--- tapestry/tapestry5/branches/5.0/tapestry-project.ipr (original)
+++ tapestry/tapestry5/branches/5.0/tapestry-project.ipr Mon Dec 22 09:44:01 2008
@@ -152,6 +152,7 @@
       <facet-type id="Spring" />
     </autodetection-disabled>
   </component>
+  <component name="FacetManager" />
   <component name="IdProvider" IDEtalkID="5869BD07806E60386FB39DF824C84757" />
   <component name="InspectionProjectProfileManager">
     <option name="PROJECT_PROFILE" value="Project Default" />
@@ -243,6 +244,7 @@
       </list>
     </option>
   </component>
+  <component name="NewModuleRootManager" />
   <component name="Palette2">
     <group name="Swing">
       <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
@@ -452,36 +454,6 @@
         <entry key="$PROJECT_DIR$">
           <value>
             <SvnBranchConfiguration>
-              <option name="branchMap">
-                <map>
-                  <entry key="https://svn.apache.org/repos/asf/tapestry/tapestry5/branches">
-                    <value>
-                      <list>
-                        <SvnBranchItem>
-                          <option name="creationDateMillis" value="1228328601230" />
-                          <option name="revision" value="722998" />
-                          <option name="url" value="https://svn.apache.org/repos/asf/tapestry/tapestry5/branches/5.0" />
-                        </SvnBranchItem>
-                        <SvnBranchItem>
-                          <option name="creationDateMillis" value="1221736060801" />
-                          <option name="revision" value="696628" />
-                          <option name="url" value="https://svn.apache.org/repos/asf/tapestry/tapestry5/branches/5.1-dev" />
-                        </SvnBranchItem>
-                        <SvnBranchItem>
-                          <option name="creationDateMillis" value="1211309495890" />
-                          <option name="revision" value="658390" />
-                          <option name="url" value="https://svn.apache.org/repos/asf/tapestry/tapestry5/branches/hlship-20080520" />
-                        </SvnBranchItem>
-                        <SvnBranchItem>
-                          <option name="creationDateMillis" value="1178591494728" />
-                          <option name="revision" value="536042" />
-                          <option name="url" value="https://svn.apache.org/repos/asf/tapestry/tapestry5/branches/hlship-20070503" />
-                        </SvnBranchItem>
-                      </list>
-                    </value>
-                  </entry>
-                </map>
-              </option>
               <option name="branchUrls">
                 <list>
                   <option value="https://svn.apache.org/repos/asf/tapestry/tapestry5/branches" />

Modified: tapestry/tapestry5/branches/5.0/tapestry-spring/pom.xml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.0/tapestry-spring/pom.xml?rev=728732&r1=728731&r2=728732&view=diff
==============================================================================
--- tapestry/tapestry5/branches/5.0/tapestry-spring/pom.xml (original)
+++ tapestry/tapestry5/branches/5.0/tapestry-spring/pom.xml Mon Dec 22 09:44:01 2008
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.apache.tapestry</groupId>
         <artifactId>tapestry-project</artifactId>
-        <version>5.0.18</version>
+        <version>5.0.19-SNAPSHOT</version>
     </parent>
 
     <dependencies>

Modified: tapestry/tapestry5/branches/5.0/tapestry-test/pom.xml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.0/tapestry-test/pom.xml?rev=728732&r1=728731&r2=728732&view=diff
==============================================================================
--- tapestry/tapestry5/branches/5.0/tapestry-test/pom.xml (original)
+++ tapestry/tapestry5/branches/5.0/tapestry-test/pom.xml Mon Dec 22 09:44:01 2008
@@ -10,7 +10,7 @@
     <parent>
         <groupId>org.apache.tapestry</groupId>
         <artifactId>tapestry-project</artifactId>
-        <version>5.0.18</version>
+        <version>5.0.19-SNAPSHOT</version>
     </parent>
 
     <dependencies>

Modified: tapestry/tapestry5/branches/5.0/tapestry-tutorial1/pom.xml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.0/tapestry-tutorial1/pom.xml?rev=728732&r1=728731&r2=728732&view=diff
==============================================================================
--- tapestry/tapestry5/branches/5.0/tapestry-tutorial1/pom.xml (original)
+++ tapestry/tapestry5/branches/5.0/tapestry-tutorial1/pom.xml Mon Dec 22 09:44:01 2008
@@ -19,7 +19,7 @@
     <parent>
         <groupId>org.apache.tapestry</groupId>
         <artifactId>tapestry-project</artifactId>
-        <version>5.0.18</version>
+        <version>5.0.19-SNAPSHOT</version>
     </parent>
 
     <dependencies>

Modified: tapestry/tapestry5/branches/5.0/tapestry-tutorial1/tutorial1.iml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.0/tapestry-tutorial1/tutorial1.iml?rev=728732&r1=728731&r2=728732&view=diff
==============================================================================
--- tapestry/tapestry5/branches/5.0/tapestry-tutorial1/tutorial1.iml (original)
+++ tapestry/tapestry5/branches/5.0/tapestry-tutorial1/tutorial1.iml Mon Dec 22 09:44:01 2008
@@ -19,19 +19,19 @@
         <packaging>
           <containerElement type="module" name="tapestry-hibernate">
             <attribute name="method" value="5" />
-            <attribute name="URI" value="/WEB-INF/lib/tapestry-hibernate-5.0.17-SNAPSHOT.jar" />
+            <attribute name="URI" value="/WEB-INF/lib/tapestry-hibernate-5.0.19-SNAPSHOT.jar" />
           </containerElement>
           <containerElement type="module" name="tapestry-core">
             <attribute name="method" value="5" />
-            <attribute name="URI" value="/WEB-INF/lib/tapestry-core-5.0.17-SNAPSHOT.jar" />
+            <attribute name="URI" value="/WEB-INF/lib/tapestry-core-5.0.19-SNAPSHOT.jar" />
           </containerElement>
           <containerElement type="module" name="tapestry-ioc">
             <attribute name="method" value="5" />
-            <attribute name="URI" value="/WEB-INF/lib/tapestry-ioc-5.0.17-SNAPSHOT.jar" />
+            <attribute name="URI" value="/WEB-INF/lib/tapestry-ioc-5.0.19-SNAPSHOT.jar" />
           </containerElement>
           <containerElement type="module" name="tapestry-annotations">
             <attribute name="method" value="5" />
-            <attribute name="URI" value="/WEB-INF/lib/tapestry5-annotations-5.0.17-SNAPSHOT.jar" />
+            <attribute name="URI" value="/WEB-INF/lib/tapestry5-annotations-5.0.19-SNAPSHOT.jar" />
           </containerElement>
           <containerElement type="library" name="Maven: javassist:javassist:3.8.0.GA" level="project">
             <attribute name="method" value="1" />
@@ -159,5 +159,6 @@
     <orderEntry type="library" name="Maven: junit:junit:3.8.1" level="project" />
     <orderEntry type="library" name="Maven: org.easymock:easymock:2.4" level="project" />
   </component>
+  <component name="SvnBranchConfigurationManager" />
 </module>
 

Modified: tapestry/tapestry5/branches/5.0/tapestry-upload/pom.xml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.0/tapestry-upload/pom.xml?rev=728732&r1=728731&r2=728732&view=diff
==============================================================================
--- tapestry/tapestry5/branches/5.0/tapestry-upload/pom.xml (original)
+++ tapestry/tapestry5/branches/5.0/tapestry-upload/pom.xml Mon Dec 22 09:44:01 2008
@@ -13,7 +13,7 @@
     <parent>
         <groupId>org.apache.tapestry</groupId>
         <artifactId>tapestry-project</artifactId>
-        <version>5.0.18</version>
+        <version>5.0.19-SNAPSHOT</version>
     </parent>
     <inceptionYear>2007</inceptionYear>