8321480: ISO 4217 Amendment 176 Update
Reviewed-by: naoto
This commit is contained in:
parent
c328f9589d
commit
8b24851b9d
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2001, 2020, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2001, 2023, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -32,6 +32,7 @@ import java.io.FileInputStream;
|
|||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
@ -339,9 +340,15 @@ public class GenerateCurrencyData {
|
|||||||
validCurrencyCodes.substring(i * 7 + 3, i * 7 + 6));
|
validCurrencyCodes.substring(i * 7 + 3, i * 7 + 6));
|
||||||
checkCurrencyCode(currencyCode);
|
checkCurrencyCode(currencyCode);
|
||||||
int tableEntry = mainTable[(currencyCode.charAt(0) - 'A') * A_TO_Z + (currencyCode.charAt(1) - 'A')];
|
int tableEntry = mainTable[(currencyCode.charAt(0) - 'A') * A_TO_Z + (currencyCode.charAt(1) - 'A')];
|
||||||
if (tableEntry == INVALID_COUNTRY_ENTRY ||
|
|
||||||
(tableEntry & SPECIAL_CASE_COUNTRY_MASK) != 0 ||
|
// Do not allow a future currency to be classified as an otherCurrency,
|
||||||
(tableEntry & SIMPLE_CASE_COUNTRY_FINAL_CHAR_MASK) != (currencyCode.charAt(2) - 'A')) {
|
// otherwise it will leak out into Currency:getAvailableCurrencies
|
||||||
|
boolean futureCurrency = Arrays.asList(specialCaseNewCurrencies).contains(currencyCode);
|
||||||
|
boolean simpleCurrency = (tableEntry & SIMPLE_CASE_COUNTRY_FINAL_CHAR_MASK) == (currencyCode.charAt(2) - 'A');
|
||||||
|
|
||||||
|
// If neither a simple currency, or one defined in the future
|
||||||
|
// then the current currency is applicable to be added to the otherTable
|
||||||
|
if (!futureCurrency && !simpleCurrency) {
|
||||||
if (otherCurrenciesCount == maxOtherCurrencies) {
|
if (otherCurrenciesCount == maxOtherCurrencies) {
|
||||||
throw new RuntimeException("too many other currencies");
|
throw new RuntimeException("too many other currencies");
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2005, 2022, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2005, 2023, Oracle and/or its affiliates. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
@ -269,6 +269,7 @@ XBB=XBB
|
|||||||
XBC=XBC
|
XBC=XBC
|
||||||
XBD=XBD
|
XBD=XBD
|
||||||
XCD=XCD
|
XCD=XCD
|
||||||
|
XCG=XCG
|
||||||
XDR=XDR
|
XDR=XDR
|
||||||
XFO=XFO
|
XFO=XFO
|
||||||
XFU=XFU
|
XFU=XFU
|
||||||
@ -494,6 +495,7 @@ xbb=European Monetary Unit
|
|||||||
xbc=European Unit of Account (XBC)
|
xbc=European Unit of Account (XBC)
|
||||||
xbd=European Unit of Account (XBD)
|
xbd=European Unit of Account (XBD)
|
||||||
xcd=East Caribbean Dollar
|
xcd=East Caribbean Dollar
|
||||||
|
xcg=Caribbean Guilder
|
||||||
xdr=Special Drawing Rights
|
xdr=Special Drawing Rights
|
||||||
xfo=French Gold Franc
|
xfo=French Gold Franc
|
||||||
xfu=French UIC-Franc
|
xfu=French UIC-Franc
|
||||||
|
@ -32,7 +32,7 @@ formatVersion=3
|
|||||||
# Version of the currency code information in this class.
|
# Version of the currency code information in this class.
|
||||||
# It is a serial number that accompanies with each amendment.
|
# It is a serial number that accompanies with each amendment.
|
||||||
|
|
||||||
dataVersion=175
|
dataVersion=176
|
||||||
|
|
||||||
# List of all valid ISO 4217 currency codes.
|
# List of all valid ISO 4217 currency codes.
|
||||||
# To ensure compatibility, do not remove codes.
|
# To ensure compatibility, do not remove codes.
|
||||||
@ -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-\
|
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-\
|
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-\
|
UYU858-UZS860-VEB862-VED926-VEF937-VES928-VND704-VUV548-WST882-XAF950-XAG961-XAU959-XBA955-\
|
||||||
XBB956-XBC957-XBD958-XCD951-XDR960-XFO000-XFU000-XOF952-XPD964-XPF953-\
|
XBB956-XBC957-XBD958-XCD951-XCG532-XDR960-XFO000-XFU000-XOF952-XPD964-XPF953-\
|
||||||
XPT962-XSU994-XTS963-XUA965-XXX999-YER886-YUM891-ZAR710-ZMK894-ZMW967-ZWD716-ZWL932-\
|
XPT962-XSU994-XTS963-XUA965-XXX999-YER886-YUM891-ZAR710-ZMK894-ZMW967-ZWD716-ZWL932-\
|
||||||
ZWN942-ZWR935
|
ZWN942-ZWR935
|
||||||
|
|
||||||
@ -189,11 +189,11 @@ CR=CRC
|
|||||||
# COTE D'IVOIRE
|
# COTE D'IVOIRE
|
||||||
CI=XOF
|
CI=XOF
|
||||||
# CROATIA
|
# CROATIA
|
||||||
HR=HRK;2022-12-31-23-00-00;EUR
|
HR=EUR
|
||||||
# CUBA
|
# CUBA
|
||||||
CU=CUP
|
CU=CUP
|
||||||
# Curaçao
|
# Curaçao
|
||||||
CW=ANG
|
CW=ANG;2025-04-01-04-00-00;XCG
|
||||||
# CYPRUS
|
# CYPRUS
|
||||||
CY=EUR
|
CY=EUR
|
||||||
# CZECHIA
|
# CZECHIA
|
||||||
@ -510,7 +510,7 @@ SR=SRD
|
|||||||
# SVALBARD AND JAN MAYEN
|
# SVALBARD AND JAN MAYEN
|
||||||
SJ=NOK
|
SJ=NOK
|
||||||
# Sint Maarten (Dutch part)
|
# Sint Maarten (Dutch part)
|
||||||
SX=ANG
|
SX=ANG;2025-04-01-04-00-00;XCG
|
||||||
# ESWATINI
|
# ESWATINI
|
||||||
SZ=SZL
|
SZ=SZL
|
||||||
# SWEDEN
|
# SWEDEN
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
* @test
|
* @test
|
||||||
* @bug 4691089 4819436 4942982 5104960 6544471 6627549 7066203 7195759
|
* @bug 4691089 4819436 4942982 5104960 6544471 6627549 7066203 7195759
|
||||||
* 8039317 8074350 8074351 8145952 8187946 8193552 8202026 8204269
|
* 8039317 8074350 8074351 8145952 8187946 8193552 8202026 8204269
|
||||||
* 8208746 8209775 8264792 8274658 8283277 8296239
|
* 8208746 8209775 8264792 8274658 8283277 8296239 8321480
|
||||||
* @summary Validate ISO 4217 data for Currency class.
|
* @summary Validate ISO 4217 data for Currency class.
|
||||||
* @modules java.base/java.util:open
|
* @modules java.base/java.util:open
|
||||||
* jdk.localedata
|
* jdk.localedata
|
||||||
@ -86,7 +86,7 @@ public class ValidateISO4217 {
|
|||||||
// Codes that are obsolete, do not have related country, extra currency
|
// Codes that are obsolete, do not have related country, extra currency
|
||||||
private static final String otherCodes =
|
private static final String otherCodes =
|
||||||
"ADP-AFA-ATS-AYM-AZM-BEF-BGL-BOV-BYB-BYR-CHE-CHW-CLF-COU-CUC-CYP-"
|
"ADP-AFA-ATS-AYM-AZM-BEF-BGL-BOV-BYB-BYR-CHE-CHW-CLF-COU-CUC-CYP-"
|
||||||
+ "DEM-EEK-ESP-FIM-FRF-GHC-GRD-GWP-IEP-ITL-LTL-LUF-LVL-MGF-MRO-MTL-MXV-MZM-NLG-"
|
+ "DEM-EEK-ESP-FIM-FRF-GHC-GRD-GWP-HRK-IEP-ITL-LTL-LUF-LVL-MGF-MRO-MTL-MXV-MZM-NLG-"
|
||||||
+ "PTE-ROL-RUR-SDD-SIT-SLL-SKK-SRG-STD-TMM-TPE-TRL-VEF-UYI-USN-USS-VEB-VED-"
|
+ "PTE-ROL-RUR-SDD-SIT-SLL-SKK-SRG-STD-TMM-TPE-TRL-VEF-UYI-USN-USS-VEB-VED-"
|
||||||
+ "XAG-XAU-XBA-XBB-XBC-XBD-XDR-XFO-XFU-XPD-XPT-XSU-XTS-XUA-XXX-"
|
+ "XAG-XAU-XBA-XBB-XBC-XBD-XDR-XFO-XFU-XPD-XPT-XSU-XTS-XUA-XXX-"
|
||||||
+ "YUM-ZMK-ZWD-ZWN-ZWR";
|
+ "YUM-ZMK-ZWD-ZWN-ZWR";
|
||||||
@ -168,7 +168,7 @@ public class ValidateISO4217 {
|
|||||||
if (format == null) {
|
if (format == null) {
|
||||||
createDateFormat();
|
createDateFormat();
|
||||||
}
|
}
|
||||||
// If the cut-over already passed, test the changed data too
|
// If the cut-over already passed, use the new curency for ISO4217Codes
|
||||||
if (format.parse(tokens.nextToken()).getTime() < System.currentTimeMillis()) {
|
if (format.parse(tokens.nextToken()).getTime() < System.currentTimeMillis()) {
|
||||||
currency = tokens.nextToken();
|
currency = tokens.nextToken();
|
||||||
numeric = tokens.nextToken();
|
numeric = tokens.nextToken();
|
||||||
@ -267,20 +267,21 @@ public class ValidateISO4217 {
|
|||||||
* throws an IllegalArgumentException or returns null. The test data
|
* throws an IllegalArgumentException or returns null. The test data
|
||||||
* supplied is every possible combination of AA -> ZZ.
|
* supplied is every possible combination of AA -> ZZ.
|
||||||
*/
|
*/
|
||||||
@ParameterizedTest
|
@Test
|
||||||
@MethodSource("codeCombos")
|
public void twoLetterCodesTest() {
|
||||||
public void twoLetterCodesTest(String country) {
|
for (String country : codeCombos()) {
|
||||||
if (codes[toIndex(country)] == UNDEFINED) {
|
if (codes[toIndex(country)] == UNDEFINED) {
|
||||||
// if a code is undefined / 0, creating a Currency from it
|
// if a code is undefined / 0, creating a Currency from it
|
||||||
// should throw an IllegalArgumentException
|
// should throw an IllegalArgumentException
|
||||||
assertThrows(IllegalArgumentException.class,
|
assertThrows(IllegalArgumentException.class,
|
||||||
()-> Currency.getInstance(Locale.of("", country)),
|
() -> Currency.getInstance(Locale.of("", country)),
|
||||||
"Error: This should be an undefined code and throw IllegalArgumentException: " + country);
|
"Error: This should be an undefined code and throw IllegalArgumentException: " + country);
|
||||||
} else if (codes[toIndex(country)] == SKIPPED) {
|
} else if (codes[toIndex(country)] == SKIPPED) {
|
||||||
// if a code is marked as skipped / 2, creating a Currency from it
|
// if a code is marked as skipped / 2, creating a Currency from it
|
||||||
// should return null
|
// should return null
|
||||||
assertNull(Currency.getInstance(Locale.of("", country)),
|
assertNull(Currency.getInstance(Locale.of("", country)),
|
||||||
"Error: Currency.getInstance() for this locale should return null: " + country);
|
"Error: Currency.getInstance() for this locale should return null: " + country);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
#
|
#
|
||||||
#
|
#
|
||||||
# Amendments up until ISO 4217 AMENDMENT NUMBER 175
|
# Amendments up until ISO 4217 AMENDMENT NUMBER 176
|
||||||
# (As of 31 March 2023)
|
# (As of 06 December 2023)
|
||||||
#
|
#
|
||||||
|
|
||||||
# Version
|
# Version
|
||||||
FILEVERSION=3
|
FILEVERSION=3
|
||||||
DATAVERSION=175
|
DATAVERSION=176
|
||||||
|
|
||||||
# ISO 4217 currency data
|
# ISO 4217 currency data
|
||||||
AF AFN 971 2
|
AF AFN 971 2
|
||||||
@ -67,9 +67,9 @@ CD CDF 976 2
|
|||||||
CK NZD 554 2
|
CK NZD 554 2
|
||||||
CR CRC 188 2
|
CR CRC 188 2
|
||||||
CI XOF 952 0
|
CI XOF 952 0
|
||||||
HR HRK 191 2 2022-12-31-23-00-00 EUR 978 2
|
HR EUR 978 2
|
||||||
CU CUP 192 2
|
CU CUP 192 2
|
||||||
CW ANG 532 2
|
CW ANG 532 2 2025-04-01-04-00-00 XCG 532 2
|
||||||
CY EUR 978 2
|
CY EUR 978 2
|
||||||
CZ CZK 203 2
|
CZ CZK 203 2
|
||||||
DK DKK 208 2
|
DK DKK 208 2
|
||||||
@ -233,7 +233,7 @@ LK LKR 144 2
|
|||||||
SD SDG 938 2
|
SD SDG 938 2
|
||||||
SR SRD 968 2
|
SR SRD 968 2
|
||||||
SJ NOK 578 2
|
SJ NOK 578 2
|
||||||
SX ANG 532 2
|
SX ANG 532 2 2025-04-01-04-00-00 XCG 532 2
|
||||||
SZ SZL 748 2
|
SZ SZL 748 2
|
||||||
SE SEK 752 2
|
SE SEK 752 2
|
||||||
CH CHF 756 2
|
CH CHF 756 2
|
||||||
|
Loading…
Reference in New Issue
Block a user