[prev in list] [next in list] [prev in thread] [next in thread] 

List:       tapestry-dev
Subject:    svn commit: r480728 [2/2] - in /tapestry/tapestry5/tapestry-core/trunk/src:
From:       hlship () apache ! org
Date:       2006-11-29 22:02:47
Message-ID: 20061129220250.F2D0E1A984D () eris ! apache ! org
[Download RAW message or body]

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=480728&r1=480727&r2=480728
 ==============================================================================
--- 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 \
Wed Nov 29 14:02:40 2006 @@ -12,545 +12,561 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.internal.model;
-
-import java.util.Arrays;
-
-import org.apache.commons.logging.Log;
-import org.apache.tapestry.internal.test.InternalBaseTestCase;
+package org.apache.tapestry.internal.model;
+
+import java.util.Arrays;
+
+import org.apache.commons.logging.Log;
+import org.apache.tapestry.internal.test.InternalBaseTestCase;
 import org.apache.tapestry.ioc.Resource;
-import org.apache.tapestry.model.ComponentModel;
-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}.
- */
-public class MutableComponentModelImplTest extends InternalBaseTestCase
-{
-    private static final String COMPONENT_CLASS_NAME = \
                "org.example.components.Fred";
-
-    private static final String CLASS_NAME = "org.example.components.Foo";
-
-    @Test
-    public void root_class_vs_sub_class()
-    {
-        Resource r = newResource();
-        Log log = newLog();
-
-        replay();
-
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
                r, null);
-
-        assertTrue(model.isRootClass());
-
-        MutableComponentModel subModel = new MutableComponentModelImpl(CLASS_NAME, \
                log, r, model);
-
-        assertFalse(subModel.isRootClass());
-
-        verify();
-    }
-
-    @Test
-    public void add_new_parameter()
-    {
-        Resource r = newResource();
-        Log log = newLog();
-
-        replay();
-
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
                r, null);
-
-        assertTrue(model.getParameterNames().isEmpty());
-
-        String parameterName = "value";
-
-        model.addParameter(parameterName, true);
-
-        ParameterModel pm = model.getParameterModel(parameterName);
-
-        assertEquals(pm.getName(), parameterName);
-        assertEquals(true, pm.isRequired());
-
-        verify();
-    }
-
-    @Test
-    public void add_duplicate_parameter()
-    {
-        Resource r = newResource();
-        Log log = newLog();
-
-        replay();
-
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
                r, null);
-
-        model.addParameter("fred", true);
-
-        try
-        {
-            model.addParameter("fred", true);
-            unreachable();
-        }
-        catch (IllegalArgumentException ex)
-        {
-            assertEquals(
-                    ex.getMessage(),
-                    "Parameter 'fred' of component org.example.components.Foo is \
                already defined.");
-        }
-
-        verify();
-    }
-
-    @Test
-    public void get_parameter_by_name_with_no_parameters_defined()
-    {
-        Resource r = newResource();
-        Log log = newLog();
-
-        replay();
-
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
                r, null);
-
-        assertNull(model.getParameterModel("foo"));
-
-        verify();
-    }
-
-    @Test
-    public void get_unknown_parameter()
-    {
-        Resource r = newResource();
-        Log log = newLog();
-
-        replay();
-
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
                r, null);
-        model.addParameter("fred", true);
-
-        assertNull(model.getParameterModel("barney"));
-
-        verify();
-    }
-
-    @Test
-    public void add_embedded()
-    {
-        Resource r = newResource();
-        Log log = newLog();
-
-        replay();
-
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
                r, null);
-
-        assertTrue(model.getEmbeddedComponentIds().isEmpty());
-
-        MutableEmbeddedComponentModel fred = model.addEmbeddedComponent(
-                "fred",
-                "Fred",
-                COMPONENT_CLASS_NAME);
-
-        assertEquals(fred.getId(), "fred");
-        assertEquals(fred.getComponentType(), "Fred");
-
-        MutableEmbeddedComponentModel barney = model.addEmbeddedComponent(
-                "barney",
-                "Barney",
-                COMPONENT_CLASS_NAME);
-
-        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 \
                class=org.example.components.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, null);
