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 2006/09/14 19:51:15 UTC

svn commit: r443428 [2/2] - in /tapestry/tapestry5/tapestry-core/trunk/src: main/java/org/apache/tapestry/ main/java/org/apache/tapestry/annotations/ main/java/org/apache/tapestry/internal/bindings/ main/java/org/apache/tapestry/internal/ioc/ main/java...

Added: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/ParameterConflict.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/ParameterConflict.java?view=auto&rev=443428
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/ParameterConflict.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/ParameterConflict.java Thu Sep 14 10:51:13 2006
@@ -0,0 +1,30 @@
+// Copyright 2006 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.app1.pages;
+
+import org.apache.tapestry.annotations.Component;
+import org.apache.tapestry.annotations.ComponentClass;
+import org.apache.tapestry.integration.app1.components.Output;
+
+/**
+ * @author Howard M. Lewis Ship
+ */
+@ComponentClass
+public class ParameterConflict
+{
+    @SuppressWarnings("unused")
+    @Component(parameters = "value=literal:ClassValue")
+    private Output _output;
+}

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/ioc/IOCUtilitiesTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/ioc/IOCUtilitiesTest.java?view=diff&rev=443428&r1=443427&r2=443428
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/ioc/IOCUtilitiesTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/ioc/IOCUtilitiesTest.java Thu Sep 14 10:51:13 2006
@@ -18,6 +18,7 @@
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.tapestry.Locatable;
 import org.apache.tapestry.Location;
@@ -26,6 +27,8 @@
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 
+import static org.apache.tapestry.util.CollectionFactory.newMap;
+
 /**
  * @author Howard M. Lewis Ship
  */
@@ -84,7 +87,7 @@
         assertEquals(IOCUtilities.capitalize(input), expected);
     }
 
-    @DataProvider(name="capitalize_inputs")
+    @DataProvider(name = "capitalize_inputs")
     public Object[][] capitalize_inputs()
     {
         return new Object[][]
@@ -129,5 +132,40 @@
         assertSame(l, IOCUtilities.locationOf(locatable));
 
         verify();
+    }
+
+    @Test
+    public void sorted_keys_from_null_map()
+    {
+        List<String> list = IOCUtilities.sortedKeys(null);
+
+        assertTrue(list.isEmpty());
+    }
+
+    @Test
+    public void sorted_keys_from_map()
+    {
+        Map<String, String> map = newMap();
+
+        map.put("fred", "flintstone");
+        map.put("barney", "rubble");
+
+        assertEquals(IOCUtilities.sortedKeys(map), Arrays.asList("barney", "fred"));
+    }
+
+    @Test
+    public void get_from_null_map()
+    {
+        assertNull(IOCUtilities.get(null, null));
+    }
+
+    @Test
+    public void get_from_map()
+    {
+        Map<String, String> map = newMap();
+
+        map.put("fred", "flintstone");
+
+        assertEquals("flintstone", IOCUtilities.get(map, "fred"));
     }
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/model/MutableComponentModelImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/model/MutableComponentModelImplTest.java?view=diff&rev=443428&r1=443427&r2=443428
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/model/MutableComponentModelImplTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/model/MutableComponentModelImplTest.java Thu Sep 14 10:51:13 2006
@@ -14,14 +14,20 @@
 
 package org.apache.tapestry.internal.model;
 
+import java.util.Arrays;
+
 import org.apache.commons.logging.Log;
 import org.apache.tapestry.Resource;
 import org.apache.tapestry.internal.test.InternalBaseTestCase;
 import org.apache.tapestry.model.MutableComponentModel;
+import org.apache.tapestry.model.MutableEmbeddedComponentModel;
 import org.apache.tapestry.model.ParameterModel;
 import org.testng.annotations.Test;
 
 /**
+ * Tests {@link org.apache.tapestry.internal.model.MutableComponentModelImpl} and
+ * {@link org.apache.tapestry.internal.model.MutableEmbeddedComponentModelImpl}.
+ * 
  * @author Howard M. Lewis Ship
  */
 public class MutableComponentModelImplTest extends InternalBaseTestCase
