On Sun, 11 May 2025 08:42:41 GMT, Abhishek N <[email protected]> wrote:
>> Create a Test case to have special cases coverage for currency.getInstance().
>>
>> The test Validates that all currency codes and country-currency mappings in
>> the input file are consistent with the Java Currency API.
>>
>> test results:
>>
>> jdk-24.0.2/bin/java -jar jtreg/lib/jtreg.jar -testjdk:jdk-24.0.2
>> -dir:jdk/test/jdk/
>> java/util/Currency/currencyEnhancedCoverage/ValidateCurrencyCoverage.java
>> Directory "JTwork" not found: creating
>> Directory "JTreport" not found: creating
>> Test results: passed: 1
>> Report written to JTreport\html\report.html
>> Results written to JTwork
>
> Abhishek N has updated the pull request incrementally with one additional
> commit since the last revision:
>
> correcting jtreg header order, add meaningful comments for each test
> methods and properties file
This test is not effectively testing standard ISO 4217 future transition
currencies. For example, with your patch, if I supply the following changes to
the ISO 4217 currency data:
(i.e. Make country `LK` have a transition currency of `XCH` in July)
--- a/src/java.base/share/data/currency/CurrencyData.properties
+++ b/src/java.base/share/data/currency/CurrencyData.properties
@@ -55,7 +55,7 @@
all=ADP020-AED784-AFA004-AFN971-ALL008-AMD051-ANG532-AOA973-ARS032-ATS040-AUD036
SRD968-SRG740-SSP728-STD678-STN930-SVC222-SYP760-SZL748-THB764-TJS972-TMM795-TMT934-TND788-TOP776-\
TPE626-TRL792-TRY949-TTD780-TWD901-TZS834-UAH980-UGX800-USD840-USN997-USS998-UYI940-\
UYU858-UZS860-VEB862-VED926-VEF937-VES928-VND704-VUV548-WST882-XAF950-XAG961-XAU959-XBA955-\
-
XBB956-XBC957-XBD958-XCD951-XCG532-XDR960-XFO000-XFU000-XOF952-XPD964-XPF953-\
+
XBB956-XBC957-XBD958-XCD951-XCG532-XCH533-XDR960-XFO000-XFU000-XOF952-XPD964-XPF953-\
XPT962-XSU994-XTS963-XUA965-XXX999-YER886-YUM891-ZAR710-ZMK894-ZMW967-ZWD716-ZWG924-\
ZWL932-ZWN942-ZWR935
@@ -502,7 +502,7 @@ GS=GBP
# SPAIN
ES=EUR
# SRI LANKA
-LK=LKR
+LK=LKR;2025-07-01-04-00-00;XCH
and break some functionality related to _future/special_ currencies in
`Currency.getInstance(String)`,
(Similar to 8, prior to the fix backported)
--- a/src/java.base/share/classes/java/util/Currency.java
+++ b/src/java.base/share/classes/java/util/Currency.java
@@ -326,13 +326,6 @@ private static Currency getInstance(String currencyCode,
int defaultFractionDigi
defaultFractionDigits = (tableEntry &
SIMPLE_CASE_COUNTRY_DEFAULT_DIGITS_MASK) >>
SIMPLE_CASE_COUNTRY_DEFAULT_DIGITS_SHIFT;
numericCode = (tableEntry & NUMERIC_CODE_MASK) >>
NUMERIC_CODE_SHIFT;
found = true;
- } else { //special case
- int[] fractionAndNumericCode =
SpecialCaseEntry.findEntry(currencyCode);
- if (fractionAndNumericCode != null) {
- defaultFractionDigits = fractionAndNumericCode[0];
- numericCode = fractionAndNumericCode[1];
- found = true;
- }
}
With the above changes, we would expect this test to fail, since
`getInstance("XCH")` should throw an exception. However, your test still
passes. What this patch is doing is selectively testing a handful of Currencies
with the system property override. This is not sufficient to ensure test
coverage for testing a standard ISO 4217 transition currency after the
transition date has passed. As mentioned above, the system property override
does not mock a standard ISO 4217 transition currency, (they have different
functionality).
Also as @weibxiao has mentioned, we already have such a test in mainline.
Additional testing would be required as backports for LTS releases only.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/25057#issuecomment-2884773970