-
-        model.addEmbeddedComponent("fred", "Fred1", COMPONENT_CLASS_NAME);
-
-        try
-        {
-            model.addEmbeddedComponent("fred", "Fred2", COMPONENT_CLASS_NAME);
-            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, null);
-
-        MutableEmbeddedComponentModel fred = model.addEmbeddedComponent(
-                "fred",
-                "Fred",
-                COMPONENT_CLASS_NAME);
-
-        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, null);
-
-        MutableEmbeddedComponentModel fred = model.addEmbeddedComponent(
-                "fred",
-                "Fred",
-                COMPONENT_CLASS_NAME);
-
-        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();
-    }
-
-    @Test
-    public void mixin_names_is_initially_empty_list()
-    {
-        Resource r = newResource();
-        Log log = newLog();
-
-        replay();
-
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
                r, null);
-
-        MutableEmbeddedComponentModel fred = model.addEmbeddedComponent(
-                "fred",
-                "Fred",
-                COMPONENT_CLASS_NAME);
-
-        assertTrue(fred.getMixinClassNames().isEmpty());
-
-        verify();
-    }
-
-    @Test
-    public void mixin_class_names_remembered_in_order_added()
-    {
-        Resource r = newResource();
-        Log log = newLog();
-
-        replay();
-
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
                r, null);
-
-        MutableEmbeddedComponentModel fred = model.addEmbeddedComponent(
-                "fred",
-                "Fred",
-                COMPONENT_CLASS_NAME);
-
-        fred.addMixin("zip.zop.Zoom");
-        fred.addMixin("foo.bar.Baz");
-
-        assertEquals(fred.getMixinClassNames(), Arrays.asList("zip.zop.Zoom", \
                "foo.bar.Baz"));
-
-        verify();
-    }
-
-    @Test
-    public void mixin_name_conflict()
-    {
-        Resource r = newResource();
-        Log log = newLog();
-
-        replay();
-
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
                r, null);
-
-        MutableEmbeddedComponentModel fred = model.addEmbeddedComponent(
-                "fred",
-                "Fred",
-                COMPONENT_CLASS_NAME);
-
-        fred.addMixin("zip.zop.Zoom");
-
-        try
-        {
-            fred.addMixin("zip.zop.Zoom");
-            unreachable();
-        }
-        catch (IllegalArgumentException ex)
-        {
-            assertEquals(
-                    ex.getMessage(),
-                    "Mixin zip.zop.Zoom (for component fred) has already been \
                defined.");
-        }
-
-        // Make sure it wasn't actually added.
-
-        assertEquals(fred.getMixinClassNames(), Arrays.asList("zip.zop.Zoom"));
-
-        verify();
-    }
-
-    @Test
-    public void get_persistent_field_names_when_none_defined()
-    {
-        Resource r = newResource();
-        Log log = newLog();
-
-        replay();
-
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
                r, null);
-
-        assertTrue(model.getPersistentFieldNames().isEmpty());
-
-        verify();
-    }
-
-    @Test
-    public void get_persistent_field_names_are_sorted()
-    {
-        Resource r = newResource();
-        Log log = newLog();
-
-        replay();
-
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
                r, null);
-
-        assertEquals(model.setFieldPersistenceStrategy("fred", "session"), "fred");
-        assertEquals(model.setFieldPersistenceStrategy("barney", "client"), \
                "barney");
-
-        assertEquals(model.getPersistentFieldNames(), Arrays.asList("barney", \
                "fred"));
-
-        verify();
-    }
-
-    @Test
-    public void persistent_field_names_have_punctuation_stripped()
-    {
-        Resource r = newResource();
-        Log log = newLog();
-
-        replay();
-
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
                r, null);
-
-        assertEquals(model.setFieldPersistenceStrategy("_fred", "session"), "fred");
-        assertEquals(model.setFieldPersistenceStrategy("_$barney", "client"), \
                "barney");
-
-        assertEquals(model.getPersistentFieldNames(), Arrays.asList("barney", \
                "fred"));
-
-        verify();
-    }
-
-    @Test
-    public void get_persistent_field_names_reflects_parent_model()
-    {
-        Resource r = newResource();
-        Log log = newLog();
-
-        replay();
-
-        MutableComponentModel parent = new MutableComponentModelImpl(CLASS_NAME, \
                log, r, null);
-
-        assertEquals(parent.setFieldPersistenceStrategy("wilma", "session"), \
                "wilma");
-
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
                r, parent);
