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