diff options
author | Neil Fuller <nfuller@google.com> | 2014-03-10 11:31:32 +0000 |
---|---|---|
committer | Neil Fuller <nfuller@google.com> | 2014-03-11 13:21:48 +0000 |
commit | d627bd4525e41b0503f94c2887c3e01618c73105 (patch) | |
tree | b6a32112fc819c4b27f0b228e62932b85283e0d1 /luni | |
parent | 4189a6e183e8c38992df6de29321733fad06e50a (diff) | |
download | libcore-d627bd4525e41b0503f94c2887c3e01618c73105.zip libcore-d627bd4525e41b0503f94c2887c3e01618c73105.tar.gz libcore-d627bd4525e41b0503f94c2887c3e01618c73105.tar.bz2 |
Add Currency.getNumericCode()
getNumericCode() was added in Java 1.7. It returns the ISO 4217
numeric code for a currency.
Change-Id: I8404703e749b3324bbcb89ecf6d8d64b95a030a3
Diffstat (limited to 'luni')
-rw-r--r-- | luni/src/main/java/java/util/Currency.java | 11 | ||||
-rw-r--r-- | luni/src/main/java/libcore/icu/ICU.java | 1 | ||||
-rw-r--r-- | luni/src/main/native/libcore_icu_ICU.cpp | 10 | ||||
-rw-r--r-- | luni/src/test/java/libcore/java/util/CurrencyTest.java | 7 |
4 files changed, 29 insertions, 0 deletions
diff --git a/luni/src/main/java/java/util/Currency.java b/luni/src/main/java/java/util/Currency.java index b5b04a0..e8ecdde 100644 --- a/luni/src/main/java/java/util/Currency.java +++ b/luni/src/main/java/java/util/Currency.java @@ -127,6 +127,17 @@ public final class Currency implements Serializable { } /** + * Returns the ISO 4217 numeric code for this currency. If there is no standard numeric code a + * zero is returned. + * + * @since 1.7 + * @hide Until ready for an API update + */ + public int getNumericCode() { + return ICU.getCurrencyNumericCode(currencyCode); + } + + /** * Equivalent to {@code getSymbol(Locale.getDefault())}. * See "<a href="../util/Locale.html#default_locale">Be wary of the default locale</a>". */ diff --git a/luni/src/main/java/libcore/icu/ICU.java b/luni/src/main/java/libcore/icu/ICU.java index 2c94882..078c83a 100644 --- a/luni/src/main/java/libcore/icu/ICU.java +++ b/luni/src/main/java/libcore/icu/ICU.java @@ -453,6 +453,7 @@ public final class ICU { public static native String getCurrencyCode(String countryCode); public static native String getCurrencyDisplayName(String locale, String currencyCode); public static native int getCurrencyFractionDigits(String currencyCode); + public static native int getCurrencyNumericCode(String currencyCode); public static native String getCurrencySymbol(String locale, String currencyCode); public static native String getDisplayCountryNative(String countryCode, String locale); diff --git a/luni/src/main/native/libcore_icu_ICU.cpp b/luni/src/main/native/libcore_icu_ICU.cpp index 8f6e321..c869542 100644 --- a/luni/src/main/native/libcore_icu_ICU.cpp +++ b/luni/src/main/native/libcore_icu_ICU.cpp @@ -203,6 +203,15 @@ static jint ICU_getCurrencyFractionDigits(JNIEnv* env, jclass, jstring javaCurre return ucurr_getDefaultFractionDigits(icuCurrencyCode.getTerminatedBuffer(), &status); } +static jint ICU_getCurrencyNumericCode(JNIEnv* env, jclass, jstring javaCurrencyCode) { + ScopedJavaUnicodeString currencyCode(env, javaCurrencyCode); + if (!currencyCode.valid()) { + return 0; + } + UnicodeString icuCurrencyCode(currencyCode.unicodeString()); + return ucurr_getNumericCode(icuCurrencyCode.getTerminatedBuffer()); +} + // TODO: rewrite this with int32_t ucurr_forLocale(const char* locale, UChar* buff, int32_t buffCapacity, UErrorCode* ec)... static jstring ICU_getCurrencyCode(JNIEnv* env, jclass, jstring javaCountryCode) { UErrorCode status = U_ZERO_ERROR; @@ -764,6 +773,7 @@ static JNINativeMethod gMethods[] = { NATIVE_METHOD(ICU, getCurrencyCode, "(Ljava/lang/String;)Ljava/lang/String;"), NATIVE_METHOD(ICU, getCurrencyDisplayName, "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"), NATIVE_METHOD(ICU, getCurrencyFractionDigits, "(Ljava/lang/String;)I"), + NATIVE_METHOD(ICU, getCurrencyNumericCode, "(Ljava/lang/String;)I"), NATIVE_METHOD(ICU, getCurrencySymbol, "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"), NATIVE_METHOD(ICU, getDisplayCountryNative, "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"), NATIVE_METHOD(ICU, getDisplayLanguageNative, "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"), diff --git a/luni/src/test/java/libcore/java/util/CurrencyTest.java b/luni/src/test/java/libcore/java/util/CurrencyTest.java index 61a22fd..fb7fbf6 100644 --- a/luni/src/test/java/libcore/java/util/CurrencyTest.java +++ b/luni/src/test/java/libcore/java/util/CurrencyTest.java @@ -67,6 +67,13 @@ public class CurrencyTest extends junit.framework.TestCase { assertEquals(-1, Currency.getInstance("XXX").getDefaultFractionDigits()); } + public void test_getNumericCode() throws Exception { + assertEquals(840, Currency.getInstance("USD").getNumericCode()); + assertEquals(826, Currency.getInstance("GBP").getNumericCode()); + assertEquals(999, Currency.getInstance("XXX").getNumericCode()); + assertEquals(0, Currency.getInstance("XFU").getNumericCode()); + } + // http://code.google.com/p/android/issues/detail?id=38622 public void test_getSymbol_38622() throws Exception { // The CLDR data had the Portuguese symbol for "EUR" in pt, not in pt_PT. |