Dmitry Timoshkov : psapi: Add more GetMappedFileName tests.

Alexandre Julliard julliard at winehq.org
Fri Jan 27 11:30:40 CST 2012


Module: wine
Branch: master
Commit: 7705ad45c9a1ebd3d8033ddc3dc2fb3b15a23e0e
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=7705ad45c9a1ebd3d8033ddc3dc2fb3b15a23e0e

Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date:   Fri Jan 27 15:33:19 2012 +0800

psapi: Add more GetMappedFileName tests.

---

 dlls/psapi/tests/psapi_main.c |  125 +++++++++++++++++++++++++++++++++++++---
 1 files changed, 115 insertions(+), 10 deletions(-)

diff --git a/dlls/psapi/tests/psapi_main.c b/dlls/psapi/tests/psapi_main.c
index 8a1cfc1..71c3c95 100644
--- a/dlls/psapi/tests/psapi_main.c
+++ b/dlls/psapi/tests/psapi_main.c
@@ -2,6 +2,7 @@
  * Unit test suite for PSAPI
  *
  * Copyright (C) 2005 Felix Nawothnig
+ * Copyright (C) 2012 Dmitry Timoshkov
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -184,9 +185,13 @@ static void test_GetMappedFileName(void)
     HMODULE hMod = GetModuleHandle(NULL);
     char szMapPath[MAX_PATH], szModPath[MAX_PATH], *szMapBaseName;
     DWORD ret;
-    
+    char *base;
+    char temp_path[MAX_PATH], file_name[MAX_PATH], map_name[MAX_PATH], device_name[MAX_PATH], drive[3];
+    HANDLE hfile, hmap;
+
     SetLastError(0xdeadbeef);
     pGetMappedFileNameA(NULL, hMod, szMapPath, sizeof(szMapPath));
+todo_wine
     ok(GetLastError() == ERROR_INVALID_HANDLE, "expected error=ERROR_INVALID_HANDLE but got %d\n", GetLastError());
 
     SetLastError(0xdeadbeef);
@@ -195,20 +200,120 @@ static void test_GetMappedFileName(void)
 
     SetLastError( 0xdeadbeef );
     ret = pGetMappedFileNameA(hpQI, hMod, szMapPath, sizeof(szMapPath));
+todo_wine
     ok( ret || broken(GetLastError() == ERROR_UNEXP_NET_ERR), /* win2k */
         "GetMappedFileNameA failed with error %u\n", GetLastError() );
-    if (!ret) return;
     ok(ret == strlen(szMapPath), "szMapPath=\"%s\" ret=%d\n", szMapPath, ret);
+todo_wine
     ok(szMapPath[0] == '\\', "szMapPath=\"%s\"\n", szMapPath);
     szMapBaseName = strrchr(szMapPath, '\\'); /* That's close enough for us */
-    if(!szMapBaseName || !*szMapBaseName)
+todo_wine
+    ok(szMapBaseName && *szMapBaseName, "szMapPath=\"%s\"\n", szMapPath);
+    if (szMapBaseName)
     {
-        ok(0, "szMapPath=\"%s\"\n", szMapPath);
-        return;
+        GetModuleFileNameA(NULL, szModPath, sizeof(szModPath));
+        ok(!strcmp(strrchr(szModPath, '\\'), szMapBaseName),
+           "szModPath=\"%s\" szMapBaseName=\"%s\"\n", szModPath, szMapBaseName);
     }
