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();