[ros-diffs] [tfaber] 56494: [KERNEL32_APITEST] - Add a test checking that GetModuleFileName returns a full path See issue #6786 for more details.

tfaber at svn.reactos.org tfaber at svn.reactos.org
Fri May 4 12:31:48 UTC 2012


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/CMakeLists.txt?rev=56494&r1=56493&r2=56494&view=diff
==============================================================================
--- 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/GetModuleFileName.c?rev=56494&view=auto
==============================================================================
--- 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 at 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/testlist.c?rev=56494&r1=56493&r2=56494&view=diff
==============================================================================
--- 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 }




More information about the Ros-diffs mailing list