Nikolay Sivov : oledb32/tests: Added a test for GetDataSource() with created provider and custom properties.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Jun 9 08:25:52 CDT 2015
Module: wine
Branch: master
Commit: b95d31845407debb1b19ec58ce61a767b65041be
URL: http://source.winehq.org/git/wine.git/?a=commit;h=b95d31845407debb1b19ec58ce61a767b65041be
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Sat Jun 6 17:19:05 2015 +0300
oledb32/tests: Added a test for GetDataSource() with created provider and custom properties.
---
dlls/oledb32/tests/database.c | 184 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 184 insertions(+)
diff --git a/dlls/oledb32/tests/database.c b/dlls/oledb32/tests/database.c
index c1e440d..042be38 100644
--- a/dlls/oledb32/tests/database.c
+++ b/dlls/oledb32/tests/database.c
@@ -21,6 +21,7 @@
#define COBJMACROS
#define CONST_VTABLE
+#define DBINITCONSTANTS
#include "windef.h"
#include "winbase.h"
@@ -29,6 +30,7 @@
#include "msdasc.h"
#include "msdaguid.h"
#include "initguid.h"
+#include "oledb.h"
#include "oledberr.h"
#include "wine/test.h"
@@ -103,6 +105,185 @@ static void test_GetDataSource(WCHAR *initstring)
IDataInitialize_Release(datainit);
}
+/* IDBProperties stub */
+static HRESULT WINAPI dbprops_QI(IDBProperties *iface, REFIID riid, void **obj)
+{
+ if (IsEqualIID(riid, &IID_IDBProperties) || IsEqualIID(riid, &IID_IUnknown)) {
+ *obj = iface;
+ IDBProperties_AddRef(iface);
+ return S_OK;
+ }
+
+ *obj = NULL;
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI dbprops_AddRef(IDBProperties *iface)
+{
+ return 2;
+}
+
+static ULONG WINAPI dbprops_Release(IDBProperties *iface)
+{
+ return 1;
+}
+
+static HRESULT WINAPI dbprops_GetProperties(IDBProperties *iface, ULONG cPropertyIDSets,
+ const DBPROPIDSET rgPropertyIDSets[], ULONG *pcPropertySets, DBPROPSET **prgPropertySets)
+{
+ ok(0, "unexpected call\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI dbprops_GetPropertyInfo(IDBProperties *iface, ULONG cPropertyIDSets,
+ const DBPROPIDSET rgPropertyIDSets[], ULONG *pcPropertyInfoSets, DBPROPINFOSET **prgPropertyInfoSets,
+ OLECHAR **ppDescBuffer)
+{
+ ok(0, "unexpected call\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI dbprops_SetProperties(IDBProperties *iface, ULONG set_count, DBPROPSET propsets[])
+{
+ ok(set_count == 1, "got %u\n", set_count);
+
+ ok(IsEqualIID(&propsets->guidPropertySet, &DBPROPSET_DBINIT), "set guid %s\n", wine_dbgstr_guid(&propsets->guidPropertySet));
+todo_wine
+ ok(propsets->cProperties == 2, "got propcount %u\n", propsets->cProperties);
+
+if (propsets->cProperties == 2) {
+ ok(propsets->rgProperties[0].dwPropertyID == DBPROP_INIT_DATASOURCE, "got propid[0] %u\n", propsets->rgProperties[0].dwPropertyID);
+ ok(propsets->rgProperties[0].dwOptions == DBPROPOPTIONS_REQUIRED, "got options[0] %u\n", propsets->rgProperties[0].dwOptions);
+ ok(propsets->rgProperties[0].dwStatus == 0, "got status[0] %u\n", propsets->rgProperties[0].dwStatus);
+ ok(V_VT(&propsets->rgProperties[0].vValue) == VT_BSTR, "got vartype[0] %u\n", V_VT(&propsets->rgProperties[0].vValue));
+
+ ok(propsets->rgProperties[1].dwPropertyID == DBPROP_INIT_PROVIDERSTRING, "got propid[1] %u\n", propsets->rgProperties[1].dwPropertyID);
+ ok(propsets->rgProperties[1].dwOptions == DBPROPOPTIONS_REQUIRED, "got options[1] %u\n", propsets->rgProperties[1].dwOptions);
+ ok(propsets->rgProperties[1].dwStatus == 0, "got status[1] %u\n", propsets->rgProperties[1].dwStatus);
+ ok(V_VT(&propsets->rgProperties[1].vValue) == VT_BSTR, "got vartype[1] %u\n", V_VT(&propsets->rgProperties[1].vValue));
+}
+ return S_OK;
+}
+
+static const IDBPropertiesVtbl dbpropsvtbl = {
+ dbprops_QI,
+ dbprops_AddRef,
+ dbprops_Release,
+ dbprops_GetProperties,
+ dbprops_GetPropertyInfo,
+ dbprops_SetProperties
+};
+
+static IDBProperties dbprops = { &dbpropsvtbl };
+
+/* IPersist stub */
+static HRESULT WINAPI dbpersist_QI(IPersist *iface, REFIID riid, void **obj)
+{
+ if (IsEqualIID(riid, &IID_IPersist) || IsEqualIID(riid, &IID_IUnknown)) {
+ *obj = iface;
+ IPersist_AddRef(iface);
+ return S_OK;
+ }
+
+ *obj = NULL;
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI dbpersist_AddRef(IPersist *iface)
+{
+ return 2;
+}
+
+static ULONG WINAPI dbpersist_Release(IPersist *iface)
+{
+ return 1;
+}
+
+static HRESULT WINAPI dbpersist_GetClassID(IPersist *iface, CLSID *clsid)
+{
+ static const WCHAR msdasqlW[] = {'M','S','D','A','S','Q','L',0};
+ return CLSIDFromProgID(msdasqlW, clsid);
+}
+
+static const IPersistVtbl dbpersistvtbl = {
+ dbpersist_QI,
+ dbpersist_AddRef,
+ dbpersist_Release,
+ dbpersist_GetClassID
+};
+
+static IPersist dbpersist = { &dbpersistvtbl };
+
+/* IDBInitialize stub */
+static HRESULT WINAPI dbinit_QI(IDBInitialize *iface, REFIID riid, void **obj)
+{
+ if (IsEqualIID(riid, &IID_IDBInitialize) || IsEqualIID(riid, &IID_IUnknown)) {
+ *obj = iface;
+ IDBInitialize_AddRef(iface);
+ return S_OK;
+ }
+ else if (IsEqualIID(riid, &IID_IPersist)) {
+ *obj = &dbpersist;
+ return S_OK;
+ }
+ else if (IsEqualIID(riid, &IID_IDBProperties)) {
+ *obj = &dbprops;
+ return S_OK;
+ }
+
+ *obj = NULL;
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI dbinit_AddRef(IDBInitialize *iface)
+{
+ return 2;
+}
+
+static ULONG WINAPI dbinit_Release(IDBInitialize *iface)
+{
+ return 1;
+}
+
+static HRESULT WINAPI dbinit_Initialize(IDBInitialize *iface)
+{
+ ok(0, "unexpected call\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI dbinit_Uninitialize(IDBInitialize *iface)
+{
+ ok(0, "unexpected call\n");
+ return E_NOTIMPL;
+}
+
+static const IDBInitializeVtbl dbinitvtbl = {
+ dbinit_QI,
+ dbinit_AddRef,
+ dbinit_Release,
+ dbinit_Initialize,
+ dbinit_Uninitialize
+};
+
+static IDBInitialize dbinittest = { &dbinitvtbl };
+
+static void test_GetDataSource2(WCHAR *initstring)
+{
+ IDataInitialize *datainit = NULL;
+ IDBInitialize *dbinit = NULL;
+ HRESULT hr;
+
+ hr = CoCreateInstance(&CLSID_MSDAINITIALIZE, NULL, CLSCTX_INPROC_SERVER, &IID_IDataInitialize,(void**)&datainit);
+ ok(hr == S_OK, "got %08x\n", hr);
+
+ dbinit = &dbinittest;
+ hr = IDataInitialize_GetDataSource(datainit, NULL, CLSCTX_INPROC_SERVER, initstring, &IID_IDBInitialize, (IUnknown**)&dbinit);
+todo_wine
+ ok(hr == S_OK, "got %08x\n", hr);
+
+ IDataInitialize_Release(datainit);
+}
+
static void test_database(void)
{
static WCHAR initstring_jet[] = {'P','r','o','v','i','d','e','r','=','M','i','c','r','o','s','o','f','t','.',
@@ -110,6 +291,8 @@ static void test_database(void)
'D','a','t','a',' ','S','o','u','r','c','e','=','d','u','m','m','y',';',
'P','e','r','s','i','s','t',' ','S','e','c','u','r','i','t','y',' ','I','n','f','o','=','F','a','l','s','e',';',0};
static WCHAR initstring_lower[] = {'d','a','t','a',' ','s','o','u','r','c','e','=','d','u','m','m','y',';',0};
+ static WCHAR customprop[] = {'d','a','t','a',' ','s','o','u','r','c','e','=','d','u','m','m','y',';',
+ 'c','u','s','t','o','m','p','r','o','p','=','1','2','3','.','4',';',0};
IDataInitialize *datainit = NULL;
HRESULT hr;
@@ -125,6 +308,7 @@ static void test_database(void)
test_GetDataSource(initstring_jet);
test_GetDataSource(initstring_default);
test_GetDataSource(initstring_lower);
+ test_GetDataSource2(customprop);
}
static void test_errorinfo(void)
More information about the wine-cvs
mailing list