Piotr Caban : ole32/tests: Add standard marshaling data tests.
Alexandre Julliard
julliard at winehq.org
Mon Oct 15 16:15:27 CDT 2018
Module: wine
Branch: master
Commit: b2b5f81861d9c610f0ae54c5dd237b2ac223724e
URL: https://source.winehq.org/git/wine.git/?a=commit;h=b2b5f81861d9c610f0ae54c5dd237b2ac223724e
Author: Piotr Caban <piotr at codeweavers.com>
Date: Thu Oct 11 19:11:55 2018 +0200
ole32/tests: Add standard marshaling data tests.
Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ole32/tests/marshal.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 68 insertions(+)
diff --git a/dlls/ole32/tests/marshal.c b/dlls/ole32/tests/marshal.c
index 4f4b2b0..39d9a55 100644
--- a/dlls/ole32/tests/marshal.c
+++ b/dlls/ole32/tests/marshal.c
@@ -73,6 +73,50 @@ static HRESULT (WINAPI *pDllGetClassObject)(REFCLSID,REFIID,LPVOID);
#define ok_zero_external_conn() do {if (with_external_conn) ok(!external_connections, "got %d external connections\n", external_connections);} while(0);
#define ok_last_release_closes(b) do {if (with_external_conn) ok(last_release_closes == b, "got %d expected %d\n", last_release_closes, b);} while(0);
+#define OBJREF_SIGNATURE (0x574f454d)
+#define OBJREF_STANDARD (0x1)
+
+typedef struct tagDUALSTRINGARRAY {
+ unsigned short wNumEntries;
+ unsigned short wSecurityOffset;
+ unsigned short aStringArray[1];
+} DUALSTRINGARRAY;
+
+typedef UINT64 OXID;
+typedef UINT64 OID;
+typedef GUID IPID;
+
+typedef struct tagSTDOBJREF {
+ ULONG flags;
+ ULONG cPublicRefs;
+ OXID oxid;
+ OID oid;
+ IPID ipid;
+} STDOBJREF;
+
+typedef struct tagOBJREF {
+ ULONG signature;
+ ULONG flags;
+ GUID iid;
+ union {
+ struct OR_STANDARD {
+ STDOBJREF std;
+ DUALSTRINGARRAY saResAddr;
+ } u_standard;
+ struct OR_HANDLER {
+ STDOBJREF std;
+ CLSID clsid;
+ DUALSTRINGARRAY saResAddr;
+ } u_handler;
+ struct OR_CUSTOM {
+ CLSID clsid;
+ ULONG cbExtension;
+ ULONG size;
+ byte *pData;
+ } u_custom;
+ } u_objref;
+} OBJREF;
+
static const IID IID_IWineTest =
{
0x5201163f,
@@ -1310,6 +1354,9 @@ todo_wine
static void test_CoGetStandardMarshal(void)
{
+ DUALSTRINGARRAY *dualstringarr;
+ STDOBJREF *stdobjref;
+ OBJREF objref;
IMarshal *marshal;
DWORD size, read;
IStream *stream;
@@ -1343,6 +1390,27 @@ static void test_CoGetStandardMarshal(void)
hr = IStream_Seek(stream, ullZero, STREAM_SEEK_SET, NULL);
ok_ole_success(hr, IStream_Seek);
+ size = FIELD_OFFSET(OBJREF, u_objref.u_standard.saResAddr.aStringArray);
+ hr = IStream_Read(stream, &objref, size, &read);
+ ok_ole_success(hr, IStream_Read);
+ ok(read == size, "read = %d, expected %d\n", read, size);
+ ok(objref.signature == OBJREF_SIGNATURE, "objref.signature = %x\n",
+ objref.signature);
+ ok(objref.flags == OBJREF_STANDARD, "objref.flags = %x\n", objref.flags);
+ ok(IsEqualIID(&objref.iid, &IID_IUnknown), "objref.iid = %s\n",
+ wine_dbgstr_guid(&objref.iid));
+ stdobjref = &objref.u_objref.u_standard.std;
+ ok(stdobjref->flags == 0, "stdobjref.flags = %d\n", stdobjref->flags);
+ ok(stdobjref->cPublicRefs == 5, "stdobjref.cPublicRefs = %d\n",
+ stdobjref->cPublicRefs);
+ dualstringarr = &objref.u_objref.u_standard.saResAddr;
+ ok(dualstringarr->wNumEntries == 0, "dualstringarr.wNumEntries = %d\n",
+ dualstringarr->wNumEntries);
+ ok(dualstringarr->wSecurityOffset == 0, "dualstringarr.wSecurityOffset = %d\n",
+ dualstringarr->wSecurityOffset);
+
+ hr = IStream_Seek(stream, ullZero, STREAM_SEEK_SET, NULL);
+ ok_ole_success(hr, IStream_Seek);
hr = IMarshal_UnmarshalInterface(marshal, stream, &IID_IUnknown, (void**)&unk);
ok_ole_success(hr, IMarshal_UnmarshalInterface);
IUnknown_Release(unk);
More information about the wine-cvs
mailing list