]> granicus.if.org Git - icu/commitdiff
ICU-11952 match whole select part string, not just prefix
authorMarkus Scherer <markus.icu@gmail.com>
Tue, 1 Mar 2016 23:47:06 +0000 (23:47 +0000)
committerMarkus Scherer <markus.icu@gmail.com>
Tue, 1 Mar 2016 23:47:06 +0000 (23:47 +0000)
X-SVN-Rev: 38456

icu4j/main/classes/core/src/com/ibm/icu/text/MessagePattern.java
icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/TestMessageFormat.java

index 57110961699428ed495561222f5faca4ccca5f2a..c7fd2ab65ab6b35ad3b465310b140de8362325fb 100644 (file)
@@ -481,7 +481,7 @@ public final class MessagePattern implements Cloneable, Freezable<MessagePattern
      * @stable ICU 4.8
      */
     public boolean partSubstringMatches(Part part, String s) {
-        return msg.regionMatches(part.index, s, 0, part.length);
+        return part.length == s.length() && msg.regionMatches(part.index, s, 0, part.length);
     }
 
     /**
index b902497d7420593c3c4f2f7cefc4c6f9a0704f4c..44f5120b8a276c943e63c1fa1d7674a45d30f8c5 100644 (file)
@@ -1,6 +1,6 @@
 /*
 **********************************************************************
-* Copyright (c) 2004-2015, International Business Machines
+* Copyright (c) 2004-2016, International Business Machines
 * Corporation and others.  All Rights Reserved.
 **********************************************************************
 * Author: Alan Liu
@@ -23,6 +23,7 @@ import java.util.Iterator;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
+import java.util.TreeMap;
 
 import com.ibm.icu.text.DateFormat;
 import com.ibm.icu.text.DecimalFormat;
@@ -1934,4 +1935,25 @@ public class TestMessageFormat extends com.ibm.icu.dev.test.TestFmwk {
         assertEquals("offset-decimals format(1)", "2.5 meters",
                 m2.format(args, result, ignore).toString());
     }
+
+    public void TestArgIsPrefixOfAnother() {
+        // Ticket #11952
+        MessageFormat mf1 = new MessageFormat(
+                "{0,select,a{A}ab{AB}abc{ABC}other{?}}", ULocale.ENGLISH);
+        assertEquals("a", "A", mf1.format(new Object[] { "a" }));
+        assertEquals("ab", "AB", mf1.format(new Object[] { "ab" }));
+        assertEquals("abc", "ABC", mf1.format(new Object[] { "abc" }));
+
+        // Ticket #12172
+        MessageFormat mf2 = new MessageFormat("{a} {aa} {aaa}", ULocale.ENGLISH);
+        Map<String, Object> args = new TreeMap<String, Object>();
+        args.put("a", "A");
+        args.put("aa", "AB");
+        args.put("aaa", "ABC");
+        assertEquals("a aa aaa", "A AB ABC", mf2.format(args, new StringBuffer(), null).toString());
+
+        // Ticket #12172
+        MessageFormat mf3 = new MessageFormat("{aa} {aaa}", ULocale.ENGLISH);
+        assertEquals("aa aaa", "AB ABC", mf3.format(args, new StringBuffer(), null).toString());
+    }
 }