RFR: 8355393: Create a Test case to have special cases coverage for currency.getInstance() [v2]

Justin Lu jlu at openjdk.org
Thu May 15 18:52:53 UTC 2025


On Sun, 11 May 2025 08:42:41 GMT, Abhishek N <duke at openjdk.org> 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


More information about the core-libs-dev mailing list