From: Peter Edberg Date: Thu, 20 Sep 2018 22:24:42 +0000 (-0700) Subject: ICU-20119 63rc BRS, cldr 34-alpha2 part 3: icu4j code for region,pluralRange; tests... X-Git-Tag: release-63-rc~17^2~3 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=68eeb0c01f6254d0a863e04de75cf4fc88c3bff1;p=icu ICU-20119 63rc BRS, cldr 34-alpha2 part 3: icu4j code for region,pluralRange; tests for pluralRange,serialization --- diff --git a/icu4j/main/classes/core/src/com/ibm/icu/number/NumberRangeFormatterImpl.java b/icu4j/main/classes/core/src/com/ibm/icu/number/NumberRangeFormatterImpl.java index 71aafe51cd1..437f8cef3f6 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/number/NumberRangeFormatterImpl.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/number/NumberRangeFormatterImpl.java @@ -71,7 +71,7 @@ class NumberRangeFormatterImpl { } if (key.contentEquals("approximately") && approximatelyPattern == null) { String pattern = value.getString(); - approximatelyPattern = SimpleFormatterImpl.compileToStringMinMaxArguments(pattern, sb, 2, 2); + approximatelyPattern = SimpleFormatterImpl.compileToStringMinMaxArguments(pattern, sb, 1, 1); // 1 arg, as in "~{0}" } } } diff --git a/icu4j/main/classes/core/src/com/ibm/icu/util/Region.java b/icu4j/main/classes/core/src/com/ibm/icu/util/Region.java index 2a1f852ed5e..2fabbb0c4ce 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/util/Region.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/util/Region.java @@ -324,9 +324,10 @@ public class Region implements Comparable { for ( int i = 0 ; i < territoryContainment.getSize(); i++ ) { UResourceBundle mapping = territoryContainment.get(i); String parent = mapping.getKey(); - if (parent.equals("containedGroupings") || parent.equals("deprecated")) { + if (parent.equals("containedGroupings") || parent.equals("deprecated") || parent.equals("grouping")) { continue; // handle new pseudo-parent types added in ICU data per cldrbug 7808; for now just skip. // #11232 is to do something useful with these. + // Also skip "grouping" which has multi-level structure below from CLDR 34. } Region parentRegion = regionIDMap.get(parent); for ( int j = 0 ; j < mapping.getSize(); j++ ) { diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/MeasureUnitTest.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/MeasureUnitTest.java index f036da73906..b7f842a49df 100644 --- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/MeasureUnitTest.java +++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/MeasureUnitTest.java @@ -2721,9 +2721,23 @@ public class MeasureUnitTest extends TestFmwk { { MeasureFormat a1 = (MeasureFormat) a; MeasureFormat b1 = (MeasureFormat) b; - return a1.getLocale().equals(b1.getLocale()) - && a1.getWidth().equals(b1.getWidth()) - && nfh.hasSameBehavior(a1.getNumberFormat(), b1.getNumberFormat()); + boolean getLocaleEqual = a1.getLocale().equals(b1.getLocale()); + boolean getWidthEqual = a1.getWidth().equals(b1.getWidth()); + boolean numFmtHasSameBehavior = nfh.hasSameBehavior(a1.getNumberFormat(), b1.getNumberFormat()); + if (getLocaleEqual && getWidthEqual && numFmtHasSameBehavior) { + return true; + } + System.out.println("MeasureFormatHandler.hasSameBehavior fails:"); + if (!getLocaleEqual) { + System.out.println("- getLocale equality fails: old a1: " + a1.getLocale().getName() + "; test b1: " + b1.getLocale().getName()); + } + if (!getWidthEqual) { + System.out.println("- getWidth equality fails: old a1: " + a1.getWidth().name() + "; test b1: " + b1.getWidth().name()); + } + if (!numFmtHasSameBehavior) { + System.out.println("- getNumberFormat hasSameBehavior fails"); + } + return false; } } } diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/NumberRegressionTests.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/NumberRegressionTests.java index b5efe969c82..e9e89fd90e8 100644 --- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/NumberRegressionTests.java +++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/NumberRegressionTests.java @@ -257,14 +257,14 @@ public class NumberRegressionTests extends TestFmwk { // Space as group separator logln("...applyLocalizedPattern # ###,00;(# ###,00) "); - ((DecimalFormat)nf).applyLocalizedPattern("#\u00a0###,00;(#\u00a0###,00)"); + ((DecimalFormat)nf).applyLocalizedPattern("#\u202f###,00;(#\u202f###,00)"); logln("nf toPattern2: " + ((DecimalFormat)nf).toPattern()); logln("nf toLocPattern2: " + ((DecimalFormat)nf).toLocalizedPattern()); String buffer = nf.format(1234); - if (!buffer.equals("1\u00a0234,00")) + if (!buffer.equals("1\u202f234,00")) errln("nf : " + buffer); // Expect 1 234,00 buffer = nf.format(-1234); - if (!buffer.equals("(1\u00a0234,00)")) + if (!buffer.equals("(1\u202f234,00)")) errln("nf : " + buffer); // Expect (1 234,00) // Erroneously prints: diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/number/NumberRangeFormatterTest.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/number/NumberRangeFormatterTest.java index 52933d0b271..88672727315 100644 --- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/number/NumberRangeFormatterTest.java +++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/number/NumberRangeFormatterTest.java @@ -118,30 +118,30 @@ public class NumberRangeFormatterTest { NumberRangeFormatter.with() .numberFormatterBoth(NumberFormatter.with().unit(MeasureUnit.FAHRENHEIT).unitWidth(UnitWidth.FULL_NAME)), new ULocale("fr-FR"), - "1–5 degrés Fahrenheit", - "~5 degrés Fahrenheit", - "~5 degrés Fahrenheit", - "0–3 degrés Fahrenheit", - "~0 degré Fahrenheit", - "3–3 000 degrés Fahrenheit", - "3 000–5 000 degrés Fahrenheit", - "4 999–5 001 degrés Fahrenheit", - "~5 000 degrés Fahrenheit", - "5 000–5 000 000 degrés Fahrenheit"); + "1–5\u00A0degrés Fahrenheit", + "≈5\u00A0degrés Fahrenheit", + "≈5\u00A0degrés Fahrenheit", + "0–3\u00A0degrés Fahrenheit", + "≈0\u00A0degré Fahrenheit", + "3–3\u202F000\u00A0degrés Fahrenheit", + "3\u202F000–5\u202F000\u00A0degrés Fahrenheit", + "4\u202F999–5\u202F001\u00A0degrés Fahrenheit", + "≈5\u202F000\u00A0degrés Fahrenheit", + "5\u202F000–5\u202F000\u202F000\u00A0degrés Fahrenheit"); assertFormatRange( "Locale with custom range separator", NumberRangeFormatter.with(), new ULocale("ja"), "1~5", - "~5", - "~5", + "約 5", + "約 5", "0~3", - "~0", + "約 0", "3~3,000", "3,000~5,000", "4,999~5,001", - "~5,000", + "約 5,000", "5,000~5,000,000"); assertFormatRange( @@ -417,14 +417,14 @@ public class NumberRangeFormatterTest { .numberFormatterBoth(NumberFormatter.with().notation(Notation.compactLong())), new ULocale("de-CH"), "1–5", - "~5", - "~5", + "≈5", + "≈5", "0–3", - "~0", + "≈0", "3–3 Tausend", "3–5 Tausend", - "~5 Tausend", - "~5 Tausend", + "≈5 Tausend", + "≈5 Tausend", "5 Tausend – 5 Millionen"); assertFormatRange( @@ -434,14 +434,14 @@ public class NumberRangeFormatterTest { .numberFormatterBoth(NumberFormatter.with().notation(Notation.compactLong())), new ULocale("de-CH"), "1–5", - "~5", - "~5", + "≈5", + "≈5", "0–3", - "~0", + "≈0", "3–3 Tausend", "3 Tausend – 5 Tausend", - "~5 Tausend", - "~5 Tausend", + "≈5 Tausend", + "≈5 Tausend", "5 Tausend – 5 Millionen"); assertFormatRange( diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/FormatHandler.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/FormatHandler.java index d82dface0fc..7bb5e98fc8a 100644 --- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/FormatHandler.java +++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/FormatHandler.java @@ -1106,8 +1106,10 @@ public class FormatHandler NumberFormat format_b = (NumberFormat) b; double number = 1234.56; - String result_a = format_a.format(number); - String result_b = format_b.format(number); + // In CLDR 34, French changed grouping separator from \u00a0 to \u202f; + // here we undo that in formatted result so serialization tests don't fail + String result_a = format_a.format(number).replace('\u202f', '\u00a0'); + String result_b = format_b.format(number).replace('\u202f', '\u00a0'); boolean equal = result_a.equals(result_b); if (!equal) { System.out.println(format_a+" "+format_b);