[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