kernel32: Some test for handling locales specified by language only.
This commit is contained in:
parent
6d2902f680
commit
5b7efa8ea3
|
@ -85,6 +85,7 @@ static BOOL (WINAPI *pIsValidLanguageGroup)(LGRPID, DWORD);
|
||||||
static INT (WINAPI *pIdnToNameprepUnicode)(DWORD, LPCWSTR, INT, LPWSTR, INT);
|
static INT (WINAPI *pIdnToNameprepUnicode)(DWORD, LPCWSTR, INT, LPWSTR, INT);
|
||||||
static INT (WINAPI *pIdnToAscii)(DWORD, LPCWSTR, INT, LPWSTR, INT);
|
static INT (WINAPI *pIdnToAscii)(DWORD, LPCWSTR, INT, LPWSTR, INT);
|
||||||
static INT (WINAPI *pIdnToUnicode)(DWORD, LPCWSTR, INT, LPWSTR, INT);
|
static INT (WINAPI *pIdnToUnicode)(DWORD, LPCWSTR, INT, LPWSTR, INT);
|
||||||
|
static INT (WINAPI *pGetLocaleInfoEx)(LPCWSTR, LCTYPE, LPWSTR, INT);
|
||||||
|
|
||||||
static void InitFunctionPointers(void)
|
static void InitFunctionPointers(void)
|
||||||
{
|
{
|
||||||
|
@ -102,6 +103,7 @@ static void InitFunctionPointers(void)
|
||||||
pIdnToNameprepUnicode = (void*)GetProcAddress(hKernel32, "IdnToNameprepUnicode");
|
pIdnToNameprepUnicode = (void*)GetProcAddress(hKernel32, "IdnToNameprepUnicode");
|
||||||
pIdnToAscii = (void*)GetProcAddress(hKernel32, "IdnToAscii");
|
pIdnToAscii = (void*)GetProcAddress(hKernel32, "IdnToAscii");
|
||||||
pIdnToUnicode = (void*)GetProcAddress(hKernel32, "IdnToUnicode");
|
pIdnToUnicode = (void*)GetProcAddress(hKernel32, "IdnToUnicode");
|
||||||
|
pGetLocaleInfoEx = (void*)GetProcAddress(hKernel32, "GetLocaleInfoEx");
|
||||||
}
|
}
|
||||||
|
|
||||||
#define eq(received, expected, label, type) \
|
#define eq(received, expected, label, type) \
|
||||||
|
@ -131,9 +133,15 @@ static void test_GetLocaleInfoA(void)
|
||||||
LCID lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT);
|
LCID lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT);
|
||||||
char buffer[BUFFER_SIZE];
|
char buffer[BUFFER_SIZE];
|
||||||
char expected[BUFFER_SIZE];
|
char expected[BUFFER_SIZE];
|
||||||
|
DWORD val;
|
||||||
|
|
||||||
ok(lcid == 0x409, "wrong LCID calculated - %d\n", lcid);
|
ok(lcid == 0x409, "wrong LCID calculated - %d\n", lcid);
|
||||||
|
|
||||||
|
ret = GetLocaleInfoA(lcid, LOCALE_ILANGUAGE|LOCALE_RETURN_NUMBER, (char*)&val, sizeof(val));
|
||||||
|
ok(ret, "got %d\n", ret);
|
||||||
|
todo_wine
|
||||||
|
ok(val == lcid, "got 0x%08x\n", val);
|
||||||
|
|
||||||
/* en and ar use SUBLANG_NEUTRAL, but GetLocaleInfo assume SUBLANG_DEFAULT
|
/* en and ar use SUBLANG_NEUTRAL, but GetLocaleInfo assume SUBLANG_DEFAULT
|
||||||
Same is true for zh on pre-Vista, but on Vista and higher GetLocaleInfo
|
Same is true for zh on pre-Vista, but on Vista and higher GetLocaleInfo
|
||||||
assumes SUBLANG_NEUTRAL for zh */
|
assumes SUBLANG_NEUTRAL for zh */
|
||||||
|
@ -192,12 +200,39 @@ static void test_GetLocaleInfoA(void)
|
||||||
ok(!strcmp(buffer, "Monday"), "Expected 'Monday', got '%s'\n", buffer);
|
ok(!strcmp(buffer, "Monday"), "Expected 'Monday', got '%s'\n", buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct neutralsublang_name2_t {
|
||||||
|
WCHAR name[3];
|
||||||
|
LCID lcid;
|
||||||
|
LCID lcid_broken;
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct neutralsublang_name2_t neutralsublang_names2[] = {
|
||||||
|
{ {'a','r',0}, MAKELCID(MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_SAUDI_ARABIA), SORT_DEFAULT) },
|
||||||
|
{ {'a','z',0}, MAKELCID(MAKELANGID(LANG_AZERI, SUBLANG_AZERI_LATIN), SORT_DEFAULT) },
|
||||||
|
{ {'d','e',0}, MAKELCID(MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN), SORT_DEFAULT) },
|
||||||
|
{ {'e','n',0}, MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT) },
|
||||||
|
{ {'e','s',0}, MAKELCID(MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_MODERN), SORT_DEFAULT),
|
||||||
|
MAKELCID(MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH), SORT_DEFAULT) /* vista */ },
|
||||||
|
{ {'g','a',0}, MAKELCID(MAKELANGID(LANG_IRISH, SUBLANG_IRISH_IRELAND), SORT_DEFAULT) },
|
||||||
|
{ {'i','t',0}, MAKELCID(MAKELANGID(LANG_ITALIAN, SUBLANG_ITALIAN), SORT_DEFAULT) },
|
||||||
|
{ {'m','s',0}, MAKELCID(MAKELANGID(LANG_MALAY, SUBLANG_MALAY_MALAYSIA), SORT_DEFAULT) },
|
||||||
|
{ {'n','l',0}, MAKELCID(MAKELANGID(LANG_DUTCH, SUBLANG_DUTCH), SORT_DEFAULT) },
|
||||||
|
{ {'p','t',0}, MAKELCID(MAKELANGID(LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN), SORT_DEFAULT) },
|
||||||
|
{ {'s','r',0}, MAKELCID(MAKELANGID(LANG_SERBIAN, SUBLANG_SERBIAN_CROATIA), SORT_DEFAULT) },
|
||||||
|
{ {'s','v',0}, MAKELCID(MAKELANGID(LANG_SWEDISH, SUBLANG_SWEDISH), SORT_DEFAULT) },
|
||||||
|
{ {'u','z',0}, MAKELCID(MAKELANGID(LANG_UZBEK, SUBLANG_UZBEK_LATIN), SORT_DEFAULT) },
|
||||||
|
{ {'z','h',0}, MAKELCID(MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED), SORT_DEFAULT) },
|
||||||
|
{ {0} }
|
||||||
|
};
|
||||||
|
|
||||||
static void test_GetLocaleInfoW(void)
|
static void test_GetLocaleInfoW(void)
|
||||||
{
|
{
|
||||||
LCID lcid_en = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT);
|
LCID lcid_en = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT);
|
||||||
LCID lcid_ru = MAKELCID(MAKELANGID(LANG_RUSSIAN, SUBLANG_NEUTRAL), SORT_DEFAULT);
|
LCID lcid_ru = MAKELCID(MAKELANGID(LANG_RUSSIAN, SUBLANG_NEUTRAL), SORT_DEFAULT);
|
||||||
|
LCID lcid_en_neut = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_NEUTRAL), SORT_DEFAULT);
|
||||||
WCHAR bufferW[80], buffer2W[80];
|
WCHAR bufferW[80], buffer2W[80];
|
||||||
CHAR bufferA[80];
|
CHAR bufferA[80];
|
||||||
|
DWORD val;
|
||||||
DWORD ret;
|
DWORD ret;
|
||||||
INT i;
|
INT i;
|
||||||
|
|
||||||
|
@ -206,6 +241,49 @@ static void test_GetLocaleInfoW(void)
|
||||||
win_skip("GetLocaleInfoW() isn't implemented\n");
|
win_skip("GetLocaleInfoW() isn't implemented\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = GetLocaleInfoW(lcid_en, LOCALE_ILANGUAGE|LOCALE_RETURN_NUMBER, (WCHAR*)&val, sizeof(val)/sizeof(WCHAR));
|
||||||
|
ok(ret, "got %d\n", ret);
|
||||||
|
todo_wine
|
||||||
|
ok(val == lcid_en, "got 0x%08x\n", val);
|
||||||
|
|
||||||
|
ret = GetLocaleInfoW(lcid_en_neut, LOCALE_SNAME, bufferW, COUNTOF(bufferW));
|
||||||
|
if (ret)
|
||||||
|
{
|
||||||
|
static const WCHAR slangW[] = {'E','n','g','l','i','s','h',' ','(','U','n','i','t','e','d',' ',
|
||||||
|
'S','t','a','t','e','s',')',0};
|
||||||
|
static const WCHAR statesW[] = {'U','n','i','t','e','d',' ','S','t','a','t','e','s',0};
|
||||||
|
static const WCHAR enW[] = {'e','n','-','U','S',0};
|
||||||
|
const struct neutralsublang_name2_t *ptr = neutralsublang_names2;
|
||||||
|
|
||||||
|
ok(!lstrcmpW(bufferW, enW), "got wrong name %s\n", wine_dbgstr_w(bufferW));
|
||||||
|
|
||||||
|
ret = GetLocaleInfoW(lcid_en_neut, LOCALE_SCOUNTRY, bufferW, COUNTOF(bufferW));
|
||||||
|
ok(ret, "got %d\n", ret);
|
||||||
|
ok(!lstrcmpW(statesW, bufferW), "got wrong name %s\n", wine_dbgstr_w(bufferW));
|
||||||
|
|
||||||
|
ret = GetLocaleInfoW(lcid_en_neut, LOCALE_SLANGUAGE, bufferW, COUNTOF(bufferW));
|
||||||
|
ok(ret, "got %d\n", ret);
|
||||||
|
ok(!lstrcmpW(slangW, bufferW), "got wrong name %s\n", wine_dbgstr_w(bufferW));
|
||||||
|
|
||||||
|
while (*ptr->name)
|
||||||
|
{
|
||||||
|
LANGID langid;
|
||||||
|
|
||||||
|
/* make neutral lcid */
|
||||||
|
langid = MAKELANGID(PRIMARYLANGID(LANGIDFROMLCID(ptr->lcid)), SUBLANG_NEUTRAL);
|
||||||
|
|
||||||
|
val = 0;
|
||||||
|
GetLocaleInfoW(MAKELCID(langid, SORT_DEFAULT), LOCALE_ILANGUAGE|LOCALE_RETURN_NUMBER, (WCHAR*)&val, sizeof(val)/sizeof(WCHAR));
|
||||||
|
todo_wine
|
||||||
|
ok(val == ptr->lcid || broken(val == ptr->lcid_broken), "%s: got wrong lcid 0x%04x, expected 0x%04x\n",
|
||||||
|
wine_dbgstr_w(ptr->name), val, ptr->lcid);
|
||||||
|
ptr++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
win_skip("English neutral locale not supported\n");
|
||||||
|
|
||||||
ret = GetLocaleInfoW(lcid_ru, LOCALE_SMONTHNAME1, bufferW, COUNTOF(bufferW));
|
ret = GetLocaleInfoW(lcid_ru, LOCALE_SMONTHNAME1, bufferW, COUNTOF(bufferW));
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
win_skip("LANG_RUSSIAN locale data unavailable\n");
|
win_skip("LANG_RUSSIAN locale data unavailable\n");
|
||||||
|
@ -1714,11 +1792,36 @@ static void test_LCMapStringEx(void)
|
||||||
test_lcmapstring_unicode(LCMapStringEx_wrapper, "LCMapStringEx:");
|
test_lcmapstring_unicode(LCMapStringEx_wrapper, "LCMapStringEx:");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_LocaleNames(void)
|
struct neutralsublang_name_t {
|
||||||
|
WCHAR name[3];
|
||||||
|
LCID lcid;
|
||||||
|
int todo;
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct neutralsublang_name_t neutralsublang_names[] = {
|
||||||
|
{ {'a','r',0}, MAKELCID(MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_SAUDI_ARABIA), SORT_DEFAULT) },
|
||||||
|
{ {'a','z',0}, MAKELCID(MAKELANGID(LANG_AZERI, SUBLANG_AZERI_LATIN), SORT_DEFAULT) },
|
||||||
|
{ {'d','e',0}, MAKELCID(MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN), SORT_DEFAULT) },
|
||||||
|
{ {'e','n',0}, MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT) },
|
||||||
|
{ {'e','s',0}, MAKELCID(MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_MODERN), SORT_DEFAULT), 1 },
|
||||||
|
{ {'g','a',0}, MAKELCID(MAKELANGID(LANG_IRISH, SUBLANG_IRISH_IRELAND), SORT_DEFAULT), 1 },
|
||||||
|
{ {'i','t',0}, MAKELCID(MAKELANGID(LANG_ITALIAN, SUBLANG_ITALIAN), SORT_DEFAULT) },
|
||||||
|
{ {'m','s',0}, MAKELCID(MAKELANGID(LANG_MALAY, SUBLANG_MALAY_MALAYSIA), SORT_DEFAULT) },
|
||||||
|
{ {'n','l',0}, MAKELCID(MAKELANGID(LANG_DUTCH, SUBLANG_DUTCH), SORT_DEFAULT) },
|
||||||
|
{ {'p','t',0}, MAKELCID(MAKELANGID(LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN), SORT_DEFAULT) },
|
||||||
|
{ {'s','r',0}, MAKELCID(MAKELANGID(LANG_SERBIAN, SUBLANG_SERBIAN_SERBIA_LATIN), SORT_DEFAULT), 1 },
|
||||||
|
{ {'s','v',0}, MAKELCID(MAKELANGID(LANG_SWEDISH, SUBLANG_SWEDISH), SORT_DEFAULT) },
|
||||||
|
{ {'u','z',0}, MAKELCID(MAKELANGID(LANG_UZBEK, SUBLANG_UZBEK_LATIN), SORT_DEFAULT) },
|
||||||
|
{ {'z','h',0}, MAKELCID(MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED), SORT_DEFAULT), 1 },
|
||||||
|
{ {0} }
|
||||||
|
};
|
||||||
|
|
||||||
|
static void test_LocaleNameToLCID(void)
|
||||||
{
|
{
|
||||||
LCID lcid;
|
LCID lcid;
|
||||||
INT ret;
|
INT ret;
|
||||||
WCHAR buffer[LOCALE_NAME_MAX_LENGTH];
|
WCHAR buffer[LOCALE_NAME_MAX_LENGTH];
|
||||||
|
static const WCHAR enW[] = {'e','n',0};
|
||||||
|
|
||||||
if (!pLocaleNameToLCID)
|
if (!pLocaleNameToLCID)
|
||||||
{
|
{
|
||||||
|
@ -1749,6 +1852,28 @@ static void test_LocaleNames(void)
|
||||||
ret = pLCIDToLocaleName(lcid, buffer, LOCALE_NAME_MAX_LENGTH, 0);
|
ret = pLCIDToLocaleName(lcid, buffer, LOCALE_NAME_MAX_LENGTH, 0);
|
||||||
ok(ret > 0, "Expected ret > 0, got %d, error %d\n", ret, GetLastError());
|
ok(ret > 0, "Expected ret > 0, got %d, error %d\n", ret, GetLastError());
|
||||||
trace("%08x, %s\n", lcid, wine_dbgstr_w(buffer));
|
trace("%08x, %s\n", lcid, wine_dbgstr_w(buffer));
|
||||||
|
|
||||||
|
/* english neutral name */
|
||||||
|
lcid = pLocaleNameToLCID(enW, 0);
|
||||||
|
ok(lcid == MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT) ||
|
||||||
|
broken(lcid == 0) /* Vista */, "got 0x%04x\n", lcid);
|
||||||
|
if (lcid)
|
||||||
|
{
|
||||||
|
const struct neutralsublang_name_t *ptr = neutralsublang_names;
|
||||||
|
|
||||||
|
while (*ptr->name)
|
||||||
|
{
|
||||||
|
lcid = pLocaleNameToLCID(ptr->name, 0);
|
||||||
|
if (ptr->todo)
|
||||||
|
todo_wine
|
||||||
|
ok(lcid == ptr->lcid, "%s: got wrong lcid 0x%04x, expected 0x%04x\n",
|
||||||
|
wine_dbgstr_w(ptr->name), lcid, ptr->lcid);
|
||||||
|
else
|
||||||
|
ok(lcid == ptr->lcid, "%s: got wrong lcid 0x%04x, expected 0x%04x\n",
|
||||||
|
wine_dbgstr_w(ptr->name), lcid, ptr->lcid);
|
||||||
|
ptr++;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* this requires collation table patch to make it MS compatible */
|
/* this requires collation table patch to make it MS compatible */
|
||||||
|
@ -3204,14 +3329,75 @@ static void test_IdnToUnicode(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_GetLocaleInfoEx(void)
|
||||||
|
{
|
||||||
|
static const WCHAR enW[] = {'e','n',0};
|
||||||
|
WCHAR bufferW[80];
|
||||||
|
INT ret;
|
||||||
|
|
||||||
|
if (!pGetLocaleInfoEx)
|
||||||
|
{
|
||||||
|
win_skip("GetLocaleInfoEx not supported\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = pGetLocaleInfoEx(enW, LOCALE_SNAME, bufferW, sizeof(bufferW)/sizeof(WCHAR));
|
||||||
|
ok(ret || broken(ret == 0) /* Vista */, "got %d\n", ret);
|
||||||
|
if (ret)
|
||||||
|
{
|
||||||
|
static const WCHAR statesW[] = {'U','n','i','t','e','d',' ','S','t','a','t','e','s',0};
|
||||||
|
static const WCHAR dummyW[] = {'d','u','m','m','y',0};
|
||||||
|
static const WCHAR enusW[] = {'e','n','-','U','S',0};
|
||||||
|
static const WCHAR usaW[] = {'U','S','A',0};
|
||||||
|
static const WCHAR enuW[] = {'E','N','U',0};
|
||||||
|
const struct neutralsublang_name_t *ptr = neutralsublang_names;
|
||||||
|
DWORD val;
|
||||||
|
|
||||||
|
todo_wine
|
||||||
|
ok(!lstrcmpW(bufferW, enW), "got %s\n", wine_dbgstr_w(bufferW));
|
||||||
|
|
||||||
|
ret = pGetLocaleInfoEx(enusW, LOCALE_SNAME, bufferW, sizeof(bufferW)/sizeof(WCHAR));
|
||||||
|
ok(ret, "got %d\n", ret);
|
||||||
|
ok(!lstrcmpW(bufferW, enusW), "got %s\n", wine_dbgstr_w(bufferW));
|
||||||
|
|
||||||
|
ret = pGetLocaleInfoEx(enW, LOCALE_SABBREVCTRYNAME, bufferW, sizeof(bufferW)/sizeof(WCHAR));
|
||||||
|
ok(ret, "got %d\n", ret);
|
||||||
|
ok(!lstrcmpW(bufferW, usaW), "got %s\n", wine_dbgstr_w(bufferW));
|
||||||
|
|
||||||
|
ret = pGetLocaleInfoEx(enW, LOCALE_SABBREVLANGNAME, bufferW, sizeof(bufferW)/sizeof(WCHAR));
|
||||||
|
ok(ret, "got %d\n", ret);
|
||||||
|
ok(!lstrcmpW(bufferW, enuW), "got %s\n", wine_dbgstr_w(bufferW));
|
||||||
|
|
||||||
|
ret = pGetLocaleInfoEx(enW, LOCALE_SCOUNTRY, bufferW, sizeof(bufferW)/sizeof(WCHAR));
|
||||||
|
ok(ret, "got %d\n", ret);
|
||||||
|
ok(!lstrcmpW(bufferW, statesW), "got %s\n", wine_dbgstr_w(bufferW));
|
||||||
|
|
||||||
|
bufferW[0] = 0;
|
||||||
|
ret = pGetLocaleInfoEx(dummyW, LOCALE_SNAME, bufferW, sizeof(bufferW)/sizeof(WCHAR));
|
||||||
|
todo_wine
|
||||||
|
ok(!ret, "got %d\n", ret);
|
||||||
|
|
||||||
|
while (*ptr->name)
|
||||||
|
{
|
||||||
|
val = 0;
|
||||||
|
pGetLocaleInfoEx(ptr->name, LOCALE_ILANGUAGE|LOCALE_RETURN_NUMBER, (WCHAR*)&val, sizeof(val)/sizeof(WCHAR));
|
||||||
|
todo_wine
|
||||||
|
ok(val == ptr->lcid, "%s: got wrong lcid 0x%04x, expected 0x%04x\n", wine_dbgstr_w(ptr->name), val, ptr->lcid);
|
||||||
|
ptr++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
START_TEST(locale)
|
START_TEST(locale)
|
||||||
{
|
{
|
||||||
InitFunctionPointers();
|
InitFunctionPointers();
|
||||||
|
|
||||||
|
|
||||||
test_EnumTimeFormatsA();
|
test_EnumTimeFormatsA();
|
||||||
test_EnumDateFormatsA();
|
test_EnumDateFormatsA();
|
||||||
test_GetLocaleInfoA();
|
test_GetLocaleInfoA();
|
||||||
test_GetLocaleInfoW();
|
test_GetLocaleInfoW();
|
||||||
|
test_GetLocaleInfoEx();
|
||||||
test_GetTimeFormatA();
|
test_GetTimeFormatA();
|
||||||
test_GetDateFormatA();
|
test_GetDateFormatA();
|
||||||
test_GetDateFormatW();
|
test_GetDateFormatW();
|
||||||
|
@ -3221,7 +3407,7 @@ START_TEST(locale)
|
||||||
test_LCMapStringA();
|
test_LCMapStringA();
|
||||||
test_LCMapStringW();
|
test_LCMapStringW();
|
||||||
test_LCMapStringEx();
|
test_LCMapStringEx();
|
||||||
test_LocaleNames();
|
test_LocaleNameToLCID();
|
||||||
test_FoldStringA();
|
test_FoldStringA();
|
||||||
test_FoldStringW();
|
test_FoldStringW();
|
||||||
test_ConvertDefaultLocale();
|
test_ConvertDefaultLocale();
|
||||||
|
|
Loading…
Reference in New Issue