-
-        assertEquals(model.setFieldPersistenceStrategy("fred", "session"), "fred");
-        assertEquals(model.setFieldPersistenceStrategy("barney", "client"), \
                "barney");
-
-        assertEquals(model.getPersistentFieldNames(), Arrays.asList("barney", \
                "fred", "wilma"));
-
-        verify();
-    }
-
-    @Test
-    public void persistent_field_names_allocated_in_subclasses_are_unique()
-    {
-        Resource r = newResource();
-        Log log = newLog();
-
-        replay();
-
-        MutableComponentModel parent = new MutableComponentModelImpl(CLASS_NAME, \
                log, r, null);
-        assertEquals(parent.setFieldPersistenceStrategy("wilma", "session"), \
                "wilma");
-
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
                r, parent);
-
-        assertEquals(model.setFieldPersistenceStrategy("wilma", "session"), \
                "wilma_0");
-
-        assertEquals(model.getPersistentFieldNames(), Arrays.asList("wilma", \
                "wilma_0"));
-
-        verify();
-    }
-
-    @Test
-    public void get_persistent_field_defined_in_model()
-    {
-        Resource r = newResource();
-        Log log = newLog();
-
-        replay();
-
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
                r, null);
-
-        model.setFieldPersistenceStrategy("fred", "session");
-        model.setFieldPersistenceStrategy("barney", "client");
-
-        assertEquals(model.getFieldPersistenceStrategy("fred"), "session");
-        assertEquals(model.getFieldPersistenceStrategy("barney"), "client");
-
-        verify();
-    }
-
-    @Test
-    public void no_persistence_defined_for_field()
-    {
-        Resource r = newResource();
-        Log log = newLog();
-
-        replay();
-
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
                r, null);
-
-        try
-        {
-            model.getFieldPersistenceStrategy("someField");
-            unreachable();
-        }
-        catch (IllegalArgumentException ex)
-        {
-            assertEquals(
-                    ex.getMessage(),
-                    "No field persistence strategy has been defined for field \
                \'someField\'.");
-        }
-
-        verify();
-
-    }
-
-    @Test
-    public void get_persistent_field_defined_in_parent()
-    {
-        Resource r = newResource();
-        Log log = newLog();
-
-        replay();
-
-        MutableComponentModel parent = new MutableComponentModelImpl(CLASS_NAME, \
                log, r, null);
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
                r, parent);
-
-        parent.setFieldPersistenceStrategy("wilma", "parent");
-
-        model.setFieldPersistenceStrategy("fred", "session");
-
-        assertEquals(model.getFieldPersistenceStrategy("wilma"), "parent");
-
-        verify();
-    }
-
-    @Test
-    public void default_for_supports_informal_parameters_is_false()
-    {
-        Resource r = newResource();
-        Log log = newLog();
-
-        replay();
-
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
                r, null);
-
-        assertFalse(model.getSupportsInformalParameters());
-
-        model.enableSupportsInformalParameters();
-
-        assertTrue(model.getSupportsInformalParameters());
-
-        verify();
-    }
-
-    @Test
-    public void get_mixin_class_names_with_no_mixins()
-    {
-        Resource r = newResource();
-        Log log = newLog();
-
-        replay();
-        ComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, r, \
                null);
