harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jimmy,Jing Lv" <firep...@gmail.com>
Subject Re: [classlib][text] ChoiceFormat(String) pattern parser differs from RI
Date Tue, 22 Apr 2008 07:07:33 GMT
Hi,

     Thanks Jim.  It make sense to me that "|", "#" and "<" should be
reserved as pattern control symbols.
     BTW, I've read the JIRA, it seems there's another problem that a
pattern of "2|" passes in RI but not in Harmony. It seems RI's
behaviour is strange here. I don't think compile "2|" to "0.0#" is
reasonable, though the basic rule for the difference of RI and Harmony
is that we should follow spec, if the spec is not clear, we should
follow RI. But if RI's behaviour is not reasonable, take it to
mailing-list.  I think we should not follow RI here("2|" to "0.0#") as
its behaviour is not reasonable here.  What's your idea about this
difference?

2008/4/22 Jim Yu <junjie0122@gmail.com>:
> Hi, all,
>  I looked at this JIRA[1]. As the reporter said, Harmony and RI have
>  different pattern parsers implementations
>   of ChoiceFormat class. Since Spec doesn't have any rules for pattern except
>  a single example
>  "-1#is negative| 0#is zero or fraction | 1#is one |1.0<is 1+ |2#is two |2<is
>  more than 2."
>  So we have some differences in pattern parsing.
>  Test
>  ---------------------------------------------------------------------------------------
>
>  import java.text.*;
>
>  public class bug9411 {
>     public static void main(String[] args) {
>       try {
>           System.out.println(new ChoiceFormat("2#ok #ab").toPattern());
>       } catch (Exception e) {
>            e.printStackTrace();
>       }
>       try {
>         System.out.println(new ChoiceFormat("2#ok <ab").toPattern());
>       } catch (Exception e) {
>          e.printStackTrace();
>       }
>     }
>  }
>
>  Output ---------------------------------------------------------------------
>
>  RI
>  java.lang.IllegalArgumentException
>                       at
>  java.text.ChoiceFormat.applyPattern(ChoiceFormat.java:197)
>                       at
>  java.text.ChoiceFormat.<init>(ChoiceFormat.java:294)
>                       at bug9411.main(bug9411.java:12)
>  java.lang.IllegalArgumentException
>                       at
>  java.text.ChoiceFormat.applyPattern(ChoiceFormat.java:197)
>                       at
>  java.text.ChoiceFormat.<init>(ChoiceFormat.java:294)
>                       at bug9411.main(bug9411.java:17)
>  Harmony
>  2.0#ok #ab
>  2.0#ok <ab
>
>   From the output, RI treats "#" and "<" as reserved symbols. So it is
>  illegal in RI that reserved symbols are used in formats
>  directly. But in Harmony, these symbols are not reserved. It is legal in
>  Harmony to use them directly. I agree with the reporter's
>  view point that symbols "|", "#" and "<" should be reserved as pattern
>  control symbols because of their influence on pattern parse algorithm.
>  If user wants to use such symbols in formats, we'd better put them in quotes
>  to avoid misunderstandings. And according to my regression
>  test cases, RI behaves just like what I said. Now that spec doesn't have
>  specific rules about it, I think we should follow RI's behavior.
>  I've submitted my patch[1]. Any objection? If no, I will ask classlib
>  commiter to apply it: )
>
>  [1] https://issues.apache.org/jira/browse/HARMONY-1110
>
>  --
>  Best Regards,
>  Jim Yu (虞俊杰)
>
>  China Software Development Lab, IBM
>



-- 

Best Regards!

Jimmy, Jing Lv
China Software Development Lab, IBM
Mime
View raw message