[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