mirror of
https://github.com/alibaba/testable-mock.git
synced 2025-01-25 20:00:17 +08:00
get types instead of size
This commit is contained in:
parent
6009326150
commit
6473efd652
@ -96,7 +96,7 @@ public class SourceClassHandler extends ClassHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private String getConstructorSubstitutionDesc(String constructorDesc) {
|
private String getConstructorSubstitutionDesc(String constructorDesc) {
|
||||||
int paramCount = ClassUtil.getParameterCount(constructorDesc);
|
int paramCount = ClassUtil.getParameterTypes(constructorDesc).size();
|
||||||
return CONSTRUCTOR_DESC_PREFIX + StringUtil.repeat(OBJECT_DESC, paramCount) + METHOD_DESC_POSTFIX;
|
return CONSTRUCTOR_DESC_PREFIX + StringUtil.repeat(OBJECT_DESC, paramCount) + METHOD_DESC_POSTFIX;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -116,7 +116,7 @@ public class SourceClassHandler extends ClassHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private String getMethodSubstitutionDesc(String methodDesc) {
|
private String getMethodSubstitutionDesc(String methodDesc) {
|
||||||
int paramCount = ClassUtil.getParameterCount(methodDesc);
|
int paramCount = ClassUtil.getParameterTypes(methodDesc).size();
|
||||||
return METHOD_DESC_PREFIX + StringUtil.repeat(OBJECT_DESC, paramCount) + METHOD_DESC_POSTFIX;
|
return METHOD_DESC_PREFIX + StringUtil.repeat(OBJECT_DESC, paramCount) + METHOD_DESC_POSTFIX;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,16 +12,16 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
public class TestClassHandler extends ClassHandler {
|
public class TestClassHandler extends ClassHandler {
|
||||||
|
|
||||||
private static final List<String> testAnnotations = new ArrayList<String>();
|
private static final List<String> TEST_ANNOTATIONS = new ArrayList<String>();
|
||||||
private static final String TESTABLE_SETUP_METHOD_NAME = "testableSetup";
|
private static final String TESTABLE_SETUP_METHOD_NAME = "testableSetup";
|
||||||
|
|
||||||
static {
|
static {
|
||||||
// JUnit4
|
// JUnit4
|
||||||
testAnnotations.add(ClassUtil.toByteCodeClassName("org.junit.Test"));
|
TEST_ANNOTATIONS.add(ClassUtil.toByteCodeClassName("org.junit.Test"));
|
||||||
// JUnit5
|
// JUnit5
|
||||||
testAnnotations.add(ClassUtil.toByteCodeClassName("org.junit.jupiter.api.Test"));
|
TEST_ANNOTATIONS.add(ClassUtil.toByteCodeClassName("org.junit.jupiter.api.Test"));
|
||||||
// TestNG
|
// TestNG
|
||||||
testAnnotations.add(ClassUtil.toByteCodeClassName("org.testng.annotations.Test"));
|
TEST_ANNOTATIONS.add(ClassUtil.toByteCodeClassName("org.testng.annotations.Test"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -39,7 +39,7 @@ public class TestClassHandler extends ClassHandler {
|
|||||||
for (AnnotationNode n : mn.visibleAnnotations) {
|
for (AnnotationNode n : mn.visibleAnnotations) {
|
||||||
visibleAnnotationNames.add(n.desc);
|
visibleAnnotationNames.add(n.desc);
|
||||||
}
|
}
|
||||||
if (CollectionUtil.containsAny(visibleAnnotationNames, testAnnotations)) {
|
if (CollectionUtil.containsAny(visibleAnnotationNames, TEST_ANNOTATIONS)) {
|
||||||
InsnList il = new InsnList();
|
InsnList il = new InsnList();
|
||||||
il.add(new VarInsnNode(ALOAD, 0));
|
il.add(new VarInsnNode(ALOAD, 0));
|
||||||
il.add(new MethodInsnNode(INVOKESPECIAL, cn.name, TESTABLE_SETUP_METHOD_NAME, "()V", false));
|
il.add(new MethodInsnNode(INVOKESPECIAL, cn.name, TESTABLE_SETUP_METHOD_NAME, "()V", false));
|
||||||
|
@ -46,8 +46,8 @@ public class ClassUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getParameterCount(String desc) {
|
public static List<Byte> getParameterTypes(String desc) {
|
||||||
int paramCount = 0;
|
List<Byte> parameterTypes = new ArrayList<Byte>();
|
||||||
boolean travelingClass = false;
|
boolean travelingClass = false;
|
||||||
for (byte b : desc.getBytes()) {
|
for (byte b : desc.getBytes()) {
|
||||||
if (travelingClass) {
|
if (travelingClass) {
|
||||||
@ -57,16 +57,16 @@ public class ClassUtil {
|
|||||||
} else {
|
} else {
|
||||||
if (b == TYPE_BYTE || b == TYPE_CHAR || b == TYPE_DOUBLE || b == TYPE_FLOAT
|
if (b == TYPE_BYTE || b == TYPE_CHAR || b == TYPE_DOUBLE || b == TYPE_FLOAT
|
||||||
|| b == TYPE_INT || b == TYPE_LONG || b == TYPE_SHORT || b == TYPE_BOOL) {
|
|| b == TYPE_INT || b == TYPE_LONG || b == TYPE_SHORT || b == TYPE_BOOL) {
|
||||||
paramCount++;
|
parameterTypes.add(b);
|
||||||
} else if (b == TYPE_CLASS) {
|
} else if (b == TYPE_CLASS) {
|
||||||
travelingClass = true;
|
travelingClass = true;
|
||||||
paramCount++;
|
parameterTypes.add(b);
|
||||||
} else if (b == PARAM_END) {
|
} else if (b == PARAM_END) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return paramCount;
|
return parameterTypes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getReturnType(String desc) {
|
public static String getReturnType(String desc) {
|
||||||
|
@ -8,10 +8,10 @@ class ClassUtilTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void should_able_to_get_parameter_count() {
|
void should_able_to_get_parameter_count() {
|
||||||
assertEquals(1, ClassUtil.getParameterCount("(Ljava/lang/String;)V"));
|
assertEquals(1, ClassUtil.getParameterTypes("(Ljava/lang/String;)V").size());
|
||||||
assertEquals(6, ClassUtil.getParameterCount("(Ljava/lang/String;IDLjava/lang/String;ZLjava/net/URL;)V"));
|
assertEquals(6, ClassUtil.getParameterTypes("(Ljava/lang/String;IDLjava/lang/String;ZLjava/net/URL;)V").size());
|
||||||
assertEquals(10, ClassUtil.getParameterCount("(ZLjava/lang/String;IJFDCSBZ)V"));
|
assertEquals(10, ClassUtil.getParameterTypes("(ZLjava/lang/String;IJFDCSBZ)V").size());
|
||||||
assertEquals(3, ClassUtil.getParameterCount("(Ljava/lang/String;[I[Ljava/lang/String;)V"));
|
assertEquals(3, ClassUtil.getParameterTypes("(Ljava/lang/String;[I[Ljava/lang/String;)V").size());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
Loading…
Reference in New Issue
Block a user