-    GetModuleFileNameA(NULL, szModPath, sizeof(szModPath));
-    ok(!strcmp(strrchr(szModPath, '\\'), szMapBaseName),
-       "szModPath=\"%s\" szMapBaseName=\"%s\"\n", szModPath, szMapBaseName);
+
+    GetTempPath(MAX_PATH, temp_path);
+    GetTempFileName(temp_path, "map", 0, file_name);
+
+    drive[0] = file_name[0];
+    drive[1] = ':';
+    drive[2] = 0;
+    SetLastError(0xdeadbeef);
+    ret = QueryDosDevice(drive, device_name, sizeof(device_name));
+    ok(ret, "QueryDosDevice error %d\n", GetLastError());
+    trace("%s -> %s\n", drive, device_name);
+
+    SetLastError(0xdeadbeef);
+    hfile = CreateFile(file_name, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0);
+    ok(hfile != INVALID_HANDLE_VALUE, "CreateFile(%s) error %d\n", file_name, GetLastError());
+    SetFilePointer(hfile, 0x4000, NULL, FILE_BEGIN);
+    SetEndOfFile(hfile);
+
+    SetLastError(0xdeadbeef);
+    hmap = CreateFileMapping(hfile, NULL, PAGE_READONLY | SEC_COMMIT, 0, 0, NULL);
+    ok(hmap != 0, "CreateFileMapping error %d\n", GetLastError());
+
+    SetLastError(0xdeadbeef);
+    base = MapViewOfFile(hmap, FILE_MAP_READ, 0, 0, 0);
+    ok(base != NULL, "MapViewOfFile error %d\n", GetLastError());
+
+    SetLastError(0xdeadbeef);
+    ret = pGetMappedFileNameA(GetCurrentProcess(), base, map_name, 0);
+    ok(!ret, "GetMappedFileName should fail\n");
+todo_wine
+    ok(GetLastError() == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
+
+    SetLastError(0xdeadbeef);
+    ret = pGetMappedFileNameA(GetCurrentProcess(), base, 0, sizeof(map_name));
+    ok(!ret, "GetMappedFileName should fail\n");
+todo_wine
+    ok(GetLastError() == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
+
+    SetLastError(0xdeadbeef);
+    ret = pGetMappedFileNameA(GetCurrentProcess(), base, map_name, 1);
+todo_wine
+    ok(ret == 1, "GetMappedFileName error %d\n", GetLastError());
+    ok(!map_name[0] || broken(map_name[0] == device_name[0]) /* before win2k */, "expected 0, got %c\n", map_name[0]);
+
+    SetLastError(0xdeadbeef);
+    ret = pGetMappedFileNameA(GetCurrentProcess(), base, map_name, sizeof(map_name));
+todo_wine {
+    ok(ret, "GetMappedFileName error %d\n", GetLastError());
+    ok(ret > strlen(file_name), "map_name should be longer than device_name\n");
+    ok(memcmp(map_name, device_name, strlen(device_name)) == 0, "map name does not start with a device name: %s\n", map_name);
+}
+
+    SetLastError(0xdeadbeef);
+    ret = pGetMappedFileNameA(GetCurrentProcess(), base + 0x2000, map_name, sizeof(map_name));
+todo_wine {
+    ok(ret, "GetMappedFileName error %d\n", GetLastError());
+    ok(ret > strlen(file_name), "map_name should be longer than device_name\n");
+    ok(memcmp(map_name, device_name, strlen(device_name)) == 0, "map name does not start with a device name: %s\n", map_name);
+}
+
+    SetLastError(0xdeadbeef);
+    ret = pGetMappedFileNameA(GetCurrentProcess(), base + 0x4000, map_name, sizeof(map_name));
+    ok(!ret, "GetMappedFileName should fail\n");
+todo_wine
+    ok(GetLastError() == ERROR_UNEXP_NET_ERR, "expected ERROR_UNEXP_NET_ERR, got %d\n", GetLastError());
+
+    SetLastError(0xdeadbeef);
+    ret = pGetMappedFileNameA(GetCurrentProcess(), NULL, map_name, sizeof(map_name));
+    ok(!ret, "GetMappedFileName should fail\n");
+todo_wine
+    ok(GetLastError() == ERROR_UNEXP_NET_ERR, "expected ERROR_UNEXP_NET_ERR, got %d\n", GetLastError());
+
+    SetLastError(0xdeadbeef);
+    ret = pGetMappedFileNameA(0, base, map_name, sizeof(map_name));
+    ok(!ret, "GetMappedFileName should fail\n");
+todo_wine
+    ok(GetLastError() == ERROR_INVALID_HANDLE, "expected ERROR_INVALID_HANDLE, got %d\n", GetLastError());
+
+    UnmapViewOfFile(base);
+    CloseHandle(hmap);
+    CloseHandle(hfile);
+    DeleteFile(file_name);
+
+    SetLastError(0xdeadbeef);
+    hmap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READONLY | SEC_COMMIT, 0, 4096, NULL);
+    ok(hmap != 0, "CreateFileMapping error %d\n", GetLastError());
+
+    SetLastError(0xdeadbeef);
+    base = MapViewOfFile(hmap, FILE_MAP_READ, 0, 0, 0);
+    ok(base != NULL, "MapViewOfFile error %d\n", GetLastError());
+
+    SetLastError(0xdeadbeef);
+    ret = pGetMappedFileNameA(GetCurrentProcess(), base, map_name, sizeof(map_name));
+    ok(!ret, "GetMappedFileName should fail\n");
+todo_wine
+    ok(GetLastError() == ERROR_FILE_INVALID, "expected ERROR_FILE_INVALID, got %d\n", GetLastError());
+
+    UnmapViewOfFile(base);
+    CloseHandle(hmap);
 }
 
 static void test_GetProcessImageFileName(void)
@@ -431,7 +536,7 @@ START_TEST(psapi_main)
 
     if(!hpsapi)
     {
-        trace("Could not load psapi.dll\n");
+        win_skip("Could not load psapi.dll\n");
         return;
     }
 
@@ -451,7 +556,7 @@ START_TEST(psapi_main)
 	    test_EnumProcessModules();
 	    test_GetModuleInformation();
 	    test_GetProcessMemoryInfo();
-	    todo_wine test_GetMappedFileName();
+            test_GetMappedFileName();
             test_GetProcessImageFileName();
             test_GetModuleFileNameEx();
             test_GetModuleBaseName();




More information about the wine-cvs mailing list