diff options
author | Shane Carr <sffc@google.com> | 2018-04-06 21:46:18 +0000 |
---|---|---|
committer | Fredrik Roubert <roubert@google.com> | 2018-05-31 16:40:00 -0700 |
commit | e1021107e043e13a7ef6b77aaf2c54ebbd82c479 (patch) | |
tree | 46acdfe91ba8164d1e366f238a109e48b397332b | |
parent | e01367f7d42e17b648c8ec3c91a41a3235524fac (diff) | |
download | icu-e1021107e043e13a7ef6b77aaf2c54ebbd82c479.tar.gz |
Cherry-pick: ticket:13684 Making DecimalMatcher no longer consume trailing grouping separators, which is consistent with previous behavior.
http://bugs.icu-project.org/trac/changeset/41207
Change-Id: I80cbb76a2f43f7548fd494d2ff8ab4c61ee86b6f
3 files changed, 18 insertions, 7 deletions
diff --git a/icu4j/main/classes/core/src/com/ibm/icu/impl/number/parse/DecimalMatcher.java b/icu4j/main/classes/core/src/com/ibm/icu/impl/number/parse/DecimalMatcher.java index 6eea11ed8..779c085cf 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/impl/number/parse/DecimalMatcher.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/impl/number/parse/DecimalMatcher.java @@ -273,10 +273,11 @@ public class DecimalMatcher implements NumberParseMatcher { break; } - // if (backupOffset != -1) { - // segment.setOffset(backupOffset); - // hasPartialPrefix = true; - // } + // Back up if there was a trailing grouping separator + if (backupOffset != -1) { + segment.setOffset(backupOffset); + hasPartialPrefix = true; // redundant with `groupingOverlap == segment.length()` + } // Check the final grouping for validity if (requireGroupingMatch 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 1f11f8da7..b38a420f2 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 @@ -743,7 +743,7 @@ parse output breaks (34 25E-1) -342.5 K (34,,25E-1) -342.5 // J doesn't allow trailing separators before E but C does -(34,,25,E-1) -342.5 J +(34,,25,E-1) -342.5 JP (34 25 E-1) -342.5 JK (34,,25 E-1) -342.5 CJK // Spaces are not allowed after exponent symbol @@ -807,8 +807,8 @@ parse output breaks // C parses until trailing separators, but sees -1234 1,234,,,+ 1234 JKC 1,234- -1234 -// J bails because of trailing separators -1,234,- -1234 J +// J and P bail because of trailing separators +1,234,- -1234 JP // J bails here too 1234 - -1234 J 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 4697abd5d..4f0369bde 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 @@ -5934,4 +5934,14 @@ public class NumberFormatTest extends TestFmwk { result.doubleValue(), 0.0); } + + @Test + public void test13684_FrenchPercentParsing() { + NumberFormat numberFormat = NumberFormat.getPercentInstance(ULocale.FRENCH); + numberFormat.setParseStrict(true); + ParsePosition ppos = new ParsePosition(0); + Number percentage = numberFormat.parse("8\u00A0%", ppos); + assertEquals("Should parse successfully", 0.08, percentage.doubleValue()); + assertEquals("Should consume whole string", 3, ppos.getIndex()); + } } |