7198834: HOST Adapter: one extra empty space in the end of the pattern string
Reviewed-by: okutsu
This commit is contained in:
parent
0dcbdaafba
commit
eeac68872b
@ -125,7 +125,7 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter {
|
||||
public BreakIteratorProvider getBreakIteratorProvider() {
|
||||
if (breakIteratorProvider == null) {
|
||||
BreakIteratorProvider provider = new BreakIteratorProviderImpl(getAdapterType(),
|
||||
getLanguateTagSet("FormatData"));
|
||||
getLanguageTagSet("FormatData"));
|
||||
synchronized (this) {
|
||||
if (breakIteratorProvider == null) {
|
||||
breakIteratorProvider = provider;
|
||||
@ -139,7 +139,7 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter {
|
||||
public CollatorProvider getCollatorProvider() {
|
||||
if (collatorProvider == null) {
|
||||
CollatorProvider provider = new CollatorProviderImpl(getAdapterType(),
|
||||
getLanguateTagSet("CollationData"));
|
||||
getLanguageTagSet("CollationData"));
|
||||
synchronized (this) {
|
||||
if (collatorProvider == null) {
|
||||
collatorProvider = provider;
|
||||
@ -153,7 +153,7 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter {
|
||||
public DateFormatProvider getDateFormatProvider() {
|
||||
if (dateFormatProvider == null) {
|
||||
DateFormatProvider provider = new DateFormatProviderImpl(getAdapterType(),
|
||||
getLanguateTagSet("FormatData"));
|
||||
getLanguageTagSet("FormatData"));
|
||||
synchronized (this) {
|
||||
if (dateFormatProvider == null) {
|
||||
dateFormatProvider = provider;
|
||||
@ -167,7 +167,7 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter {
|
||||
public DateFormatSymbolsProvider getDateFormatSymbolsProvider() {
|
||||
if (dateFormatSymbolsProvider == null) {
|
||||
DateFormatSymbolsProvider provider = new DateFormatSymbolsProviderImpl(getAdapterType(),
|
||||
getLanguateTagSet("FormatData"));
|
||||
getLanguageTagSet("FormatData"));
|
||||
synchronized (this) {
|
||||
if (dateFormatSymbolsProvider == null) {
|
||||
dateFormatSymbolsProvider = provider;
|
||||
@ -180,7 +180,7 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter {
|
||||
@Override
|
||||
public DecimalFormatSymbolsProvider getDecimalFormatSymbolsProvider() {
|
||||
if (decimalFormatSymbolsProvider == null) {
|
||||
DecimalFormatSymbolsProvider provider = new DecimalFormatSymbolsProviderImpl(getAdapterType(), getLanguateTagSet("FormatData"));
|
||||
DecimalFormatSymbolsProvider provider = new DecimalFormatSymbolsProviderImpl(getAdapterType(), getLanguageTagSet("FormatData"));
|
||||
synchronized (this) {
|
||||
if (decimalFormatSymbolsProvider == null) {
|
||||
decimalFormatSymbolsProvider = provider;
|
||||
@ -194,7 +194,7 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter {
|
||||
public NumberFormatProvider getNumberFormatProvider() {
|
||||
if (numberFormatProvider == null) {
|
||||
NumberFormatProvider provider = new NumberFormatProviderImpl(getAdapterType(),
|
||||
getLanguateTagSet("FormatData"));
|
||||
getLanguageTagSet("FormatData"));
|
||||
synchronized (this) {
|
||||
if (numberFormatProvider == null) {
|
||||
numberFormatProvider = provider;
|
||||
@ -211,7 +211,7 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter {
|
||||
public CurrencyNameProvider getCurrencyNameProvider() {
|
||||
if (currencyNameProvider == null) {
|
||||
CurrencyNameProvider provider = new CurrencyNameProviderImpl(getAdapterType(),
|
||||
getLanguateTagSet("CurrencyNames"));
|
||||
getLanguageTagSet("CurrencyNames"));
|
||||
synchronized (this) {
|
||||
if (currencyNameProvider == null) {
|
||||
currencyNameProvider = provider;
|
||||
@ -225,7 +225,7 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter {
|
||||
public LocaleNameProvider getLocaleNameProvider() {
|
||||
if (localeNameProvider == null) {
|
||||
LocaleNameProvider provider = new LocaleNameProviderImpl(getAdapterType(),
|
||||
getLanguateTagSet("LocaleNames"));
|
||||
getLanguageTagSet("LocaleNames"));
|
||||
synchronized (this) {
|
||||
if (localeNameProvider == null) {
|
||||
localeNameProvider = provider;
|
||||
@ -239,7 +239,7 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter {
|
||||
public TimeZoneNameProvider getTimeZoneNameProvider() {
|
||||
if (timeZoneNameProvider == null) {
|
||||
TimeZoneNameProvider provider = new TimeZoneNameProviderImpl(getAdapterType(),
|
||||
getLanguateTagSet("TimeZoneNames"));
|
||||
getLanguageTagSet("TimeZoneNames"));
|
||||
synchronized (this) {
|
||||
if (timeZoneNameProvider == null) {
|
||||
timeZoneNameProvider = provider;
|
||||
@ -253,8 +253,8 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter {
|
||||
public CalendarDataProvider getCalendarDataProvider() {
|
||||
if (calendarDataProvider == null) {
|
||||
Set<String> set = new HashSet<>();
|
||||
set.addAll(getLanguateTagSet("FormatData"));
|
||||
set.addAll(getLanguateTagSet("CalendarData"));
|
||||
set.addAll(getLanguageTagSet("FormatData"));
|
||||
set.addAll(getLanguageTagSet("CalendarData"));
|
||||
CalendarDataProvider provider = new CalendarDataProviderImpl(getAdapterType(),
|
||||
set);
|
||||
synchronized (this) {
|
||||
@ -302,7 +302,7 @@ public class JRELocaleProviderAdapter extends LocaleProviderAdapter {
|
||||
return AvailableJRELocales.localeList.clone();
|
||||
}
|
||||
|
||||
public Set<String> getLanguateTagSet(String category) {
|
||||
public Set<String> getLanguageTagSet(String category) {
|
||||
Set<String> tagset = langtagSets.get(category);
|
||||
if (tagset == null) {
|
||||
tagset = createLanguageTagSet(category);
|
||||
|
@ -209,31 +209,26 @@ JNIEXPORT jstring JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapte
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getDateTimePattern
|
||||
(JNIEnv *env, jclass cls, jint dateStyle, jint timeStyle, jstring jlangtag) {
|
||||
WCHAR datePattern[BUFLEN];
|
||||
WCHAR timePattern[BUFLEN];
|
||||
WCHAR pattern[BUFLEN];
|
||||
const jchar *langtag = (*env)->GetStringChars(env, jlangtag, JNI_FALSE);
|
||||
|
||||
datePattern[0] = L'\0';
|
||||
timePattern[0] = L'\0';
|
||||
pattern[0] = L'\0';
|
||||
|
||||
if (dateStyle == 0 || dateStyle == 1) {
|
||||
getLocaleInfoWrapper(langtag, LOCALE_SLONGDATE, datePattern, BUFLEN);
|
||||
getLocaleInfoWrapper(langtag, LOCALE_SLONGDATE, pattern, BUFLEN);
|
||||
} else if (dateStyle == 2 || dateStyle == 3) {
|
||||
getLocaleInfoWrapper(langtag, LOCALE_SSHORTDATE, datePattern, BUFLEN);
|
||||
getLocaleInfoWrapper(langtag, LOCALE_SSHORTDATE, pattern, BUFLEN);
|
||||
}
|
||||
|
||||
if (timeStyle == 0 || timeStyle == 1) {
|
||||
getLocaleInfoWrapper(langtag, LOCALE_STIMEFORMAT, timePattern, BUFLEN);
|
||||
getLocaleInfoWrapper(langtag, LOCALE_STIMEFORMAT, pattern, BUFLEN);
|
||||
} else if (timeStyle == 2 || timeStyle == 3) {
|
||||
getLocaleInfoWrapper(langtag, LOCALE_SSHORTTIME, timePattern, BUFLEN);
|
||||
getLocaleInfoWrapper(langtag, LOCALE_SSHORTTIME, pattern, BUFLEN);
|
||||
}
|
||||
|
||||
wcscat(datePattern, L" ");
|
||||
wcscat(datePattern, timePattern);
|
||||
|
||||
(*env)->ReleaseStringChars(env, jlangtag, langtag);
|
||||
|
||||
return (*env)->NewString(env, datePattern, wcslen(datePattern));
|
||||
return (*env)->NewString(env, pattern, wcslen(pattern));
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -20,27 +20,65 @@
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
import java.text.spi.DateFormatProvider;
|
||||
import java.util.Locale;
|
||||
import java.text.*;
|
||||
import java.text.spi.*;
|
||||
import java.util.*;
|
||||
import sun.util.locale.provider.LocaleProviderAdapter;
|
||||
|
||||
public class LocaleProviders {
|
||||
|
||||
public static void main(String[] args) {
|
||||
if (args.length == 0) {
|
||||
// no args indicates that the caller is asking the platform default locale.
|
||||
Locale defloc = Locale.getDefault();
|
||||
System.out.printf("%s,%s\n", defloc.getLanguage(), defloc.getCountry());
|
||||
} else {
|
||||
String expected = args[0];
|
||||
Locale testLocale = new Locale(args[1], (args.length >= 3 ? args[2] : ""));
|
||||
String preference = System.getProperty("java.locale.providers", "");
|
||||
LocaleProviderAdapter lda = LocaleProviderAdapter.getAdapter(DateFormatProvider.class, testLocale);
|
||||
LocaleProviderAdapter.Type type = lda.getAdapterType();
|
||||
System.out.printf("testLocale: %s, got: %s, expected: %s\n", testLocale, type, expected);
|
||||
if (!type.toString().equals(expected)) {
|
||||
throw new RuntimeException("Returned locale data adapter is not correct.");
|
||||
String methodName = args[0];
|
||||
|
||||
switch (methodName) {
|
||||
case "getPlatformLocale":
|
||||
if (args[1].equals("format")) {
|
||||
getPlatformLocale(Locale.Category.FORMAT);
|
||||
} else {
|
||||
getPlatformLocale(Locale.Category.DISPLAY);
|
||||
}
|
||||
break;
|
||||
|
||||
case "adapterTest":
|
||||
adapterTest(args[1], args[2], (args.length >= 4 ? args[3] : ""));
|
||||
break;
|
||||
|
||||
case "bug7198834Test":
|
||||
bug7198834Test();
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new RuntimeException("Test method '"+methodName+"' not found.");
|
||||
}
|
||||
}
|
||||
|
||||
static void getPlatformLocale(Locale.Category cat) {
|
||||
Locale defloc = Locale.getDefault(cat);
|
||||
System.out.printf("%s,%s\n", defloc.getLanguage(), defloc.getCountry());
|
||||
}
|
||||
|
||||
static void adapterTest(String expected, String lang, String ctry) {
|
||||
Locale testLocale = new Locale(lang, ctry);
|
||||
String preference = System.getProperty("java.locale.providers", "");
|
||||
LocaleProviderAdapter lda = LocaleProviderAdapter.getAdapter(DateFormatProvider.class, testLocale);
|
||||
LocaleProviderAdapter.Type type = lda.getAdapterType();
|
||||
System.out.printf("testLocale: %s, got: %s, expected: %s\n", testLocale, type, expected);
|
||||
if (!type.toString().equals(expected)) {
|
||||
throw new RuntimeException("Returned locale data adapter is not correct.");
|
||||
}
|
||||
}
|
||||
|
||||
static void bug7198834Test() {
|
||||
LocaleProviderAdapter lda = LocaleProviderAdapter.getAdapter(DateFormatProvider.class, Locale.US);
|
||||
LocaleProviderAdapter.Type type = lda.getAdapterType();
|
||||
if (type == LocaleProviderAdapter.Type.HOST && System.getProperty("os.name").startsWith("Windows")) {
|
||||
DateFormat df = DateFormat.getDateInstance(DateFormat.FULL, Locale.US);
|
||||
String date = df.format(new Date());
|
||||
if (date.charAt(date.length()-1) == ' ') {
|
||||
throw new RuntimeException("Windows Host Locale Provider returns a trailing space.");
|
||||
}
|
||||
} else {
|
||||
System.out.println("Windows HOST locale adapter not found. Ignoring this test.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -23,7 +23,7 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# @test
|
||||
# @bug 6336885 7196799 7197573
|
||||
# @bug 6336885 7196799 7197573 7198834
|
||||
# @summary tests for "java.locale.providers" system property
|
||||
# @compile -XDignore.symbol.file LocaleProviders.java
|
||||
# @run shell/timeout=600 LocaleProviders.sh
|
||||
@ -65,16 +65,21 @@ case "$OS" in
|
||||
;;
|
||||
esac
|
||||
|
||||
# get the platform default locale
|
||||
PLATDEF=`${TESTJAVA}${FS}bin${FS}java -classpath ${TESTCLASSES} LocaleProviders`
|
||||
# get the platform default locales
|
||||
PLATDEF=`${TESTJAVA}${FS}bin${FS}java -classpath ${TESTCLASSES} LocaleProviders getPlatformLocale display`
|
||||
DEFLANG=`echo ${PLATDEF} | sed -e "s/,.*//"`
|
||||
DEFCTRY=`echo ${PLATDEF} | sed -e "s/.*,//"`
|
||||
echo "DEFLANG=${DEFLANG}"
|
||||
echo "DEFCTRY=${DEFCTRY}"
|
||||
PLATDEF=`${TESTJAVA}${FS}bin${FS}java -classpath ${TESTCLASSES} LocaleProviders getPlatformLocale format`
|
||||
DEFFMTLANG=`echo ${PLATDEF} | sed -e "s/,.*//"`
|
||||
DEFFMTCTRY=`echo ${PLATDEF} | sed -e "s/.*,//"`
|
||||
echo "DEFFMTLANG=${DEFFMTLANG}"
|
||||
echo "DEFFMTCTRY=${DEFFMTCTRY}"
|
||||
|
||||
runTest()
|
||||
{
|
||||
RUNCMD="${TESTJAVA}${FS}bin${FS}java -classpath ${TESTCLASSES} -Djava.locale.providers=$PREFLIST LocaleProviders $EXPECTED $TESTLANG $TESTCTRY"
|
||||
RUNCMD="${TESTJAVA}${FS}bin${FS}java -classpath ${TESTCLASSES} -Djava.locale.providers=$PREFLIST LocaleProviders $METHODNAME $PARAM1 $PARAM2 $PARAM3"
|
||||
echo ${RUNCMD}
|
||||
${RUNCMD}
|
||||
result=$?
|
||||
@ -88,91 +93,110 @@ runTest()
|
||||
}
|
||||
|
||||
# testing HOST is selected for the default locale, if specified on Windows or MacOSX
|
||||
METHODNAME=adapterTest
|
||||
PREFLIST=HOST,JRE
|
||||
case "$OS" in
|
||||
Windows_NT* )
|
||||
WINVER=`uname -r`
|
||||
if [ "${WINVER}" = "5" ]
|
||||
then
|
||||
EXPECTED=JRE
|
||||
PARAM1=JRE
|
||||
else
|
||||
EXPECTED=HOST
|
||||
PARAM1=HOST
|
||||
fi
|
||||
;;
|
||||
CYGWIN_NT-6* | Darwin )
|
||||
EXPECTED=HOST
|
||||
PARAM1=HOST
|
||||
;;
|
||||
* )
|
||||
EXPECTED=JRE
|
||||
PARAM1=JRE
|
||||
;;
|
||||
esac
|
||||
TESTLANG=${DEFLANG}
|
||||
TESTCTRY=${DEFCTRY}
|
||||
PARAM2=${DEFLANG}
|
||||
PARAM3=${DEFCTRY}
|
||||
runTest
|
||||
|
||||
# testing HOST is NOT selected for the non-default locale, if specified
|
||||
METHODNAME=adapterTest
|
||||
PREFLIST=HOST,JRE
|
||||
EXPECTED=JRE
|
||||
if [ "${DEFLANG}" = "en" ]
|
||||
then
|
||||
TESTLANG=ja
|
||||
TESTCTRY=JP
|
||||
PARAM1=JRE
|
||||
# Try to find the locale JRE supports which is not the platform default (HOST supports that one)
|
||||
if [ "${DEFLANG}" != "en" ] && [ "${DEFFMTLANG}" != "en" ]; then
|
||||
PARAM2=en
|
||||
PARAM3=US
|
||||
elif [ "${DEFLANG}" != "ja" ] && [ "${DEFFMTLANG}" != "ja" ]; then
|
||||
PARAM2=ja
|
||||
PARAM3=JP
|
||||
else
|
||||
TESTLANG=en
|
||||
TESTCTRY=US
|
||||
PARAM2=zh
|
||||
PARAM3=CN
|
||||
fi
|
||||
runTest
|
||||
|
||||
# testing SPI is NOT selected, as there is none.
|
||||
METHODNAME=adapterTest
|
||||
PREFLIST=SPI,JRE
|
||||
EXPECTED=JRE
|
||||
TESTLANG=en
|
||||
TESTCTRY=US
|
||||
PARAM1=JRE
|
||||
PARAM2=en
|
||||
PARAM3=US
|
||||
runTest
|
||||
|
||||
# testing the order, variaton #1. This assumes en_GB DateFormat data are available both in JRE & CLDR
|
||||
METHODNAME=adapterTest
|
||||
PREFLIST=CLDR,JRE
|
||||
EXPECTED=CLDR
|
||||
TESTLANG=en
|
||||
TESTCTRY=GB
|
||||
PARAM1=CLDR
|
||||
PARAM2=en
|
||||
PARAM3=GB
|
||||
runTest
|
||||
|
||||
# testing the order, variaton #2. This assumes en_GB DateFormat data are available both in JRE & CLDR
|
||||
METHODNAME=adapterTest
|
||||
PREFLIST=JRE,CLDR
|
||||
EXPECTED=JRE
|
||||
TESTLANG=en
|
||||
TESTCTRY=GB
|
||||
PARAM1=JRE
|
||||
PARAM2=en
|
||||
PARAM3=GB
|
||||
runTest
|
||||
|
||||
# testing the order, variaton #3 for non-existent locale in JRE assuming "haw" is not in JRE.
|
||||
METHODNAME=adapterTest
|
||||
PREFLIST=JRE,CLDR
|
||||
EXPECTED=CLDR
|
||||
TESTLANG=haw
|
||||
TESTCTRY=GB
|
||||
PARAM1=CLDR
|
||||
PARAM2=haw
|
||||
PARAM3=GB
|
||||
runTest
|
||||
|
||||
# testing the order, variaton #4 for the bug 7196799. CLDR's "zh" data should be used in "zh_CN"
|
||||
METHODNAME=adapterTest
|
||||
PREFLIST=CLDR
|
||||
EXPECTED=CLDR
|
||||
TESTLANG=zh
|
||||
TESTCTRY=CN
|
||||
PARAM1=CLDR
|
||||
PARAM2=zh
|
||||
PARAM3=CN
|
||||
runTest
|
||||
|
||||
# testing FALLBACK provider. SPI and invalid one cases.
|
||||
METHODNAME=adapterTest
|
||||
PREFLIST=SPI
|
||||
EXPECTED=FALLBACK
|
||||
TESTLANG=en
|
||||
TESTCTRY=US
|
||||
PARAM1=FALLBACK
|
||||
PARAM2=en
|
||||
PARAM3=US
|
||||
runTest
|
||||
PREFLIST=FOO
|
||||
EXPECTED=JRE
|
||||
TESTLANG=en
|
||||
TESTCTRY=US
|
||||
PARAM1=JRE
|
||||
PARAM2=en
|
||||
PARAM3=US
|
||||
runTest
|
||||
PREFLIST=BAR,SPI
|
||||
EXPECTED=FALLBACK
|
||||
TESTLANG=en
|
||||
TESTCTRY=US
|
||||
PARAM1=FALLBACK
|
||||
PARAM2=en
|
||||
PARAM3=US
|
||||
runTest
|
||||
|
||||
# testing 7198834 fix. Only works on Windows Vista or upper.
|
||||
METHODNAME=bug7198834Test
|
||||
PREFLIST=HOST
|
||||
PARAM1=
|
||||
PARAM2=
|
||||
PARAM3=
|
||||
runTest
|
||||
|
||||
exit $result
|
||||
|
Loading…
Reference in New Issue
Block a user