From: Piotr Caban <piotr@codeweavers.com> --- dlls/msado15/tests/msado15.c | 79 ++++++++++++++++++++++++++++-------- 1 file changed, 61 insertions(+), 18 deletions(-) diff --git a/dlls/msado15/tests/msado15.c b/dlls/msado15/tests/msado15.c index 03424b9e929..be4e9fd0e2d 100644 --- a/dlls/msado15/tests/msado15.c +++ b/dlls/msado15/tests/msado15.c @@ -584,6 +584,7 @@ struct test_rowset BOOL filter_chapter; BOOL exact_scroll; + BOOL locate; int idx; }; @@ -849,7 +850,7 @@ static HRESULT WINAPI column_info_GetColumnInfo(IColumnsInfo *This, DBORDINAL *c { DBCOLUMNINFO *dbcolumn; - CHECK_EXPECT(column_info_GetColumnInfo); + CHECK_EXPECT2(column_info_GetColumnInfo); *columns = 2; *stringsbuffer = CoTaskMemAlloc(sizeof(L"Column1")); @@ -1418,8 +1419,12 @@ static HRESULT WINAPI rowset_QueryInterface(IRowsetExactScroll *iface, REFIID ri { *obj = &rowset->IRowsetExactScroll_iface; } - else if (IsEqualIID(riid, &IID_IRowsetLocate) || - IsEqualIID(riid, &IID_IRowsetScroll) || + else if (IsEqualIID(riid, &IID_IRowsetLocate)) + { + if (!rowset->locate && !rowset->exact_scroll) return E_NOINTERFACE; + *obj = &rowset->IRowsetExactScroll_iface; + } + else if (IsEqualIID(riid, &IID_IRowsetScroll) || IsEqualIID(riid, &IID_IRowsetExactScroll)) { if (!rowset->exact_scroll) return E_NOINTERFACE; @@ -1760,6 +1765,7 @@ static void test_ADORecordsetConstruction(BOOL exact_scroll) testrowset.refs = 1; testrowset.IViewChapter_iface.lpVtbl = &view_chapter; testrowset.IViewFilter_iface.lpVtbl = &view_filter; + testrowset.locate = FALSE; testrowset.exact_scroll = exact_scroll; testrowset.idx = 0; testrowset.filter_chapter = FALSE; @@ -3382,11 +3388,11 @@ static ULONG WINAPI open_rowset_Release(IOpenRowset *iface) return 1; } +static struct test_rowset open_rowset_test; static HRESULT WINAPI open_rowset_OpenRowset(IOpenRowset *iface, IUnknown *unk_outer, DBID *table_id, DBID *index_id, REFIID riid, ULONG propsets_count, DBPROPSET propsets[], IUnknown **rowset) { - static struct test_rowset testrowset; DBPROP *prop; int i; @@ -3534,19 +3540,21 @@ static HRESULT WINAPI open_rowset_OpenRowset(IOpenRowset *iface, IUnknown *unk_o winetest_pop_context(); } - testrowset.IRowsetExactScroll_iface.lpVtbl = &rowset_vtbl; - testrowset.IRowsetInfo_iface.lpVtbl = &rowset_info; - testrowset.IColumnsInfo_iface.lpVtbl = &column_info; - testrowset.IRowsetUpdate_iface.lpVtbl = &rowset_update; - testrowset.IAccessor_iface.lpVtbl = &accessor; - testrowset.IRowsetView_iface.lpVtbl = &rowset_view; - testrowset.IChapteredRowset_iface.lpVtbl = &chaptered_rowset; - testrowset.IRowsetCurrentIndex_iface.lpVtbl = &rowset_current_index; - testrowset.refs = 1; - testrowset.IViewChapter_iface.lpVtbl = &view_chapter; - testrowset.IViewFilter_iface.lpVtbl = &view_filter; - - *rowset = (IUnknown *)&testrowset.IRowsetExactScroll_iface; + memset(&open_rowset_test, 0, sizeof(open_rowset_test)); + open_rowset_test.IRowsetExactScroll_iface.lpVtbl = &rowset_vtbl; + open_rowset_test.IRowsetInfo_iface.lpVtbl = &rowset_info; + open_rowset_test.IColumnsInfo_iface.lpVtbl = &column_info; + open_rowset_test.IRowsetUpdate_iface.lpVtbl = &rowset_update; + open_rowset_test.IAccessor_iface.lpVtbl = &accessor; + open_rowset_test.IRowsetView_iface.lpVtbl = &rowset_view; + open_rowset_test.IChapteredRowset_iface.lpVtbl = &chaptered_rowset; + open_rowset_test.IRowsetCurrentIndex_iface.lpVtbl = &rowset_current_index; + open_rowset_test.refs = 1; + open_rowset_test.IViewChapter_iface.lpVtbl = &view_chapter; + open_rowset_test.IViewFilter_iface.lpVtbl = &view_filter; + open_rowset_test.locate = TRUE; + + *rowset = (IUnknown *)&open_rowset_test.IRowsetExactScroll_iface; return S_OK; } @@ -3562,9 +3570,14 @@ static IOpenRowset open_rowset = { &open_rowset_vtbl }; static void test_ADOConnectionConstruction(void) { ADOConnectionConstruction15 *conn_constr; + ADORecordsetConstruction *rec_constr; + IRowsetExactScroll *rowset_es; _Recordset *recordset; + IUnknown *unk, *unk2; VARIANT v, missing; _Connection *conn; + IColumnsInfo *ci; + IRowset *rowset; LONG state; HRESULT hr; @@ -3609,15 +3622,45 @@ static void test_ADOConnectionConstruction(void) SET_EXPECT(open_rowset_QI_IDBCreateCommand); SET_EXPECT(open_rowset_OpenRowset); SET_EXPECT(rowset_info_GetProperties); + SET_EXPECT(column_info_GetColumnInfo); + SET_EXPECT(accessor_CreateAccessor); hr = _Recordset_Open(recordset, v, missing, adOpenKeyset, adLockOptimistic, adCmdUnspecified); ok(hr == S_OK, "got %08lx\n", hr); todo_wine CHECK_CALLED(open_rowset_QI_IDBCreateCommand); CHECK_CALLED(open_rowset_OpenRowset); CHECK_CALLED(rowset_info_GetProperties); + CHECK_CALLED(column_info_GetColumnInfo); + CHECK_CALLED(accessor_CreateAccessor); VariantClear(&v); + hr = _Recordset_QueryInterface(recordset, &IID_ADORecordsetConstruction, (void **)&rec_constr); + ok(hr == S_OK, "got %08lx\n", hr); + hr = ADORecordsetConstruction_get_Rowset(rec_constr, &unk); + ok(hr == S_OK, "got %08lx\n", hr); + ADORecordsetConstruction_Release(rec_constr); + hr = IUnknown_QueryInterface(unk, &IID_IRowset, (void **)&rowset); + ok(hr == S_OK, "got %08lx\n", hr); + + todo_wine ok(rowset != (IRowset *)&open_rowset_test.IRowsetExactScroll_iface, "rowset not wrapped\n"); + hr = IRowset_QueryInterface(rowset, &IID_IRowsetExactScroll, (void **)&rowset_es); + todo_wine ok(hr == S_OK, "got %08lx\n", hr); + if (rowset_es) IRowsetExactScroll_Release(rowset_es); + + hr = IRowset_QueryInterface(rowset, &IID_IColumnsInfo, (void **)&ci); + ok(hr == S_OK, "got %08lx\n", hr); + ok(ci == &open_rowset_test.IColumnsInfo_iface, "modified ColumnsInfo interface exposed\n"); + hr = IColumnsInfo_QueryInterface(ci, &IID_IUnknown, (void **)&unk2); + ok(hr == S_OK, "got %08lx\n", hr); + IColumnsInfo_Release(ci); + todo_wine ok(unk != unk2, "IUnknown interfaces match\n"); + IUnknown_Release(unk2); + IUnknown_Release(unk); + IRowset_Release(rowset); + + SET_EXPECT(accessor_ReleaseAccessor); ok(!_Recordset_Release(recordset), "_Recordset not released\n"); - _Connection_Release(conn); + CHECK_CALLED(accessor_ReleaseAccessor); + ok(!_Connection_Release(conn), "_Connection not released\n"); } START_TEST(msado15) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9891