package japicmp.cmp;
import japicmp.model.JApiClass;
import japicmp.model.JApiField;
import japicmp.model.JApiMethod;
import japicmp.util.CtClassBuilder;
import japicmp.util.CtFieldBuilder;
import japicmp.util.CtMethodBuilder;
import javassist.ClassPool;
import javassist.CtClass;
import org.junit.Test;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.Arrays;
import java.util.List;
import static japicmp.util.Helper.*;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
public class AnnotationsTest {
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.FIELD})
public @interface Include {
}
@Test
public void testNoAnnotationsClass() throws Exception {
JarArchiveComparatorOptions options = new JarArchiveComparatorOptions();
options.setNoAnnotations(true);
List<JApiClass> jApiClasses = ClassesHelper.compareClasses(options, new ClassesHelper.ClassesGenerator() {
@Override
public List<CtClass> createOldClasses(ClassPool classPool) throws Exception {
CtClass ctClass1 = CtClassBuilder.create().name("big.bang.theory.Sheldon").withAnnotation(Include.class.getName()).addToClassPool(classPool);
CtClass ctClass2 = CtClassBuilder.create().name("big.bang.theory.Leonard").addToClassPool(classPool);
return Arrays.asList(ctClass1, ctClass2);
}
@Override
public List<CtClass> createNewClasses(ClassPool classPool) throws Exception {
CtClass ctClass1 = CtClassBuilder.create().name("big.bang.theory.Sheldon").withAnnotation(Include.class.getName()).addToClassPool(classPool);
CtClass ctClass2 = CtClassBuilder.create().name("big.bang.theory.Leonard").addToClassPool(classPool);
return Arrays.asList(ctClass1, ctClass2);
}
});
assertThat(jApiClasses.size(), is(2));
JApiClass jApiClass = getJApiClass(jApiClasses, "big.bang.theory.Sheldon");
assertThat(jApiClass.getAnnotations().size(), is(0));
}
@Test
public void testNoAnnotationsMethod() throws Exception {
JarArchiveComparatorOptions options = new JarArchiveComparatorOptions();
options.setNoAnnotations(true);
List<JApiClass> jApiClasses = ClassesHelper.compareClasses(options, new ClassesHelper.ClassesGenerator() {
@Override
public List<CtClass> createOldClasses(ClassPool classPool) throws Exception {
CtClass ctClass1 = CtClassBuilder.create().name("big.bang.theory.Sheldon").addToClassPool(classPool);
CtMethodBuilder.create().publicAccess().returnType(CtClass.voidType).name("excel").withAnnotation(Include.class.getName()).addToClass(ctClass1);
CtClass ctClass2 = CtClassBuilder.create().name("big.bang.theory.Leonard").addToClassPool(classPool);
return Arrays.asList(ctClass1, ctClass2);
}
@Override
public List<CtClass> createNewClasses(ClassPool classPool) throws Exception {
CtClass ctClass1 = CtClassBuilder.create().name("big.bang.theory.Sheldon").addToClassPool(classPool);
CtMethodBuilder.create().publicAccess().returnType(CtClass.voidType).name("excel").withAnnotation(Include.class.getName()).addToClass(ctClass1);
CtClass ctClass2 = CtClassBuilder.create().name("big.bang.theory.Leonard").addToClassPool(classPool);
return Arrays.asList(ctClass1, ctClass2);
}
});
assertThat(jApiClasses.size(), is(2));
JApiClass jApiClass = getJApiClass(jApiClasses, "big.bang.theory.Sheldon");
JApiMethod jApiMethod = getJApiMethod(jApiClass.getMethods(), "excel");
assertThat(jApiMethod.getAnnotations().size(), is(0));
}
@Test
public void testNoAnnotationsField() throws Exception {
JarArchiveComparatorOptions options = new JarArchiveComparatorOptions();
options.setNoAnnotations(true);
List<JApiClass> jApiClasses = ClassesHelper.compareClasses(options, new ClassesHelper.ClassesGenerator() {
@Override
public List<CtClass> createOldClasses(ClassPool classPool) throws Exception {
CtClass ctClass1 = CtClassBuilder.create().name("big.bang.theory.Sheldon").addToClassPool(classPool);
CtFieldBuilder.create().name("age").type(classPool.getCtClass(String.class.getName())).withAnnotation(Include.class.getName()).addToClass(ctClass1);
CtClass ctClass2 = CtClassBuilder.create().name("big.bang.theory.Leonard").addToClassPool(classPool);
return Arrays.asList(ctClass1, ctClass2);
}
@Override
public List<CtClass> createNewClasses(ClassPool classPool) throws Exception {
CtClass ctClass1 = CtClassBuilder.create().name("big.bang.theory.Sheldon").addToClassPool(classPool);
CtFieldBuilder.create().name("age").type(classPool.getCtClass(String.class.getName())).withAnnotation(Include.class.getName()).addToClass(ctClass1);
CtClass ctClass2 = CtClassBuilder.create().name("big.bang.theory.Leonard").addToClassPool(classPool);
return Arrays.asList(ctClass1, ctClass2);
}
});
assertThat(jApiClasses.size(), is(2));
JApiClass jApiClass = getJApiClass(jApiClasses, "big.bang.theory.Sheldon");
JApiField jApiField = getJApiField(jApiClass.getFields(), "age");
assertThat(jApiField.getAnnotations().size(), is(0));
}
}