package japicmp.filter; import japicmp.cmp.ClassesHelper; import japicmp.cmp.JarArchiveComparatorOptions; import japicmp.model.JApiClass; import japicmp.util.CtClassBuilder; import japicmp.util.CtFieldBuilder; import javassist.ClassPool; import javassist.CtClass; import org.junit.Test; import java.util.Arrays; import java.util.List; import static japicmp.util.Helper.getJApiClass; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; public class PackageFilterTest { @Test public void testWithoutWildcard() { JavadocLikePackageFilter pf = new JavadocLikePackageFilter("de.test.package"); assertThat(pf.matches(createCtClassForPackage("de.test.package")), is(true)); assertThat(pf.matches(createCtClassForPackage("de.test.package.packageOne")), is(true)); assertThat(pf.matches(createCtClassForPackage("de.test.package.")), is(false)); assertThat(pf.matches(createCtClassForPackage("de.test.packag")), is(false)); assertThat(pf.matches(createCtClassForPackage("de.test")), is(false)); } @Test public void testWithWildcardAfterDot() { JavadocLikePackageFilter pf = new JavadocLikePackageFilter("de.test.package.*"); assertThat(pf.matches(createCtClassForPackage("de.test.package")), is(false)); assertThat(pf.matches(createCtClassForPackage("de.test.package.packageOne")), is(true)); assertThat(pf.matches(createCtClassForPackage("de.test.package.packageOne.p2")), is(true)); } @Test public void testWithWildcardWithoutDot() { JavadocLikePackageFilter pf = new JavadocLikePackageFilter("de.test.package*"); assertThat(pf.matches(createCtClassForPackage("de.test.package")), is(true)); assertThat(pf.matches(createCtClassForPackage("de.test.package.packageOne")), is(true)); assertThat(pf.matches(createCtClassForPackage("de.test.package.packageOne.p2")), is(true)); } @Test public void testWithWildcardAndFollowingPackagename() { JavadocLikePackageFilter pf = new JavadocLikePackageFilter("de.test.package.*.test"); assertThat(pf.matches(createCtClassForPackage("de.test.package")), is(false)); assertThat(pf.matches(createCtClassForPackage("de.test.package.p.test")), is(true)); assertThat(pf.matches(createCtClassForPackage("de.test.package.packageOne.test")), is(true)); assertThat(pf.matches(createCtClassForPackage("de.test.package.packageOne.test2")), is(false)); } @Test public void testWithOnlyWildcard() { JavadocLikePackageFilter pf = new JavadocLikePackageFilter("*"); assertThat(pf.matches(createCtClassForPackage("de.test.package")), is(true)); assertThat(pf.matches(createCtClassForPackage("de.test.package.p.test")), is(true)); assertThat(pf.matches(createCtClassForPackage("de.test.package.packageOne.test")), is(true)); assertThat(pf.matches(createCtClassForPackage("de.test.package.packageOne.test2")), is(true)); } @Test public void testMatchAgainstDefaultPackage() { JavadocLikePackageFilter pf = new JavadocLikePackageFilter("foo"); assertThat(pf.matches(createCtClassForPackage("")), is(false)); } private CtClass createCtClassForPackage(String packageName) { String className = packageName + (packageName.isEmpty() ? "" : ".") + "Test"; return CtClassBuilder.create().name(className).addToClassPool(new ClassPool()); } @Test public void testExcludeInnerPackageWhenOuterPackageIsIncluded() throws Exception { JarArchiveComparatorOptions options = new JarArchiveComparatorOptions(); options.getFilters().getIncludes().add(new JavadocLikePackageFilter("include")); options.getFilters().getExcludes().add(new JavadocLikePackageFilter("include.exclude")); List<JApiClass> jApiClasses = ClassesHelper.compareClasses(options, new ClassesHelper.ClassesGenerator() { @Override public List<CtClass> createOldClasses(ClassPool classPool) throws Exception { CtClass toInclude = CtClassBuilder.create().name("include.ToInclude").addToClassPool(classPool); CtClass toExclude = CtClassBuilder.create().name("include.exclude.ToExclude").addToClassPool(classPool); return Arrays.asList(toInclude, toExclude); } @Override public List<CtClass> createNewClasses(ClassPool classPool) throws Exception { CtClass toInclude = CtClassBuilder.create().name("include.ToInclude").addToClassPool(classPool); CtClass toExclude = CtClassBuilder.create().name("include.exclude.ToExclude").addToClassPool(classPool); return Arrays.asList(toInclude, toExclude); } }); assertThat(jApiClasses.size(), is(1)); JApiClass jApiClass = getJApiClass(jApiClasses, "include.ToInclude"); assertThat(jApiClass.isBinaryCompatible(), is(true)); assertThat(jApiClass.isSourceCompatible(), is(true)); } }