mirror of
https://github.com/reactos/reactos.git
synced 2025-07-24 15:13:36 +00:00
[KERNEL32_APITEST]
- Add some tests for GetCurrentDirectory and SetCurrentDirectory svn path=/trunk/; revision=56489
This commit is contained in:
parent
494445d381
commit
1cb2379b98
4 changed files with 334 additions and 1 deletions
|
@ -2,7 +2,9 @@
|
|||
add_definitions(-D_DLL -D__USE_CRTIMP)
|
||||
|
||||
list(APPEND SOURCE
|
||||
GetCurrentDirectory.c
|
||||
GetDriveType.c
|
||||
SetCurrentDirectory.c
|
||||
testlist.c)
|
||||
|
||||
add_executable(kernel32_apitest ${SOURCE})
|
||||
|
|
218
rostests/apitests/kernel32/GetCurrentDirectory.c
Normal file
218
rostests/apitests/kernel32/GetCurrentDirectory.c
Normal file
|
@ -0,0 +1,218 @@
|
|||
/*
|
||||
* PROJECT: ReactOS api tests
|
||||
* LICENSE: GPLv2+ - See COPYING in the top level directory
|
||||
* PURPOSE: Test for GetCurrentDirectory
|
||||
* PROGRAMMER: Thomas Faber <thfabba@gmx.de>
|
||||
*/
|
||||
|
||||
#define WIN32_NO_STATUS
|
||||
#include <stdio.h>
|
||||
#include <wine/test.h>
|
||||
#include <ndk/rtltypes.h>
|
||||
|
||||
static
|
||||
BOOLEAN
|
||||
CheckBuffer(
|
||||
const VOID *Buffer,
|
||||
SIZE_T Size,
|
||||
UCHAR Value)
|
||||
{
|
||||
const UCHAR *Array = Buffer;
|
||||
SIZE_T i;
|
||||
|
||||
for (i = 0; i < Size; i++)
|
||||
if (Array[i] != Value)
|
||||
{
|
||||
trace("Expected %x, found %x at offset %lu\n", Value, Array[i], (ULONG)i);
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static
|
||||
BOOLEAN
|
||||
CheckStringBufferA(
|
||||
const VOID *Buffer,
|
||||
SIZE_T Size,
|
||||
PCSTR Expected,
|
||||
UCHAR Fill)
|
||||
{
|
||||
const CHAR *Chars = Buffer;
|
||||
const UCHAR *UChars = Buffer;
|
||||
SIZE_T Length = strlen(Expected);
|
||||
SIZE_T i;
|
||||
|
||||
if (Size < Length)
|
||||
{
|
||||
ok(0, "Size = %lu, Length = %lu\n", (ULONG)Size, (ULONG)Length);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
for (i = 0; i < Length; i++)
|
||||
if (Chars[i] != Expected[i])
|
||||
{
|
||||
trace("Expected %x, found %x at offset %lu\n", Expected[i], Chars[i], (ULONG)i);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
ok(Chars[i] == 0, "Expected null terminator, found %x at offset %lu\n", Chars[i], (ULONG)i);
|
||||
i++;
|
||||
|
||||
for (; i < Size; i++)
|
||||
if (UChars[i] != Fill)
|
||||
{
|
||||
trace("Expected %x, found %x at offset %lu\n", Fill, UChars[i], (ULONG)i);
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static
|
||||
BOOLEAN
|
||||
CheckStringBufferW(
|
||||
const VOID *Buffer,
|
||||
SIZE_T Size,
|
||||
PCWSTR Expected,
|
||||
UCHAR Fill)
|
||||
{
|
||||
const WCHAR *Chars = Buffer;
|
||||
const UCHAR *UChars = Buffer;
|
||||
SIZE_T Length = wcslen(Expected);
|
||||
SIZE_T i;
|
||||
|
||||
if (Size < Length)
|
||||
{
|
||||
ok(0, "Size = %lu, Length = %lu\n", (ULONG)Size, (ULONG)Length);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
for (i = 0; i < Length; i++)
|
||||
if (Chars[i] != Expected[i])
|
||||
{
|
||||
trace("Expected %x, found %x at offset %lu\n", Expected[i], Chars[i], (ULONG)i);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
ok(Chars[i] == 0, "Expected null terminator, found %x at offset %lu\n", Chars[i], (ULONG)i);
|
||||
i++;
|
||||
|
||||
i *= sizeof(WCHAR);
|
||||
|
||||
for (; i < Size; i++)
|
||||
if (UChars[i] != Fill)
|
||||
{
|
||||
trace("Expected %x, found %x at offset %lu\n", Fill, UChars[i], (ULONG)i);
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static
|
||||
VOID
|
||||
TestGetCurrentDirectoryA(VOID)
|
||||
{
|
||||
CHAR Buffer[MAX_PATH];
|
||||
DWORD Length;
|
||||
BOOL Ret;
|
||||
BOOLEAN Okay;
|
||||
|
||||
Ret = SetCurrentDirectoryA("C:\\");
|
||||
ok(Ret == TRUE, "SetCurrentDirectory failed with %lu\n", GetLastError());
|
||||
|
||||
Length = GetCurrentDirectoryA(0, NULL);
|
||||
ok(Length == sizeof("C:\\"), "Length = %lu\n", Length);
|
||||
|
||||
RtlFillMemory(Buffer, sizeof(Buffer), 0x55);
|
||||
Length = GetCurrentDirectoryA(sizeof(Buffer), Buffer);
|
||||
ok(Length == sizeof("C:\\") - 1, "Length = %lu\n", Length);
|
||||
Okay = CheckStringBufferA(Buffer, sizeof(Buffer), "C:\\", 0x55);
|
||||
ok(Okay, "CheckStringBufferA failed\n");
|
||||
|
||||
RtlFillMemory(Buffer, sizeof(Buffer), 0x55);
|
||||
Length = GetCurrentDirectoryA(0, Buffer);
|
||||
ok(Length == sizeof("C:\\"), "Length = %lu\n", Length);
|
||||
Okay = CheckBuffer(Buffer, sizeof(Buffer), 0x55);
|
||||
ok(Okay, "CheckBuffer failed\n");
|
||||
|
||||
RtlFillMemory(Buffer, sizeof(Buffer), 0x55);
|
||||
Length = GetCurrentDirectoryA(1, Buffer);
|
||||
ok(Length == sizeof("C:\\"), "Length = %lu\n", Length);
|
||||
Okay = CheckBuffer(Buffer, sizeof(Buffer), 0x55);
|
||||
ok(Okay, "CheckBuffer failed\n");
|
||||
|
||||
RtlFillMemory(Buffer, sizeof(Buffer), 0x55);
|
||||
Length = GetCurrentDirectoryA(2, Buffer);
|
||||
ok(Length == sizeof("C:\\"), "Length = %lu\n", Length);
|
||||
Okay = CheckBuffer(Buffer, sizeof(Buffer), 0x55);
|
||||
ok(Okay, "CheckBuffer failed\n");
|
||||
|
||||
RtlFillMemory(Buffer, sizeof(Buffer), 0x55);
|
||||
Length = GetCurrentDirectoryA(3, Buffer);
|
||||
ok(Length == sizeof("C:\\"), "Length = %lu\n", Length);
|
||||
Okay = CheckBuffer(Buffer, sizeof(Buffer), 0x55);
|
||||
ok(Okay, "CheckBuffer failed\n");
|
||||
|
||||
RtlFillMemory(Buffer, sizeof(Buffer), 0x55);
|
||||
Length = GetCurrentDirectoryA(4, Buffer);
|
||||
ok(Length == sizeof("C:\\") - 1, "Length = %lu\n", Length);
|
||||
Okay = CheckStringBufferA(Buffer, sizeof(Buffer), "C:\\", 0x55);
|
||||
ok(Okay, "CheckStringBufferA failed\n");
|
||||
}
|
||||
|
||||
static
|
||||
VOID
|
||||
TestGetCurrentDirectoryW(VOID)
|
||||
{
|
||||
WCHAR Buffer[MAX_PATH];
|
||||
DWORD Length;
|
||||
BOOL Ret;
|
||||
BOOLEAN Okay;
|
||||
|
||||
Ret = SetCurrentDirectoryW(L"C:\\");
|
||||
ok(Ret == TRUE, "SetCurrentDirectory failed with %lu\n", GetLastError());
|
||||
|
||||
Length = GetCurrentDirectoryW(0, NULL);
|
||||
ok(Length == sizeof("C:\\"), "Length = %lu\n", Length);
|
||||
|
||||
RtlFillMemory(Buffer, sizeof(Buffer), 0x55);
|
||||
Length = GetCurrentDirectoryW(sizeof(Buffer) / sizeof(WCHAR), Buffer);
|
||||
ok(Length == sizeof("C:\\") - 1, "Length = %lu\n", Length);
|
||||
Okay = CheckStringBufferW(Buffer, sizeof(Buffer), L"C:\\", 0x55);
|
||||
ok(Okay, "CheckStringBufferW failed\n");
|
||||
|
||||
RtlFillMemory(Buffer, sizeof(Buffer), 0x55);
|
||||
Length = GetCurrentDirectoryW(0, Buffer);
|
||||
ok(Length == sizeof("C:\\"), "Length = %lu\n", Length);
|
||||
Okay = CheckBuffer(Buffer, sizeof(Buffer), 0x55);
|
||||
ok(Okay, "CheckBuffer failed\n");
|
||||
|
||||
RtlFillMemory(Buffer, sizeof(Buffer), 0x55);
|
||||
Length = GetCurrentDirectoryW(1, Buffer);
|
||||
ok(Length == sizeof("C:\\"), "Length = %lu\n", Length);
|
||||
Okay = CheckBuffer(Buffer, sizeof(Buffer), 0x55);
|
||||
ok(Okay, "CheckBuffer failed\n");
|
||||
|
||||
RtlFillMemory(Buffer, sizeof(Buffer), 0x55);
|
||||
Length = GetCurrentDirectoryW(2, Buffer);
|
||||
ok(Length == sizeof("C:\\"), "Length = %lu\n", Length);
|
||||
Okay = CheckBuffer(Buffer, sizeof(Buffer), 0x55);
|
||||
ok(Okay, "CheckBuffer failed\n");
|
||||
|
||||
RtlFillMemory(Buffer, sizeof(Buffer), 0x55);
|
||||
Length = GetCurrentDirectoryW(3, Buffer);
|
||||
ok(Length == sizeof("C:\\"), "Length = %lu\n", Length);
|
||||
Okay = CheckBuffer(Buffer, sizeof(Buffer), 0x55);
|
||||
ok(Okay, "CheckBuffer failed\n");
|
||||
|
||||
RtlFillMemory(Buffer, sizeof(Buffer), 0x55);
|
||||
Length = GetCurrentDirectoryW(4, Buffer);
|
||||
ok(Length == sizeof("C:\\") - 1, "Length = %lu\n", Length);
|
||||
Okay = CheckStringBufferW(Buffer, sizeof(Buffer), L"C:\\", 0x55);
|
||||
ok(Okay, "CheckStringBufferW failed\n");
|
||||
}
|
||||
|
||||
START_TEST(GetCurrentDirectory)
|
||||
{
|
||||
TestGetCurrentDirectoryA();
|
||||
TestGetCurrentDirectoryW();
|
||||
}
|
109
rostests/apitests/kernel32/SetCurrentDirectory.c
Normal file
109
rostests/apitests/kernel32/SetCurrentDirectory.c
Normal file
|
@ -0,0 +1,109 @@
|
|||
/*
|
||||
* PROJECT: ReactOS api tests
|
||||
* LICENSE: GPLv2+ - See COPYING in the top level directory
|
||||
* PURPOSE: Test for SetCurrentDirectory
|
||||
* PROGRAMMER: Thomas Faber <thfabba@gmx.de>
|
||||
*/
|
||||
|
||||
#define WIN32_NO_STATUS
|
||||
#include <stdio.h>
|
||||
#include <wine/test.h>
|
||||
#include <ndk/rtltypes.h>
|
||||
|
||||
static
|
||||
VOID
|
||||
SetUnrelatedDirectory(VOID)
|
||||
{
|
||||
WCHAR Buffer[MAX_PATH];
|
||||
BOOL Ret;
|
||||
|
||||
GetWindowsDirectoryW(Buffer, sizeof(Buffer) / sizeof(WCHAR));
|
||||
Ret = SetCurrentDirectoryW(Buffer);
|
||||
ok(Ret == TRUE, "SetCurrentDirectoryW failed\n");
|
||||
}
|
||||
|
||||
static
|
||||
VOID
|
||||
TestSetCurrentDirectoryA(VOID)
|
||||
{
|
||||
BOOL Ret;
|
||||
CHAR Buffer[MAX_PATH];
|
||||
DWORD Length;
|
||||
|
||||
SetUnrelatedDirectory();
|
||||
|
||||
Ret = SetCurrentDirectoryA("C:\\");
|
||||
ok(Ret == TRUE, "SetCurrentDirectoryA failed\n");
|
||||
Length = GetCurrentDirectoryA(sizeof(Buffer), Buffer);
|
||||
ok(Length == 3, "Length = %lu\n", Length);
|
||||
ok(!strcmp(Buffer, "C:\\"), "Current directory is %s\n", Buffer);
|
||||
|
||||
/* Same directory - succeeds */
|
||||
Ret = SetCurrentDirectoryA("C:\\");
|
||||
ok(Ret == TRUE, "SetCurrentDirectoryA failed\n");
|
||||
Length = GetCurrentDirectoryA(sizeof(Buffer), Buffer);
|
||||
ok(Length == 3, "Length = %lu\n", Length);
|
||||
ok(!strcmp(Buffer, "C:\\"), "Current directory is %s\n", Buffer);
|
||||
|
||||
/* Same directory, lowercase - succeeds and does not change case */
|
||||
Ret = SetCurrentDirectoryA("c:\\");
|
||||
ok(Ret == TRUE, "SetCurrentDirectoryA failed\n");
|
||||
Length = GetCurrentDirectoryA(sizeof(Buffer), Buffer);
|
||||
ok(Length == 3, "Length = %lu\n", Length);
|
||||
ok(!strcmp(Buffer, "C:\\"), "Current directory is %s\n", Buffer);
|
||||
|
||||
SetUnrelatedDirectory();
|
||||
|
||||
/* Now this one does change case */
|
||||
Ret = SetCurrentDirectoryA("c:\\");
|
||||
ok(Ret == TRUE, "SetCurrentDirectoryA failed\n");
|
||||
Length = GetCurrentDirectoryA(sizeof(Buffer), Buffer);
|
||||
ok(Length == 3, "Length = %lu\n", Length);
|
||||
ok(!strcmp(Buffer, "c:\\"), "Current directory is %s\n", Buffer);
|
||||
}
|
||||
|
||||
static
|
||||
VOID
|
||||
TestSetCurrentDirectoryW(VOID)
|
||||
{
|
||||
BOOL Ret;
|
||||
WCHAR Buffer[MAX_PATH];
|
||||
DWORD Length;
|
||||
|
||||
SetUnrelatedDirectory();
|
||||
|
||||
Ret = SetCurrentDirectoryW(L"C:\\");
|
||||
ok(Ret == TRUE, "SetCurrentDirectoryW failed\n");
|
||||
Length = GetCurrentDirectoryW(sizeof(Buffer) / sizeof(WCHAR), Buffer);
|
||||
ok(Length == 3, "Length = %lu\n", Length);
|
||||
ok(!wcscmp(Buffer, L"C:\\"), "Current directory is %ls\n", Buffer);
|
||||
|
||||
/* Same directory - succeeds */
|
||||
Ret = SetCurrentDirectoryW(L"C:\\");
|
||||
ok(Ret == TRUE, "SetCurrentDirectoryW failed\n");
|
||||
Length = GetCurrentDirectoryW(sizeof(Buffer) / sizeof(WCHAR), Buffer);
|
||||
ok(Length == 3, "Length = %lu\n", Length);
|
||||
ok(!wcscmp(Buffer, L"C:\\"), "Current directory is %ls\n", Buffer);
|
||||
|
||||
/* Same directory, lowercase - succeeds and does not change case */
|
||||
Ret = SetCurrentDirectoryW(L"c:\\");
|
||||
ok(Ret == TRUE, "SetCurrentDirectoryW failed\n");
|
||||
Length = GetCurrentDirectoryW(sizeof(Buffer) / sizeof(WCHAR), Buffer);
|
||||
ok(Length == 3, "Length = %lu\n", Length);
|
||||
ok(!wcscmp(Buffer, L"C:\\"), "Current directory is %ls\n", Buffer);
|
||||
|
||||
SetUnrelatedDirectory();
|
||||
|
||||
/* Now this one does change case */
|
||||
Ret = SetCurrentDirectoryW(L"c:\\");
|
||||
ok(Ret == TRUE, "SetCurrentDirectoryW failed\n");
|
||||
Length = GetCurrentDirectoryW(sizeof(Buffer) / sizeof(WCHAR), Buffer);
|
||||
ok(Length == 3, "Length = %lu\n", Length);
|
||||
ok(!wcscmp(Buffer, L"c:\\"), "Current directory is %ls\n", Buffer);
|
||||
}
|
||||
|
||||
START_TEST(SetCurrentDirectory)
|
||||
{
|
||||
TestSetCurrentDirectoryA();
|
||||
TestSetCurrentDirectoryW();
|
||||
}
|
|
@ -5,11 +5,15 @@
|
|||
#define STANDALONE
|
||||
#include "wine/test.h"
|
||||
|
||||
extern void func_GetCurrentDirectory(void);
|
||||
extern void func_GetDriveType(void);
|
||||
extern void func_SetCurrentDirectory(void);
|
||||
|
||||
const struct test winetest_testlist[] =
|
||||
{
|
||||
{ "GetDriveType", func_GetDriveType },
|
||||
{ "GetCurrentDirectory", func_GetCurrentDirectory },
|
||||
{ "GetDriveType", func_GetDriveType },
|
||||
{ "SetCurrentDirectory", func_SetCurrentDirectory },
|
||||
|
||||
{ 0, 0 }
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue