package japicmp.cmp;
import japicmp.model.JApiChangeStatus;
import japicmp.model.JApiClass;
import japicmp.util.CtClassBuilder;
import japicmp.util.CtMethodBuilder;
import javassist.CannotCompileException;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.NotFoundException;
import org.junit.Test;
import java.util.Collections;
import java.util.List;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
public class ClassesComparatorTest {
@Test
public void testMethodAdded() throws Exception {
List<JApiClass> jApiClasses = ClassesHelper.compareClasses(new JarArchiveComparatorOptions(), new ClassesHelper.ClassesGenerator() {
@Override
public List<CtClass> createOldClasses(ClassPool classPool) throws Exception {
return Collections.singletonList(createClassWithoutMethod(classPool));
}
@Override
public List<CtClass> createNewClasses(ClassPool classPool) throws Exception {
return Collections.singletonList(createClassWithMethod(classPool));
}
});
assertThat(jApiClasses.size(), is(1));
assertThat(jApiClasses.get(0).getMethods().size(), is(1));
assertThat(jApiClasses.get(0).getMethods().get(0).getChangeStatus(), is(JApiChangeStatus.NEW));
assertThat(jApiClasses.get(0).getMethods().get(0).isBinaryCompatible(), is(true));
assertThat(jApiClasses.get(0).isBinaryCompatible(), is(true));
assertThat(jApiClasses.get(0).getChangeStatus(), is(JApiChangeStatus.MODIFIED));
}
private CtClass createClassWithoutMethod(ClassPool classPool) {
return new CtClassBuilder().name("japicmp.Test").addToClassPool(classPool);
}
private CtClass createClassWithMethod(ClassPool classPool) throws NotFoundException, CannotCompileException {
CtClass ctClass = CtClassBuilder.create().name("japicmp.Test").addToClassPool(classPool);
CtMethodBuilder.create().publicAccess().returnType(CtClass.intType).name("method").body("return 42;").addToClass(ctClass);
return ctClass;
}
}