package japicmp.filter;
import japicmp.exception.JApiCmpException;
import japicmp.util.CtClassBuilder;
import japicmp.util.CtConstructorBuilder;
import japicmp.util.CtMethodBuilder;
import javassist.*;
import org.junit.Test;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
public class BehaviorFilterTest {
@Test
public void testMethodTwoParamsIntLongSuccessful() throws CannotCompileException {
JavadocLikeBehaviorFilter filter = new JavadocLikeBehaviorFilter("japicmp.Test#method(int,long)");
CtClass ctClass = CtClassBuilder.create().name("japicmp.Test").addToClassPool(new ClassPool());
CtBehavior ctBehavior = CtMethodBuilder.create().name("method").parameters(new CtClass[]{CtClass.intType, CtClass.longType}).addToClass(ctClass);
assertThat(filter.matches(ctBehavior), is(true));
}
@Test
public void testMethodOneParamsStringSuccessful() throws CannotCompileException {
JavadocLikeBehaviorFilter filter = new JavadocLikeBehaviorFilter("japicmp.Test#method(japicmp.Param)");
ClassPool classPool = new ClassPool();
CtClass ctClass = CtClassBuilder.create().name("japicmp.Test").addToClassPool(classPool);
CtClass paramCtClass = CtClassBuilder.create().name("japicmp.Param").addToClassPool(classPool);
CtBehavior ctBehavior = CtMethodBuilder.create().name("method").parameters(new CtClass[]{paramCtClass}).addToClass(ctClass);
assertThat(filter.matches(ctBehavior), is(true));
}
@Test
public void testMethodNoParamsSuccessful() throws CannotCompileException {
JavadocLikeBehaviorFilter filter = new JavadocLikeBehaviorFilter("japicmp.Test#method()");
CtClass ctClass = CtClassBuilder.create().name("japicmp.Test").addToClassPool(new ClassPool());
CtBehavior ctBehavior = CtMethodBuilder.create().name("method").parameters(new CtClass[]{}).addToClass(ctClass);
assertThat(filter.matches(ctBehavior), is(true));
}
@Test(expected = JApiCmpException.class)
public void testMethodMissingParenthesis() throws CannotCompileException {
JavadocLikeBehaviorFilter filter = new JavadocLikeBehaviorFilter("japicmp.Test#method(");
CtClass ctClass = CtClassBuilder.create().name("japicmp.Test").addToClassPool(new ClassPool());
CtBehavior ctBehavior = CtMethodBuilder.create().name("method").parameters(new CtClass[]{}).addToClass(ctClass);
assertThat(filter.matches(ctBehavior), is(true));
}
@Test
public void testConstructorNoParamsSuccessful() throws CannotCompileException {
JavadocLikeBehaviorFilter filter = new JavadocLikeBehaviorFilter("japicmp.Test#Test()");
ClassPool classPool = new ClassPool();
classPool.appendSystemPath();
CtClass ctClass = CtClassBuilder.create().name("japicmp.Test").addToClassPool(classPool);
CtConstructor ctConstructor = CtConstructorBuilder.create().addToClass(ctClass);
assertThat(filter.matches(ctConstructor), is(true));
}
@Test
public void testConstructorOneParamLongSuccessful() throws CannotCompileException, NotFoundException {
JavadocLikeBehaviorFilter filter = new JavadocLikeBehaviorFilter("japicmp.Test#Test(java.lang.Long)");
ClassPool classPool = new ClassPool();
classPool.appendSystemPath();
CtClass ctClass = CtClassBuilder.create().name("japicmp.Test").addToClassPool(classPool);
CtConstructor ctConstructor = CtConstructorBuilder.create().parameter(classPool.get("java.lang.Long")).addToClass(ctClass);
assertThat(filter.matches(ctConstructor), is(true));
}
@Test
public void testConstructorOneParamLongUnsuccessful() throws CannotCompileException, NotFoundException {
JavadocLikeBehaviorFilter filter = new JavadocLikeBehaviorFilter("japicmp.Test#Test(java.lang.Long)");
ClassPool classPool = new ClassPool();
classPool.appendSystemPath();
CtClass ctClass = CtClassBuilder.create().name("japicmp.Test").addToClassPool(classPool);
CtConstructor ctConstructor = CtConstructorBuilder.create().parameter(classPool.get("java.lang.Double")).addToClass(ctClass);
assertThat(filter.matches(ctConstructor), is(false));
}
@Test
public void testConstructorNoParamLongUnsuccessful() throws CannotCompileException, NotFoundException {
JavadocLikeBehaviorFilter filter = new JavadocLikeBehaviorFilter("japicmp.Test#Test()");
ClassPool classPool = new ClassPool();
classPool.appendSystemPath();
CtClass ctClass = CtClassBuilder.create().name("japicmp.Test").addToClassPool(classPool);
CtConstructor ctConstructor = CtConstructorBuilder.create().parameter(classPool.get("java.lang.Double")).addToClass(ctClass);
assertThat(filter.matches(ctConstructor), is(false));
}
@Test
public void testCoberturaMethodWithWildcards() throws CannotCompileException, NotFoundException {
JavadocLikeBehaviorFilter filter = new JavadocLikeBehaviorFilter("japicmp.*#__cobertura*()");
ClassPool classPool = new ClassPool();
classPool.appendSystemPath();
CtClass ctClass = CtClassBuilder.create().name("japicmp.Test").addToClassPool(classPool);
CtMethod ctMethod = CtMethodBuilder.create().name("__cobertura_classmap").addToClass(ctClass);
assertThat(filter.matches(ctMethod), is(true));
}
@Test
public void testMethodOfInnerClass() throws CannotCompileException, NotFoundException {
JavadocLikeBehaviorFilter filter = new JavadocLikeBehaviorFilter("japicmp.Test$InnerClass#method()");
ClassPool classPool = new ClassPool();
classPool.appendSystemPath();
CtClass ctClass = CtClassBuilder.create().name("japicmp.Test$InnerClass").addToClassPool(classPool);
CtMethod ctMethod = CtMethodBuilder.create().name("method").addToClass(ctClass);
assertThat(filter.matches(ctMethod), is(true));
}
}