[6/6] shell32/tests: Add server-side DDE checks.

Francois Gouget fgouget at codeweavers.com
Thu Jan 28 17:19:53 CST 2016


Should something go wrong a failed ok() call will leave a clearer trace in the log than an assert.
Note however that if something goes wrong in the server-side DDE code it is likely that the ShellExecute() call will fail and thus there is no guarantee the failure count will make it to the parent process. But presumably the parent will detect the failed ShellExecute() call instead.

Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
---
 dlls/shell32/tests/shlexec.c | 37 +++++++++++++++++++++++--------------
 1 file changed, 23 insertions(+), 14 deletions(-)

diff --git a/dlls/shell32/tests/shlexec.c b/dlls/shell32/tests/shlexec.c
index 7694bc6..760575a 100644
--- a/dlls/shell32/tests/shlexec.c
+++ b/dlls/shell32/tests/shlexec.c
@@ -212,12 +212,7 @@ static void doChild(int argc, char** argv)
     char *filename, buffer[MAX_PATH];
     HANDLE hFile, map;
     int i;
-    int rc;
-    HSZ hszApplication;
     UINT_PTR timer;
-    HANDLE dde_ready;
-    MSG msg;
-    char *shared_block;
 
     filename=argv[2];
     hFile=CreateFileA(filename, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0);
@@ -252,19 +247,28 @@ static void doChild(int argc, char** argv)
     map = OpenFileMappingA(FILE_MAP_READ, FALSE, "winetest_shlexec_dde_map");
     if (map != NULL)
     {
-        shared_block = MapViewOfFile(map, FILE_MAP_READ, 0, 0, 4096);
+        HANDLE dde_ready;
+        char *shared_block = MapViewOfFile(map, FILE_MAP_READ, 0, 0, 4096);
         CloseHandle(map);
         if (shared_block[0] != '\0' || shared_block[1] != '\0')
         {
+            HDDEDATA hdde;
+            HSZ hszApplication;
+            MSG msg;
+            UINT rc;
+
             post_quit_on_execute = TRUE;
             ddeInst = 0;
             rc = DdeInitializeA(&ddeInst, ddeCb, CBF_SKIP_ALLNOTIFICATIONS | CBF_FAIL_ADVISES |
                                 CBF_FAIL_POKES | CBF_FAIL_REQUESTS, 0);
-            ok(rc == DMLERR_NO_ERROR, "got %d\n", rc);
+            ok(rc == DMLERR_NO_ERROR, "DdeInitializeA() returned %d\n", rc);
             hszApplication = DdeCreateStringHandleA(ddeInst, shared_block, CP_WINANSI);
-            hszTopic = DdeCreateStringHandleA(ddeInst, shared_block + strlen(shared_block) + 1, CP_WINANSI);
-            assert(hszApplication && hszTopic);
-            assert(DdeNameService(ddeInst, hszApplication, 0, DNS_REGISTER | DNS_FILTEROFF));
+            ok(hszApplication != NULL, "DdeCreateStringHandleA(%s) = NULL\n", shared_block);
+            shared_block += strlen(shared_block) + 1;
+            hszTopic = DdeCreateStringHandleA(ddeInst, shared_block, CP_WINANSI);
+            ok(hszTopic != NULL, "DdeCreateStringHandleA(%s) = NULL\n", shared_block);
+            hdde = DdeNameService(ddeInst, hszApplication, 0, DNS_REGISTER | DNS_FILTEROFF);
+            ok(hdde != NULL, "DdeNameService() failed le=%u\n", GetLastError());
 
             timer = SetTimer(NULL, 0, 2500, childTimeout);
 
@@ -273,14 +277,19 @@ static void doChild(int argc, char** argv)
             CloseHandle(dde_ready);
 
             while (GetMessageA(&msg, NULL, 0, 0))
+            {
+                if (winetest_debug > 2)
+                    trace("msg %d lParam=%ld wParam=%lu\n", msg.message, msg.lParam, msg.wParam);
                 DispatchMessageA(&msg);
+            }
 
             Sleep(500);
             KillTimer(NULL, timer);
-            assert(DdeNameService(ddeInst, hszApplication, 0, DNS_UNREGISTER));
-            assert(DdeFreeStringHandle(ddeInst, hszTopic));
-            assert(DdeFreeStringHandle(ddeInst, hszApplication));
-            assert(DdeUninitialize(ddeInst));
+            hdde = DdeNameService(ddeInst, hszApplication, 0, DNS_UNREGISTER);
+            ok(hdde != NULL, "DdeNameService() failed le=%u\n", GetLastError());
+            ok(DdeFreeStringHandle(ddeInst, hszTopic), "DdeFreeStringHandle(topic)\n");
+            ok(DdeFreeStringHandle(ddeInst, hszApplication), "DdeFreeStringHandle(application)\n");
+            ok(DdeUninitialize(ddeInst), "DdeUninitialize() failed\n");
         }
         else
         {
-- 
2.7.0.rc3



More information about the wine-patches mailing list