[PATCH 2/2] oledb32/tests: Add ODBC provider tests

Alistair Leslie-Hughes leslie_alistair at hotmail.com
Sun Mar 15 01:26:36 CDT 2020


Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
---
 dlls/oledb32/tests/database.c | 83 +++++++++++++++++++++++++++++++++++
 1 file changed, 83 insertions(+)

diff --git a/dlls/oledb32/tests/database.c b/dlls/oledb32/tests/database.c
index 83a4767b90..5d67bf9c41 100644
--- a/dlls/oledb32/tests/database.c
+++ b/dlls/oledb32/tests/database.c
@@ -32,6 +32,7 @@
 #include "initguid.h"
 #include "oledb.h"
 #include "oledberr.h"
+#include "msdasql.h"
 
 #include "wine/test.h"
 
@@ -967,6 +968,87 @@ static void test_dslocator(void)
     }
 }
 
+static void test_odbc_provider(void)
+{
+    HRESULT hr;
+    IDBProperties *props;
+    DBPROPIDSET propidset;
+    ULONG infocount;
+    DBPROPINFOSET *propinfoset;
+    WCHAR *desc;
+    DBPROPID properties[14] =
+    {
+        DBPROP_AUTH_PASSWORD, DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO, DBPROP_AUTH_USERID,
+        DBPROP_INIT_DATASOURCE, DBPROP_INIT_HWND, DBPROP_INIT_LOCATION,
+        DBPROP_INIT_MODE, DBPROP_INIT_PROMPT, DBPROP_INIT_TIMEOUT,
+        DBPROP_INIT_PROVIDERSTRING, DBPROP_INIT_LCID, DBPROP_INIT_CATALOG,
+        DBPROP_INIT_OLEDBSERVICES, DBPROP_INIT_GENERALTIMEOUT
+    };
+
+    hr = CoCreateInstance( &CLSID_MSDASQL, NULL, CLSCTX_ALL, &IID_IDBProperties, (void **)&props);
+    todo_wine ok(hr == S_OK, "Failed to create object 0x%08x\n", hr);
+    if (FAILED(hr))
+    {
+        return;
+    }
+
+    propidset.rgPropertyIDs = NULL;
+    propidset.cPropertyIDs = 0;
+    propidset.guidPropertySet = DBPROPSET_DBINITALL;
+
+    infocount = 0;
+    hr = IDBProperties_GetPropertyInfo(props, 1, &propidset, &infocount, &propinfoset, &desc);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+    if (hr == S_OK)
+    {
+        ULONG i;
+        DBPROPIDSET propidlist;
+        ULONG propcnt;
+        DBPROPSET *propset;
+
+        ok(IsEqualGUID(&propinfoset->guidPropertySet, &DBPROPSET_DBINIT), "got %s\n",
+                debugstr_guid(&propinfoset->guidPropertySet));
+        ok(propinfoset->cPropertyInfos == 14, "got %d\n", propinfoset->cPropertyInfos);
+
+        propidlist.guidPropertySet = DBPROPSET_DBINIT;
+        propidlist.cPropertyIDs = propinfoset->cPropertyInfos;
+        propidlist.rgPropertyIDs = CoTaskMemAlloc(propinfoset->cPropertyInfos * sizeof(DBPROP));
+
+        for (i = 0; i < propinfoset->cPropertyInfos; i++)
+        {
+            ok(properties[i] == propinfoset->rgPropertyInfos[i].dwPropertyID, "%d, got %d\n", i,
+                    propinfoset->rgPropertyInfos[i].dwPropertyID);
+            ok(propinfoset->rgPropertyInfos[i].vtType != VT_EMPTY, "$d, got %d\n", i,
+                    propinfoset->rgPropertyInfos[i].vtType);
+
+            propidlist.rgPropertyIDs[i] = propinfoset->rgPropertyInfos[i].dwPropertyID;
+        }
+
+        for (i = 0; i < propinfoset->cPropertyInfos; i++)
+            VariantClear(&propinfoset->rgPropertyInfos[i].vValues);
+
+        CoTaskMemFree(propinfoset->rgPropertyInfos);
+        CoTaskMemFree(propinfoset);
+
+        hr = IDBProperties_GetProperties(props, 1, &propidlist, &propcnt, &propset);
+        ok(hr == S_OK, "got 0x%08x\n", hr);
+        ok(propidlist.cPropertyIDs == 14, "got %d\n", propinfoset->cPropertyInfos);
+
+        for (i = 0; i < propidlist.cPropertyIDs; i++)
+        {
+            ok(properties[i] == propidlist.rgPropertyIDs[i], "%d, got %d\n", i,
+                    propidlist.rgPropertyIDs[i]);
+
+            propidlist.rgPropertyIDs[i] = propinfoset->rgPropertyInfos[i].dwPropertyID;
+        }
+
+        CoTaskMemFree(propidlist.rgPropertyIDs);
+        CoTaskMemFree(propset);
+    }
+
+    IDBProperties_Release(props);
+}
+
 START_TEST(database)
 {
     OleInitialize(NULL);
@@ -975,6 +1057,7 @@ START_TEST(database)
     test_errorinfo();
     test_initializationstring();
     test_dslocator();
+    test_odbc_provider();
 
     /* row position */
     test_rowposition();
-- 
2.25.1




More information about the wine-devel mailing list