package org.sql2o.reflect;
import org.sql2o.reflection.MethodAccessorsGenerator;
/**
* User: dimzon
* Date: 5/13/14
* Time: 3:45 AM
*/
public class MethodAccessorsGeneratorObjectConstructorFactoryTest extends AbstractObjectConstructorFactoryTest {
public class POJO2{
public boolean constructorInvoked = true;
public POJO2() {
fail("Constructor can't be called");
}
public Object parent(){
return MethodAccessorsGeneratorObjectConstructorFactoryTest.this;
}
}
public static class POJO3{
public boolean constructorInvoked = true;
}
public class POJO4 extends POJO3 {
public boolean pojo4_constructorInvoked = true;
public POJO4() {
fail("Constructor can't be called");
}
}
public MethodAccessorsGeneratorObjectConstructorFactoryTest() {
super(new MethodAccessorsGenerator());
}
public void testCantCallConstructor(){
POJO2 pojo2 = (POJO2) ocf.newConstructor(POJO2.class).newInstance();
assertNotNull(pojo2);
assertNull(pojo2.parent());
assertFalse(pojo2.constructorInvoked);
}
public void testCallConstructor(){
POJO3 pojo3 = (POJO3) ocf.newConstructor(POJO3.class).newInstance();
assertNotNull(pojo3);
assertTrue(pojo3.constructorInvoked);
}
public void testCallParentConstructor(){
POJO4 pojo = (POJO4) ocf.newConstructor(POJO4.class).newInstance();
assertNotNull(pojo);
assertTrue(pojo.constructorInvoked);
assertFalse(pojo.pojo4_constructorInvoked);
}
public void testCallParentConstructor2(){
class POJO5 extends POJO4 {
public boolean pojo5_constructorInvoked = true;
public POJO5() {
fail("Constructor can't be called");
}
}
POJO5 pojo = (POJO5) ocf.newConstructor(POJO5.class).newInstance();
assertNotNull(pojo);
assertTrue(pojo.constructorInvoked);
assertFalse(pojo.pojo5_constructorInvoked);
}
}