You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by jo...@apache.org on 2011/08/22 06:43:51 UTC

svn commit: r1160105 - in /tapestry/tapestry5/trunk/tapestry-core/src: main/java/org/apache/tapestry5/internal/model/MutableComponentModelImpl.java test/java/org/apache/tapestry5/internal/model/MutableComponentModelImplTest.java

Author: joshcanfield
Date: Mon Aug 22 04:43:51 2011
New Revision: 1160105

URL: http://svn.apache.org/viewvc?rev=1160105&view=rev
Log:
TAP5-1613 - Mixin inherited from parent model does not inherit order
MutableComponentModelImpl returned parent mixins, but did not return the ordering for them.

Modified:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/model/MutableComponentModelImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/model/MutableComponentModelImplTest.java

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/model/MutableComponentModelImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/model/MutableComponentModelImpl.java?rev=1160105&r1=1160104&r2=1160105&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/model/MutableComponentModelImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/model/MutableComponentModelImpl.java Mon Aug 22 04:43:51 2011
@@ -365,7 +365,12 @@ public final class MutableComponentModel
 
     public String[] getOrderForMixin(String mixinClassName)
     {
-        return InternalUtils.get(mixinOrders, mixinClassName);
+        final String[] orders = InternalUtils.get(mixinOrders, mixinClassName);
+
+        if ( orders == null && parentModel != null )
+            return parentModel.getOrderForMixin(mixinClassName);
+
+        return orders;
     }
 
     public boolean isPage()

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/model/MutableComponentModelImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/model/MutableComponentModelImplTest.java?rev=1160105&r1=1160104&r2=1160105&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/model/MutableComponentModelImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/model/MutableComponentModelImplTest.java Mon Aug 22 04:43:51 2011
@@ -403,6 +403,28 @@ public class MutableComponentModelImplTe
     }
 
     @Test
+    public void mixin_order_remembered()
+    {
+        Resource r = mockResource();
+        Logger logger = mockLogger();
+
+        replay();
+
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
+
+        MutableEmbeddedComponentModel fred = model.addEmbeddedComponent("fred", "Fred", COMPONENT_CLASS_NAME, false,
+                                                                        null);
+
+        fred.addMixin("zip.zop.Zoom", "before:*", "after:foo.bar.Baz");
+        fred.addMixin("foo.bar.Baz");
+
+        assertEquals(fred.getConstraintsForMixin("zip.zop.Zoom"), new String[] {"before:*", "after:foo.bar.Baz"});
+        assertEquals(fred.getConstraintsForMixin("foo.bar.Baz"), new String[0]);
+
+        verify();
+    }
+
+    @Test
     public void mixin_name_conflict()
     {
         Resource r = mockResource();
@@ -627,6 +649,55 @@ public class MutableComponentModelImplTe
     }
 
     @Test
+    public void get_order_for_mixin_with_parent_model()
+    {
+        Resource r = mockResource();
+        Logger logger = mockLogger();
+
+        replay();
+
+        MutableComponentModel parent = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
+
+        parent.addMixinClassName("Wilma", "before:Fred");
+
+        MutableComponentModel child = new MutableComponentModelImpl(CLASS_NAME, logger, r, parent, false);
+
+        child.addMixinClassName("Fred", "after:Barney");
+        child.addMixinClassName("Barney");
+
+        assertEquals(child.getOrderForMixin("Wilma"), new String[] {"before:Fred"});
+        assertEquals(child.getOrderForMixin("Fred"), new String[] {"after:Barney"});
+        assertEquals(child.getOrderForMixin("Barney"), null);
+
+        verify();
+    }
+
+    @Test
+    public void get_order_for_mixin_with_collision_in_parent_model()
+    {
+        Resource r = mockResource();
+        Logger logger = mockLogger();
+
+        replay();
+
+        MutableComponentModel parent = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
+
+        parent.addMixinClassName("Wilma", "before:Fred");
+
+        MutableComponentModel child = new MutableComponentModelImpl(CLASS_NAME, logger, r, parent, false);
+
+        child.addMixinClassName("Wilma", "before:*");
+        child.addMixinClassName("Fred", "after:Barney");
+        child.addMixinClassName("Barney");
+
+        assertEquals(child.getOrderForMixin("Wilma"), new String[] {"before:*"});
+        assertEquals(child.getOrderForMixin("Fred"), new String[] {"after:Barney"});
+        assertEquals(child.getOrderForMixin("Barney"), null);
+
+        verify();
+    }
+
+    @Test
     public void get_parent_from_subclass()
     {
         Resource r = mockResource();