Reviewers: pdr,

Description:
Fix handling of search order where particular regions have different
default scripts than the base language, such as pa_PK and zh_TW.

Patch by: jat
Review by: pdr


Please review this at http://gwt-code-reviews.appspot.com/1022801/show

Affected files:
  M user/src/com/google/gwt/i18n/server/GwtLocaleImpl.java
  M user/test/com/google/gwt/i18n/server/GwtLocaleTest.java


Index: user/src/com/google/gwt/i18n/server/GwtLocaleImpl.java
===================================================================
--- user/src/com/google/gwt/i18n/server/GwtLocaleImpl.java      (revision 9111)
+++ user/src/com/google/gwt/i18n/server/GwtLocaleImpl.java      (working copy)
@@ -423,7 +423,15 @@
           initialScript = DefaultLanguageScripts.getDefaultScript(language,
               region);
         }
- List<GwtLocale> thisGroup = new ArrayList<GwtLocale>(this.getAliases());
+        List<GwtLocale> thisGroup = new ArrayList<GwtLocale>();
+        if (initialScript != null) {
+ // Make sure the default script is listed first in the search list, + // which ensures that zh_Hant appears before zh in the search list for
+          // zh_TW.
+ thisGroup.add(factory.fromComponents(language, initialScript, region,
+              variant));
+        }
+        thisGroup.add(this);
         seen.addAll(thisGroup);
         GwtLocale defLocale = factory.getDefault();
         seen.add(defLocale);
Index: user/test/com/google/gwt/i18n/server/GwtLocaleTest.java
===================================================================
--- user/test/com/google/gwt/i18n/server/GwtLocaleTest.java     (revision 9111)
+++ user/test/com/google/gwt/i18n/server/GwtLocaleTest.java     (working copy)
@@ -260,9 +260,13 @@
     assertContainsAndGetPosition(searchList, factory.fromString("no"));
     GwtLocale zhTW = factory.fromString("zh_TW");
     searchList = zhTW.getCompleteSearchList();
- assertContainsAndGetPosition(searchList, factory.fromString("zh_Hant"));
+    int hantPos = assertContainsAndGetPosition(searchList,
+        factory.fromString("zh_Hant"));
+    int zhPos = assertContainsAndGetPosition(searchList,
+        factory.fromString("zh"));
     assertNotContains(searchList, factory.fromString("zh_Hans"));
-    // TODO: explicitly verify search list for zh_TW
+    assertTrue("zh_Hant should appear before zh in zh_TW searchlist"
+        + searchList, hantPos < zhPos);
     idx_default = assertContainsAndGetPosition(searchList,
         factory.getDefault());
     assertEquals(searchList.size() - 1, idx_default);
@@ -274,10 +278,8 @@
     int arabPos = assertContainsAndGetPosition(searchList, paArab);
     int paPos = assertContainsAndGetPosition(searchList, pa);
     assertNotContains(searchList, paGuru);
- // See TODO in {...@link GwtLocaleImpl#getCompleteSearchList()} for what is - // needed for this test to pass (and likewise for zh_Hant appearing before
-    // zh in the search list for zh_TW).
-    // assertTrue(arabPos < paPos);
+    assertTrue("pa_Arab should appear before pa in pa_PK searchlist"
+        + searchList, arabPos < paPos);
   }

   private <T> int assertContainsAndGetPosition(List<T> list, T value) {


--
http://groups.google.com/group/Google-Web-Toolkit-Contributors

Reply via email to