ReactOS 0.4.16-dev-1946-g52006dd
LocaleNameToLCID.c File Reference
#include "precomp.h"
Include dependency graph for LocaleNameToLCID.c:

Go to the source code of this file.

Typedefs

typedef LCID WINAPI FN_LocaleNameToLCID(_In_ LPCWSTR lpName, _In_ DWORD dwFlags)
 

Functions

 START_TEST (LocaleNameToLCID)
 

Variables

FN_LocaleNameToLCIDpLocaleNameToLCID = NULL
 

Typedef Documentation

◆ FN_LocaleNameToLCID

typedef LCID WINAPI FN_LocaleNameToLCID(_In_ LPCWSTR lpName, _In_ DWORD dwFlags)

Definition at line 13 of file LocaleNameToLCID.c.

Function Documentation

◆ START_TEST()

START_TEST ( LocaleNameToLCID  )

Definition at line 19 of file LocaleNameToLCID.c.

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;
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
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 GetUserDefaultLCID(void)
Definition: locale.c:1216
LCID lcid
Definition: locale.c:5656
#define L(x)
Definition: resources.c:13
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)
@ Default
Definition: stdole2.idl:392
#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
#define LOCALE_ALLOW_NEUTRAL_NAMES
Definition: winnls.h:25

Variable Documentation

◆ pLocaleNameToLCID

FN_LocaleNameToLCID* pLocaleNameToLCID = NULL

Definition at line 17 of file LocaleNameToLCID.c.

Referenced by START_TEST(), and test_LocaleNameToLCID().