8220227: Host Locale Provider getDisplayCountry returns error message under non-English Win10
Summary: Adjusting to detect translated Unknown messages
Reviewed-by: naoto
--- a/src/java.base/windows/classes/sun/util/locale/provider/HostLocaleProviderAdapterImpl.java Wed Mar 13 12:02:04 2019 +0000
+++ b/src/java.base/windows/classes/sun/util/locale/provider/HostLocaleProviderAdapterImpl.java Wed Mar 13 13:05:37 2019 +0900
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -510,8 +510,15 @@
public String getDisplayCountry(String countryCode, Locale locale) {
// Retrieves the display country name by calling
// GetLocaleInfoEx(LOCALE_SLOCALIZEDCOUNTRYNAME).
- return getDisplayString(locale.toLanguageTag(),
- DN_LOCALE_REGION, nativeDisplayLanguage+"-"+countryCode);
+ String str = getDisplayString(locale.toLanguageTag(),
+ DN_LOCALE_REGION,
+ nativeDisplayLanguage+"-"+countryCode);
+ // Hack: Windows 10 returns translated "Unknown Region (XX)"
+ // for localized XX region name. Take that as not known.
+ if (str != null && str.endsWith("("+countryCode+")")) {
+ return null;
+ }
+ return str;
}
@Override
--- a/src/java.base/windows/native/libjava/HostLocaleProviderAdapter_md.c Wed Mar 13 12:02:04 2019 +0000
+++ b/src/java.base/windows/native/libjava/HostLocaleProviderAdapter_md.c Wed Mar 13 13:05:37 2019 +0900
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -168,11 +168,6 @@
}
};
-
-// Localized region name for unknown regions (Windows 10)
-#define UNKNOWN_REGION L"Unknown Region ("
-#define UNKNOWN_REGION_SIZE wcslen(UNKNOWN_REGION)
-
/*
* Class: sun_util_locale_provider_HostLocaleProviderAdapterImpl
* Method: initialize
@@ -755,15 +750,10 @@
(*env)->ReleaseStringChars(env, jStr, pjChar);
if (got) {
- // Hack: Windows 10 returns "Unknown Region (XX)" for localized XX region name.
- // Take that as not known.
- if (type != sun_util_locale_provider_HostLocaleProviderAdapterImpl_DN_LOCALE_REGION ||
- wcsncmp(UNKNOWN_REGION, buf, UNKNOWN_REGION_SIZE) != 0) {
- return (*env)->NewString(env, buf, (jsize)wcslen(buf));
- }
+ return (*env)->NewString(env, buf, (jsize)wcslen(buf));
+ } else {
+ return NULL;
}
-
- return NULL;
}
int getLocaleInfoWrapper(const jchar *langtag, LCTYPE type, LPWSTR data, int buflen) {
--- a/test/jdk/java/util/Locale/LocaleProviders.java Wed Mar 13 12:02:04 2019 +0000
+++ b/test/jdk/java/util/Locale/LocaleProviders.java Wed Mar 13 13:05:37 2019 +0900
@@ -72,6 +72,10 @@
bug8027289Test(args[1]);
break;
+ case "bug8220227Test":
+ bug8220227Test();
+ break;
+
default:
throw new RuntimeException("Test method '"+methodName+"' not found.");
}
@@ -249,4 +253,15 @@
}
}
}
+
+ static void bug8220227Test() {
+ if (System.getProperty("os.name").startsWith("Windows")) {
+ Locale l = new Locale("xx","XX");
+ String country = l.getDisplayCountry();
+ if (country.endsWith("(XX)")) {
+ throw new RuntimeException(
+ "Unexpected Region name: " + country);
+ }
+ }
+ }
}
--- a/test/jdk/java/util/Locale/LocaleProvidersRun.java Wed Mar 13 12:02:04 2019 +0000
+++ b/test/jdk/java/util/Locale/LocaleProvidersRun.java Wed Mar 13 13:05:37 2019 +0900
@@ -25,7 +25,7 @@
* @test
* @bug 6336885 7196799 7197573 7198834 8000245 8000615 8001440 8008577
* 8010666 8013086 8013233 8013903 8015960 8028771 8054482 8062006
- * 8150432 8215913
+ * 8150432 8215913 8220227
* @summary tests for "java.locale.providers" system property
* @library /test/lib
* @build LocaleProviders
@@ -148,6 +148,12 @@
testRun("COMPAT,HOST", "bug8027289Test", "FFE5", "", "");
testRun("HOST", "bug8027289Test", "00A5", "", "");
}
+
+ //testing 8220227 fix. (Windows only)
+ if (!defLang.equals("en")) {
+ testRun("HOST", "bug8220227Test", "", "", "");
+ }
+
}
private static void testRun(String prefList, String methodName,