# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

JAVA_PKG_IUSE="doc source test"
MAVEN_PROVIDES="
	com.ibm.icu:icu4j:${PV}
	com.ibm.icu:icu4j-charset:${PV}
	com.ibm.icu:icu4j-localespi:${PV}
"
JAVA_TESTING_FRAMEWORKS="junit-4"

inherit java-pkg-2 java-pkg-simple

DESCRIPTION="A set of Java libraries providing Unicode and Globalization support"
HOMEPAGE="https://icu.unicode.org"
SRC_URI="https://github.com/unicode-org/icu/archive/release-${PV/./-}.tar.gz -> ${P}.tar.gz"
S="${WORKDIR}/icu-release-${PV/./-}/icu4j/main"

LICENSE="icu"
SLOT="0"
KEYWORDS="amd64 arm64 ppc64"

DEPEND="
	>=virtual/jdk-1.8:*
	test? (
		dev-java/gson:0
		dev-java/junitparams:0
		)
"

RDEPEND=">=virtual/jre-1.8:*"

DOCS=( ../../{CONTRIBUTING,README,SECURITY}.md )
HTML_DOCS=( ../{APIChangeReport,readme}.html )

src_prepare() {
	java-pkg-2_src_prepare
	# There was 1 failure:
	# 1) test(com.ibm.icu.dev.test.message2.CoreTest)
	# java.io.FileNotFoundException: Test data directory does not exist:
	# tried /var/tmp/portage/dev-java/icu4j-76.1/work/testdata/message2
	# and /var/tmp/portage/dev-java/icu4j-76.1/work/testdata/message2
	# 	at com.ibm.icu.dev.test.message2.TestUtils.getTestFile(TestUtils.java:212)
	# 	at com.ibm.icu.dev.test.message2.TestUtils.jsonReader(TestUtils.java:194)
	# 	at com.ibm.icu.dev.test.message2.CoreTest.test(CoreTest.java:52)
	cp -r ../..{,/..}/testdata || die
}

src_compile() {
	JAVA_GENTOO_CLASSPATH_EXTRA="icu4j.jar:icu4j-charset.jar:icu4j-localespi.jar"

	einfo "Compiling icu4j.jar"
	JAVA_AUTOMATIC_MODULE_NAME="com.ibm.icu"
	JAVA_JAR_FILENAME="icu4j.jar"
	JAVA_MAIN_CLASS="com.ibm.icu.util.VersionInfo"
	JAVA_RESOURCE_DIRS=(
		collate/src/main/resources
		core/src/main/resources
		currdata/src/main/resources
		langdata/src/main/resources
		regiondata/src/main/resources
		translit/src/main/resources
	)
	JAVA_SRC_DIR=(
		collate/src/main/java
		core/src/main/java
		currdata/src/main/java
		langdata/src/main/java
		regiondata/src/main/java
		translit/src/main/java
	)
	java-pkg-simple_src_compile
	rm -r target || die

	einfo "Compiling icu4j-charset.jar"
	JAVA_AUTOMATIC_MODULE_NAME="com.ibm.icu.charset"
	JAVA_JAR_FILENAME="icu4j-charset.jar"
	JAVA_MAIN_CLASS=""
	JAVA_RESOURCE_DIRS=( charset/src/main/resources )
	JAVA_SRC_DIR=( charset/src/main/java )
	java-pkg-simple_src_compile
	rm -r target || die

	einfo "Compiling icu4j-localespi.jar"
	JAVA_AUTOMATIC_MODULE_NAME="com.ibm.icu.localespi"
	JAVA_JAR_FILENAME="icu4j-localespi.jar"
	JAVA_RESOURCE_DIRS=( localespi/src/main/resources )
	JAVA_SRC_DIR=( localespi/src/main/java )
	java-pkg-simple_src_compile
	rm -r target || die

	einfo "Generating javadocs"
	JAVADOC_SRC_DIRS=(
		collate/src/main/java
		core/src/main/java
		currdata/src/main/java
		langdata/src/main/java
		regiondata/src/main/java
		translit/src/main/java
		charset/src/main/java
		localespi/src/main/java
	)
	use doc && ejavadoc
}

