From baaf9fea4029194aabc816dd1af3f96782892cfb Mon Sep 17 00:00:00 2001 From: Shane Carr Date: Wed, 24 Jan 2018 10:21:22 +0000 Subject: [PATCH] ICU-13513 Tweaks to currency matchers, including unit test changes. X-SVN-Rev: 40802 --- .../impl/number/parse/NumberParserImpl.java | 2 +- .../data/numberformattestspecification.txt | 3 +- .../icu/dev/test/format/NumberFormatTest.java | 56 +++++++++---------- 3 files changed, 28 insertions(+), 33 deletions(-) diff --git a/icu4j/main/classes/core/src/com/ibm/icu/impl/number/parse/NumberParserImpl.java b/icu4j/main/classes/core/src/com/ibm/icu/impl/number/parse/NumberParserImpl.java index 7206c2fbf40..ca878f636b8 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/impl/number/parse/NumberParserImpl.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/impl/number/parse/NumberParserImpl.java @@ -182,8 +182,8 @@ public class NumberParserImpl { //////////////////////// if (parseCurrency || patternInfo.hasCurrencySign()) { - parser.addMatcher(CurrencyTrieMatcher.getInstance(locale)); parser.addMatcher(CurrencyMatcher.getInstance(currency, locale, parseFlags)); + parser.addMatcher(CurrencyTrieMatcher.getInstance(locale)); } /////////////////////////////// diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/data/numberformattestspecification.txt b/icu4j/main/tests/core/src/com/ibm/icu/dev/data/numberformattestspecification.txt index 28099187281..aeb3607d71c 100644 --- a/icu4j/main/tests/core/src/com/ibm/icu/dev/data/numberformattestspecification.txt +++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/data/numberformattestspecification.txt @@ -1228,7 +1228,8 @@ begin parse output outputCurrency \u0631\u06cc\u0627\u0644 \u06F1\u06F2\u06F3\u06F5 1235 IRR IRR \u06F1\u06F2\u06F3\u06F5 1235 IRR -\u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 \u06F1\u06F2\u06F3\u06F5 1235 IRR +// P fails here because this currency name is in the Trie only, but it has the same prefix as the non-Trie currency +\u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 \u06F1\u06F2\u06F3\u06F5 1235 IRR P IRR 1235 1235 IRR \u0631\u06cc\u0627\u0644 1235 1235 IRR \u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 1235 1235 IRR diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/NumberFormatTest.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/NumberFormatTest.java index 3b9a452cebb..da0b19d5606 100644 --- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/NumberFormatTest.java +++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/NumberFormatTest.java @@ -832,18 +832,14 @@ public class NumberFormatTest extends TestFmwk { private final String localeString; private final String descrip; private final String currStr; - private final int numExpectPos; - private final int numExpectVal; private final int curExpectPos; private final int curExpectVal; private final String curExpectCurr; - ParseCurrencyItem(String locStr, String desc, String curr, int numExPos, int numExVal, int curExPos, int curExVal, String curExCurr) { + ParseCurrencyItem(String locStr, String desc, String curr, int curExPos, int curExVal, String curExCurr) { localeString = locStr; descrip = desc; currStr = curr; - numExpectPos = numExPos; - numExpectVal = numExVal; curExpectPos = curExPos; curExpectVal = curExVal; curExpectCurr = curExCurr; @@ -851,8 +847,6 @@ public class NumberFormatTest extends TestFmwk { public String getLocaleString() { return localeString; } public String getDescrip() { return descrip; } public String getCurrStr() { return currStr; } - public int getNumExpectPos() { return numExpectPos; } - public int getNumExpectVal() { return numExpectVal; } public int getCurExpectPos() { return curExpectPos; } public int getCurExpectVal() { return curExpectVal; } public String getCurExpectCurr() { return curExpectCurr; } @@ -860,27 +854,27 @@ public class NumberFormatTest extends TestFmwk { // Note: In cases where the number occurs before the currency sign, non-currency mode will parse the number // and stop when it reaches the currency symbol. final ParseCurrencyItem[] parseCurrencyItems = { - new ParseCurrencyItem( "en_US", "dollars2", "$2.00", 5, 2, 5, 2, "USD" ), - new ParseCurrencyItem( "en_US", "dollars4", "$4", 2, 4, 2, 4, "USD" ), - new ParseCurrencyItem( "en_US", "dollars9", "9\u00A0$", 1, 9, 3, 9, "USD" ), - new ParseCurrencyItem( "en_US", "pounds3", "\u00A33.00", 0, 0, 5, 3, "GBP" ), - new ParseCurrencyItem( "en_US", "pounds5", "\u00A35", 0, 0, 2, 5, "GBP" ), - new ParseCurrencyItem( "en_US", "pounds7", "7\u00A0\u00A3", 1, 7, 3, 7, "GBP" ), - new ParseCurrencyItem( "en_US", "euros8", "\u20AC8", 0, 0, 2, 8, "EUR" ), - - new ParseCurrencyItem( "en_GB", "pounds3", "\u00A33.00", 5, 3, 5, 3, "GBP" ), - new ParseCurrencyItem( "en_GB", "pounds5", "\u00A35", 2, 5, 2, 5, "GBP" ), - new ParseCurrencyItem( "en_GB", "pounds7", "7\u00A0\u00A3", 1, 7, 3, 7, "GBP" ), - new ParseCurrencyItem( "en_GB", "euros4", "4,00\u00A0\u20AC", 4,400, 6,400, "EUR" ), - new ParseCurrencyItem( "en_GB", "euros6", "6\u00A0\u20AC", 1, 6, 3, 6, "EUR" ), - new ParseCurrencyItem( "en_GB", "euros8", "\u20AC8", 0, 0, 2, 8, "EUR" ), - new ParseCurrencyItem( "en_GB", "dollars4", "US$4", 0, 0, 4, 4, "USD" ), - - new ParseCurrencyItem( "fr_FR", "euros4", "4,00\u00A0\u20AC", 6, 4, 6, 4, "EUR" ), - new ParseCurrencyItem( "fr_FR", "euros6", "6\u00A0\u20AC", 3, 6, 3, 6, "EUR" ), - new ParseCurrencyItem( "fr_FR", "euros8", "\u20AC8", 0, 0, 2, 8, "EUR" ), - new ParseCurrencyItem( "fr_FR", "dollars2", "$2.00", 0, 0, 0, 0, "" ), - new ParseCurrencyItem( "fr_FR", "dollars4", "$4", 0, 0, 0, 0, "" ), + new ParseCurrencyItem( "en_US", "dollars2", "$2.00", 5, 2, "USD" ), + new ParseCurrencyItem( "en_US", "dollars4", "$4", 2, 4, "USD" ), + new ParseCurrencyItem( "en_US", "dollars9", "9\u00A0$", 3, 9, "USD" ), + new ParseCurrencyItem( "en_US", "pounds3", "\u00A33.00", 5, 3, "GBP" ), + new ParseCurrencyItem( "en_US", "pounds5", "\u00A35", 2, 5, "GBP" ), + new ParseCurrencyItem( "en_US", "pounds7", "7\u00A0\u00A3", 3, 7, "GBP" ), + new ParseCurrencyItem( "en_US", "euros8", "\u20AC8", 2, 8, "EUR" ), + + new ParseCurrencyItem( "en_GB", "pounds3", "\u00A33.00", 5, 3, "GBP" ), + new ParseCurrencyItem( "en_GB", "pounds5", "\u00A35", 2, 5, "GBP" ), + new ParseCurrencyItem( "en_GB", "pounds7", "7\u00A0\u00A3", 3, 7, "GBP" ), + new ParseCurrencyItem( "en_GB", "euros4", "4,00\u00A0\u20AC", 6,400, "EUR" ), + new ParseCurrencyItem( "en_GB", "euros6", "6\u00A0\u20AC", 3, 6, "EUR" ), + new ParseCurrencyItem( "en_GB", "euros8", "\u20AC8", 2, 8, "EUR" ), + new ParseCurrencyItem( "en_GB", "dollars4", "US$4", 0, 0, "USD" ), + + new ParseCurrencyItem( "fr_FR", "euros4", "4,00\u00A0\u20AC", 6, 4, "EUR" ), + new ParseCurrencyItem( "fr_FR", "euros6", "6\u00A0\u20AC", 3, 6, "EUR" ), + new ParseCurrencyItem( "fr_FR", "euros8", "\u20AC8", 2, 8, "EUR" ), + new ParseCurrencyItem( "fr_FR", "dollars2", "$2.00", 0, 0, "" ), + new ParseCurrencyItem( "fr_FR", "dollars4", "$4", 0, 0, "" ), }; for (ParseCurrencyItem item: parseCurrencyItems) { String localeString = item.getLocaleString(); @@ -896,14 +890,14 @@ public class NumberFormatTest extends TestFmwk { ParsePosition parsePos = new ParsePosition(0); Number numVal = fmt.parse(currStr, parsePos); - if ( parsePos.getIndex() != item.getNumExpectPos() || (numVal != null && numVal.intValue() != item.getNumExpectVal()) ) { + if ( parsePos.getIndex() != item.getCurExpectPos() || (numVal != null && numVal.intValue() != item.getCurExpectVal()) ) { if (numVal != null) { errln("NumberFormat.getCurrencyInstance parse " + localeString + "/" + item.getDescrip() + - ", expect pos/val " + item.getNumExpectPos() + "/" + item.getNumExpectVal() + + ", expect pos/val " + item.getCurExpectPos() + "/" + item.getCurExpectVal() + ", get " + parsePos.getIndex() + "/" + numVal.intValue() ); } else { errln("NumberFormat.getCurrencyInstance parse " + localeString + "/" + item.getDescrip() + - ", expect pos/val " + item.getNumExpectPos() + "/" + item.getNumExpectVal() + + ", expect pos/val " + item.getCurExpectPos() + "/" + item.getCurExpectVal() + ", get " + parsePos.getIndex() + "/(NULL)" ); } } -- 2.40.0