@@ -71,7 +77,9 @@
         }
         catch (IllegalArgumentException ex)
         {
-            assertEquals(ex.getMessage(), "Parameter 'fred' of component org.example.components.Foo is already defined.");
+            assertEquals(
+                    ex.getMessage(),
+                    "Parameter 'fred' of component org.example.components.Foo is already defined.");
         }
 
         verify();
@@ -95,7 +103,6 @@
     @Test
     public void get_unknown_parameter()
     {
-
         Resource r = newResource();
         Log log = newLog();
 
@@ -108,4 +115,114 @@
 
         verify();
     }
+
+    @Test
+    public void add_embedded()
+    {
+        Resource r = newResource();
+        Log log = newLog();
+
+        replay();
+
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, r);
+
+        assertTrue(model.getEmbeddedComponentIds().isEmpty());
+
+        MutableEmbeddedComponentModel fred = model.addEmbeddedComponent("fred", "Fred");
+
+        assertEquals(fred.getId(), "fred");
+        assertEquals(fred.getComponentType(), "Fred");
+
+        MutableEmbeddedComponentModel barney = model.addEmbeddedComponent("barney", "Barney");
+
+        assertEquals(model.getEmbeddedComponentIds(), Arrays.asList("barney", "fred"));
+
+        assertSame(model.getEmbeddedComponentModel("fred"), fred);
+        assertSame(model.getEmbeddedComponentModel("barney"), barney);
+
+        assertEquals(fred.toString(), "EmbeddedComponentModel[id=fred type=Fred]");
+        verify();
+    }
+
+    @Test
+    public void add_embedded_component_with_duplicate_id()
+    {
+        Resource r = newResource();
+        Log log = newLog();
+
+        replay();
+
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, r);
+
+        model.addEmbeddedComponent("fred", "Fred1");
+
+        try
+        {
+            model.addEmbeddedComponent("fred", "Fred2");
+            unreachable();
+        }
+        catch (IllegalArgumentException ex)
+        {
+            assertEquals(
+                    ex.getMessage(),
+                    "Embedded component 'fred' has already been defined for component class org.example.components.Foo.");
+        }
+
+        verify();
+
+    }
+
+    @Test
+    public void add_parameters_to_embedded()
+    {
+        Resource r = newResource();
+        Log log = newLog();
+
+        replay();
+
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, r);
+
+        MutableEmbeddedComponentModel fred = model.addEmbeddedComponent("fred", "Fred");
+
+        assertTrue(fred.getParameterNames().isEmpty());
+
+        fred.addParameter("city", "bedrock");
+        fred.addParameter("job", "crane operator");
+
+        assertEquals(fred.getParameterNames(), Arrays.asList("city", "job"));
+
+        assertEquals(fred.getParameterValue("city"), "bedrock");
+
+        verify();
+    }
+
+    @Test
+    public void add_duplicate_parameters_to_embedded()
+    {
+        Resource r = newResource();
+        Log log = newLog();
+
+        replay();
+
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, r);
+
+        MutableEmbeddedComponentModel fred = model.addEmbeddedComponent("fred", "Fred");
+
+        fred.addParameter("city", "bedrock");
+
+        try
+        {
+            fred.addParameter("city", "slateville");
+            unreachable();
+        }
+        catch (IllegalArgumentException ex)
+        {
+            assertEquals(
+                    ex.getMessage(),
+                    "A value for parameter 'city' of embedded component fred (of component class org.example.components.Foo) has already been provided.");
+        }
+
+        verify();
+    }
+
 }

