From b95d31845407debb1b19ec58ce61a767b65041be Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Sat, 6 Jun 2015 17:19:05 +0300 Subject: [PATCH] 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 c1e440df97d..042be383e3e 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)