Reactos
1/*
2 * PROJECT: ReactOS api tests
3 * LICENSE: GPLv2+ - See COPYING in the top level directory
4 * PURPOSE: Test for GetLocaleInfo(Ex)
5 * PROGRAMMER: Timo Kreuzer <timo.kreuzer@reactos.org>
6 */
7
8#include "precomp.h"
9
10typedef
11int
12WINAPI
13FN_GetLocaleInfoEx(
14 _In_opt_ LPCWSTR lpLocaleName,
15 _In_ LCTYPE LCType,
16 _Out_opt_ LPWSTR lpLCData,
17 _In_ int cchData);
18
19FN_GetLocaleInfoEx* pGetLocaleInfoEx = NULL;
20
21static void Test_GetLocaleInfoEx(void)
22{
23 HMODULE hmodKernel32;
24 int Ret;
25 ULONG CodePage;
26
27 hmodKernel32 = GetModuleHandleW(L"kernel32.dll");
28 pGetLocaleInfoEx = (FN_GetLocaleInfoEx*)GetProcAddress(hmodKernel32, "GetLocaleInfoEx");
29 if (pGetLocaleInfoEx == NULL)
30 {
31 hmodKernel32 = LoadLibraryW(L"kernel32_vista.dll");
32 pGetLocaleInfoEx = (FN_GetLocaleInfoEx*)GetProcAddress(hmodKernel32, "GetLocaleInfoEx");
33 if (pGetLocaleInfoEx == NULL)
34 {
35 skip("GetLocaleInfoEx not found in kernel32.dll\n");
36 return;
37 }
38 }
39
40 // Test normal usage
41 Ret = pGetLocaleInfoEx(L"en-US",
42 LOCALE_IDEFAULTANSICODEPAGE | LOCALE_RETURN_NUMBER,
43 (WCHAR*)&CodePage,
44 sizeof(DWORD) / sizeof(WCHAR));
45 ok_eq_int(Ret, 2);
46 ok_eq_long(CodePage, 1252ul);
47
48 // Test with neutral locale
49 Ret = pGetLocaleInfoEx(L"en",
50 LOCALE_IDEFAULTANSICODEPAGE | LOCALE_RETURN_NUMBER,
51 NULL,
52 0);
53 ok_eq_int(Ret, 2);
54 ok_eq_long(CodePage, 1252ul);
55
56 // Test with NULL locale name
57 CodePage = 0xdeadbeef;
58 Ret = pGetLocaleInfoEx(NULL,
59 LOCALE_IDEFAULTANSICODEPAGE | LOCALE_RETURN_NUMBER,
60 (WCHAR *)&CodePage,
61 sizeof(DWORD) /sizeof(WCHAR));
62 ok_eq_int(Ret, 2);
63 ok_eq_long(CodePage, 1252ul);
64
65 // Test with empty locale name
66 CodePage = 0xdeadbeef;
67 Ret = pGetLocaleInfoEx(L"",
68 LOCALE_IDEFAULTANSICODEPAGE | LOCALE_RETURN_NUMBER,
69 (WCHAR *)&CodePage,
70 sizeof(DWORD) /sizeof(WCHAR));
71 ok_eq_int(Ret, 2);
72 ok_eq_long(CodePage, 1252ul);
73
74 // Test with invalid locale name
75 CodePage = 0xdeadbeef;
76 Ret = pGetLocaleInfoEx(L"invalid",
77 LOCALE_IDEFAULTANSICODEPAGE | LOCALE_RETURN_NUMBER,
78 (WCHAR *)&CodePage,
79 sizeof(DWORD) /sizeof(WCHAR));
80 ok_eq_int(Ret, 0);
81 ok_eq_long(GetLastError(), (ULONG)ERROR_INVALID_PARAMETER);
82 ok(CodePage == 0xdeadbeef, "CodePage should not have been modified: %lx\n", CodePage);
83
84}
85
86#undef GetLocaleInfo
87START_TEST(GetLocaleInfo)
88{
89 Test_GetLocaleInfoEx();
90}