[CRT_APITEST] Implement tests for _strlwr, _strupr, _wcslwr, _wcsupr

This commit is contained in:
Timo Kreuzer
2025-12-10 09:55:30 +02:00
parent abfaf2e75f
commit c108de8094
8 changed files with 196 additions and 0 deletions
+45
View File
@@ -0,0 +1,45 @@
/*
* PROJECT: ReactOS API tests
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
* PURPOSE: Tests for _strlwr
* COPYRIGHT: Copyright 2025 Timo Kreuzer ([email protected])
*/
#define WIN32_NO_STATUS
#include <apitest.h>
#include <pseh/pseh2.h>
#include <ndk/umtypes.h>
typedef char* (__cdecl *PFN_strlwr)(char* _String);
static PFN_strlwr p_strlwr;
static BOOL Init(void)
{
HMODULE hdll = LoadLibraryA(TEST_DLL_NAME);
p_strlwr = (PFN_strlwr)GetProcAddress(hdll, "_strlwr");
ok(p_strlwr != NULL, "Failed to load _strlwr from %s\n", TEST_DLL_NAME);
return (p_strlwr != NULL);
}
START_TEST(_strlwr)
{
char *result;
#ifndef TEST_STATIC_CRT
if (!Init())
{
skip("Skipping tests, because _strlwr is not available\n");
return;
}
#endif
// The NT version of _strlwr does not have a NULL check
StartSeh()
result = p_strlwr(NULL);
ok_ptr(result, NULL);
#ifdef TEST_NTDLL
EndSeh(STATUS_ACCESS_VIOLATION);
#else
EndSeh((is_reactos() || GetNTVersion() >= _WIN32_WINNT_VISTA) ? STATUS_SUCCESS : STATUS_ACCESS_VIOLATION);
#endif
}
+41
View File
@@ -0,0 +1,41 @@
/*
* PROJECT: ReactOS API tests
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
* PURPOSE: Tests for _strupr
* COPYRIGHT: Copyright 2025 Timo Kreuzer ([email protected])
*/
#define WIN32_NO_STATUS
#include <apitest.h>
#include <pseh/pseh2.h>
#include <ndk/umtypes.h>
typedef char* (__cdecl *PFN_strupr)(char* _String);
static PFN_strupr p_strupr;
static BOOL Init(void)
{
HMODULE hdll = LoadLibraryA(TEST_DLL_NAME);
p_strupr = (PFN_strupr)GetProcAddress(hdll, "_strupr");
ok(p_strupr != NULL, "Failed to load _strupr from %s\n", TEST_DLL_NAME);
return (p_strupr != NULL);
}
START_TEST(_strupr)
{
char *result;
#ifndef TEST_STATIC_CRT
if (!Init())
{
skip("Skipping tests, because _strupr is not available\n");
return;
}
#endif
// The NT version of _strupr has a NULL check (as opposed to _strlwr)
StartSeh()
result = p_strupr(NULL);
ok_ptr(result, NULL);
EndSeh((is_reactos() || GetNTVersion() >= _WIN32_WINNT_VISTA) ? STATUS_SUCCESS : STATUS_ACCESS_VIOLATION);
}
+41
View File
@@ -0,0 +1,41 @@
/*
* PROJECT: ReactOS API tests
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
* PURPOSE: Tests for _wcslwr
* COPYRIGHT: Copyright 2025 Timo Kreuzer ([email protected])
*/
#define WIN32_NO_STATUS
#include <apitest.h>
#include <pseh/pseh2.h>
#include <ndk/umtypes.h>
typedef wchar_t* (__cdecl *PFN_wcslwr)(wchar_t* _String);
static PFN_wcslwr p_wcslwr;
static BOOL Init(void)
{
HMODULE hdll = LoadLibraryA(TEST_DLL_NAME);
p_wcslwr = (PFN_wcslwr)GetProcAddress(hdll, "_wcslwr");
ok(p_wcslwr != NULL, "Failed to load _wcslwr from %s\n", TEST_DLL_NAME);
return (p_wcslwr != NULL);
}
START_TEST(_wcslwr)
{
wchar_t *result;
#ifndef TEST_STATIC_CRT
if (!Init())
{
skip("Skipping tests, because _wcslwr is not available\n");
return;
}
#endif
// The NT version of _wcslwr has a NULL check (as opposed to _wcsupr)
StartSeh()
result = p_wcslwr(NULL);
ok_ptr(result, NULL);
EndSeh((is_reactos() || GetNTVersion() >= _WIN32_WINNT_VISTA) ? STATUS_SUCCESS : STATUS_ACCESS_VIOLATION);
}
+45
View File
@@ -0,0 +1,45 @@
/*
* PROJECT: ReactOS API tests
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
* PURPOSE: Tests for _wcsupr
* COPYRIGHT: Copyright 2025 Timo Kreuzer ([email protected])
*/
#define WIN32_NO_STATUS
#include <apitest.h>
#include <pseh/pseh2.h>
#include <ndk/umtypes.h>
typedef wchar_t* (__cdecl *PFN_wcsupr)(wchar_t* _String);
static PFN_wcsupr p_wcsupr;
static BOOL Init(void)
{
HMODULE hdll = LoadLibraryA(TEST_DLL_NAME);
p_wcsupr = (PFN_wcsupr)GetProcAddress(hdll, "_wcsupr");
ok(p_wcsupr != NULL, "Failed to load _wcsupr from %s\n", TEST_DLL_NAME);
return (p_wcsupr != NULL);
}
START_TEST(_wcsupr)
{
wchar_t *result;
#ifndef TEST_STATIC_CRT
if (!Init())
{
skip("Skipping tests, because _wcsupr is not available\n");
return;
}
#endif
// The NT version of _wcsupr does not have a NULL check
StartSeh()
result = p_wcsupr(NULL);
ok_ptr(result, NULL);
#ifdef TEST_NTDLL
EndSeh(STATUS_ACCESS_VIOLATION);
#else
EndSeh((is_reactos() || GetNTVersion() >= _WIN32_WINNT_VISTA) ? STATUS_SUCCESS : STATUS_ACCESS_VIOLATION);
#endif
}
@@ -17,13 +17,17 @@ list(APPEND SOURCE_CRT_TESTS
../crt/_snprintf.c
../crt/_snwprintf.c
../crt/_stricmp.c
../crt/_strlwr.c
../crt/_strnicmp.c
../crt/_strupr.c
../crt/_vscprintf.c
../crt/_vscwprintf.c
../crt/_vsnprintf.c
../crt/_vsnwprintf.c
../crt/_wcsicmp.c
../crt/_wcslwr.c
../crt/_wcsnicmp.c
../crt/_wcsupr.c
../crt/_wsystem.c
../crt/acos.c
../crt/asin.c
@@ -11,13 +11,17 @@ extern void func__mbsstr(void);
extern void func__snprintf(void);
extern void func__snwprintf(void);
extern void func__stricmp(void);
extern void func__strlwr(void);
extern void func__strnicmp(void);
extern void func__strupr(void);
extern void func__vscprintf(void);
extern void func__vscwprintf(void);
extern void func__vsnprintf(void);
extern void func__vsnwprintf(void);
extern void func__wcsicmp(void);
extern void func__wcslwr(void);
extern void func__wcsnicmp(void);
extern void func__wcsupr(void);
extern void func__wsystem(void);
extern void func_acos(void);
extern void func_asin(void);
@@ -73,13 +77,17 @@ const struct test winetest_testlist[] =
{ "_snprintf", func__snprintf },
{ "_snwprintf", func__snwprintf },
{ "_stricmp", func__stricmp },
{ "_strlwr", func__strlwr },
{ "_strnicmp", func__strnicmp },
{ "_strupr", func__strupr },
{ "_vscprintf", func__vscprintf },
{ "_vscwprintf", func__vscwprintf },
{ "_vsnprintf", func__vsnprintf },
{ "_vsnwprintf", func__vsnwprintf },
{ "_wcsicmp", func__wcsicmp },
{ "_wcslwr", func__wcslwr },
{ "_wcsnicmp", func__wcsnicmp },
{ "_wcsupr", func__wcsupr },
{ "_wsystem", func__wsystem },
{ "acos", func_acos },
{ "asin", func_asin },
@@ -11,12 +11,16 @@ list(APPEND SOURCE_CRT_TESTS
../crt/_snprintf.c
../crt/_snwprintf.c
../crt/_stricmp.c
../crt/_strlwr.c
../crt/_strnicmp.c
../crt/_strupr.c
../crt/_vscwprintf.c
../crt/_vsnprintf.c
../crt/_vsnwprintf.c
../crt/_wcsicmp.c
../crt/_wcslwr.c
../crt/_wcsnicmp.c
../crt/_wcsupr.c
../crt/mbstowcs.c
../crt/setjmp.c
../crt/sprintf.c
@@ -5,12 +5,16 @@
extern void func__snprintf(void);
extern void func__snwprintf(void);
extern void func__stricmp(void);
extern void func__strlwr(void);
extern void func__strnicmp(void);
extern void func__strupr(void);
extern void func__vscwprintf(void);
extern void func__vsnprintf(void);
extern void func__vsnwprintf(void);
extern void func__wcsicmp(void);
extern void func__wcslwr(void);
extern void func__wcsnicmp(void);
extern void func__wcsupr(void);
extern void func_mbstowcs(void);
extern void func_setjmp(void);
extern void func_sprintf(void);
@@ -134,12 +138,16 @@ const struct test winetest_testlist[] =
{ "_snprintf", func__snprintf },
{ "_snwprintf", func__snwprintf },
{ "_stricmp", func__stricmp },
{ "_strlwr", func__strlwr },
{ "_strnicmp", func__strnicmp },
{ "_strupr", func__strupr },
{ "_vscwprintf", func__vscwprintf },
{ "_vsnprintf", func__vsnprintf },
{ "_vsnwprintf", func__vsnwprintf },
{ "_wcsicmp", func__wcsicmp },
{ "_wcslwr", func__wcslwr },
{ "_wcsnicmp", func__wcsnicmp },
{ "_wcsupr", func__wcsupr },
{ "mbstowcs", func_mbstowcs },
{ "setjmp", func_setjmp },
{ "sprintf", func_sprintf },