Author: tfaber
Date: Fri May 4 12:31:47 2012
New Revision: 56494
URL:
http://svn.reactos.org/svn/reactos?rev=56494&view=rev
Log:
[KERNEL32_APITEST]
- Add a test checking that GetModuleFileName returns a full path
See issue #6786 for more details.
Added:
trunk/rostests/apitests/kernel32/GetModuleFileName.c (with props)
Modified:
trunk/rostests/apitests/kernel32/CMakeLists.txt
trunk/rostests/apitests/kernel32/testlist.c
Modified: trunk/rostests/apitests/kernel32/CMakeLists.txt
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/kernel32/CMakeLi…
==============================================================================
--- trunk/rostests/apitests/kernel32/CMakeLists.txt [iso-8859-1] (original)
+++ trunk/rostests/apitests/kernel32/CMakeLists.txt [iso-8859-1] Fri May 4 12:31:47 2012
@@ -4,11 +4,12 @@
list(APPEND SOURCE
GetCurrentDirectory.c
GetDriveType.c
+ GetModuleFileName.c
SetCurrentDirectory.c
testlist.c)
add_executable(kernel32_apitest ${SOURCE})
target_link_libraries(kernel32_apitest wine ${PSEH_LIB})
set_module_type(kernel32_apitest win32cui)
-add_importlibs(kernel32_apitest gdi32 user32 msvcrt kernel32 ntdll)
+add_importlibs(kernel32_apitest gdi32 user32 shlwapi msvcrt kernel32 ntdll)
add_cd_file(TARGET kernel32_apitest DESTINATION reactos/bin FOR all)
Added: trunk/rostests/apitests/kernel32/GetModuleFileName.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/kernel32/GetModu…
==============================================================================
--- trunk/rostests/apitests/kernel32/GetModuleFileName.c (added)
+++ trunk/rostests/apitests/kernel32/GetModuleFileName.c [iso-8859-1] Fri May 4 12:31:47
2012
@@ -1,0 +1,129 @@
+/*
+ * PROJECT: ReactOS api tests
+ * LICENSE: GPLv2+ - See COPYING in the top level directory
+ * PURPOSE: Test for GetModuleFileName
+ * PROGRAMMER: Thomas Faber <thfabba(a)gmx.de>
+ */
+
+#define WIN32_NO_STATUS
+#define UNICODE
+#include <stdio.h>
+#include <wine/test.h>
+#include <windows.h>
+#include <shlwapi.h>
+
+static
+VOID
+StartChild(char **argv)
+{
+ BOOL Success;
+ WCHAR Path[MAX_PATH];
+ PWSTR FileName;
+ PWSTR Slash;
+ WCHAR CommandLine[MAX_PATH];
+ STARTUPINFO StartupInfo;
+ PROCESS_INFORMATION ProcessInfo;
+ DWORD Ret;
+ int Length;
+
+ Length = MultiByteToWideChar(CP_ACP,
+ 0,
+ argv[0],
+ -1,
+ Path,
+ sizeof(Path) / sizeof(WCHAR));
+
+ FileName = wcsrchr(Path, '\\');
+ Slash = wcsrchr(Path, L'/');
+ if (Slash && (!FileName || Slash > FileName))
+ FileName = Slash;
+
+ if (FileName)
+ {
+ /* It's an absolute path. Set it as current dir and get the file name */
+ FileName++;
+ FileName[-1] = L'\0';
+
+ Success = SetCurrentDirectory(Path);
+ ok(Success == TRUE, "SetCurrentDirectory failed for path
'%ls'\n", Path);
+
+ trace("Starting '%ls' in path '%ls'\n", FileName,
Path);
+ }
+ else
+ {
+ FileName = Path;
+ trace("Starting '%ls', which is already relative\n",
FileName);
+ }
+
+ swprintf(CommandLine, L"\"%ls\" GetModuleFileName relative",
FileName);
+
+ RtlZeroMemory(&StartupInfo, sizeof(StartupInfo));
+ StartupInfo.cb = sizeof(StartupInfo);
+
+ Success = CreateProcess(FileName,
+ CommandLine,
+ NULL,
+ NULL,
+ FALSE,
+ 0,
+ NULL,
+ NULL,
+ &StartupInfo,
+ &ProcessInfo);
+ if (!Success)
+ {
+ skip("CreateProcess failed with %lu\n", GetLastError());
+ return;
+ }
+ CloseHandle(ProcessInfo.hThread);
+ Ret = WaitForSingleObject(ProcessInfo.hProcess, 30 * 1000);
+ ok(Ret == WAIT_OBJECT_0, "WaitForSingleObject returns %lu\n", Ret);
+ CloseHandle(ProcessInfo.hProcess);
+}
+
+static
+VOID
+TestGetModuleFileNameA(VOID)
+{
+ CHAR Buffer[MAX_PATH];
+ DWORD Length;
+ BOOL Relative;
+
+ Length = GetModuleFileNameA(NULL, Buffer, sizeof(Buffer));
+ ok(Length != 0, "Length = %lu\n", Length);
+ ok(Length < sizeof(Buffer), "Length = %lu\n", Length);
+ ok(Buffer[Length] == 0, "Buffer not null terminated\n");
+ Relative = PathIsRelativeA(Buffer);
+ ok(Relative == FALSE, "GetModuleFileNameA returned relative path: %s\n",
Buffer);
+}
+
+static
+VOID
+TestGetModuleFileNameW(VOID)
+{
+ WCHAR Buffer[MAX_PATH];
+ DWORD Length;
+ BOOL Relative;
+
+ Length = GetModuleFileNameW(NULL, Buffer, sizeof(Buffer) / sizeof(WCHAR));
+ ok(Length != 0, "Length = %lu\n", Length);
+ ok(Length < sizeof(Buffer) / sizeof(WCHAR), "Length = %lu\n", Length);
+ ok(Buffer[Length] == 0, "Buffer not null terminated\n");
+ Relative = PathIsRelativeW(Buffer);
+ ok(Relative == FALSE, "GetModuleFileNameA returned relative path: %ls\n",
Buffer);
+}
+
+START_TEST(GetModuleFileName)
+{
+ int argc;
+ char **argv;
+
+ argc = winetest_get_mainargs(&argv);
+ if (argc < 3)
+ StartChild(argv);
+ else
+ {
+ TestGetModuleFileNameA();
+ TestGetModuleFileNameW();
+ }
+}
Propchange: trunk/rostests/apitests/kernel32/GetModuleFileName.c
------------------------------------------------------------------------------
svn:eol-style = native
Modified: trunk/rostests/apitests/kernel32/testlist.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/kernel32/testlis…
==============================================================================
--- trunk/rostests/apitests/kernel32/testlist.c [iso-8859-1] (original)
+++ trunk/rostests/apitests/kernel32/testlist.c [iso-8859-1] Fri May 4 12:31:47 2012
@@ -7,12 +7,14 @@
extern void func_GetCurrentDirectory(void);
extern void func_GetDriveType(void);
+extern void func_GetModuleFileName(void);
extern void func_SetCurrentDirectory(void);
const struct test winetest_testlist[] =
{
{ "GetCurrentDirectory", func_GetCurrentDirectory },
{ "GetDriveType", func_GetDriveType },
+ { "GetModuleFileName", func_GetModuleFileName },
{ "SetCurrentDirectory", func_SetCurrentDirectory },
{ 0, 0 }