Huw Davies : ole32/tests: Add tests to show the WdtpInterfacePointer marshal data looks like the result of CoMarshalInterface .

Alexandre Julliard julliard at winehq.org
Tue May 12 09:08:48 CDT 2009


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

Author: Huw Davies <huw at codeweavers.com>
Date:   Tue May 12 12:20:32 2009 +0100

ole32/tests: Add tests to show the WdtpInterfacePointer marshal data looks like the result of CoMarshalInterface.

---

 dlls/ole32/tests/usrmarshal.c |   38 +++++++++++++++++++++-----------------
 1 files changed, 21 insertions(+), 17 deletions(-)

diff --git a/dlls/ole32/tests/usrmarshal.c b/dlls/ole32/tests/usrmarshal.c
index 51223e5..b6e37fa 100644
--- a/dlls/ole32/tests/usrmarshal.c
+++ b/dlls/ole32/tests/usrmarshal.c
@@ -512,7 +512,6 @@ static void test_marshal_WdtpInterfacePointer(void)
     IUnknown *unk;
     IUnknown *unk2;
     unsigned char *wireip;
-    const IID *iid;
 
     /* shows that the WdtpInterfacePointer functions don't marshal anything for
      * NULL pointers, so code using these functions must handle that case
@@ -538,27 +537,32 @@ static void test_marshal_WdtpInterfacePointer(void)
     wireip = buffer;
     if (size >= 0x4c)
     {
+        HGLOBAL h = GlobalAlloc(GMEM_MOVEABLE, 0);
+        IStream *stm;
+        void *ptr;
+        LARGE_INTEGER pos;
+        DWORD h_size;
+
         ok(buffer_end == buffer + 0x4c, "buffer_end %p buffer %p\n", buffer_end, buffer);
         ok(*(DWORD *)wireip == 0x44, "wireip + 0x0 should be 0x44 instead of 0x%08x\n", *(DWORD *)wireip);
         wireip += sizeof(DWORD);
         ok(*(DWORD *)wireip == 0x44, "wireip + 0x4 should be 0x44 instead of 0x%08x\n", *(DWORD *)wireip);
         wireip += sizeof(DWORD);
-        ok(*(DWORD *)wireip == 0x574f454d /* 'MEOW' */, "wireip + 0x8 should be 0x574f454d instead of 0x%08x\n", *(DWORD *)wireip);
-        wireip += sizeof(DWORD);
-        ok(*(DWORD *)wireip == 0x1, "wireip + 0xc should be 0x1 instead of 0x%08x\n", *(DWORD *)wireip);
-        wireip += sizeof(DWORD);
-        iid = (const IID *)wireip;
-        ok(IsEqualIID(iid, &IID_IUnknown),
-           "wireip + 0x10 should be IID_IUnknown instead of {%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\n",
-           iid->Data1, iid->Data2, iid->Data3,
-           iid->Data4[0], iid->Data4[1], iid->Data4[2], iid->Data4[3],
-           iid->Data4[4], iid->Data4[5], iid->Data4[6], iid->Data4[7]);
-        wireip += sizeof(IID);
-        ok(*(DWORD *)wireip == 0, "wireip + 0x1c should be 0 instead of 0x%08x\n", *(DWORD *)wireip);
-        wireip += sizeof(DWORD);
-        ok(*(DWORD *)wireip == 5, "wireip + 0x20 should be 5 instead of %d\n", *(DWORD *)wireip);
-        wireip += sizeof(DWORD);
-        /* the rest is dynamic so can't really be tested */
+
+        /* The remaining 0x44 bytes are the result of CoMarshalInterface */
+
+        CreateStreamOnHGlobal(h, TRUE, &stm);
+        CoMarshalInterface(stm, &IID_IUnknown, unk, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL);
+        h_size = GlobalSize(h);
+        ok(h_size == 0x44, "size %x\n", h_size);
+
+        ptr = GlobalLock(h);
+        ok(!memcmp(ptr, wireip, 0x44), "buffer mismatch\n");
+        GlobalUnlock(h);
+        pos.QuadPart = 0;
+        IStream_Seek(stm, pos, STREAM_SEEK_SET, NULL);
+        CoReleaseMarshalData(stm);
+        IStream_Release(stm);
     }
 
     unk2 = NULL;




More information about the wine-cvs mailing list