package org.sef4j.core.helpers.adapters; import org.junit.Assert; import org.junit.Test; public class AdapterFactoryRegistryTest { private static interface IA {} private static interface IA2 {} private static interface IB {} private static interface IB2 {} private static interface IC {} private static interface ICB extends IB {} private static interface IC2 {} private static class A implements IA, IA2 {} private static class B extends A implements IB, IB2 {} private static class C extends B implements IC, IC2, ICB {} private static interface IFoo {} private static class AIFooAdapter implements IFoo { private A delegate; public AIFooAdapter(A delegate) { this.delegate = delegate; } } private static class AIFooAdapterFactory implements AdapterFactory<IFoo,A> { @Override public IFoo getAdapter(A obj) { return new AIFooAdapter(obj); } } private static class BIFooAdapter implements IFoo { private B delegate; public BIFooAdapter(B delegate) { this.delegate = delegate; } } private static class BIFooAdapterFactory implements AdapterFactory<IFoo,B> { @Override public IFoo getAdapter(B obj) { return new BIFooAdapter(obj); } } @Test public void testGetAdapter_class() { // Prepare AdapterFactoryRegistry sut = new AdapterFactoryRegistry(); A a = new A(); B b = new B(); C c = new C(); sut.registerAdapterFactory(IFoo.class, B.class, new BIFooAdapterFactory()); // Perform IFoo fooAAdapter = sut.getAdapter(a, IFoo.class); IFoo fooBAdapter = sut.getAdapter(b, IFoo.class); IFoo fooCAdapter = sut.getAdapter(c, IFoo.class); // Post-check Assert.assertNull(fooAAdapter); Assert.assertNotNull(fooBAdapter); Assert.assertTrue(fooBAdapter instanceof BIFooAdapter); Assert.assertNotNull(fooCAdapter); Assert.assertTrue(fooCAdapter instanceof BIFooAdapter); // Prepare sut.registerAdapterFactory(IFoo.class, A.class, new AIFooAdapterFactory()); // Perform fooAAdapter = sut.getAdapter(a, IFoo.class); fooBAdapter = sut.getAdapter(b, IFoo.class); fooCAdapter = sut.getAdapter(c, IFoo.class); Assert.assertNotNull(fooAAdapter); Assert.assertTrue(fooAAdapter instanceof AIFooAdapter); Assert.assertSame(a, ((AIFooAdapter) fooAAdapter).delegate); Assert.assertNotNull(fooBAdapter); Assert.assertTrue(fooBAdapter instanceof BIFooAdapter); Assert.assertSame(b, ((BIFooAdapter) fooBAdapter).delegate); Assert.assertNotNull(fooCAdapter); Assert.assertTrue(fooCAdapter instanceof BIFooAdapter); Assert.assertSame(c, ((BIFooAdapter) fooCAdapter).delegate); // Post-check } }