Skip to content

Commit c108de8

Browse files
committed
[CRT_APITEST] Implement tests for _strlwr, _strupr, _wcslwr, _wcsupr
1 parent abfaf2e commit c108de8

File tree

8 files changed

+196
-0
lines changed

8 files changed

+196
-0
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
* PROJECT: ReactOS API tests
3+
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
4+
* PURPOSE: Tests for _strlwr
5+
* COPYRIGHT: Copyright 2025 Timo Kreuzer ([email protected])
6+
*/
7+
8+
#define WIN32_NO_STATUS
9+
#include <apitest.h>
10+
#include <pseh/pseh2.h>
11+
#include <ndk/umtypes.h>
12+
13+
typedef char* (__cdecl *PFN_strlwr)(char* _String);
14+
static PFN_strlwr p_strlwr;
15+
16+
static BOOL Init(void)
17+
{
18+
HMODULE hdll = LoadLibraryA(TEST_DLL_NAME);
19+
p_strlwr = (PFN_strlwr)GetProcAddress(hdll, "_strlwr");
20+
ok(p_strlwr != NULL, "Failed to load _strlwr from %s\n", TEST_DLL_NAME);
21+
return (p_strlwr != NULL);
22+
}
23+
24+
START_TEST(_strlwr)
25+
{
26+
char *result;
27+
28+
#ifndef TEST_STATIC_CRT
29+
if (!Init())
30+
{
31+
skip("Skipping tests, because _strlwr is not available\n");
32+
return;
33+
}
34+
#endif
35+
36+
// The NT version of _strlwr does not have a NULL check
37+
StartSeh()
38+
result = p_strlwr(NULL);
39+
ok_ptr(result, NULL);
40+
#ifdef TEST_NTDLL
41+
EndSeh(STATUS_ACCESS_VIOLATION);
42+
#else
43+
EndSeh((is_reactos() || GetNTVersion() >= _WIN32_WINNT_VISTA) ? STATUS_SUCCESS : STATUS_ACCESS_VIOLATION);
44+
#endif
45+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/*
2+
* PROJECT: ReactOS API tests
3+
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
4+
* PURPOSE: Tests for _strupr
5+
* COPYRIGHT: Copyright 2025 Timo Kreuzer ([email protected])
6+
*/
7+
8+
#define WIN32_NO_STATUS
9+
#include <apitest.h>
10+
#include <pseh/pseh2.h>
11+
#include <ndk/umtypes.h>
12+
13+
typedef char* (__cdecl *PFN_strupr)(char* _String);
14+
static PFN_strupr p_strupr;
15+
16+
static BOOL Init(void)
17+
{
18+
HMODULE hdll = LoadLibraryA(TEST_DLL_NAME);
19+
p_strupr = (PFN_strupr)GetProcAddress(hdll, "_strupr");
20+
ok(p_strupr != NULL, "Failed to load _strupr from %s\n", TEST_DLL_NAME);
21+
return (p_strupr != NULL);
22+
}
23+
24+
START_TEST(_strupr)
25+
{
26+
char *result;
27+
28+
#ifndef TEST_STATIC_CRT
29+
if (!Init())
30+
{
31+
skip("Skipping tests, because _strupr is not available\n");
32+
return;
33+
}
34+
#endif
35+
36+
// The NT version of _strupr has a NULL check (as opposed to _strlwr)
37+
StartSeh()
38+
result = p_strupr(NULL);
39+
ok_ptr(result, NULL);
40+
EndSeh((is_reactos() || GetNTVersion() >= _WIN32_WINNT_VISTA) ? STATUS_SUCCESS : STATUS_ACCESS_VIOLATION);
41+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/*
2+
* PROJECT: ReactOS API tests
3+
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
4+
* PURPOSE: Tests for _wcslwr
5+
* COPYRIGHT: Copyright 2025 Timo Kreuzer ([email protected])
6+
*/
7+
8+
#define WIN32_NO_STATUS
9+
#include <apitest.h>
10+
#include <pseh/pseh2.h>
11+
#include <ndk/umtypes.h>
12+
13+
typedef wchar_t* (__cdecl *PFN_wcslwr)(wchar_t* _String);
14+
static PFN_wcslwr p_wcslwr;
15+
16+
static BOOL Init(void)
17+
{
18+
HMODULE hdll = LoadLibraryA(TEST_DLL_NAME);
19+
p_wcslwr = (PFN_wcslwr)GetProcAddress(hdll, "_wcslwr");
20+
ok(p_wcslwr != NULL, "Failed to load _wcslwr from %s\n", TEST_DLL_NAME);
21+
return (p_wcslwr != NULL);
22+
}
23+
24+
START_TEST(_wcslwr)
25+
{
26+
wchar_t *result;
27+
28+
#ifndef TEST_STATIC_CRT
29+
if (!Init())
30+
{
31+
skip("Skipping tests, because _wcslwr is not available\n");
32+
return;
33+
}
34+
#endif
35+
36+
// The NT version of _wcslwr has a NULL check (as opposed to _wcsupr)
37+
StartSeh()
38+
result = p_wcslwr(NULL);
39+
ok_ptr(result, NULL);
40+
EndSeh((is_reactos() || GetNTVersion() >= _WIN32_WINNT_VISTA) ? STATUS_SUCCESS : STATUS_ACCESS_VIOLATION);
41+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
* PROJECT: ReactOS API tests
3+
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
4+
* PURPOSE: Tests for _wcsupr
5+
* COPYRIGHT: Copyright 2025 Timo Kreuzer ([email protected])
6+
*/
7+
8+
#define WIN32_NO_STATUS
9+
#include <apitest.h>
10+
#include <pseh/pseh2.h>
11+
#include <ndk/umtypes.h>
12+
13+
typedef wchar_t* (__cdecl *PFN_wcsupr)(wchar_t* _String);
14+
static PFN_wcsupr p_wcsupr;
15+
16+
static BOOL Init(void)
17+
{
18+
HMODULE hdll = LoadLibraryA(TEST_DLL_NAME);
19+
p_wcsupr = (PFN_wcsupr)GetProcAddress(hdll, "_wcsupr");
20+
ok(p_wcsupr != NULL, "Failed to load _wcsupr from %s\n", TEST_DLL_NAME);
21+
return (p_wcsupr != NULL);
22+
}
23+
24+
START_TEST(_wcsupr)
25+
{
26+
wchar_t *result;
27+
28+
#ifndef TEST_STATIC_CRT
29+
if (!Init())
30+
{
31+
skip("Skipping tests, because _wcsupr is not available\n");
32+
return;
33+
}
34+
#endif
35+
36+
// The NT version of _wcsupr does not have a NULL check
37+
StartSeh()
38+
result = p_wcsupr(NULL);
39+
ok_ptr(result, NULL);
40+
#ifdef TEST_NTDLL
41+
EndSeh(STATUS_ACCESS_VIOLATION);
42+
#else
43+
EndSeh((is_reactos() || GetNTVersion() >= _WIN32_WINNT_VISTA) ? STATUS_SUCCESS : STATUS_ACCESS_VIOLATION);
44+
#endif
45+
}

modules/rostests/apitests/msvcrt/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,17 @@ list(APPEND SOURCE_CRT_TESTS
1717
../crt/_snprintf.c
1818
../crt/_snwprintf.c
1919
../crt/_stricmp.c
20+
../crt/_strlwr.c
2021
../crt/_strnicmp.c
22+
../crt/_strupr.c
2123
../crt/_vscprintf.c
2224
../crt/_vscwprintf.c
2325
../crt/_vsnprintf.c
2426
../crt/_vsnwprintf.c
2527
../crt/_wcsicmp.c
28+
../crt/_wcslwr.c
2629
../crt/_wcsnicmp.c
30+
../crt/_wcsupr.c
2731
../crt/_wsystem.c
2832
../crt/acos.c
2933
../crt/asin.c

modules/rostests/apitests/msvcrt/testlist.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,17 @@ extern void func__mbsstr(void);
1111
extern void func__snprintf(void);
1212
extern void func__snwprintf(void);
1313
extern void func__stricmp(void);
14+
extern void func__strlwr(void);
1415
extern void func__strnicmp(void);
16+
extern void func__strupr(void);
1517
extern void func__vscprintf(void);
1618
extern void func__vscwprintf(void);
1719
extern void func__vsnprintf(void);
1820
extern void func__vsnwprintf(void);
1921
extern void func__wcsicmp(void);
22+
extern void func__wcslwr(void);
2023
extern void func__wcsnicmp(void);
24+
extern void func__wcsupr(void);
2125
extern void func__wsystem(void);
2226
extern void func_acos(void);
2327
extern void func_asin(void);
@@ -73,13 +77,17 @@ const struct test winetest_testlist[] =
7377
{ "_snprintf", func__snprintf },
7478
{ "_snwprintf", func__snwprintf },
7579
{ "_stricmp", func__stricmp },
80+
{ "_strlwr", func__strlwr },
7681
{ "_strnicmp", func__strnicmp },
82+
{ "_strupr", func__strupr },
7783
{ "_vscprintf", func__vscprintf },
7884
{ "_vscwprintf", func__vscwprintf },
7985
{ "_vsnprintf", func__vsnprintf },
8086
{ "_vsnwprintf", func__vsnwprintf },
8187
{ "_wcsicmp", func__wcsicmp },
88+
{ "_wcslwr", func__wcslwr },
8289
{ "_wcsnicmp", func__wcsnicmp },
90+
{ "_wcsupr", func__wcsupr },
8391
{ "_wsystem", func__wsystem },
8492
{ "acos", func_acos },
8593
{ "asin", func_asin },

modules/rostests/apitests/ntdll/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,16 @@ list(APPEND SOURCE_CRT_TESTS
1111
../crt/_snprintf.c
1212
../crt/_snwprintf.c
1313
../crt/_stricmp.c
14+
../crt/_strlwr.c
1415
../crt/_strnicmp.c
16+
../crt/_strupr.c
1517
../crt/_vscwprintf.c
1618
../crt/_vsnprintf.c
1719
../crt/_vsnwprintf.c
1820
../crt/_wcsicmp.c
21+
../crt/_wcslwr.c
1922
../crt/_wcsnicmp.c
23+
../crt/_wcsupr.c
2024
../crt/mbstowcs.c
2125
../crt/setjmp.c
2226
../crt/sprintf.c

modules/rostests/apitests/ntdll/testlist.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,16 @@
55
extern void func__snprintf(void);
66
extern void func__snwprintf(void);
77
extern void func__stricmp(void);
8+
extern void func__strlwr(void);
89
extern void func__strnicmp(void);
10+
extern void func__strupr(void);
911
extern void func__vscwprintf(void);
1012
extern void func__vsnprintf(void);
1113
extern void func__vsnwprintf(void);
1214
extern void func__wcsicmp(void);
15+
extern void func__wcslwr(void);
1316
extern void func__wcsnicmp(void);
17+
extern void func__wcsupr(void);
1418
extern void func_mbstowcs(void);
1519
extern void func_setjmp(void);
1620
extern void func_sprintf(void);
@@ -134,12 +138,16 @@ const struct test winetest_testlist[] =
134138
{ "_snprintf", func__snprintf },
135139
{ "_snwprintf", func__snwprintf },
136140
{ "_stricmp", func__stricmp },
141+
{ "_strlwr", func__strlwr },
137142
{ "_strnicmp", func__strnicmp },
143+
{ "_strupr", func__strupr },
138144
{ "_vscwprintf", func__vscwprintf },
139145
{ "_vsnprintf", func__vsnprintf },
140146
{ "_vsnwprintf", func__vsnwprintf },
141147
{ "_wcsicmp", func__wcsicmp },
148+
{ "_wcslwr", func__wcslwr },
142149
{ "_wcsnicmp", func__wcsnicmp },
150+
{ "_wcsupr", func__wcsupr },
143151
{ "mbstowcs", func_mbstowcs },
144152
{ "setjmp", func_setjmp },
145153
{ "sprintf", func_sprintf },

0 commit comments

Comments
 (0)