-
-        assertTrue(model.getMixinClassNames().isEmpty());
-
-        verify();
-    }
-
-    @Test
-    public void get_mixin_class_names_mixes_with_parent_model()
-    {
-        Resource r = newResource();
-        Log log = newLog();
-
-        replay();
-
-        MutableComponentModel parent = new MutableComponentModelImpl(CLASS_NAME, \
                log, r, null);
-
-        parent.addMixinClassName("Wilma");
-
-        MutableComponentModel child = new MutableComponentModelImpl(CLASS_NAME, log, \
                r, parent);
-
-        child.addMixinClassName("Fred");
-        child.addMixinClassName("Barney");
-
-        assertEquals(child.getMixinClassNames(), Arrays.asList("Barney", "Fred", \
                "Wilma"));
-
-        verify();
-
-    }
-
-}
+import org.apache.tapestry.model.ComponentModel;
+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}.
+ */
+public class MutableComponentModelImplTest extends InternalBaseTestCase
+{
+    private static final String COMPONENT_CLASS_NAME = \
"org.example.components.Fred"; +
+    private static final String CLASS_NAME = "org.example.components.Foo";
+
+    @Test
+    public void root_class_vs_sub_class()
+    {
+        Resource r = newResource();
+        Log log = newLog();
+
+        replay();
+
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
r, null); +
+        assertTrue(model.isRootClass());
+
+        MutableComponentModel subModel = new MutableComponentModelImpl(CLASS_NAME, \
log, r, model); +
+        assertFalse(subModel.isRootClass());
+
+        verify();
+    }
+
+    @Test
+    public void add_new_parameter()
+    {
+        Resource r = newResource();
+        Log log = newLog();
+
+        replay();
+
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
r, null); +
+        assertTrue(model.getParameterNames().isEmpty());
+
+        String parameterName = "value";
+
+        model.addParameter(parameterName, true);
+
+        ParameterModel pm = model.getParameterModel(parameterName);
+
+        assertEquals(pm.getName(), parameterName);
+        assertEquals(true, pm.isRequired());
+
+        verify();
+    }
+
+    @Test
+    public void add_duplicate_parameter()
+    {
+        Resource r = newResource();
+        Log log = newLog();
+
+        replay();
+
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
r, null); +
+        model.addParameter("fred", true);
+
+        try
+        {
+            model.addParameter("fred", true);
+            unreachable();
+        }
+        catch (IllegalArgumentException ex)
+        {
+            assertEquals(
+                    ex.getMessage(),
+                    "Parameter 'fred' of component org.example.components.Foo is \
already defined."); +        }
+
+        verify();
+    }
+
+    @Test
+    public void get_parameter_by_name_with_no_parameters_defined()
+    {
+        Resource r = newResource();
+        Log log = newLog();
+
+        replay();
+
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
r, null); +
+        assertNull(model.getParameterModel("foo"));
+
+        verify();
+    }
+
+    @Test
+    public void get_unknown_parameter()
+    {
+        Resource r = newResource();
+        Log log = newLog();
+
+        replay();
+
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
r, null); +        model.addParameter("fred", true);
+
+        assertNull(model.getParameterModel("barney"));
+
+        verify();
+    }
+
+    @Test
+    public void add_embedded()
+    {
+        Resource r = newResource();
+        Log log = newLog();
+
+        replay();
+
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
r, null); +
+        assertTrue(model.getEmbeddedComponentIds().isEmpty());
+
+        MutableEmbeddedComponentModel fred = model.addEmbeddedComponent(
+                "fred",
+                "Fred",
+                COMPONENT_CLASS_NAME);
+
+        assertEquals(fred.getId(), "fred");
+        assertEquals(fred.getComponentType(), "Fred");
+
+        MutableEmbeddedComponentModel barney = model.addEmbeddedComponent(
+                "barney",
+                "Barney",
+                COMPONENT_CLASS_NAME);
+
+        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 \
class=org.example.components.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, null); +
+        model.addEmbeddedComponent("fred", "Fred1", COMPONENT_CLASS_NAME);
+
+        try
+        {
+            model.addEmbeddedComponent("fred", "Fred2", COMPONENT_CLASS_NAME);
+            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, null); +
+        MutableEmbeddedComponentModel fred = model.addEmbeddedComponent(
+                "fred",
+                "Fred",
+                COMPONENT_CLASS_NAME);
+
+        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, null); +
+        MutableEmbeddedComponentModel fred = model.addEmbeddedComponent(
+                "fred",
+                "Fred",
+                COMPONENT_CLASS_NAME);
+
+        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();
+    }
+
+    @Test
+    public void mixin_names_is_initially_empty_list()
+    {
+        Resource r = newResource();
+        Log log = newLog();
+
+        replay();
+
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
r, null); +
+        MutableEmbeddedComponentModel fred = model.addEmbeddedComponent(
+                "fred",
+                "Fred",
+                COMPONENT_CLASS_NAME);
+
+        assertTrue(fred.getMixinClassNames().isEmpty());
+
+        verify();
+    }
+
+    @Test
+    public void mixin_class_names_remembered_in_order_added()
+    {
+        Resource r = newResource();
+        Log log = newLog();
+
+        replay();
+
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
r, null); +
+        MutableEmbeddedComponentModel fred = model.addEmbeddedComponent(
+                "fred",
+                "Fred",
+                COMPONENT_CLASS_NAME);
+
+        fred.addMixin("zip.zop.Zoom");
+        fred.addMixin("foo.bar.Baz");
+
+        assertEquals(fred.getMixinClassNames(), Arrays.asList("zip.zop.Zoom", \
"foo.bar.Baz")); +
+        verify();
+    }
+
+    @Test
+    public void mixin_name_conflict()
+    {
+        Resource r = newResource();
+        Log log = newLog();
+
+        replay();
+
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
r, null); +
+        MutableEmbeddedComponentModel fred = model.addEmbeddedComponent(
+                "fred",
+                "Fred",
+                COMPONENT_CLASS_NAME);
+
+        fred.addMixin("zip.zop.Zoom");
+
+        try
+        {
+            fred.addMixin("zip.zop.Zoom");
+            unreachable();
+        }
+        catch (IllegalArgumentException ex)
+        {
+            assertEquals(
+                    ex.getMessage(),
+                    "Mixin zip.zop.Zoom (for component fred) has already been \
defined."); +        }
+
+        // Make sure it wasn't actually added.
+
+        assertEquals(fred.getMixinClassNames(), Arrays.asList("zip.zop.Zoom"));
+
+        verify();
+    }
+
+    @Test
+    public void get_persistent_field_names_when_none_defined()
+    {
+        Resource r = newResource();
+        Log log = newLog();
+
+        replay();
+
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
r, null); +
+        assertTrue(model.getPersistentFieldNames().isEmpty());
+
+        verify();
+    }
+
+    @Test
+    public void get_persistent_field_names_are_sorted()
+    {
+        Resource r = newResource();
+        Log log = newLog();
+
+        replay();
+
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
r, null); +
+        assertEquals(model.setFieldPersistenceStrategy("fred", "session"), "fred");
+        assertEquals(model.setFieldPersistenceStrategy("barney", "client"), \
"barney"); +
+        assertEquals(model.getPersistentFieldNames(), Arrays.asList("barney", \
"fred")); +
+        verify();
+    }
+
+    @Test
+    public void persistent_field_names_have_punctuation_stripped()
+    {
+        Resource r = newResource();
+        Log log = newLog();
+
+        replay();
+
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
r, null); +
+        assertEquals(model.setFieldPersistenceStrategy("_fred", "session"), "fred");
+        assertEquals(model.setFieldPersistenceStrategy("_$barney", "client"), \
"barney"); +
+        assertEquals(model.getPersistentFieldNames(), Arrays.asList("barney", \
"fred")); +
+        verify();
+    }
+
+    @Test
+    public void get_persistent_field_names_reflects_parent_model()
+    {
+        Resource r = newResource();
+        Log log = newLog();
+
+        replay();
+
+        MutableComponentModel parent = new MutableComponentModelImpl(CLASS_NAME, \
log, r, null); +
+        assertEquals(parent.setFieldPersistenceStrategy("wilma", "session"), \
"wilma"); +
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
r, parent); +
+        assertEquals(model.setFieldPersistenceStrategy("fred", "session"), "fred");
+        assertEquals(model.setFieldPersistenceStrategy("barney", "client"), \
"barney"); +
+        assertEquals(model.getPersistentFieldNames(), Arrays.asList("barney", \
"fred", "wilma")); +
+        verify();
+    }
+
+    @Test
+    public void persistent_field_names_allocated_in_subclasses_are_unique()
+    {
+        Resource r = newResource();
+        Log log = newLog();
+
+        replay();
+
+        MutableComponentModel parent = new MutableComponentModelImpl(CLASS_NAME, \
log, r, null); +        assertEquals(parent.setFieldPersistenceStrategy("wilma", \
"session"), "wilma"); +
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
r, parent); +
+        assertEquals(model.setFieldPersistenceStrategy("wilma", "session"), \
"wilma_0"); +
+        assertEquals(model.getPersistentFieldNames(), Arrays.asList("wilma", \
"wilma_0")); +
+        verify();
+    }
+
+    @Test
+    public void get_persistent_field_defined_in_model()
+    {
+        Resource r = newResource();
+        Log log = newLog();
+
+        replay();
+
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
r, null); +
+        model.setFieldPersistenceStrategy("fred", "session");
+        model.setFieldPersistenceStrategy("barney", "client");
+
+        assertEquals(model.getFieldPersistenceStrategy("fred"), "session");
+        assertEquals(model.getFieldPersistenceStrategy("barney"), "client");
+
+        verify();
+    }
+
+    @Test
+    public void no_persistence_defined_for_field()
+    {
+        Resource r = newResource();
+        Log log = newLog();
+
+        replay();
+
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
r, null); +
+        try
+        {
+            model.getFieldPersistenceStrategy("someField");
+            unreachable();
+        }
+        catch (IllegalArgumentException ex)
+        {
+            assertEquals(
+                    ex.getMessage(),
+                    "No field persistence strategy has been defined for field \
\'someField\'."); +        }
+
+        verify();
+
+    }
+
+    @Test
+    public void get_persistent_field_defined_in_parent()
+    {
+        Resource r = newResource();
+        Log log = newLog();
+
+        replay();
+
+        MutableComponentModel parent = new MutableComponentModelImpl(CLASS_NAME, \
log, r, null); +        MutableComponentModel model = new \
MutableComponentModelImpl(CLASS_NAME, log, r, parent); +
+        parent.setFieldPersistenceStrategy("wilma", "parent");
+
+        model.setFieldPersistenceStrategy("fred", "session");
+
+        assertEquals(model.getFieldPersistenceStrategy("wilma"), "parent");
+
+        verify();
+    }
+
+    @Test
+    public void default_for_supports_informal_parameters_is_false()
+    {
+        Resource r = newResource();
+        Log log = newLog();
+
+        replay();
+
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, \
r, null); +
+        assertFalse(model.getSupportsInformalParameters());
+
+        model.enableSupportsInformalParameters();
+
+        assertTrue(model.getSupportsInformalParameters());
+
+        verify();
+    }
+
+    @Test
+    public void get_mixin_class_names_with_no_mixins()
+    {
+        Resource r = newResource();
+        Log log = newLog();
+
+        replay();
+        ComponentModel model = new MutableComponentModelImpl(CLASS_NAME, log, r, \
null); +
+        assertTrue(model.getMixinClassNames().isEmpty());
+
+        verify();
+    }
+
+    @Test
+    public void get_mixin_class_names_mixes_with_parent_model()
+    {
+        Resource r = newResource();
+        Log log = newLog();
+
+        replay();
+
+        MutableComponentModel parent = new MutableComponentModelImpl(CLASS_NAME, \
log, r, null); +
+        parent.addMixinClassName("Wilma");
+
+        MutableComponentModel child = new MutableComponentModelImpl(CLASS_NAME, log, \
r, parent); +
+        child.addMixinClassName("Fred");
+        child.addMixinClassName("Barney");
+
+        assertEquals(child.getMixinClassNames(), Arrays.asList("Barney", "Fred", \
"Wilma")); +
+        verify();
+    }
+
+    @Test
+    public void get_parent_from_subclass()
+    {
+        Resource r = newResource();
+        Log log = newLog();
+
+        replay();
+
+        MutableComponentModel parent = new MutableComponentModelImpl(CLASS_NAME, \
log, r, null); +        MutableComponentModel child = new \
MutableComponentModelImpl(CLASS_NAME, log, r, parent); +
+        assertSame(child.getParentModel(), parent);
+        assertNull(parent.getParentModel());
+
+        verify();
+    }
+
+}

