@Test
public void delegateShadowedMethod() throws Exception {

    // The proxy should forward J#name() to I, even though J is not assignable to I.
    // This is a tricky case.
    abstract class D implements J, I, Decorator<I> {
        @Override public I delegate() {
            return new C("yep", 123);
        }
    }
    J j = factory.create(I.class, D.class, new Class[]{DecoratorFactoryTest.class}, new Object[]{this});
    assertEquals("yep", j.name());
}