summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShane Carr <sffc@google.com>2018-04-06 21:46:18 +0000
committerFredrik Roubert <roubert@google.com>2018-05-31 16:40:00 -0700
commite1021107e043e13a7ef6b77aaf2c54ebbd82c479 (patch)
tree46acdfe91ba8164d1e366f238a109e48b397332b
parente01367f7d42e17b648c8ec3c91a41a3235524fac (diff)
downloadicu-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
-rw-r--r--icu4j/main/classes/core/src/com/ibm/icu/impl/number/parse/DecimalMatcher.java9
-rw-r--r--icu4j/main/tests/core/src/com/ibm/icu/dev/data/numberformattestspecification.txt6
-rw-r--r--icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/NumberFormatTest.java10
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());
+ }
}