Repository: tapestry-5 Updated Branches: refs/heads/master a55a5bc59 -> 8d1bf477d
Adds tests for TAP5-1493. Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/8d1bf477 Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/8d1bf477 Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/8d1bf477 Branch: refs/heads/master Commit: 8d1bf477d7e4f378d6599370ec66df66daf73926 Parents: a55a5bc Author: Thiago H. de Paula Figueiredo <[email protected]> Authored: Mon Jun 23 00:04:40 2014 -0300 Committer: Thiago H. de Paula Figueiredo <[email protected]> Committed: Mon Jun 23 00:04:40 2014 -0300 ---------------------------------------------------------------------- .../services/PropertyConduitSourceImplTest.java | 77 ++++++++++++++++++++ 1 file changed, 77 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/8d1bf477/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PropertyConduitSourceImplTest.java ---------------------------------------------------------------------- diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PropertyConduitSourceImplTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PropertyConduitSourceImplTest.java index 0e61220..cc99472 100644 --- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PropertyConduitSourceImplTest.java +++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PropertyConduitSourceImplTest.java @@ -875,4 +875,81 @@ public class PropertyConduitSourceImplTest extends InternalBaseTestCase assertListsEquals(actual, PublicStaticFieldBean.READ_ONLY); } + + // TAP5-1493 + @Test + public void covariant_property_return_type() { + + // example from Howard + assertConduitPropertyType(AbstractFoo.class, "bar", AbstractBar.class); + assertConduitPropertyType(Foo.class, "bar", Bar.class); + + // example from Robert + assertConduitPropertyType(RobertMyClass.class, "foo.robertBarValue", int.class); + + } + + // TAP5-1493 + public static abstract class AbstractBar + { + } + + public static class Bar extends AbstractBar + { + } + + public static abstract class AbstractFoo + { + public abstract AbstractBar getBar(); + } + + public static class Foo extends AbstractFoo + { + Bar bar; + + public Bar getBar() + { + return bar; + } + } + + public static interface RobertFoo + { + int getRobertFooValue(); + } + + public static interface RobertBar extends RobertFoo + { + int getRobertBarValue(); + } + + public static interface RobertBaz + { + RobertFoo getFoo(); + } + + public static interface RobertQux extends RobertBaz + { + RobertBar getFoo(); + } + + public static class RobertAbstractClass implements RobertBaz + { + public RobertFoo getFoo() + { + return null; + } + } + + public static class RobertMyClass extends RobertAbstractClass implements RobertQux + { + public RobertBar getFoo() + { + return null; + } + } + + private void assertConduitPropertyType(Class<?> origin, String property, Class<?> expectedType) { + assertEquals(expectedType, source.create(origin, property).getPropertyType()); + } }
