package org.hotswap.agent.plugin.jvm.anonymous;
import org.hotswap.agent.javassist.CannotCompileException;
import org.hotswap.agent.javassist.ClassPool;
import org.hotswap.agent.javassist.LoaderClassPath;
import org.hotswap.agent.javassist.NotFoundException;
import org.hotswap.agent.plugin.jvm.AnonymousClassInfo;
import org.junit.Test;
import java.io.IOException;
import static org.junit.Assert.assertEquals;
/**
* Check generated signatures same with java Class and javassist CtClass.
*/
public class AnonymousClassInfoTest {
@Test
public void testGetClassSignature() throws Exception {
String classSignature = "java.lang.Object;" + AnonymousTestInterface1.class.getName();
assertEquals(classSignature, getAnonymousClassInfo().getClassSignature());
assertEquals(classSignature, getAnonymousCtClassInfo().getClassSignature());
}
@Test
public void testGetMethodSignature() throws Exception {
String methodsSignature = "java.lang.String test1();";
assertEquals(methodsSignature, getAnonymousClassInfo().getMethodSignature());
assertEquals(methodsSignature, getAnonymousCtClassInfo().getMethodSignature());
}
@Test
public void testGetFieldsSignature() throws Exception {
// default field this
String fieldsSignature = "org.hotswap.agent.plugin.jvm.anonymous.AnonymousTestClass1 this$0;";
assertEquals(fieldsSignature, getAnonymousClassInfo().getFieldsSignature());
assertEquals(fieldsSignature, getAnonymousCtClassInfo().getFieldsSignature());
}
@Test
public void testGetEnclosingMethodSignature() throws Exception {
String enclosingMethodSignature = "java.lang.String enclosing1();";
assertEquals(enclosingMethodSignature, getAnonymousClassInfo().getEnclosingMethodSignature());
assertEquals(enclosingMethodSignature, getAnonymousCtClassInfo().getEnclosingMethodSignature());
}
private AnonymousClassInfo getAnonymousClassInfo() throws ClassNotFoundException {
Class clazz = getClass().getClassLoader().loadClass(AnonymousTestClass1.class.getName() + "$1");
return new AnonymousClassInfo(clazz);
}
public AnonymousClassInfo getAnonymousCtClassInfo() throws NotFoundException, ClassNotFoundException, IOException, CannotCompileException {
Class clazz = getClass().getClassLoader().loadClass(AnonymousTestClass1.class.getName() + "$1");
ClassPool classPool = new ClassPool();
classPool.appendClassPath(new LoaderClassPath(getClass().getClassLoader()));
return new AnonymousClassInfo(classPool.get(clazz.getName()));
}
}