package org.test4j.tools.commons;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import org.junit.Test;
import org.test4j.json.encoder.beans.test.TestedClazz;
import org.test4j.json.encoder.beans.test.TestedIntf;
import org.test4j.junit.Test4J;
import org.test4j.junit.annotations.DataFrom;
import org.test4j.tools.datagen.ConstructorArgsGenerator;
@SuppressWarnings("rawtypes")
public class ClazzHelperTest extends Test4J {
@Test
@DataFrom("provideClazzName")
public void getPackFromClassName(String clazz, String pack) {
want.string(ClazzHelper.getPackFromClassName(clazz)).isEqualTo(pack);
}
public static Object[][] provideClazzName() {
return new String[][] { { "", "" }, { "EefErr", "" },
{ "org.test4j.utility.ClazzUtilTest", "org.test4j.utility" } };
}
@Test
@DataFrom("dataProvider_testGetPathFromPath")
public void testGetPathFromPath(String clazName, String path) {
String _path = ClazzHelper.getPathFromPath(clazName);
want.string(_path).isEqualTo(path);
}
public static Object[][] dataProvider_testGetPathFromPath() {
return new Object[][] { { "a.b.c.ImplClazz", "a/b/c" }, // <br>
{ "ImplClazz", "" }, /** <br> **/
{ ".ImplClazz", "" }
/** <br> **/
};
}
@Test
public void testGetBytes() {
byte[] bytes = ClazzHelper.getBytes(ClazzHelper.class);
want.array(bytes).notNull().sizeGt(1);
}
@Test
@DataFrom("proxy_types")
public void testGetUnProxyType(Class type, Class expected) {
Class actual = ClazzHelper.getUnProxyType(type);
want.object(actual).isEqualTo(expected);
}
public static Object[][] proxy_types() {
Object proxy = Proxy.newProxyInstance(ClazzHelperTest.class.getClassLoader(), new Class[] { TestedIntf.class },
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
return null;
}
});
return new Object[][] { { TestedClazz.class, TestedClazz.class },// <br>
{ new TestedClazz() {
{
}
}.getClass(), TestedClazz.class }, // <br>
{ new TestedIntf() {
{
}
}.getClass(), Object.class },// <br>
{ proxy.getClass(), Object.class } // <br>
};
}
@SuppressWarnings("serial")
@Test
public void testNewInstance() throws Exception {
PrivateParaConstructor result = reflector.newInstance(PrivateParaConstructor.class,
new ConstructorArgsGenerator() {
@Override
public Object[] generate(Constructor constructor) {
return new Object[] { 1 };
}
});
want.object(result).reflectionEqMap(new DataMap() {
{
this.put("i", 1);
this.put("str", "xxx");
}
});
}
@SuppressWarnings("unused")
private static class PrivateParaConstructor {
private final int i;
private final String str;
private PrivateParaConstructor(int i) {
this.i = i;
this.str = "xxx";
}
}
}