[ 
https://issues.apache.org/jira/browse/LUCENE-4021?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Robert Muir updated LUCENE-4021:
--------------------------------

    Attachment: LUCENE-4021.patch

Here's the patch: now they round-trip.
Problem 1 was our switch statement on the number of elements:

"For compatibility reasons, two non-conforming locales are treated as special 
cases. These are ja_JP_JP and th_TH_TH. These are ill-formed in BCP 47 since 
the variants are too short. To ease migration to BCP 47, these are treated 
specially during construction. These two cases (and only these) cause a 
constructor to generate an extension, all other values behave exactly as they 
did prior to Java 7.

Java has used ja_JP_JP to represent Japanese as used in Japan together with the 
Japanese Imperial calendar. This is now representable using a Unicode locale 
extension, by specifying the Unicode locale key ca (for "calendar") and type 
japanese. When the Locale constructor is called with the arguments "ja", "JP", 
"JP", the extension "u-ca-japanese" is automatically added.

Java has used th_TH_TH to represent Thai as used in Thailand together with Thai 
digits. This is also now representable using a Unicode locale extension, by 
specifying the Unicode locale key nu (for "number") and value thai. When the 
Locale constructor is called with the arguments "th", "TH", "TH", the extension 
"u-nu-thai" is automatically added."

http://docs.oracle.com/javase/7/docs/api/java/util/Locale.html

Problem 2 was the assertEquals, I think like TimeZone we cannot guarantee this. 
So simply change the test to use toString(), which is well-defined too: 
http://docs.oracle.com/javase/7/docs/api/java/util/Locale.html#toString%28%29

                
> Locale representations don't round trip from toString->new Locale.
> ------------------------------------------------------------------
>
>                 Key: LUCENE-4021
>                 URL: https://issues.apache.org/jira/browse/LUCENE-4021
>             Project: Lucene - Java
>          Issue Type: Bug
>            Reporter: Dawid Weiss
>            Priority: Minor
>         Attachments: LUCENE-4021.patch
>
>
> The script and extensions are not currently parsed. Seems like they were 
> added in 1.7 only too so it'll probably require Java-version-specific 
> workarounds. 
> {noformat}
>   public void testLocaleRoundTrip() {
>     for (Locale locale : Locale.getAvailableLocales()) {
>       String s = locale.toString();
>       try {
>         Locale back = LuceneTestCase.localeForName(s);
>         assertEquals(locale, back);
>       } catch (Exception e) {
>         System.err.println("Failed roundtrip: " + s + " (" + e.toString() + 
> ")");
>       } catch (AssertionError e) {
>         System.err.println("Not equals: " + s + " (" + e.toString() + ")");
>       }
>     }
>   }
> {noformat}
> Example locales that don't pass.
> {noformat}
> th_TH_TH_#u-nu-thai
> ja_JP_JP_#u-ca-japanese
> {noformat}
> Interestingly, some that do pass the reverse trip are not .equal to their 
> originals:
> {noformat}
> Not equals: sr_ME_#Latn (java.lang.AssertionError: expected: 
> java.util.Locale<sr_ME_#Latn> but was: java.util.Locale<sr_ME_#Latn>)
> Not equals: sr_BA_#Latn (java.lang.AssertionError: expected: 
> java.util.Locale<sr_BA_#Latn> but was: java.util.Locale<sr_BA_#Latn>)
> Not equals: sr__#Latn (java.lang.AssertionError: expected: 
> java.util.Locale<sr__#Latn> but was: java.util.Locale<sr__#Latn>)
> Not equals: sr_RS_#Latn (java.lang.AssertionError: expected: 
> java.util.Locale<sr_RS_#Latn> but was: java.util.Locale<sr_RS_#Latn>)
> {noformat}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to