package openmods.reflection; import openmods.reflection.ClonerFactory.ICloner; import org.junit.Assert; import org.junit.Test; public class ClonerFactoryTest { public static class A { public int a; public double b; public String c; } public static class B extends A {} public static class C extends A {} @Test public void sameClassTest() { final ClonerFactory factory = new ClonerFactory(); final ICloner<A> cloner = factory.getCloner(A.class); A from = new A(); from.a = 1; from.b = 3.4; from.c = "hello"; A to = new A(); cloner.clone(from, to); Assert.assertEquals(from.a, to.a); Assert.assertEquals(from.b, to.b, 0); Assert.assertEquals(from.c, to.c); } @Test public void directDerrivativeTest() { final ClonerFactory factory = new ClonerFactory(); final ICloner<A> cloner = factory.getCloner(A.class); A from = new A(); from.a = 1; from.b = 3.4; from.c = "hello"; B to = new B(); cloner.clone(from, to); Assert.assertEquals(from.a, to.a); Assert.assertEquals(from.b, to.b, 0); Assert.assertEquals(from.c, to.c); } @Test public void commonParentTest() { final ClonerFactory factory = new ClonerFactory(); final ICloner<A> cloner = factory.getCloner(A.class); B from = new B(); from.a = 1; from.b = 3.4; from.c = "hello"; C to = new C(); cloner.clone(from, to); Assert.assertEquals(from.a, to.a); Assert.assertEquals(from.b, to.b, 0); Assert.assertEquals(from.c, to.c); } public static class Base { public int a; public int getBase() { return a; } public void setBase(int value) { this.a = value; } } public static class Override1 extends Base { public int a; public int getOverride1() { return a; } } public static class Override2 extends Override1 { public int a; public int getOverride2() { return a; } } @Test public void testOverridenField() { final ClonerFactory factory = new ClonerFactory(); final ICloner<Override1> cloner = factory.getCloner(Override1.class); Override1 base = new Override1(); base.setBase(5); base.a = 10; Override2 override = new Override2(); override.a = 15; cloner.clone(base, override); Assert.assertEquals(5, override.getBase()); Assert.assertEquals(10, override.getOverride1()); Assert.assertEquals(15, override.getOverride2()); } public static class Sub extends Base { public int a; } @Test public void testDerrivateToDerrivate() { final ClonerFactory factory = new ClonerFactory(); final ICloner<Base> cloner = factory.getCloner(Base.class); Sub from = new Sub(); from.a = 10; from.setBase(5); Sub to = new Sub(); to.a = 4; cloner.clone(from, to); Assert.assertEquals(5, to.getBase()); Assert.assertEquals(5, from.getBase()); Assert.assertEquals(10, from.a); Assert.assertEquals(4, to.a); } }