Skip to content

Commit 36bb247

Browse files
binarymasterbsalex2
andcommitted
[KERNEL32_APITEST] Add tests for EnumSystemCodePages
Inspired by PoC test code by Aliaksandr in CORE-20535. Co-authored-by: Aliaksandr Lebiadzevich <bsalex2025@gmail.com>
1 parent 45303a2 commit 36bb247

3 files changed

Lines changed: 107 additions & 0 deletions

File tree

‎modules/rostests/apitests/kernel32/CMakeLists.txt‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ list(APPEND SOURCE
99
DefaultActCtx.c
1010
DeviceIoControl.c
1111
dosdev.c
12+
EnumSystemCodePages.c
1213
FindActCtxSectionStringW.c
1314
FindFiles.c
1415
FLS.c
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
/*
2+
* PROJECT: ReactOS API tests
3+
* LICENSE: MIT (https://spdx.org/licenses/MIT)
4+
* PURPOSE: Test for EnumSystemCodePages
5+
* COPYRIGHT: Copyright 2026 Aliaksandr Lebiadzevich <bsalex2025@gmail.com>
6+
* Copyright 2026 Stanislav Motylkov <x86corez@gmail.com>
7+
*/
8+
9+
#include "precomp.h"
10+
11+
char* func = NULL;
12+
ULONG cntInstalled, cntSupported, cntLast;
13+
14+
BOOL
15+
CALLBACK
16+
EnumCodePagesProcW(
17+
LPWSTR lpCodePageString)
18+
{
19+
ULONG CodePage = 0;
20+
int ret = swscanf(lpCodePageString, L"%u", &CodePage);
21+
22+
ok(ret == 1, "%s: '%S' is not a valid number\n", func, lpCodePageString);
23+
if (ret == 1)
24+
trace("%s: '%S' is a valid number (%lu)\n", func, lpCodePageString, CodePage);
25+
26+
cntLast++;
27+
return TRUE;
28+
}
29+
30+
BOOL
31+
CALLBACK
32+
EnumCodePagesProcA(
33+
LPSTR lpCodePageString)
34+
{
35+
BOOL ret;
36+
int len = MultiByteToWideChar(CP_ACP, 0, lpCodePageString, -1, NULL, 0);
37+
WCHAR *str = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
38+
if (!str)
39+
return FALSE;
40+
41+
MultiByteToWideChar(CP_ACP, 0, lpCodePageString, -1, str, len);
42+
ret = EnumCodePagesProcW(str);
43+
HeapFree(GetProcessHeap(), 0, str);
44+
45+
return ret;
46+
}
47+
48+
typedef struct ENTRY
49+
{
50+
DWORD dwFlags;
51+
BOOL bReturn;
52+
DWORD dwError;
53+
} ENTRY;
54+
55+
VOID
56+
RunEnumTests(
57+
BOOL Ansi)
58+
{
59+
BOOL ret;
60+
int i;
61+
62+
static const ENTRY Tests[] =
63+
{
64+
{ /* 1 */ CP_INSTALLED, TRUE, 0xDEADF00D },
65+
{ /* 2 */ CP_SUPPORTED, TRUE, 0xDEADF00D },
66+
{ 0, TRUE, 0xDEADF00D }, /* Windows handles this as CP_SUPPORTED */
67+
{ 3, FALSE, ERROR_INVALID_FLAGS },
68+
{ (DWORD)-1, FALSE, ERROR_INVALID_FLAGS },
69+
};
70+
71+
for (i = 0; i < _countof(Tests); i++)
72+
{
73+
cntLast = 0;
74+
SetLastError(Tests[0].dwError);
75+
func = Ansi
76+
? "EnumSystemCodePagesA"
77+
: "EnumSystemCodePagesW";
78+
ret = Ansi
79+
? EnumSystemCodePagesA(EnumCodePagesProcA, Tests[i].dwFlags)
80+
: EnumSystemCodePagesW(EnumCodePagesProcW, Tests[i].dwFlags);
81+
if (ret) trace("%s enumerated %u entries\n", func, cntLast);
82+
ok(Tests[i].bReturn == ret, "%s unexpected return: %u, expected %u\n", func, ret, Tests[i].bReturn);
83+
ok(Tests[i].dwError == GetLastError(), "%s unexpected error: %u, expected %u\n", func, GetLastError(), Tests[i].dwError);
84+
85+
if (Tests[i].dwFlags == CP_INSTALLED)
86+
{
87+
cntInstalled = cntLast;
88+
ok(cntInstalled > 0, "No installed codepages enumerated\n");
89+
}
90+
else if (Tests[i].dwFlags == CP_SUPPORTED)
91+
{
92+
cntSupported = cntLast;
93+
ok(cntSupported > 0, "No supported codepages enumerated\n");
94+
}
95+
else if (Tests[i].dwFlags == 0)
96+
ok(cntLast == cntSupported, "Number of codepages expected: %u, got %u\n", cntSupported, cntLast);
97+
}
98+
}
99+
100+
START_TEST(EnumSystemCodePages)
101+
{
102+
RunEnumTests(FALSE);
103+
RunEnumTests(TRUE);
104+
}

‎modules/rostests/apitests/kernel32/testlist.c‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ extern void func_CreateProcess(void);
88
extern void func_DefaultActCtx(void);
99
extern void func_DeviceIoControl(void);
1010
extern void func_dosdev(void);
11+
extern void func_EnumSystemCodePages(void);
1112
extern void func_FindActCtxSectionStringW(void);
1213
extern void func_FindFiles(void);
1314
extern void func_FLS(void);
@@ -53,6 +54,7 @@ const struct test winetest_testlist[] =
5354
{ "DefaultActCtx", func_DefaultActCtx },
5455
{ "DeviceIoControl", func_DeviceIoControl },
5556
{ "dosdev", func_dosdev },
57+
{ "EnumSystemCodePages", func_EnumSystemCodePages },
5658
{ "FindActCtxSectionStringW", func_FindActCtxSectionStringW },
5759
{ "FindFiles", func_FindFiles },
5860
{ "FLS", func_FLS },

0 commit comments

Comments
 (0)