package tests; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.Matchers.*; import static org.junit.jupiter.api.Assumptions.assumeFalse; import static org.junit.jupiter.api.Assumptions.assumeTrue; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.DisplayName; import io.kojan.javadeptools.rpm.RpmDependency; import io.kojan.javadeptools.rpm.RpmInfo; import io.kojan.runit.api.PackageTest; @DisplayName("/apache-commons") public class ApacheCommonsCheck { private void assumeApacheCommonsPackage(RpmInfo rpm) { assumeTrue(startsWith("apache-commons-").matches(rpm.getName()), "This test is valid only for Apache Commons packages"); } @PackageTest public void saneName(RpmInfo rpm) { assumeApacheCommonsPackage(rpm); assertThat("Package name is sane", rpm.getName(), either(matchesRegex("apache-commons-[a-z][a-z0-9]+(-javadoc)?")) .or(is("apache-commons-collections-testframework"))); } @PackageTest @Disabled("JPMS provides are not generated for now") public void jpmsProvides(RpmInfo rpm) { assumeApacheCommonsPackage(rpm); assumeFalse(rpm.isSourcePackage(), "Skip source packages"); assumeFalse(is("apache-commons-parent").matches(rpm.getName()), "Skip apache-commons-parent"); Pattern pattern = Pattern.compile("apache-commons-([a-z][a-z0-9]+)"); Matcher matcher = pattern.matcher(rpm.getName()); assumeTrue(matcher.matches(), "Skip javadoc and other binary subpackages"); String id = matcher.group(1); List prov = rpm.getProvides().stream().map(RpmDependency::getName).collect(Collectors.toList()); assertThat("Apache Commons packages should have jpms provides", prov, hasItem("jpms(org.apache.commons." + id + ")")); } }