[PATCH] oleaut32/tests: Some tests for SafeArrayDestroyData()
Nikolay Sivov
nsivov at codeweavers.com
Mon Nov 30 09:40:54 CST 2015
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
dlls/oleaut32/tests/safearray.c | 71 ++++++++++++++++++++++++++++++++++++-----
1 file changed, 63 insertions(+), 8 deletions(-)
diff --git a/dlls/oleaut32/tests/safearray.c b/dlls/oleaut32/tests/safearray.c
index 12e1f54..90bc5a4 100644
--- a/dlls/oleaut32/tests/safearray.c
+++ b/dlls/oleaut32/tests/safearray.c
@@ -1965,40 +1965,95 @@ static void test_SafeArrayChangeTypeEx(void)
static void test_SafeArrayDestroyData (void)
{
- SAFEARRAYBOUND sab;
+ SAFEARRAYBOUND sab[2];
SAFEARRAY *sa;
HRESULT hres;
int value = 0xdeadbeef;
LONG index[1];
void *temp_pvData;
+ USHORT features;
- sab.lLbound = 0;
- sab.cElements = 10;
- sa = SafeArrayCreate(VT_INT, 1, &sab);
+ sab[0].lLbound = 0;
+ sab[0].cElements = 10;
+ sa = SafeArrayCreate(VT_INT, 1, sab);
ok(sa != NULL, "Create() failed.\n");
- if (!sa)
- return;
+ ok(sa->fFeatures == FADF_HAVEVARTYPE, "got 0x%x\n", sa->fFeatures);
+
index[0] = 1;
SafeArrayPutElement (sa, index, &value);
/* SafeArrayDestroyData shouldn't free pvData if FADF_STATIC is set. */
- sa->fFeatures |= FADF_STATIC;
+ features = (sa->fFeatures |= FADF_STATIC);
temp_pvData = sa->pvData;
hres = SafeArrayDestroyData(sa);
ok(hres == S_OK, "SADData FADF_STATIC failed, error code %x.\n",hres);
+ ok(features == sa->fFeatures, "got 0x%x\n", sa->fFeatures);
ok(sa->pvData == temp_pvData, "SADData FADF_STATIC: pvData=%p, expected %p (fFeatures = %d).\n",
sa->pvData, temp_pvData, sa->fFeatures);
SafeArrayGetElement (sa, index, &value);
ok(value == 0, "Data not cleared after SADData\n");
/* Clear FADF_STATIC, now really destroy the data. */
- sa->fFeatures ^= FADF_STATIC;
+ features = (sa->fFeatures ^= FADF_STATIC);
hres = SafeArrayDestroyData(sa);
ok(hres == S_OK, "SADData !FADF_STATIC failed, error code %x.\n",hres);
+ ok(features == sa->fFeatures, "got 0x%x\n", sa->fFeatures);
ok(sa->pvData == NULL, "SADData !FADF_STATIC: pvData=%p, expected NULL.\n", sa->pvData);
hres = SafeArrayDestroy(sa);
ok(hres == S_OK, "SAD failed, error code %x.\n", hres);
+
+ /* two dimensions */
+ sab[0].lLbound = 0;
+ sab[0].cElements = 10;
+ sab[1].lLbound = 0;
+ sab[1].cElements = 10;
+
+ sa = SafeArrayCreate(VT_INT, 2, sab);
+ ok(sa != NULL, "Create() failed.\n");
+ ok(sa->fFeatures == FADF_HAVEVARTYPE, "got 0x%x\n", sa->fFeatures);
+
+ features = sa->fFeatures;
+ hres = SafeArrayDestroyData(sa);
+ ok(hres == S_OK, "got 0x%08x\n",hres);
+ ok(features == sa->fFeatures, "got 0x%x\n", sa->fFeatures);
+
+ SafeArrayDestroy(sa);
+
+ /* try to destroy data from descriptor */
+ hres = SafeArrayAllocDescriptor(1, &sa);
+ ok(hres == S_OK, "got 0x%08x\n", hres);
+ ok(sa->fFeatures == 0, "got 0x%x\n", sa->fFeatures);
+
+ hres = SafeArrayDestroyData(sa);
+ ok(hres == S_OK, "got 0x%08x\n", hres);
+ ok(sa->fFeatures == 0, "got 0x%x\n", sa->fFeatures);
+
+ hres = SafeArrayDestroyDescriptor(sa);
+ ok(hres == S_OK, "got 0x%08x\n", hres);
+
+ hres = SafeArrayAllocDescriptor(2, &sa);
+ ok(hres == S_OK, "got 0x%08x\n", hres);
+ ok(sa->fFeatures == 0, "got 0x%x\n", sa->fFeatures);
+
+ hres = SafeArrayDestroyData(sa);
+ ok(hres == S_OK, "got 0x%08x\n", hres);
+ ok(sa->fFeatures == 0, "got 0x%x\n", sa->fFeatures);
+
+ hres = SafeArrayDestroyDescriptor(sa);
+ ok(hres == S_OK, "got 0x%08x\n", hres);
+
+ /* vector case */
+ sa = SafeArrayCreateVector(VT_UI1, 0, 10);
+ ok(sa != NULL, "got %p\n", sa);
+ ok(sa->fFeatures == (FADF_CREATEVECTOR|FADF_HAVEVARTYPE), "got 0x%x\n", sa->fFeatures);
+
+ hres = SafeArrayDestroyData(sa);
+ ok(hres == S_OK, "got 0x%08x\n", hres);
+todo_wine
+ ok(sa->fFeatures == FADF_HAVEVARTYPE, "got 0x%x\n", sa->fFeatures);
+
+ SafeArrayDestroy(sa);
}
static void test_safearray_layout(void)
--
2.6.2
More information about the wine-patches
mailing list