ReactOS 0.4.16-dev-1946-g52006dd
LocaleNameToLCID.c
Go to the documentation of this file.
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
10typedef
11LCID
16
18
20{
21 HMODULE hmodKernel32;
22 LCID lcid;
23
24 hmodKernel32 = GetModuleHandleW(L"kernel32.dll");
25 pLocaleNameToLCID = (FN_LocaleNameToLCID*)GetProcAddress(hmodKernel32, "LocaleNameToLCID");
27 {
28 hmodKernel32 = LoadLibraryW(L"kernel32_vista.dll");
29 pLocaleNameToLCID = (FN_LocaleNameToLCID*)GetProcAddress(hmodKernel32, "LocaleNameToLCID");
31 {
32 skip("LocaleNameToLCID not found in kernel32.dll\n");
33 return;
34 }
35 }
36
37 lcid = pLocaleNameToLCID(L"en-US", 0);
39
40 lcid = pLocaleNameToLCID(L"en", 0);
42
45
46 // SUBLANG_SPANISH_US is 0x15
49 lcid = pLocaleNameToLCID(L"es-US", 0);
51
54 lcid = pLocaleNameToLCID(L"es-419", 0);
56
59 lcid = pLocaleNameToLCID(L"es-CU", 0);
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 {
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);
119
120 SetLastError(0xdeadbeef);
121 lcid = pLocaleNameToLCID(L"american", 0);
122 ok_eq_hex(lcid, 0);
124
125 // Test NULL aka LOCALE_NAME_USER_DEFAULT
128
129 // Test empty string aka LOCALE_NAME_INVARIANT
130 lcid = pLocaleNameToLCID(L"", 0);
132
133 // Test LOCALE_NAME_SYSTEM_DEFAULT
134 SetLastError(0xdeadbeef);
135 lcid = pLocaleNameToLCID(L"!sys-default-locale", 0);
136 ok_eq_hex(lcid, 0);
138
139 SetLastError(0xdeadbeef);
140 lcid = pLocaleNameToLCID(L"en-US", 1);
141 ok_eq_hex(lcid, 0);
143
144}
#define ok_eq_hex(value, expected)
Definition: apitest.h:134
#define ok(value,...)
Definition: atltest.h:57
#define skip(...)
Definition: atltest.h:64
#define ok_err(error)
Definition: atltest.h:124
#define START_TEST(x)
Definition: atltest.h:75
LPWSTR Name
Definition: desk.c:124
#define NULL
Definition: types.h:112
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define SetLastError(x)
Definition: compat.h:752
#define GetProcAddress(x, y)
Definition: compat.h:753
#define LoadLibraryW(x)
Definition: compat.h:747
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
Definition: loader.c:838
LCID WINAPI LocaleNameToLCID(_In_ LPCWSTR lpName, _In_ DWORD dwFlags)
LCID WINAPI GetUserDefaultLCID(void)
Definition: locale.c:1216
LCID lcid
Definition: locale.c:5656
#define L(x)
Definition: resources.c:13
unsigned long DWORD
Definition: ntddk_ex.h:95
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
FN_LocaleNameToLCID * pLocaleNameToLCID
LCID WINAPI FN_LocaleNameToLCID(_In_ LPCWSTR lpName, _In_ DWORD dwFlags)
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
#define _In_
Definition: no_sal2.h:158
#define LOCALE_INVARIANT
#define SORT_DEFAULT
#define MAKELCID(lgid, srtid)
#define MAKELANGID(p, s)
Definition: nls.h:15
#define SUBLANG_SPANISH_US
Definition: nls.h:356
#define LANG_SPANISH
Definition: nls.h:123
#define LANG_ENGLISH
Definition: nls.h:52
#define SUBLANG_NEUTRAL
Definition: nls.h:167
#define SUBLANG_DEFAULT
Definition: nls.h:168
DWORD LCID
Definition: nls.h:13
#define SUBLANG_ENGLISH_US
Definition: nls.h:222
uint32_t ULONG
Definition: typedefs.h:59
_In_ LPCSTR lpName
Definition: winbase.h:2543
#define WINAPI
Definition: msvc.h:6
#define LOCALE_ALLOW_NEUTRAL_NAMES
Definition: winnls.h:25
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185