Reactos

[KERNEL32_APITEST] Add tests for LocaleNameToLCID

+147
+1
modules/rostests/apitests/kernel32/CMakeLists.txt
··· 25 25 JapaneseCalendar.c 26 26 LCMapString.c 27 27 LoadLibraryExW.c 28 + LocaleNameToLCID.c 28 29 lstrcpynW.c 29 30 lstrlen.c 30 31 Mailslot.c
+144
modules/rostests/apitests/kernel32/LocaleNameToLCID.c
··· 1 + /* 2 + * PROJECT: ReactOS api tests 3 + * LICENSE: GPLv2+ - See COPYING in the top level directory 4 + * PURPOSE: Test for LocaleNameToLCID 5 + * PROGRAMMER: Timo Kreuzer <timo.kreuzer@reactos.org> 6 + */ 7 + 8 + #include "precomp.h" 9 + 10 + typedef 11 + LCID 12 + WINAPI 13 + FN_LocaleNameToLCID( 14 + _In_ LPCWSTR lpName, 15 + _In_ DWORD dwFlags); 16 + 17 + FN_LocaleNameToLCID* pLocaleNameToLCID = NULL; 18 + 19 + START_TEST(LocaleNameToLCID) 20 + { 21 + HMODULE hmodKernel32; 22 + LCID lcid; 23 + 24 + hmodKernel32 = GetModuleHandleW(L"kernel32.dll"); 25 + pLocaleNameToLCID = (FN_LocaleNameToLCID*)GetProcAddress(hmodKernel32, "LocaleNameToLCID"); 26 + if (pLocaleNameToLCID == NULL) 27 + { 28 + hmodKernel32 = LoadLibraryW(L"kernel32_vista.dll"); 29 + pLocaleNameToLCID = (FN_LocaleNameToLCID*)GetProcAddress(hmodKernel32, "LocaleNameToLCID"); 30 + if (pLocaleNameToLCID == NULL) 31 + { 32 + skip("LocaleNameToLCID not found in kernel32.dll\n"); 33 + return; 34 + } 35 + } 36 + 37 + lcid = pLocaleNameToLCID(L"en-US", 0); 38 + ok_eq_hex(lcid, MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT)); 39 + 40 + lcid = pLocaleNameToLCID(L"en", 0); 41 + ok_eq_hex(lcid, MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT), SORT_DEFAULT)); 42 + 43 + lcid = pLocaleNameToLCID(L"en", LOCALE_ALLOW_NEUTRAL_NAMES); 44 + ok_eq_hex(lcid, MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_NEUTRAL), SORT_DEFAULT)); 45 + 46 + // SUBLANG_SPANISH_US is 0x15 47 + lcid = pLocaleNameToLCID(L"es-US", LOCALE_ALLOW_NEUTRAL_NAMES); 48 + ok_eq_hex(lcid, MAKELCID(MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_US), SORT_DEFAULT)); 49 + lcid = pLocaleNameToLCID(L"es-US", 0); 50 + ok_eq_hex(lcid, MAKELCID(MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_US), SORT_DEFAULT)); 51 + 52 + lcid = pLocaleNameToLCID(L"es-419", LOCALE_ALLOW_NEUTRAL_NAMES); 53 + ok_eq_hex(lcid, MAKELCID(MAKELANGID(LANG_SPANISH, 0x16), SORT_DEFAULT)); 54 + lcid = pLocaleNameToLCID(L"es-419", 0); 55 + ok_eq_hex(lcid, MAKELCID(MAKELANGID(LANG_SPANISH, 0x16), SORT_DEFAULT)); 56 + 57 + lcid = pLocaleNameToLCID(L"es-CU", LOCALE_ALLOW_NEUTRAL_NAMES); 58 + ok_eq_hex(lcid, MAKELCID(MAKELANGID(LANG_SPANISH, 0x17), SORT_DEFAULT)); 59 + lcid = pLocaleNameToLCID(L"es-CU", 0); 60 + ok_eq_hex(lcid, MAKELCID(MAKELANGID(LANG_SPANISH, 0x17), SORT_DEFAULT)); 61 + 62 + // Special neutral languages: 63 + static const struct 64 + { 65 + const wchar_t* Name; 66 + LCID Neutral; 67 + LCID Default; 68 + } SpecialCases[] = 69 + { 70 + { L"az-Cyrl", 0x0742C, 0x0082C }, // -> "az-Cyrl-AZ" 71 + { L"az-Latn", 0x0782C, 0x0042C }, // -> "az-Latn-AZ" 72 + { L"ff-Latn", 0x07C67, 0x00867 }, // -> "ff-Latn-SN" 73 + { L"bs", 0x0781A, 0x0141A }, // -> "bs-Latn-BA" 74 + { L"bs-Cyrl", 0x0641A, 0x0201A }, // -> "bs-Cyrl-BA" 75 + { L"bs-Latn", 0x0681A, 0x0141A }, // -> "bs-Latn-BA" 76 + { L"chr-Cher", 0x07C5C, 0x0045C }, // -> "chr-Cher-US" 77 + { L"dsb", 0x07C2E, 0x0082E }, // -> "dsb-DE" 78 + { L"ha-Latn", 0x07C68, 0x00468 }, // -> "ha-Latn-NG" 79 + { L"iu-Cans", 0x0785D, 0x0045D }, // -> "iu-Cans-CA" 80 + { L"iu-Latn", 0x07C5D, 0x0085D }, // -> "iu-Latn-CA" 81 + { L"ku-Arab", 0x07C92, 0x00492 }, // -> "ku-Arab-IQ" 82 + { L"mn-Cyrl", 0x07850, 0x00450 }, // -> "mn-MN" 83 + { L"mn-Mong", 0x07C50, 0x00850 }, // -> "mn-Mong-CN" 84 + { L"nb", 0x07C14, 0x00414 }, // -> "nb-NO" 85 + { L"nn", 0x07814, 0x00814 }, // -> "nn-NO" 86 + { L"pa-Arab", 0x07C46, 0x00846 }, // -> "pa-Arab-PK" 87 + { L"smn", 0x0703B, 0x0243B }, // -> "smn-FI" 88 + { L"sd-Arab", 0x07C59, 0x00859 }, // -> "sd-Arab-PK" 89 + { L"sma", 0x0783B, 0x01C3B }, // -> "sma-SE" 90 + { L"smj", 0x07C3B, 0x0143B }, // -> "smj-SE" 91 + { L"sms", 0x0743B, 0x0203B }, // -> "sms-FI" 92 + { L"sr-Cyrl", 0x06C1A, 0x0281A }, // -> "sr-Cyrl-RS" 93 + { L"sr-Latn", 0x0701A, 0x0241A }, // -> "sr-Latn-RS" 94 + { L"tg-Cyrl", 0x07C28, 0x00428 }, // -> "tg-Cyrl-TJ" 95 + { L"tzm-Latn", 0x07C5F, 0x0085F }, // -> "tzm-Latn-DZ" 96 + { L"tzm-Tfng", 0x0785F, 0x0105F }, // -> "tzm-Tfng-MA" 97 + { L"uz-Cyrl", 0x07843, 0x00843 }, // -> "uz-Cyrl-UZ" 98 + { L"uz-Latn", 0x07C43, 0x00443 }, // -> "uz-Latn-UZ" 99 + { L"zh", 0x07804, 0x00804 }, // -> "zh-CN" 100 + { L"zh-Hant", 0x07C04, 0x00C04 }, // -> "zh-HK" 101 + }; 102 + 103 + for (ULONG i = 0; i < ARRAYSIZE(SpecialCases); i++) 104 + { 105 + lcid = pLocaleNameToLCID(SpecialCases[i].Name, LOCALE_ALLOW_NEUTRAL_NAMES); 106 + ok(lcid == SpecialCases[i].Neutral, 107 + "Wrong neutral lcid for '%S': expected 0x%lx, got 0x%lx\n", 108 + SpecialCases[i].Name, SpecialCases[i].Neutral, lcid); 109 + lcid = pLocaleNameToLCID(SpecialCases[i].Name, 0); 110 + ok(lcid == SpecialCases[i].Default, 111 + "Wrong default lcid for '%S': expected 0x%lx, got 0x%lx\n", 112 + SpecialCases[i].Name, SpecialCases[i].Default, lcid); 113 + } 114 + 115 + SetLastError(0xdeadbeef); 116 + lcid = pLocaleNameToLCID(L"en-", 0); 117 + ok_eq_hex(lcid, 0); 118 + ok_err(ERROR_INVALID_PARAMETER); 119 + 120 + SetLastError(0xdeadbeef); 121 + lcid = pLocaleNameToLCID(L"american", 0); 122 + ok_eq_hex(lcid, 0); 123 + ok_err(ERROR_INVALID_PARAMETER); 124 + 125 + // Test NULL aka LOCALE_NAME_USER_DEFAULT 126 + lcid = pLocaleNameToLCID(NULL, 0); 127 + ok_eq_hex(lcid, GetUserDefaultLCID()); 128 + 129 + // Test empty string aka LOCALE_NAME_INVARIANT 130 + lcid = pLocaleNameToLCID(L"", 0); 131 + ok_eq_hex(lcid, LOCALE_INVARIANT); 132 + 133 + // Test LOCALE_NAME_SYSTEM_DEFAULT 134 + SetLastError(0xdeadbeef); 135 + lcid = pLocaleNameToLCID(L"!sys-default-locale", 0); 136 + ok_eq_hex(lcid, 0); 137 + ok_err(ERROR_INVALID_PARAMETER); 138 + 139 + SetLastError(0xdeadbeef); 140 + lcid = pLocaleNameToLCID(L"en-US", 1); 141 + ok_eq_hex(lcid, 0); 142 + ok_err(ERROR_INVALID_PARAMETER); 143 + 144 + }
+2
modules/rostests/apitests/kernel32/testlist.c
··· 25 25 extern void func_JapaneseCalendar(void); 26 26 extern void func_LCMapString(void); 27 27 extern void func_LoadLibraryExW(void); 28 + extern void func_LocaleNameToLCID(void); 28 29 extern void func_lstrcpynW(void); 29 30 extern void func_lstrlen(void); 30 31 extern void func_Mailslot(void); ··· 64 65 { "JapaneseCalendar", func_JapaneseCalendar }, 65 66 { "LCMapString", func_LCMapString }, 66 67 { "LoadLibraryExW", func_LoadLibraryExW }, 68 + { "LocaleNameToLCID", func_LocaleNameToLCID }, 67 69 { "lstrcpynW", func_lstrcpynW }, 68 70 { "lstrlen", func_lstrlen }, 69 71 { "MailslotRead", func_Mailslot },