Added: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/PageLoaderImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/PageLoaderImplTest.java?view=auto&rev=443428
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/PageLoaderImplTest.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/PageLoaderImplTest.java Thu Sep 14 10:51:13 2006
@@ -0,0 +1,262 @@
+// Copyright 2006 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 java.util.Arrays;
+import java.util.Locale;
+
+import org.apache.commons.logging.Log;
+import org.apache.tapestry.ComponentResources;
+import org.apache.tapestry.Location;
+import org.apache.tapestry.internal.parser.ComponentTemplate;
+import org.apache.tapestry.internal.parser.EndElementToken;
+import org.apache.tapestry.internal.parser.StartComponentToken;
+import org.apache.tapestry.internal.parser.TemplateToken;
+import org.apache.tapestry.internal.structure.ComponentPageElement;
+import org.apache.tapestry.internal.structure.Page;
+import org.apache.tapestry.internal.structure.PageElement;
+import org.apache.tapestry.internal.test.InternalBaseTestCase;
+import org.apache.tapestry.model.ComponentModel;
+import org.apache.tapestry.model.EmbeddedComponentModel;
+import org.apache.tapestry.services.BindingSource;
+import org.testng.annotations.Test;
+
+import static org.apache.tapestry.util.CollectionFactory.newSet;
+import static org.easymock.EasyMock.eq;
+import static org.easymock.EasyMock.isA;
+
+/**
+ * @author Howard M. Lewis Ship
+ */
+public class PageLoaderImplTest extends InternalBaseTestCase
+{
+    private static final String PAGE_CLASS_NAME = "foo.page.Bar";
+
+    private static final String CHILD_CLASS_NAME = "foo.component.Baz";
+
+    private static final Locale LOCALE = Locale.ENGLISH;
+
+    @Test
+    public void not_all_embedded_components_in_template()
+    {
+        ComponentTemplateSource templateSource = newComponentTemplateSource();
+        PageElementFactory elementFactory = newPageElementFactory();
+        BindingSource bindingSource = newBindingSource();
+        ComponentPageElement rootElement = newComponentPageElement();
+        ComponentModel model = newComponentModel();
+        ComponentTemplate template = newComponentTemplate();
+        Log log = newLog();
+
+        train_newRootComponentElement(elementFactory, PAGE_CLASS_NAME, rootElement);
+
+        train_getComponentModel(rootElement, model);
+
+        train_getComponentClassName(model, PAGE_CLASS_NAME);
+
+        train_getTemplate(templateSource, PAGE_CLASS_NAME, LOCALE, template);
+
+        train_getLog(model, log);
+
+        train_getEmbeddedIds(model, "foo", "bar", "baz");
+
+        train_getComponentIds(template, "baz", "biff");
+
+        log.error(ServicesMessages.embeddedComponentsNotInTemplate(
+                Arrays.asList("foo", "bar"),
+                PAGE_CLASS_NAME));
+
+        train_getTokens(template);
+
+        replay();
+
+        PageLoader loader = new PageLoaderImpl(templateSource, elementFactory, bindingSource);
+
+        loader.loadPage(PAGE_CLASS_NAME, LOCALE);
+
+        verify();
+    }
+
+    @Test
+    public void type_conflict_between_template_and_class()
+    {
+        ComponentTemplateSource templateSource = newComponentTemplateSource();
+        PageElementFactory elementFactory = newPageElementFactory();
+        BindingSource bindingSource = newBindingSource();
+        ComponentPageElement rootElement = newComponentPageElement();
+        ComponentModel model = newComponentModel();
+        ComponentTemplate template = newComponentTemplate();
+        Log log = newLog();
+        EmbeddedComponentModel emodel = newEmbeddedComponentModel();
+        ComponentPageElement childElement = newComponentPageElement();
+        Location l = newLocation();
+        PageElement body = newPageElement();
+
+        train_newRootComponentElement(elementFactory, PAGE_CLASS_NAME, rootElement);
+
+        train_getComponentModel(rootElement, model);
+
+        train_getComponentClassName(model, PAGE_CLASS_NAME);
+
+        train_getTemplate(templateSource, PAGE_CLASS_NAME, LOCALE, template);
+
+        train_getLog(model, log);
+
+        train_getEmbeddedIds(model, "foo");
+
+        train_getComponentIds(template, "foo");
+
+        train_getTokens(template, new StartComponentToken("foo", "Fred", l), new EndElementToken(
+                null));
+
+        train_getEmbeddedComponentModel(model, "foo", emodel);
+
+        train_getComponentType(emodel, "Barney");
+
+        log.error(ServicesMessages.compTypeConflict("foo", "Fred", "Barney"));
+
+        train_newComponentElement(elementFactory, rootElement, "foo", "Barney", l, childElement);
+
+        rootElement.addToTemplate(childElement);
+
+        train_getParameterNames(emodel);
+
+        rootElement.addEmbeddedElement(childElement);
+
+        // Alas, what comes next is the recursive call to load the child element
+
+        train_getComponentModel(childElement, model);
+        train_getComponentClassName(model, CHILD_CLASS_NAME);
+        train_getTemplate(templateSource, CHILD_CLASS_NAME, LOCALE, null);
+        train_newRenderBodyElement(elementFactory, childElement, body);
+        childElement.addToTemplate(body);
+
+        replay();
+
+        PageLoader loader = new PageLoaderImpl(templateSource, elementFactory, bindingSource);
+
+        loader.loadPage(PAGE_CLASS_NAME, LOCALE);
+
+        verify();
+    }
+
+    protected void train_newRenderBodyElement(PageElementFactory elementFactory,
+            ComponentPageElement component, PageElement body)
+    {
+        elementFactory.newRenderBodyElement(component);
+        setReturnValue(body);
+    }
+
+    private PageElement newPageElement()
+    {
+        return newMock(PageElement.class);
+    }
+
+    protected void train_getParameterNames(EmbeddedComponentModel model, String... names)
+    {
+        model.getParameterNames();
+        setReturnValue(Arrays.asList(names));
+    }
+
+    protected void train_newComponentElement(PageElementFactory elementFactory,
+            ComponentPageElement container, String embeddedId, String embeddedType,
+            Location location, ComponentPageElement embedded)
+    {
+        elementFactory.newComponentElement(
+                isA(Page.class),
+                eq(container),
+                eq(embeddedId),
+                eq(embeddedType),
+                eq(location));
+        setReturnValue(embedded);
+    }
+
+    protected final void train_getComponentType(EmbeddedComponentModel emodel, String componentType)
+    {
+        emodel.getComponentType();
+        setReturnValue(componentType);
+    }
+
+    protected final void train_getEmbeddedComponentModel(ComponentModel model, String embeddedId,
+            EmbeddedComponentModel emodel)
+    {
+        model.getEmbeddedComponentModel(embeddedId);
+        setReturnValue(emodel);
+    }
+
+    protected final EmbeddedComponentModel newEmbeddedComponentModel()
+    {
+        return newMock(EmbeddedComponentModel.class);
+    }
+
+    protected final BindingSource newBindingSource()
+    {
+        return newMock(BindingSource.class);
+    }
+
+    protected final PageElementFactory newPageElementFactory()
+    {
+        return newMock(PageElementFactory.class);
+    }
+
+    protected final ComponentTemplateSource newComponentTemplateSource()
+    {
+        return newMock(ComponentTemplateSource.class);
+    }
+
+    protected final void train_getLog(ComponentModel model, Log log)
+    {
+        model.getLog();
+        setReturnValue(log);
+    }
+
+    protected final void train_getTokens(ComponentTemplate template, TemplateToken... tokens)
+    {
+        template.getTokens();
+        setReturnValue(Arrays.asList(tokens));
+    }
+
+    protected final void train_getComponentIds(ComponentTemplate template, String... ids)
+    {
+        template.getComponentIds();
+        setReturnValue(newSet(Arrays.asList(ids)));
+    }
+
+    protected final void train_getEmbeddedIds(ComponentModel model, String... ids)
+    {
+        model.getEmbeddedComponentIds();
+
+        setReturnValue(Arrays.asList(ids));
+    }
+
+    protected void train_getTemplate(ComponentTemplateSource templateSource, String className,
+            Locale locale, ComponentTemplate template)
+    {
+        templateSource.getTemplate(className, locale);
+        setReturnValue(template);
+    }
+
+    protected final void train_getComponentModel(ComponentResources component, ComponentModel model)
+    {
+        component.getComponentModel();
+        setReturnValue(model);
+    }
+
+    protected final void train_newRootComponentElement(PageElementFactory elementFactory,
+            String className, ComponentPageElement rootElement)
+    {
+        elementFactory.newRootComponentElement(isA(Page.class), eq(className));
+        setReturnValue(rootElement);
+    }
+}

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/structure/ComponentPageElementImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/structure/ComponentPageElementImplTest.java?view=diff&rev=443428&r1=443427&r2=443428
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/structure/ComponentPageElementImplTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/structure/ComponentPageElementImplTest.java Thu Sep 14 10:51:13 2006
@@ -14,7 +14,6 @@
 
 package org.apache.tapestry.internal.structure;
 