src_test () {
	# TZ needed for some tests in com/ibm/icu/dev/test/format/DateFormatTest
	export LC_ALL="en_US.UTF-8" TZ="US/Pacific"

	JAVA_TEST_EXTRA_ARGS="-Djava.locale.providers=CLDR,COMPAT,SPI"
	JAVA_TEST_GENTOO_CLASSPATH="gson,junit-4,junitparams"

	einfo "Compiling framework-tests.jar"
	JAVA_AUTOMATIC_MODULE_NAME="com.ibm.icu.framework"
	JAVA_JAR_FILENAME="framework-tests.jar"
	JAVA_MAIN_CLASS="com.ibm.icu.dev.test.TestAll"
	JAVA_RESOURCE_DIRS=( framework/src/test/resources )
	JAVA_SRC_DIR=( framework/src/test/java )
	java-pkg-simple_src_compile
	JAVA_GENTOO_CLASSPATH_EXTRA+=":framework-tests.jar"

	einfo "Testing core aka icu4j.jar"
	JAVA_TEST_RESOURCE_DIRS="core/src/test/resources"
	JAVA_TEST_SRC_DIR="core/src/test/java"
	pushd "${JAVA_TEST_SRC_DIR}" || die
		# exclude invalid tests, not run by "mvn test"
		local JAVA_TEST_RUN_ONLY=$(find * \
			-name "*Test*.java" \
			! -name "ChineseTestCase.java" \
			! -name "DataDrivenNumberFormatTestUtility.java" \
			! -name "*Helper.java" \
			! -name "ModuleTest.java" \
			! -name "*Sample.java" \
			! -name "TestCase.java" \
			! -name "*TestData*.java" \
			! -name "*TestFmwk.java" \
			! -name "TestMessages.java" \
			! -name "TestUtils.java" \
			! -name "DefaultTestProperties.java" \
			! -name "MF2Test.java" \
			! -name "TestBoilerplate.java" \
			)
	popd
	JAVA_TEST_RUN_ONLY="${JAVA_TEST_RUN_ONLY//.java}"
	JAVA_TEST_RUN_ONLY="${JAVA_TEST_RUN_ONLY//\//.}"
	java-pkg-simple_src_test

	einfo "Creating core-tests.jar"
	jar cvf core-tests.jar -C target/test-classes . || die
	JAVA_GENTOO_CLASSPATH_EXTRA+=":core-tests.jar"
	JAVA_TEST_RUN_ONLY=""

	einfo "Testing collate"
	JAVA_TEST_RESOURCE_DIRS="collate/src/test/resources"
	JAVA_TEST_SRC_DIR="collate/src/test/java"
	java-pkg-simple_src_test

	einfo "Testing translit"
	JAVA_TEST_EXCLUDES=(
		# Invalid test classes, No runnable methods
		com.ibm.icu.dev.test.TestBoilerplate
		com.ibm.icu.dev.test.translit.TestUtility
	)
	JAVA_TEST_RESOURCE_DIRS="translit/src/test/resources"
	JAVA_TEST_SRC_DIR="translit/src/test/java"
	java-pkg-simple_src_test

	einfo "Testing charset"
	JAVA_TEST_RESOURCE_DIRS=""
	JAVA_TEST_SRC_DIR="charset/src/test/java"
	java-pkg-simple_src_test

	einfo "Testing common_tests"
	# "mvn test" runs only 90 tests here, Gentoo runs 99 but 9 of them fail.
	# coverage tests fail because test handlers for the parametrized tests
	# are not defined so the tests are broken and cannot succeed
	JAVA_TEST_EXCLUDES=( com.ibm.icu.dev.test.serializable.CoverageTest )
	JAVA_TEST_RESOURCE_DIRS=""
	JAVA_TEST_SRC_DIR="common_tests/src/test/java"
	java-pkg-simple_src_test

	einfo "Testing localespi"
	JAVA_TEST_RESOURCE_DIRS=""
	JAVA_TEST_SRC_DIR="localespi/src/test/java"
	# Invalid test classes, No runnable methods
	JAVA_TEST_EXCLUDES=( com.ibm.icu.dev.test.localespi.TestUtil )
	# https://bugs.gentoo.org/827212, "mvn test" does not run it at all
	local vm_version="$(java-config -g PROVIDES_VERSION)"
	if [[ "${vm_version}" != "1.8" ]] ; then
		java-pkg-simple_src_test
	fi
}

src_install() {
	JAVA_JAR_FILENAME="icu4j.jar"
	JAVA_MAIN_CLASS="com.ibm.icu.util.VersionInfo"
	java-pkg-simple_src_install
	java-pkg_dojar "icu4j-charset.jar"
	java-pkg_dojar "icu4j-localespi.jar"

	if use source; then
		java-pkg_dosrc */src/main/java/*
	fi
}