From bc36fb5a5e18b5e79752754e14dd915943279a98 Mon Sep 17 00:00:00 2001 From: Eric Peters Date: Sun, 18 Dec 2016 15:19:41 -0800 Subject: [PATCH 1/2] Support non-latin formats --- .../main/scala/java/text/DecimalFormat.scala | 5 +++- .../javalib/text/NumberFormatTest.scala | 27 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/core/src/main/scala/java/text/DecimalFormat.scala b/core/src/main/scala/java/text/DecimalFormat.scala index 353fb55d..faf6a9c2 100644 --- a/core/src/main/scala/java/text/DecimalFormat.scala +++ b/core/src/main/scala/java/text/DecimalFormat.scala @@ -73,7 +73,10 @@ class DecimalFormat(private[this] val pattern: String, private[this] var symbols val curr: JavaBigInteger = n.remainder(JavaBigInteger.TEN) n = n.divide(JavaBigInteger.TEN) - builder.append(curr.intValue) + + // Assume non-latin characters 1-9 are at the same offset from the zero digit character + val localizedDigit = (symbols.getZeroDigit - DecimalFormatUtil.PatternCharZeroDigit) + curr.intValue + builder.append(localizedDigit) digitsWritten += 1 } diff --git a/testSuite/shared/src/test/scala/testsuite/javalib/text/NumberFormatTest.scala b/testSuite/shared/src/test/scala/testsuite/javalib/text/NumberFormatTest.scala index d26ed97c..99524e2b 100644 --- a/testSuite/shared/src/test/scala/testsuite/javalib/text/NumberFormatTest.scala +++ b/testSuite/shared/src/test/scala/testsuite/javalib/text/NumberFormatTest.scala @@ -435,4 +435,31 @@ class NumberFormatTest extends LocaleTestSetup { assertEquals("\u22122,147,483,648", nf.format(Int.MinValue)) assertEquals("\u22129,223,372,036,854,775,808", nf.format(Long.MinValue)) } + + @Test def test_non_latin(): Unit = { + // Arabic-Indic + if (!Platform.executingInJVM) { + LocaleRegistry.installLocale(hi_IN) + } + + val locale = Locale.forLanguageTag("hi-IN") + assertTrue(locale != null) + Locale.setDefault(locale) // Override the US default + + val df = NumberFormat.getInstance(locale) + println(s"decimal: ${df.format(1234567890.123)}") + assertEquals("Decimal Format", "१,२३४,५६७,८९०.१२३", df.format(1234567890.123)) + + val pf = NumberFormat.getPercentInstance(locale) + println(s"percent: ${pf.format(1234567890)}") + assertEquals("Percent Format", "१२३,४५६,७८९,०००%", pf.format(1234567890)) + + val nf = NumberFormat.getNumberInstance(locale) + println(s"number: ${nf.format(1234567890)}") + assertEquals("Number Format", "१,२३४,५६७,८९०", nf.format(1234567890)) + + val cf = NumberFormat.getCurrencyInstance(locale) + println(s"currencyFormat: ${cf.format(123456789.01)}") + assertEquals("Currency Format", "रू १२३,४५६,७८९.०१", cf.format(123456789.01)) + } } From 8a8240ee476529b477b98c226e9051c7dfd6f04f Mon Sep 17 00:00:00 2001 From: Eric Peters Date: Sun, 18 Dec 2016 15:51:55 -0800 Subject: [PATCH 2/2] make the non-latin test succeed on jvm and fail on js --- .../testsuite/javalib/text/NumberFormatTest.scala | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/testSuite/shared/src/test/scala/testsuite/javalib/text/NumberFormatTest.scala b/testSuite/shared/src/test/scala/testsuite/javalib/text/NumberFormatTest.scala index 99524e2b..668f7392 100644 --- a/testSuite/shared/src/test/scala/testsuite/javalib/text/NumberFormatTest.scala +++ b/testSuite/shared/src/test/scala/testsuite/javalib/text/NumberFormatTest.scala @@ -436,30 +436,29 @@ class NumberFormatTest extends LocaleTestSetup { assertEquals("\u22129,223,372,036,854,775,808", nf.format(Long.MinValue)) } + // This works with JAVA_OPTS="-Djava.locale.providers=CLDR" @Test def test_non_latin(): Unit = { // Arabic-Indic if (!Platform.executingInJVM) { - LocaleRegistry.installLocale(hi_IN) + LocaleRegistry.installLocale(ar_JO) } - val locale = Locale.forLanguageTag("hi-IN") + val locale = Locale.forLanguageTag("ar-JO") assertTrue(locale != null) Locale.setDefault(locale) // Override the US default val df = NumberFormat.getInstance(locale) - println(s"decimal: ${df.format(1234567890.123)}") - assertEquals("Decimal Format", "१,२३४,५६७,८९०.१२३", df.format(1234567890.123)) + assertEquals("Decimal Format", "١٬٢٣٤٬٥٦٧٬٨٩٠٫١٢٣", df.format(1234567890.123)) val pf = NumberFormat.getPercentInstance(locale) - println(s"percent: ${pf.format(1234567890)}") - assertEquals("Percent Format", "१२३,४५६,७८९,०००%", pf.format(1234567890)) + assertEquals("Percent Format", "١٢٣٬٤٥٦٬٧٨٩٬٠٠٠٪", pf.format(1234567890)) val nf = NumberFormat.getNumberInstance(locale) println(s"number: ${nf.format(1234567890)}") - assertEquals("Number Format", "१,२३४,५६७,८९०", nf.format(1234567890)) + assertEquals("Number Format", "١٬٢٣٤٬٥٦٧٬٨٩٠", nf.format(1234567890)) val cf = NumberFormat.getCurrencyInstance(locale) println(s"currencyFormat: ${cf.format(123456789.01)}") - assertEquals("Currency Format", "रू १२३,४५६,७८९.०१", cf.format(123456789.01)) + assertEquals("Currency Format", "د.أ.‏ ١٢٣٬٤٥٦٬٧٨٩٫٠١٠", cf.format(123456789.01)) } }