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