Author: tfaber
Date: Wed Apr 25 07:43:33 2012
New Revision: 56411
URL:
http://svn.reactos.org/svn/reactos?rev=56411&view=rev
Log:
[NTDLL_APITEST]
- Add test for RtlGetLongestNtPathLength
- Add test for RtlDetermineDosPathNameType_U (and RtlDetermineDosPathNameType_Ustr, if
address is known)
Added:
trunk/rostests/apitests/ntdll/RtlDetermineDosPathNameType.c (with props)
trunk/rostests/apitests/ntdll/RtlGetLongestNtPathLength.c (with props)
Modified:
trunk/rostests/apitests/ntdll/CMakeLists.txt
trunk/rostests/apitests/ntdll/testlist.c
Modified: trunk/rostests/apitests/ntdll/CMakeLists.txt
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/ntdll/CMakeLists…
==============================================================================
--- trunk/rostests/apitests/ntdll/CMakeLists.txt [iso-8859-1] (original)
+++ trunk/rostests/apitests/ntdll/CMakeLists.txt [iso-8859-1] Wed Apr 25 07:43:33 2012
@@ -2,8 +2,10 @@
list(APPEND SOURCE
NtAllocateVirtualMemory.c
NtFreeVirtualMemory.c
+ RtlDetermineDosPathNameType.c
RtlGetFullPathName_U.c
RtlGetFullPathName_UstrEx.c
+ RtlGetLongestNtPathLength.c
RtlInitializeBitMap.c
SystemInfo.c
ZwContinue.c
Added: trunk/rostests/apitests/ntdll/RtlDetermineDosPathNameType.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/ntdll/RtlDetermi…
==============================================================================
--- trunk/rostests/apitests/ntdll/RtlDetermineDosPathNameType.c (added)
+++ trunk/rostests/apitests/ntdll/RtlDetermineDosPathNameType.c [iso-8859-1] Wed Apr 25
07:43:33 2012
@@ -1,0 +1,203 @@
+/*
+ * PROJECT: ReactOS api tests
+ * LICENSE: GPLv2+ - See COPYING in the top level directory
+ * PURPOSE: Test for
RtlDetermineDosPathNameType_U/RtlDetermineDosPathNameType_Ustr
+ * PROGRAMMER: Thomas Faber <thfabba(a)gmx.de>
+ */
+
+#define WIN32_NO_STATUS
+#include <wine/test.h>
+#include <pseh/pseh2.h>
+#include <ndk/mmfuncs.h>
+#include <ndk/rtlfuncs.h>
+
+/*
+ULONG
+NTAPI
+RtlDetermineDosPathNameType_U(
+ IN PCWSTR Path
+);
+
+ULONG
+NTAPI
+RtlDetermineDosPathNameType_Ustr(
+ IN PCUNICODE_STRING Path
+);
+*/
+
+static
+ULONG
+(NTAPI
+*RtlDetermineDosPathNameType_Ustr)(
+ IN PCUNICODE_STRING Path
+)
+//= (PVOID)0x7c830669;
+;
+
+static
+PVOID
+AllocateGuarded(
+ SIZE_T SizeRequested)
+{
+ NTSTATUS Status;
+ SIZE_T Size = PAGE_ROUND_UP(SizeRequested + PAGE_SIZE);
+ PVOID VirtualMemory = NULL;
+ PCHAR StartOfBuffer;
+
+ Status = NtAllocateVirtualMemory(NtCurrentProcess(), &VirtualMemory, 0,
&Size, MEM_RESERVE, PAGE_NOACCESS);
+
+ if (!NT_SUCCESS(Status))
+ return NULL;
+
+ Size -= PAGE_SIZE;
+ if (Size)
+ {
+ Status = NtAllocateVirtualMemory(NtCurrentProcess(), &VirtualMemory, 0,
&Size, MEM_COMMIT, PAGE_READWRITE);
+ if (!NT_SUCCESS(Status))
+ {
+ Size = 0;
+ Status = NtFreeVirtualMemory(NtCurrentProcess(), &VirtualMemory,
&Size, MEM_RELEASE);
+ ok(Status == STATUS_SUCCESS, "Status = %lx\n", Status);
+ return NULL;
+ }
+ }
+
+ StartOfBuffer = VirtualMemory;
+ StartOfBuffer += Size - SizeRequested;
+
+ return StartOfBuffer;
+}
+
+static
+VOID
+FreeGuarded(
+ PVOID Pointer)
+{
+ NTSTATUS Status;
+ PVOID VirtualMemory = (PVOID)PAGE_ROUND_DOWN((SIZE_T)Pointer);
+ SIZE_T Size = 0;
+
+ Status = NtFreeVirtualMemory(NtCurrentProcess(), &VirtualMemory, &Size,
MEM_RELEASE);
+ ok(Status == STATUS_SUCCESS, "Status = %lx\n", Status);
+}
+
+#define StartSeh() ExceptionStatus = STATUS_SUCCESS; _SEH2_TRY {
+#define EndSeh(ExpectedStatus) } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) {
ExceptionStatus = _SEH2_GetExceptionCode(); } _SEH2_END; ok(ExceptionStatus ==
ExpectedStatus, "Exception %lx, expected %lx\n", ExceptionStatus,
ExpectedStatus)
+
+START_TEST(RtlDetermineDosPathNameType)
+{
+ NTSTATUS ExceptionStatus;
+ RTL_PATH_TYPE PathType;
+ struct
+ {
+ PCWSTR FileName;
+ RTL_PATH_TYPE PathType;
+ } Tests[] =
+ {
+ { L"", RtlPathTypeRelative },
+ { L"xyz", RtlPathTypeRelative },
+ { L"CON", RtlPathTypeRelative },
+ { L"NUL", RtlPathTypeRelative },
+ { L":", RtlPathTypeRelative },
+ { L"::", RtlPathTypeDriveRelative },
+ { L":::", RtlPathTypeDriveRelative },
+ { L"::::", RtlPathTypeDriveRelative },
+ { L"\\", RtlPathTypeRooted },
+ { L"\\:", RtlPathTypeRooted },
+ { L"\\C:", RtlPathTypeRooted },
+ { L"\\C:\\", RtlPathTypeRooted },
+ { L"/", RtlPathTypeRooted },
+ { L"/:", RtlPathTypeRooted },
+ { L"/C:", RtlPathTypeRooted },
+ { L"/C:/", RtlPathTypeRooted },
+ { L"C", RtlPathTypeRelative },
+ { L"C:", RtlPathTypeDriveRelative },
+ { L"C:a", RtlPathTypeDriveRelative },
+ { L"C:a\\", RtlPathTypeDriveRelative },
+ { L"C:\\", RtlPathTypeDriveAbsolute },
+ { L"C:/", RtlPathTypeDriveAbsolute },
+ { L"C:\\a", RtlPathTypeDriveAbsolute },
+ { L"C:/a", RtlPathTypeDriveAbsolute },
+ { L"C:\\\\", RtlPathTypeDriveAbsolute },
+ { L"\\\\", RtlPathTypeUncAbsolute },
+ { L"\\\\\\", RtlPathTypeUncAbsolute },
+ { L"\\\\;", RtlPathTypeUncAbsolute },
+ { L"\\??\\", RtlPathTypeRooted },
+ { L"\\??\\UNC", RtlPathTypeRooted },
+ { L"\\??\\UNC\\", RtlPathTypeRooted },
+ { L"\\?", RtlPathTypeRooted },
+ { L"\\?\\", RtlPathTypeRooted },
+ { L"\\?\\UNC", RtlPathTypeRooted },
+ { L"\\?\\UNC\\", RtlPathTypeRooted },
+ { L"\\\\?\\UNC\\", RtlPathTypeLocalDevice },
+ { L"\\\\?", RtlPathTypeRootLocalDevice },
+ { L"\\\\??", RtlPathTypeUncAbsolute },
+ { L"\\\\??\\", RtlPathTypeUncAbsolute },
+ { L"\\\\??\\C:\\", RtlPathTypeUncAbsolute },
+ { L"\\\\.", RtlPathTypeRootLocalDevice },
+ { L"\\\\.\\", RtlPathTypeLocalDevice },
+ { L"\\\\.\\C:\\", RtlPathTypeLocalDevice },
+ { L"\\/", RtlPathTypeUncAbsolute },
+ { L"/\\", RtlPathTypeUncAbsolute },
+ { L"//", RtlPathTypeUncAbsolute },
+ { L"///", RtlPathTypeUncAbsolute },
+ { L"//;", RtlPathTypeUncAbsolute },
+ { L"//?", RtlPathTypeRootLocalDevice },
+ { L"/\\?", RtlPathTypeRootLocalDevice },
+ { L"\\/?", RtlPathTypeRootLocalDevice },
+ { L"//??", RtlPathTypeUncAbsolute },
+ { L"//??/", RtlPathTypeUncAbsolute },
+ { L"//??/C:/", RtlPathTypeUncAbsolute },
+ { L"//.", RtlPathTypeRootLocalDevice },
+ { L"\\/.", RtlPathTypeRootLocalDevice },
+ { L"/\\.", RtlPathTypeRootLocalDevice },
+ { L"//./", RtlPathTypeLocalDevice },
+ { L"//./C:/", RtlPathTypeLocalDevice },
+ };
+ ULONG i;
+ PWSTR FileName;
+ USHORT Length;
+
+ if (!RtlDetermineDosPathNameType_Ustr)
+ skip(0, "RtlDetermineDosPathNameType_Ustr unavailable\n");
+
+ StartSeh() RtlDetermineDosPathNameType_U(NULL); EndSeh(STATUS_ACCESS_VIOLATION);
+
+ if (RtlDetermineDosPathNameType_Ustr)
+ {
+ UNICODE_STRING PathString;
+ StartSeh() RtlDetermineDosPathNameType_Ustr(NULL); EndSeh(STATUS_ACCESS_VIOLATION);
+
+ RtlInitEmptyUnicodeString(&PathString, NULL, MAXUSHORT);
+ PathType = RtlDetermineDosPathNameType_Ustr(&PathString);
+ ok(PathType == RtlPathTypeRelative, "PathType = %d\n", PathType);
+ }
+
+ for (i = 0; i < sizeof(Tests) / sizeof(Tests[0]); i++)
+ {
+ Length = (USHORT)wcslen(Tests[i].FileName) * sizeof(WCHAR);
+ FileName = AllocateGuarded(Length + sizeof(UNICODE_NULL));
+ RtlCopyMemory(FileName, Tests[i].FileName, Length + sizeof(UNICODE_NULL));
+ StartSeh()
+ PathType = RtlDetermineDosPathNameType_U(FileName);
+ EndSeh(STATUS_SUCCESS);
+ ok(PathType == Tests[i].PathType, "PathType is %d, expected %d for
'%S'\n", PathType, Tests[i].PathType, Tests[i].FileName);
+ FreeGuarded(FileName);
+
+ if (RtlDetermineDosPathNameType_Ustr)
+ {
+ UNICODE_STRING PathString;
+
+ FileName = AllocateGuarded(Length);
+ RtlCopyMemory(FileName, Tests[i].FileName, Length);
+ PathString.Buffer = FileName;
+ PathString.Length = Length;
+ PathString.MaximumLength = MAXUSHORT;
+ StartSeh()
+ PathType = RtlDetermineDosPathNameType_Ustr(&PathString);
+ EndSeh(STATUS_SUCCESS);
+ ok(PathType == Tests[i].PathType, "PathType is %d, expected %d for
'%S'\n", PathType, Tests[i].PathType, Tests[i].FileName);
+ FreeGuarded(FileName);
+ }
+ }
+}
Propchange: trunk/rostests/apitests/ntdll/RtlDetermineDosPathNameType.c
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/rostests/apitests/ntdll/RtlGetLongestNtPathLength.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/ntdll/RtlGetLong…
==============================================================================
--- trunk/rostests/apitests/ntdll/RtlGetLongestNtPathLength.c (added)
+++ trunk/rostests/apitests/ntdll/RtlGetLongestNtPathLength.c [iso-8859-1] Wed Apr 25
07:43:33 2012
@@ -1,0 +1,24 @@
+/*
+ * PROJECT: ReactOS api tests
+ * LICENSE: GPLv2+ - See COPYING in the top level directory
+ * PURPOSE: Test for RtlGetLongestNtPathLength
+ * PROGRAMMER: Thomas Faber <thfabba(a)gmx.de>
+ */
+
+#define WIN32_NO_STATUS
+#include <wine/test.h>
+#include <ndk/rtlfuncs.h>
+
+/*
+ULONG
+NTAPI
+RtlGetLongestNtPathLength(VOID);
+*/
+
+START_TEST(RtlGetLongestNtPathLength)
+{
+ ULONG Length;
+
+ Length = RtlGetLongestNtPathLength();
+ ok(Length == 269, "Length = %lu\n", Length);
+}
Propchange: trunk/rostests/apitests/ntdll/RtlGetLongestNtPathLength.c
------------------------------------------------------------------------------
svn:eol-style = native
Modified: trunk/rostests/apitests/ntdll/testlist.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/ntdll/testlist.c…
==============================================================================
--- trunk/rostests/apitests/ntdll/testlist.c [iso-8859-1] (original)
+++ trunk/rostests/apitests/ntdll/testlist.c [iso-8859-1] Wed Apr 25 07:43:33 2012
@@ -8,20 +8,24 @@
extern void func_NtAllocateVirtualMemory(void);
extern void func_NtFreeVirtualMemory(void);
extern void func_NtSystemInformation(void);
+extern void func_RtlDetermineDosPathNameType(void);
extern void func_RtlGetFullPathName_U(void);
extern void func_RtlGetFullPathName_UstrEx(void);
+extern void func_RtlGetLongestNtPathLength(void);
extern void func_RtlInitializeBitMap(void);
extern void func_ZwContinue(void);
const struct test winetest_testlist[] =
{
- { "NtAllocateVirtualMemory", func_NtAllocateVirtualMemory },
- { "NtFreeVirtualMemory", func_NtFreeVirtualMemory },
- { "NtSystemInformation", func_NtSystemInformation },
- { "RtlGetFullPathName_U", func_RtlGetFullPathName_U },
- { "RtlGetFullPathName_UstrEx", func_RtlGetFullPathName_UstrEx },
- { "RtlInitializeBitMap", func_RtlInitializeBitMap },
- { "ZwContinue", func_ZwContinue },
+ { "NtAllocateVirtualMemory", func_NtAllocateVirtualMemory },
+ { "NtFreeVirtualMemory", func_NtFreeVirtualMemory },
+ { "NtSystemInformation", func_NtSystemInformation },
+ { "RtlDetermineDosPathNameType", func_RtlDetermineDosPathNameType },
+ { "RtlGetFullPathName_U", func_RtlGetFullPathName_U },
+ { "RtlGetFullPathName_UstrEx", func_RtlGetFullPathName_UstrEx },
+ { "RtlGetLongestNtPathLength", func_RtlGetLongestNtPathLength },
+ { "RtlInitializeBitMap", func_RtlInitializeBitMap },
+ { "ZwContinue", func_ZwContinue },
{ 0, 0 }
};