-
 import org.apache.tapestry.Binding;
 import org.apache.tapestry.Location;
 import org.apache.tapestry.internal.InternalComponentResources;
@@ -217,6 +216,57 @@
         cpe.addParameter("barney", binding);
 
         cpe.writeParameter("barney", 23);
+
+        verify();
+    }
+
+    @Test
+    public void get_embedded_does_not_exist()
+    {
+        Page page = newPage();
+        ComponentLifecycle component = newComponentLifecycle();
+        Instantiator ins = newInstantiator(component);
+        ComponentModel model = newComponentModel();
+
+        train_getName(page, "foo.Bar");
+
+        replay();
+
+        ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, model);
+
+        try
+        {
+            cpe.getEmbeddedComponent("unknown");
+            unreachable();
+        }
+        catch (IllegalArgumentException ex)
+        {
+            assertEquals(
+                    ex.getMessage(),
+                    "Component foo.Bar does not contain an embedded component with id 'unknown'.");
+        }
+    }
+
+    @Test
+    public void get_existing_embedded_component()
+    {
+        Page page = newPage();
+        ComponentLifecycle component = newComponentLifecycle();
+        Instantiator ins = newInstantiator(component);
+        ComponentModel model = newComponentModel();
+        ComponentPageElement childElement = newComponentPageElement();
+        ComponentLifecycle childComponent = newComponentLifecycle();
+
+        train_getId(childElement, "child");
+        train_getComponent(childElement, childComponent);
+
+        replay();
+
+        ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, model);
+
+        cpe.addEmbeddedElement(childElement);
+
+        assertSame(childComponent, cpe.getEmbeddedComponent("child"));
 
         verify();
     }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/components/Border.html
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/components/Border.html?view=diff&rev=443428&r1=443427&r2=443428
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/components/Border.html (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/components/Border.html Thu Sep 14 10:51:13 2006
@@ -1,6 +1,6 @@
 <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
     <head>
-        <title>My Tapestry Application</title>
+        <title>Tapestry Integration Test Application #1</title>
     </head>
     <body>
         <t:body/>

Added: tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/pages/Countdown.html
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/pages/Countdown.html?view=auto&rev=443428
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/pages/Countdown.html (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/pages/Countdown.html Thu Sep 14 10:51:13 2006
@@ -0,0 +1,11 @@
+<t:comp type="Border" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
+    <p> This component demonstrates embedded components defined in the component class using the @Component annotation.</p>
+    <p> Countdown: <t:comp id="loop">
+            <t:comp id="output"/>
+        </t:comp>
+    </p>
+    
+    <p>
+        Brought to you by the <t:comp type="Output" value="prop:loop"/> component.
+    </p>
+</t:comp>

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/pages/MerryChristmas.html
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/pages/MerryChristmas.html?view=diff&rev=443428&r1=443427&r2=443428
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/pages/MerryChristmas.html (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/pages/MerryChristmas.html Thu Sep 14 10:51:13 2006
@@ -1,5 +1,5 @@
 <t:comp type="Border" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
     <p> The Loop component demonstrates reading and writing of properties with the prop: binding prefix.</p>
-    <p> Merry Christmas: <t:comp type="Loop" max="prop:max"> Ho! </t:comp>
+    <p> Merry Christmas: <t:comp type="Loop" end="prop:max"> Ho! </t:comp>
     </p>
 </t:comp>

Added: tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/pages/ParameterConflict.html
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/pages/ParameterConflict.html?view=auto&rev=443428
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/pages/ParameterConflict.html (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/pages/ParameterConflict.html Thu Sep 14 10:51:13 2006
@@ -0,0 +1,7 @@
+
+<t:comp type="Border" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
+    <p> This component demonstrates that template values are overriden by
+        bindings inside the @Component annotation, in the component class.</p>
+        
+        Output: <t:comp id="output" value="TemplateValue"/>
+</t:comp>