Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wine-mirror
GitHub Repository: wine-mirror/wine
Path: blob/master/dlls/bcp47langs/tests/bcp47langs.c
8869 views
1
/*
2
* Copyright 2025 Zhiyi Zhang for CodeWeavers
3
*
4
* This library is free software; you can redistribute it and/or
5
* modify it under the terms of the GNU Lesser General Public
6
* License as published by the Free Software Foundation; either
7
* version 2.1 of the License, or (at your option) any later version.
8
*
9
* This library is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
* Lesser General Public License for more details.
13
*
14
* You should have received a copy of the GNU Lesser General Public
15
* License along with this library; if not, write to the Free Software
16
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17
*/
18
19
#define WIN32_LEAN_AND_MEAN
20
#include <windows.h>
21
22
#include "winstring.h"
23
24
#include "wine/test.h"
25
26
HRESULT WINAPI GetFontFallbackLanguageList(const WCHAR *, size_t, WCHAR *, size_t *);
27
DWORD WINAPI GetUserLanguages(WCHAR, HSTRING *);
28
29
static void test_GetFontFallbackLanguageList(void)
30
{
31
size_t required_size;
32
WCHAR buffer[128];
33
HRESULT hr;
34
35
/* Parameter checks */
36
required_size = 0xdeadbeef;
37
hr = GetFontFallbackLanguageList(NULL, ARRAY_SIZE(buffer), buffer, &required_size);
38
ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
39
ok(required_size != 0xdeadbeef, "Got unexpected size %Iu.\n", required_size);
40
41
hr = GetFontFallbackLanguageList(L"en-US", 0, buffer, &required_size);
42
ok(hr == E_INVALIDARG, "Got unexpected hr %#lx.\n", hr);
43
44
required_size = 0;
45
hr = GetFontFallbackLanguageList(L"en-US", 1, buffer, &required_size);
46
ok(hr == E_NOT_SUFFICIENT_BUFFER, "Got unexpected hr %#lx.\n", hr);
47
ok(required_size > 0, "Got unexpected size %Iu.\n", required_size);
48
49
hr = GetFontFallbackLanguageList(L"en-US", ARRAY_SIZE(buffer), NULL, &required_size);
50
ok(hr == E_INVALIDARG, "Got unexpected hr %#lx.\n", hr);
51
52
if (0) /* Crashes on Windows */
53
{
54
hr = GetFontFallbackLanguageList(L"en-US", ARRAY_SIZE(buffer), buffer, NULL);
55
ok(hr == E_INVALIDARG, "Got unexpected hr %#lx.\n", hr);
56
}
57
58
hr = GetFontFallbackLanguageList(L"deadbeef", ARRAY_SIZE(buffer), buffer, &required_size);
59
todo_wine
60
ok(hr == E_INVALIDARG, "Got unexpected hr %#lx.\n", hr);
61
62
/* Normal call */
63
required_size = 0;
64
hr = GetFontFallbackLanguageList(L"en-US", ARRAY_SIZE(buffer), buffer, &required_size);
65
ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
66
ok(!wcsncmp(buffer, L"en-US", wcslen(L"en-US")), "Got unexpected %s.\n", wine_dbgstr_w(buffer));
67
ok(required_size >= (wcslen(L"en-US") + 1), "Got unexpected size %Iu.\n", required_size);
68
}
69
70
static void test_GetUserLanguages(void)
71
{
72
HSTRING usrlangs = NULL;
73
const WCHAR *langs;
74
int count = 0;
75
HRESULT hr;
76
77
hr = GetUserLanguages(';', &usrlangs);
78
ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
79
todo_wine
80
ok(!!usrlangs, "Unexpected pointer.\n");
81
if (!usrlangs) return;
82
83
langs = WindowsGetStringRawBuffer(usrlangs, NULL);
84
85
for (WCHAR *p = wcstok(wcsdup(langs), L";"); p; p = wcstok(NULL, L";")) count++;
86
todo_wine ok(count > 0, "Got count=%d.\n", count);
87
WindowsDeleteString(usrlangs);
88
}
89
90
START_TEST(bcp47langs)
91
{
92
test_GetFontFallbackLanguageList();
93
test_GetUserLanguages();
94
}
95
96