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>