Added: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/ComponentMessagesSourceImplTest.java
                
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java \
/org/apache/tapestry/internal/services/ComponentMessagesSourceImplTest.java?view=auto&rev=480728
 ==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/ComponentMessagesSourceImplTest.java \
                (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/ComponentMessagesSourceImplTest.java \
Wed Nov 29 14:02:40 2006 @@ -0,0 +1,147 @@
+// 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.Locale;
+
+import org.apache.tapestry.internal.test.InternalBaseTestCase;
+import org.apache.tapestry.internal.util.URLChangeTracker;
+import org.apache.tapestry.ioc.Messages;
+import org.apache.tapestry.ioc.internal.util.ClasspathResource;
+import org.apache.tapestry.model.ComponentModel;
+import org.testng.annotations.Test;
+
+@Test(sequential = true)
+public class ComponentMessagesSourceImplTest extends InternalBaseTestCase
+{
+    // With control of the tracker, we can force changes as if underlying files were \
changed. +
+    private static final String SIMPLE_COMPONENT_CLASS_NAME = \
"org.apache.tapestry.internal.services.SimpleComponent"; +
+    private final URLChangeTracker _tracker = new URLChangeTracker();
+
+    private final ComponentMessagesSourceImpl _source = new \
ComponentMessagesSourceImpl(_tracker); +
+    @Test
+    public void simple_component()
+    {
+        ComponentModel model = newComponentModel();
+
+        train_getComponentClassName(model, SIMPLE_COMPONENT_CLASS_NAME);
+
+        train_getBaseResource(model, _simpleComponentResource);
+
+        train_getParentModel(model, null);
+
+        replay();
+
+        forceCacheClear();
+
+        Messages messages = _source.getMessages(model, Locale.ENGLISH);
+
+        assertEquals(messages.get("color"), "color");
+        assertEquals(messages.get("framework"), "Tapestry");
+
+        // Check normal caching
+
+        assertSame(_source.getMessages(model, Locale.ENGLISH), messages);
+
+        // Now, force a cache clear and retry.
+
+        forceCacheClear();
+
+        Messages messages2 = _source.getMessages(model, Locale.ENGLISH);
+
+        // Check that a new Messages was created
+
+        assertNotSame(messages2, messages);
+
+        assertEquals(messages2.get("color"), "color");
+        assertEquals(messages2.get("framework"), "Tapestry");
+
+        verify();
+    }
+
+    private void forceCacheClear()
+    {
+        _tracker.forceChange();
+        _source.checkForUpdates();
+    }
+
+    @Test
+    public void per_language_messages_override()
+    {
+        ComponentModel model = newComponentModel();
+
+        train_getComponentClassName(model, SIMPLE_COMPONENT_CLASS_NAME);
+
+        train_getBaseResource(model, _simpleComponentResource);
+
+        train_getParentModel(model, null);
+
+        replay();
+
+        forceCacheClear();
+
+        Messages messages = _source.getMessages(model, Locale.UK);
+
+        assertEquals(messages.get("color"), "colour");
+        assertEquals(messages.get("framework"), "Tapestry");
+
+        verify();
+    }
+
+    @Test
+    public void subclass_inherits_base_class_messages()
+    {
+        ComponentModel model = newComponentModel();
+        ComponentModel parent = newComponentModel();
+
+        train_getComponentClassName(
+                model,
+                "org.apache.tapestry.internal.services.SubclassComponent");
+
+        train_getBaseResource(model, new ClasspathResource(
+                "org/apache/tapestry/internal/services/SubclassComponent.class"));
+
+        train_getParentModel(model, parent);
+
+        train_getComponentClassName(parent, SIMPLE_COMPONENT_CLASS_NAME);
+
+        train_getBaseResource(parent, _simpleComponentResource);
+
+        train_getParentModel(parent, null);
+
+        replay();
+
+        forceCacheClear();
+
+        Messages messages = _source.getMessages(model, Locale.ENGLISH);
+
+        assertEquals(messages.get("color"), "color");
+        assertEquals(messages.get("framework"), "Tapestry");
+        assertEquals(messages.get("source"), "SubclassComponent");
+        assertEquals(messages.get("metal"), "steel");
+
+        messages = _source.getMessages(model, Locale.UK);
+
+        assertEquals(messages.get("color"), "colour");
+        assertEquals(messages.get("framework"), "Tapestry");
+        assertEquals(messages.get("source"), "SubclassComponent");
+        assertEquals(messages.get("metal"), "aluminium");
+
+        verify();
+    }
+}

Added: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/util/MultiKeyTest.java
                
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/util/MultiKeyTest.java?view=auto&rev=480728
 ==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/util/MultiKeyTest.java \
                (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/util/MultiKeyTest.java \
Wed Nov 29 14:02:40 2006 @@ -0,0 +1,75 @@
+// 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.util;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+public class MultiKeyTest extends Assert
+{
+    @Test
+    public void same_values_same_hash_codes()
+    {
+        MultiKey key1 = new MultiKey(1, 3, "foo");
+        MultiKey key2 = new MultiKey(1, 3, "foo");
+        MultiKey key3 = new MultiKey(1, 3);
+        MultiKey key4 = new MultiKey(1, 3, "bar");
+        MultiKey key5 = new MultiKey(1, 3, "foo", "bar");
+
+        assertEquals(key2.hashCode(), key1.hashCode());
+        assertFalse(key3.hashCode() == key1.hashCode());
+        assertFalse(key4.hashCode() == key1.hashCode());
+        assertFalse(key5.hashCode() == key1.hashCode());
+    }
+
+    @Test
+    public void comparisons_against_not_multi_key()
+    {
+        MultiKey key = new MultiKey(1, 3, "foo");
+
+        assertFalse(key.equals(null));
+        assertFalse(key.equals("foo"));
+    }
+
+    @Test
+    public void comparison_against_self()
+    {
+        MultiKey key = new MultiKey(1, 3, "foo");
+
+        assertTrue(key.equals(key));
+    }
+
+    @Test
+    public void comparisons_against_other_keys()
+    {
+        MultiKey key1 = new MultiKey(1, 3, "foo");
+        MultiKey key2 = new MultiKey(1, 3, "foo");
+        MultiKey key3 = new MultiKey(1, 3);
+        MultiKey key4 = new MultiKey(1, 3, "bar");
+        MultiKey key5 = new MultiKey(1, 3, "foo", "bar");
+
+        assertEquals(key2, key1);
+        assertFalse(key3.equals(key1));
+        assertFalse(key4.equals(key1));
+        assertFalse(key5.equals(key1));
+    }
+
+    @Test
+    public void to_string()
+    {
+        assertEquals(new MultiKey("fred").toString(), "MultiKey[fred]");
+        assertEquals(new MultiKey("fred", "barney").toString(), "MultiKey[fred, \
barney]"); +    }
+}

Added: tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/internal/services/SimpleComponent.properties
                
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/reso \
urces/org/apache/tapestry/internal/services/SimpleComponent.properties?view=auto&rev=480728
 ==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/internal/services/SimpleComponent.properties \
                (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/internal/services/SimpleComponent.properties \
Wed Nov 29 14:02:40 2006 @@ -0,0 +1,4 @@
+# Default, American English spelling
+color=color
+framework=Tapestry
+source=SimpleComponent

Added: tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/internal/services/SimpleComponent_en_GB.properties
                
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/reso \
urces/org/apache/tapestry/internal/services/SimpleComponent_en_GB.properties?view=auto&rev=480728
 ==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/internal/services/SimpleComponent_en_GB.properties \
                (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/internal/services/SimpleComponent_en_GB.properties \
Wed Nov 29 14:02:40 2006 @@ -0,0 +1,3 @@
+# British spelling
+
+color=colour

Added: tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/internal/services/SubclassComponent.properties
                
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/reso \
urces/org/apache/tapestry/internal/services/SubclassComponent.properties?view=auto&rev=480728
 ==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/internal/services/SubclassComponent.properties \
                (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/internal/services/SubclassComponent.properties \
Wed Nov 29 14:02:40 2006 @@ -0,0 +1,2 @@
+metal=steel
+source=SubclassComponent
\ No newline at end of file

Added: tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/internal/services/SubclassComponent_en_GB.properties
                
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/reso \
urces/org/apache/tapestry/internal/services/SubclassComponent_en_GB.properties?view=auto&rev=480728
 ==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/internal/services/SubclassComponent_en_GB.properties \
                (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/internal/services/SubclassComponent_en_GB.properties \
Wed Nov 29 14:02:40 2006 @@ -0,0 +1 @@
+metal=aluminium


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic