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