/** * A factory method to create an {@link ApiSurface} matcher, producing a positive match if the * queried api surface contains classes ONLY from specified package names. */ public static Matcher<ApiSurface> containsOnlyPackages(final Set<String> packageNames) { final Function<String, Matcher<Class<?>>> packageNameToClassMatcher = ApiSurface::classesInPackage; final ImmutableSet<Matcher<Class<?>>> classesInPackages = FluentIterable.from(packageNames).transform(packageNameToClassMatcher).toSet(); return containsOnlyClassesMatching(classesInPackages); }
classesInPackage("org.joda.time")); assertThat(apiSurface, containsOnlyClassesMatching(allowedClasses));
@Test public void testGcpCoreApiSurface() throws Exception { final Package thisPackage = getClass().getPackage(); final ClassLoader thisClassLoader = getClass().getClassLoader(); final ApiSurface apiSurface = ApiSurface.ofPackage(thisPackage, thisClassLoader) .pruningPattern("org[.]apache[.]beam[.].*Test.*") .pruningPattern("org[.]apache[.]beam[.].*IT") .pruningPattern("java[.]lang.*") .pruningPattern("java[.]util.*"); @SuppressWarnings("unchecked") final Set<Matcher<Class<?>>> allowedClasses = ImmutableSet.of( classesInPackage("com.google.api.client.googleapis"), classesInPackage("com.google.api.client.http"), classesInPackage("com.google.api.client.json"), classesInPackage("com.google.api.client.util"), classesInPackage("com.google.api.services.storage"), classesInPackage("com.google.auth"), classesInPackage("com.fasterxml.jackson.annotation"), classesInPackage("java"), classesInPackage("javax"), classesInPackage("org.apache.beam.sdk"), classesInPackage("org.joda.time")); assertThat(apiSurface, containsOnlyClassesMatching(allowedClasses)); } }
@SuppressWarnings({"rawtypes", "unchecked"}) private void assertExposed(final Class classToExamine, final Class... exposedClasses) { final ApiSurface apiSurface = ApiSurface.ofClass(classToExamine).pruningPrefix("java"); final ImmutableSet<Matcher<Class<?>>> allowed = FluentIterable.from( Iterables.concat(Sets.newHashSet(classToExamine), Sets.newHashSet(exposedClasses))) .transform(Matchers::<Class<?>>equalTo) .toSet(); assertThat(apiSurface, containsOnlyClassesMatching(allowed)); }