diff options
Diffstat (limited to 'dev-java/junit')
-rw-r--r-- | dev-java/junit/Manifest | 3 | ||||
-rw-r--r-- | dev-java/junit/junit-5.10.2.ebuild | 351 |
2 files changed, 354 insertions, 0 deletions
diff --git a/dev-java/junit/Manifest b/dev-java/junit/Manifest index 271ea08c961a..16d53653d5b5 100644 --- a/dev-java/junit/Manifest +++ b/dev-java/junit/Manifest @@ -1,10 +1,13 @@ AUX junit-4.13.2_p20240222-ignore-failing-test.patch 5184 BLAKE2B d846ac9599216bd9486a26082029dea6a1f1e252f8b023c3e553cc6586365a582b78e20d3a305b7d911ad6a9bd8206057f7ad617e18103c050dd19f46f6c7031 SHA512 bb1f1c13b128fd2a178d58be02b3cc206b030ea421815309dcca3dbed33e529733576e4db0ed5d44d1126ffd077bdad8b9b4cb96d980f8b42d394a32c90d50f6 DIST junit-4.13.2.tar.gz 1077147 BLAKE2B c083982cd604812ba3375f90e0486bb3683ecbc3b08e3d14d4541845c5b91cd85100fe86028c70a7cec4e1ab6f6794bcb9333686b3c9b0705eacb75ac36e64da SHA512 29f8f8717efe50b9c7e27805a699f3664a0a068e32ce93e3a1a2bc67a045417490ac04251ef8f8bbd21c77a759bf7e4c6b7a5a07141227bd17de0c526c5031bb DIST junit-4.13.2_p20240222.tar.gz 1007781 BLAKE2B 4eeab59aa7ff3cc65c73318acb562523e6ba781da6a0baf28f8fa82042f1affddb583d188c550207a7e267b3475f4a546e8e25eba61d5ba36d13bd7e277ad156 SHA512 89506413b7aca7c2d0b41c8297dde48c1b90a44133bfb3ebf300247c7837839a3aff2d785d891ddb8762427d718eacf016a1d67e2e24edda05f4eae36ca311f1 +DIST junit-5.10.2.tar.gz 2942035 BLAKE2B 4880df74b7cbf23acd34c716f9fce26edd28b31c14d720e129e9e1f06aa35b70c447a0d87904e083a54663fba17e0b2b470678dc32480e0a11c5ebf46d5fe38e SHA512 c36ff7c2bd21f9a64c93b836fc1017a8a96ebcc0079cf1d95b09f5b764435178c2dc2336f2493e7e4df561013693dce4f08dfe0cf3bd76cc9b820313f64d064f DIST junit-5.9.2.tar.gz 2882173 BLAKE2B 6baf8768654b399d64237a110dcb6a821ab7dc8964254a5d00f7ffb65c789818aed51ad7042a963a47669042baaeec87b5d0453643a2b0eeeaf6393a42c75fd6 SHA512 5673577f773042b4e253241d27298a60dbac239502788e1d999fbe0d3ffe76b29c90d4fb43660f2e2e00e3e9b8d4c1b6b909ff95dc6e87ccb6f7b009ae6b0e78 DIST junit3.8.2.zip 461426 BLAKE2B 8fbef1ccdf7f71c611976d63f45838f4cb2564da5f5064e7abc39931a3c99039a40660093aba2cc3c70af761171125f434c16c52021226f2e92fdf23597dbf25 SHA512 f203332ccc2bdc38c683a95bdbe448f38cbfbeea81ecc431bf9ebf0a3292f0150fcfe5cd5dd6da481be034366820f95775a33581931aed9e4cc12a6ff27e3930 +DIST junit5-java18-compatibility.patch 742 BLAKE2B 89bfa36330278cdee2f7f66ed5527895e650a7b490d3f3695772a27541be1d8383c1742bab4e8494f3a84c29f93f553880a3bd5cd4d84792cf662fbc33a6e594 SHA512 5a9a562eb61a875764da369ff40da6ff95c6de8b3b3ecb612634112076741d75d6eab385743843b4fe7ca8a1827960e06550f6e90c8b7ef75b55006b41c416cd EBUILD junit-3.8.2-r2.ebuild 789 BLAKE2B ee53cf9ac828f901606a89d814ab3f31d298d43aa9723d7e0d6fef6dcddc1bedd7ceb6187e0347d699c544b1afc0d91ab6ee85c817aeeedc0bea2e86c674126f SHA512 554bf808cf560b308de7cddd530115de136a839c5e7fd98ad7f4178f0014c60b8bc26e770837ecb6750c3a3a068d26dcf7aa913ffdce7b95efe2636cedb929a2 EBUILD junit-4.13.2-r1.ebuild 1372 BLAKE2B 1a355c8f614a9960caf4730bed58545b5ee7cc7d94ffe5f5331d1d4b22fb090ce6bed7565ad61c9086150835ccdff24ee17daf6b8da7cee41671c7631534b466 SHA512 81c8dec8a28df07f9e726bc81b28c9c9c4819e4c27cfd43cb4d24326f4f721baa25adaebc99a59fe1758be4f7fd0a0ff1efbf4fe13901a000780206b052ff474 EBUILD junit-4.13.2_p20240222.ebuild 1544 BLAKE2B bcd585a30d369b48358f32f65fa9926f1504a24386131e01f5a67cf4eb6c19f181eaa5216835a4a969f9c1416a4760e6d5c753c448d7f06365c8f97b494ba44d SHA512 ee171e4b3588ea585744067222bd52ba69a3ebc91f4a37d4c0dc41c623a6b2501f9573da8829dbd6d5f4620369c27491758990be78084e4f4d590db9b658c214 +EBUILD junit-5.10.2.ebuild 12387 BLAKE2B 33ca5767500e992f868291b3308d0c155fd019c881a86bfdaff299aa0bf7fbbbd7bd2aeaf45bafdd68f3703832b862a2f2f20e21b909fb0cdbab32498eae38d0 SHA512 bda6433359e55f78b6d08dc39e2513858ba7cc4d6c323b00eac0fc61c076b7515faad8428e10b46a53b4166ccf2744e139db124c433d7904586b2da8be8bec7c EBUILD junit-5.9.2.ebuild 12008 BLAKE2B 1fa16dfc90e0e5327d6c0f0878b9fbcc82a7c5893e5bc6d02e8efb8e1eb7a0b58dba867ee4648bc45f47a27dcc72c3ae1fd38666f6196c610ee3129c820bad95 SHA512 96efdd8f81036253b3990aee756be23394611acf52101aee929e837648bfbbe3358e5d1d97985c45044690e2a98b32624dde122d9e46f264c6a154c654b67798 MISC metadata.xml 894 BLAKE2B d0f5c989f8a49dc923dfaf51a7d42d6fdc79a9c2cccd48cd31e687bcc5b7d7f25b15f1e7f91ebfe8f87cc15ce11b37c95e06dcf17611b03066f2b079efc6624b SHA512 7d40683565d1e4ff8ceb183fa26d8d6e3ae77dc1f7335a6ea452589f0f794bae8479a9e97c257a7d2332f3fa83b6721b334557944a4f0d6d064b66e0bcda9bd1 diff --git a/dev-java/junit/junit-5.10.2.ebuild b/dev-java/junit/junit-5.10.2.ebuild new file mode 100644 index 000000000000..6e794beca258 --- /dev/null +++ b/dev-java/junit/junit-5.10.2.ebuild @@ -0,0 +1,351 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +# Declare the 'doc' USE flag in IUSE -- not JAVA_PKG_IUSE -- to +# prevent java-pkg-simple.eclass from handling Javadoc; instead, +# let this ebuild handle Javadoc generation and installation itself. +# This ebuild invokes java-pkg-simple.eclass's phase functions +# multiple times to build multiple modules, but the eclass always +# installs each module's Javadoc to the same directory, which would +# trigger an error when the second module's Javadoc is installed. +JAVA_PKG_IUSE="source test" + +inherit java-pkg-2 java-pkg-simple + +DESCRIPTION="Simple framework to write repeatable tests" +HOMEPAGE="https://junit.org/junit5/" +DEB="5.10.1-1" +SRC_URI="https://github.com/junit-team/junit5/archive/r${PV}.tar.gz -> ${P}.tar.gz + https://sources.debian.org/data/main/j/junit5/${DEB}/debian/patches/18-java-compatibility.patch \ + -> junit5-java18-compatibility.patch" +S="${WORKDIR}/junit5-r${PV}" + +LICENSE="EPL-2.0" +SLOT="5" +KEYWORDS="~amd64 ~arm ~arm64" +IUSE="doc migration-support suite vintage" + +CP_DEPEND=" + dev-java/apiguardian-api:0 + dev-java/opentest4j:0 + dev-java/open-test-reporting-events:0 + dev-java/picocli:0 + dev-java/univocity-parsers:0 +" + +# java-utils-2.eclass does not support +# USE-conditional dependencies in CP_DEPEND +COND_DEPEND=" + migration-support? ( dev-java/junit:4 ) + vintage? ( dev-java/junit:4 ) +" + +# Limiting JDK version to >=11 for module-info.java in this package +# https://bugs.gentoo.org/796875#c3 +DEPEND=" + >=virtual/jdk-11:* + ${CP_DEPEND} + ${COND_DEPEND} + test? ( dev-java/jimfs:0 ) +" + +RDEPEND=" + >=virtual/jre-1.8:* + ${CP_DEPEND} + ${COND_DEPEND} +" + +PATCHES=( + "${DISTDIR}/junit5-java18-compatibility.patch" +) + +src_prepare() { + default #780585 + java-pkg-2_src_prepare +} + +src_configure() { + # Please make sure to declare a module's dependencies before the module itself. + # Useful upstream documentation regarding modules and dependencies: + # https://junit.org/junit5/docs/current/user-guide/index.html#dependency-metadata + # https://junit.org/junit5/docs/current/user-guide/index.html#dependency-diagram + JUNIT5_MODULES=( + junit-platform-commons + junit-platform-engine + junit-platform-launcher + junit-platform-reporting + junit-platform-console # For launching tests from CLI; + # an eclass would need it to support running tests using JUnit 5 + + $(use suite && echo \ + junit-platform-suite-api \ + junit-platform-suite-commons \ + junit-platform-suite-engine \ + ) + + junit-jupiter-api + junit-jupiter-engine # For JUnit Jupiter tests -- the so-called + # "JUnit 5 tests", which cannot run on earlier JUnit versions + junit-jupiter-params # For parameterized tests; the junit-jupiter + # aggregator module includes it, so building it unconditionally + $(usev migration-support junit-jupiter-migrationsupport) + + $(usev vintage junit-vintage-engine) + + # Modules not included: + # - junit-bom: Has no sources; solely for helping Maven and Gradle + # projects that use JUnit 5 manage dependencies easier + # - junit-jupiter: Aggregator; does not have 'src/main/java' + # - junit-platform-console-standalone: Has no sources; solely used + # by the upstream to build a fat JAR that bundles everything, so + # users can use just this single JAR to run JUnit 5 + # - junit-platform-jfr: For an experimental feature + # - junit-platform-runner: Deprecated + # - junit-platform-suite: Aggregator; does not have 'src/main/java' + # - junit-platform-testkit: Requires >=dev-java/assertj-core-3.14.0 + ) + local cp_packages=() + (use migration-support || use vintage) && cp_packages+=( junit-4 ) + local save_IFS="${IFS}" + IFS=',' JAVA_GENTOO_CLASSPATH="${cp_packages[*]}" + IFS="${save_IFS}" + + JUNIT5_VM_VERSION="$(java-config --get-env PROVIDES_VERSION)" +} + +junit5_foreach_module() { + local module + for module in "${JUNIT5_MODULES[@]}"; do + junit5_module_do "${module}" "${@}" + done +} + +junit5_module_do() { + local module="${1}" + # Invocation of the passed function will not be guarded by '|| die'. + # Like the case for multibuild_foreach_variant(), it is recommended + # that the passed function itself calls 'die'. + local func=( "${@:2}" ) + + einfo "Running '${func[@]}' for ${module} ..." + pushd "${module}" > /dev/null || die "Failed to enter directory '${module}'" + + # Set up Java eclass variables that are + # supposed to be set in the ebuild global scope + + local JAVA_JAR_FILENAME="${module}.jar" + + local JAVA_SRC_DIR=( + src/main/java + src/module + ) + + local JAVA_RESOURCE_DIRS=() + local default_resource_dir="src/main/resources" + [[ -d "${default_resource_dir}" ]] && + JAVA_RESOURCE_DIRS+=( "${default_resource_dir}" ) + + if [[ "${module}" == junit-platform-console ]]; then + local JAVA_MAIN_CLASS="org.junit.platform.console.ConsoleLauncher" + local JAVA_LAUNCHER_FILENAME="${module}" + fi + + # Invoke the passed function + "${func[@]}" + local ret="${?}" + + popd > /dev/null || die "Failed to leave directory '${module}'" + return "${ret}" +} + +junit5_gen_cp() { + echo "$(java-pkg_getjars --build-only --with-dependencies \ + "${JAVA_GENTOO_CLASSPATH}"):${JAVA_GENTOO_CLASSPATH_EXTRA}" +} + +junit5_module_compile() { + if [[ "${module}" == junit-platform-console ]]; then + # Unlike other modules that have a src/main/java9 directory, for this + # module, the upstream puts the class files built from src/main/java9 + # in their JAR's top-level directory instead of META-INF/versions/9 + cp -rv src/main/java9/* src/main/java/ || + die "Failed to merge ${module}'s sources for Java 9+" + # Remove for the [[ -d src/main/java9 ]] test + # during versioned directory handling + rm -rv src/main/java9 || + die "Failed to remove ${module}'s Java 9+ source directory" + fi + + java-pkg-simple_src_compile + local sources="sources.lst" + local classes="target/classes" + + # Collect a list of all compiler input files for building Javadoc + local source + while read source; do + echo "${module}/${source}" >> "${all_sources}" + done < "${sources}" || + die "Failed to add ${module}'s sources to Javadoc input list" + + # Handle classes that will go into versioned directories. This will be + # no longer needed after https://bugs.gentoo.org/900433 is implemented. + local vm_ver + for vm_ver in 9 17; do + local versioned_src="src/main/java${vm_ver}" + if [[ -d "${versioned_src}" ]]; then + if ver_test "${JUNIT5_VM_VERSION}" -ge "${vm_ver}"; then + local versioned_classes="target/${vm_ver}/classes" + mkdir -p "${versioned_classes}" || + die "Failed to create directory for ${module}'s Java ${vm_ver}+ classes" + ejavac -d "${versioned_classes}" -encoding "${JAVA_ENCODING}" \ + -classpath "${classes}:$(junit5_gen_cp)" ${JAVAC_ARGS} \ + $(find "${versioned_src}" -type f -name '*.java') + "$(java-config --jar)" -uvf "${JAVA_JAR_FILENAME}" \ + --release "${vm_ver}" -C "${versioned_classes}" . || + die "Failed to add ${module}'s Java ${vm_ver}+ classes to JAR" + else + # Modules that may hit this branch as of 5.9.2: + # - junit-platform-console: + # src/main/java17/.../ConsoleUtils.java tries to use + # java.io.Console.charset() (available since Java 17) to get + # the default output charset. It is fine to not use this + # file, even if the built artifacts will be used on JRE 17+, + # as src/main/java/.../ConsoleUtils.java still gets the + # default from java.nio.charset.Charset.defaultCharset(). + elog "JDK ${JUNIT5_VM_VERSION} used; skipping Java ${vm_ver}-dependent parts in ${module}" + fi + fi + done + + # Add the current module's JAR to classpath + # for the module's reverse dependencies in this package + JAVA_GENTOO_CLASSPATH_EXTRA+=":${S}/${module}/${JAVA_JAR_FILENAME}" +} + +src_compile() { + local all_sources="${S}/all-sources.lst" + junit5_foreach_module junit5_module_compile + + if use doc; then + einfo "Generating Javadoc for all modules ..." + local apidoc="target/api" + mkdir -p "${apidoc}" || die "Failed to create Javadoc directory" + ejavadoc -d "${apidoc}" \ + -encoding "${JAVA_ENCODING}" -docencoding UTF-8 -charset UTF-8 \ + -classpath "$(junit5_gen_cp)" ${JAVADOC_ARGS:- -quiet} \ + -windowtitle "JUnit ${PV} API" \ + "@${all_sources}" + fi +} + +src_test() { + # Running the JUnit 5 modules' tests (located in each module's + # 'src/test/java') has a few obstacles: + # - Some test sources use text blocks -- a feature introduced in Java 15. + # A JDK at a lower version, e.g. 11, cannot compile them. + # - Some test classes depend on JUnit 5 modules that this ebuild does not + # include, like junit-platform-runner and junit-platform-testkit. + # + # Therefore, this ebuild uses a simpler approach to test the artifacts just + # built: it uses the artifacts to run tests in examples under the + # 'documentation/src' directory. The test coverage will not be impressive, + # but at least this approach verifies that the copy of JUnit 5 just built + # is capable of running some simple tests launched from CLI. + + local JUNIT5_TEST_SRC_DIR="documentation/src/test/java" + local JUNIT5_TEST_RESOURCE_DIR="documentation/src/test/resources" + local JUNIT5_TEST_RM=( + $(usev !migration-support example/IgnoredTestsDemo.java) + $(use !suite && echo \ + example/DocumentationTestSuite.java \ + example/SuiteDemo.java \ + ) + $(usev !vintage example/JUnit4Tests.java) + + # Need excluded module junit-platform-runner + example/JUnitPlatformClassDemo.java + example/JUnitPlatformSuiteDemo.java + + # Need excluded module junit-platform-testkit + example/testkit/ + + # Not necessary for the tests; some files even require extra dependency + org/junit/api/tools/ + + # Needs dev-java/hamcrest; no need to pull in extra dependency + # as the examples already provide ample tests to run + example/HamcrestAssertionsDemo.java + + # Makes an HTTP request and expects a certain response + example/session/HttpTests.java + ) + + pushd "${JUNIT5_TEST_SRC_DIR}" > /dev/null || + die "Failed to enter test source directory" + rm -rv "${JUNIT5_TEST_RM[@]}" || + die "Failed to remove unneeded test sources" + # Test sources expect the working directory to be 'documentation' + sed -i -e "s|src/test/resources|${JUNIT5_TEST_RESOURCE_DIR}|g" \ + example/ParameterizedTestDemo.java || + die "Failed to update file paths in test sources" + popd > /dev/null || die "Failed to leave test source directory" + + local test_dir="${T}/junit5_src_test" + local example_classes="${test_dir}/classes" + local test_classes="${test_dir}/test-classes" + mkdir -p "${example_classes}" "${test_classes}" || + die "Failed to create test directories" + + local example_sources="${test_dir}/sources.lst" + local test_sources="${test_dir}/test-sources.lst" + find documentation/src/main/java -type f -name '*.java' > "${example_sources}" || + die "Failed to get a list of example sources" + find documentation/src/test/java -type f -name '*.java' > "${test_sources}" || + die "Failed to get a list of test sources" + + ejavac -d "${example_classes}" -encoding "${JAVA_ENCODING}" \ + -classpath "$(junit5_gen_cp)" ${JAVAC_ARGS} \ + "@${example_sources}" + + local test_cp="${example_classes}:${JUNIT5_TEST_RESOURCE_DIR}:$(junit5_gen_cp)" + test_cp="${test_cp}:$(java-pkg_getjars --build-only --with-dependencies jimfs)" + ejavac -d "${test_classes}" -encoding "${JAVA_ENCODING}" \ + -classpath "${test_cp}" ${JAVAC_ARGS} \ + "@${test_sources}" + + set -- "$(java-config --java)" -classpath "${test_classes}:${test_cp}" \ + org.junit.platform.console.ConsoleLauncher \ + --disable-ansi-colors --fail-if-no-tests --scan-classpath \ + --include-classname='^(Test.*|.+[.$]Test.*|.*Tests?|.*Demo)$' \ + --exclude-tag="exclude" + echo "${@}" >&2 + "${@}" + local status="${?}" + [[ "${status}" -eq 2 ]] && die "JUnit did not discover any tests" + [[ "${status}" -eq 0 ]] || die "ConsoleLauncher failed" +} + +junit5_module_install() { + # It is OK to let java-pkg-simple_src_install call einstalldocs for + # each module as long as each documentation file being installed + # has a unique filename among _all_ modules; otherwise, some files + # would overwrite other ones. + if [[ -f README.md ]]; then + mv -v README.md "README-${module}.md" || + die "Failed to rename ${module}'s README.md" + fi + java-pkg-simple_src_install +} + +src_install() { + junit5_foreach_module junit5_module_install + einstalldocs # For project-global documentation + + if use doc; then + einfo "Installing Javadoc for all modules ..." + local apidoc="target/api" + java-pkg_dojavadoc "${apidoc}" + fi +} |