Nikolay Sivov : oleaut32/tests: Test for internal safearray data layout.
Alexandre Julliard
julliard at winehq.org
Mon Feb 24 15:42:30 CST 2014
Module: wine
Branch: master
Commit: 598f3f0623e132de256515466474875d5967b984
URL: http://source.winehq.org/git/wine.git/?a=commit;h=598f3f0623e132de256515466474875d5967b984
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Mon Feb 24 08:15:41 2014 +0400
oleaut32/tests: Test for internal safearray data layout.
---
dlls/oleaut32/tests/safearray.c | 58 +++++++++++++++++++++++++++++++++++++++
1 file changed, 58 insertions(+)
diff --git a/dlls/oleaut32/tests/safearray.c b/dlls/oleaut32/tests/safearray.c
index 1d8943a..c28931c 100644
--- a/dlls/oleaut32/tests/safearray.c
+++ b/dlls/oleaut32/tests/safearray.c
@@ -2003,6 +2003,63 @@ static void test_SafeArrayDestroyData (void)
ok(hres == S_OK, "SAD failed, error code %x.\n", hres);
}
+static void test_safearray_layout(void)
+{
+ IRecordInfoImpl *irec;
+ IRecordInfo *record;
+ GUID guid, *guidptr;
+ SAFEARRAYBOUND sab;
+ SAFEARRAY *sa;
+ DWORD *dwptr;
+ HRESULT hr;
+
+ sab.lLbound = 0;
+ sab.cElements = 10;
+
+ /* GUID field */
+ sa = SafeArrayCreate(VT_UNKNOWN, 1, &sab);
+ ok(sa != NULL, "got %p\n", sa);
+
+ guidptr = (GUID*)sa - 1;
+ ok(IsEqualIID(guidptr, &IID_IUnknown), "got %s\n", wine_dbgstr_guid(guidptr));
+
+ hr = SafeArraySetIID(sa, &IID_IDispatch);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(IsEqualIID(guidptr, &IID_IDispatch), "got %s\n", wine_dbgstr_guid(guidptr));
+
+ memcpy(guidptr, &IID_IUnknown, sizeof(GUID));
+ hr = SafeArrayGetIID(sa, &guid);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(IsEqualIID(&guid, &IID_IUnknown), "got %s\n", wine_dbgstr_guid(&guid));
+
+ hr = SafeArrayDestroy(sa);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ /* VARTYPE field */
+ sa = SafeArrayCreate(VT_UI1, 1, &sab);
+ ok(sa != NULL, "got %p\n", sa);
+
+ dwptr = (DWORD*)sa - 1;
+ ok(*dwptr == VT_UI1, "got %d\n", *dwptr);
+
+ hr = SafeArrayDestroy(sa);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ /* IRecordInfo pointer */
+ irec = IRecordInfoImpl_Construct();
+ irec->ref = 1;
+
+ sa = pSafeArrayCreateEx(VT_RECORD, 1, &sab, &irec->IRecordInfo_iface);
+ ok(sa != NULL, "failed to create array\n");
+
+ record = *((IRecordInfo**)sa - 1);
+ ok(record == &irec->IRecordInfo_iface, "got %p\n", record);
+
+ hr = SafeArrayDestroy(sa);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ IRecordInfo_Release(&irec->IRecordInfo_iface);
+}
+
START_TEST(safearray)
{
hOleaut32 = GetModuleHandleA("oleaut32.dll");
@@ -2035,4 +2092,5 @@ START_TEST(safearray)
test_SafeArrayGetPutElement_IUnknown();
test_SafeArrayRedim_IUnknown();
test_SafeArrayGetPutElement_VARIANT();
+ test_safearray_layout();
}
More information about the wine-cvs
mailing list