test/java/util/PluggableLocale/LocaleNameProviderTest.java

Print this page
rev 5931 : imported patch 8000245.8000273.8000615

@@ -34,19 +34,25 @@
     public static void main(String[] s) {
         new LocaleNameProviderTest();
     }
 
     LocaleNameProviderTest() {
+        checkAvailLocValidityTest();
+        variantFallbackTest();
+    }
+
+    void checkAvailLocValidityTest() {
         com.bar.LocaleNameProviderImpl lnp = new com.bar.LocaleNameProviderImpl();
         Locale[] availloc = Locale.getAvailableLocales();
         Locale[] testloc = availloc.clone();
+        List<Locale> jreimplloc = Arrays.asList(LocaleProviderAdapter.forJRE().getLocaleNameProvider().getAvailableLocales());
         List<Locale> providerloc = Arrays.asList(lnp.getAvailableLocales());
 
         for (Locale target: availloc) {
             // pure JRE implementation
             OpenListResourceBundle rb = LocaleProviderAdapter.forJRE().getLocaleData().getLocaleNames(target);
-            boolean jreHasBundle = rb.getLocale().equals(target);
+            boolean jreSupportsTarget = jreimplloc.contains(target);
 
             for (Locale test: testloc) {
                 // codes
                 String lang = test.getLanguage();
                 String ctry = test.getCountry();

@@ -65,11 +71,11 @@
                     providerslang = lnp.getDisplayLanguage(lang, target);
                     providersctry = lnp.getDisplayCountry(ctry, target);
                     providersvrnt = lnp.getDisplayVariant(vrnt, target);
                 }
 
-                // JRE's name (if any)
+                // JRE's name
                 String jreslang = null;
                 String jresctry = null;
                 String jresvrnt = null;
                 if (!lang.equals("")) {
                     try {

@@ -82,20 +88,43 @@
                     } catch (MissingResourceException mre) {}
                 }
                 if (!vrnt.equals("")) {
                     try {
                         jresvrnt = rb.getString("%%"+vrnt);
-                    } catch (MissingResourceException mre) {
-                        jresvrnt = vrnt;
+                    } catch (MissingResourceException mre) {}
                     }
-                }
 
+                System.out.print("For key: "+lang+" ");
                 checkValidity(target, jreslang, providerslang, langresult,
-                    jreHasBundle && rb.handleGetKeys().contains(lang));
+                    jreSupportsTarget && jreslang != null);
+                System.out.print("For key: "+ctry+" ");
                 checkValidity(target, jresctry, providersctry, ctryresult,
-                    jreHasBundle && rb.handleGetKeys().contains(ctry));
+                    jreSupportsTarget && jresctry != null);
+                System.out.print("For key: "+vrnt+" ");
                 checkValidity(target, jresvrnt, providersvrnt, vrntresult,
-                    jreHasBundle && rb.handleGetKeys().contains("%%"+vrnt));
+                    jreSupportsTarget && jresvrnt != null);
             }
         }
     }
+
+    void variantFallbackTest() {
+        Locale YY = new Locale("yy", "YY", "YYYY");
+        Locale YY_suffix = new Locale("yy", "YY", "YYYY_suffix");
+        String retVrnt = null;
+        String message = "variantFallbackTest() succeeded.";
+
+
+        try {
+            YY.getDisplayVariant(YY_suffix);
+            message = "variantFallbackTest() failed. Either provider wasn't invoked, or invoked without suffix.";
+        } catch (RuntimeException re) {
+            retVrnt = re.getMessage();
+            if (YY_suffix.getVariant().equals(retVrnt)) {
+                System.out.println(message);
+                return;
+            }
+            message = "variantFallbackTest() failed. Returned variant: "+retVrnt;
+        }
+
+        throw new RuntimeException(message);
+    }
 }