package org.sef4j.core.helpers.adapters;
import org.junit.Assert;
import org.junit.Test;
public class TypeHierarchyToObjectMapTest {
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 interface ID {}
private static interface ID2 {}
private static interface IDCBD extends ICB {}
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 class D extends C implements ID, ID2, IDCBD {}
@Test
public void testPutOverride() {
// Prepare
TypeHierarchyToObjectMap<Integer> sut = new TypeHierarchyToObjectMap<Integer>();
// Perform
sut.putOverride(B.class, 1);
// Post-check
Assert.assertEquals(1, (int) sut.getOverride(B.class));
}
@Test
public void testGet_class() {
// Prepare
Integer i1 = 1;
TypeHierarchyToObjectMap<Integer> sut = new TypeHierarchyToObjectMap<Integer>();
sut.putOverride(B.class, i1);
// Perform
Assert.assertNull(sut.get(A.class));
Assert.assertEquals(i1, sut.get(B.class));
Assert.assertEquals(i1, sut.get(C.class));
// Post-check
// Prepare
Integer i2 = 2;
sut.putOverride(C.class, i2);
// Perform
Assert.assertNull(sut.get(A.class));
Assert.assertEquals(i1, sut.get(B.class));
Assert.assertEquals(i2, sut.get(C.class));
Assert.assertEquals(i2, sut.get(D.class));
// Post-check
}
@Test
public void testGet_interface() {
// Prepare
Integer i1 = 1;
TypeHierarchyToObjectMap<Integer> sut = new TypeHierarchyToObjectMap<Integer>();
sut.putOverride(IB.class, i1);
// Perform
Assert.assertNull(sut.get(A.class));
Assert.assertEquals(i1, sut.get(IB.class));
Assert.assertEquals(i1, sut.get(B.class));
Assert.assertEquals(i1, sut.get(ICB.class)); // should also find for sub interfaces ...
Assert.assertNull(sut.get(IC.class));
Assert.assertEquals(i1, sut.get(IDCBD.class)); // should also find in sub-sub interface
Assert.assertEquals(i1, sut.get(D.class));
Assert.assertNull(sut.get(A.class));
// Post-check
// Prepare
Integer i2 = 2;
sut.putOverride(ICB.class, i2);
// Perform
Assert.assertNull(sut.get(A.class));
Assert.assertEquals(i1, sut.get(B.class));
Assert.assertEquals(i2, sut.get(C.class)); // ICB:2 (override IB:1)
Assert.assertEquals(i2, sut.get(D.class));
// Post-check
}
}