[PATCH 0/2] MR9292: msado15: Mark recordset open in ADORecordsetConstruction:put_Rowset.
From: Piotr Caban <piotr(a)codeweavers.com> --- dlls/msado15/tests/msado15.c | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/dlls/msado15/tests/msado15.c b/dlls/msado15/tests/msado15.c index 03eaab92b39..893742e75df 100644 --- a/dlls/msado15/tests/msado15.c +++ b/dlls/msado15/tests/msado15.c @@ -64,6 +64,12 @@ static char mdbpath[MAX_PATH]; expect_ ## func = called_ ## func = FALSE; \ }while(0) +DEFINE_EXPECT(rowset_QI_IRowset); +DEFINE_EXPECT(rowset_QI_IRowsetExactScroll); +DEFINE_EXPECT(rowset_QI_IRowsetInfo); +DEFINE_EXPECT(rowset_QI_IColumnsInfo); +DEFINE_EXPECT(rowset_QI_IDBAsynchStatus); +DEFINE_EXPECT(rowset_QI_IAccessor); DEFINE_EXPECT(rowset_info_GetProperties); DEFINE_EXPECT(column_info_GetColumnInfo); DEFINE_EXPECT(rowset_GetNextRows); @@ -635,35 +641,35 @@ static HRESULT WINAPI rowset_QueryInterface(IRowsetExactScroll *iface, REFIID ri if (IsEqualIID(riid, &IID_IRowset) || IsEqualIID(riid, &IID_IUnknown)) { - trace("Requested interface IID_IRowset\n"); + CHECK_EXPECT(rowset_QI_IRowset); *obj = &rowset->IRowsetExactScroll_iface; } else if (IsEqualIID(riid, &IID_IRowsetLocate) || IsEqualIID(riid, &IID_IRowsetScroll) || IsEqualIID(riid, &IID_IRowsetExactScroll)) { - trace("Requested interface IID_IRowsetExactScroll\n"); + CHECK_EXPECT(rowset_QI_IRowsetExactScroll); if (!rowset->exact_scroll) return E_NOINTERFACE; *obj = &rowset->IRowsetExactScroll_iface; } else if (IsEqualIID(riid, &IID_IRowsetInfo)) { - trace("Requested interface IID_IRowsetInfo\n"); + CHECK_EXPECT(rowset_QI_IRowsetInfo); *obj = &rowset->IRowsetInfo_iface; } else if (IsEqualIID(riid, &IID_IColumnsInfo)) { - trace("Requested interface IID_IColumnsInfo\n"); + CHECK_EXPECT(rowset_QI_IColumnsInfo); *obj = &rowset->IColumnsInfo_iface; } else if (IsEqualIID(riid, &IID_IDBAsynchStatus)) { - trace("Requested interface IID_IDBAsynchStatus\n"); + CHECK_EXPECT(rowset_QI_IDBAsynchStatus); return E_NOINTERFACE; } else if (IsEqualIID(riid, &IID_IAccessor)) { - trace("Requested interface IID_IAccessor\n"); + CHECK_EXPECT(rowset_QI_IAccessor); return E_NOINTERFACE; } else if (IsEqualIID(riid, &UKN_INTERFACE)) @@ -879,10 +885,21 @@ static void test_ADORecordsetConstruction(BOOL exact_scroll) rowset = (IUnknown*)&testrowset.IRowsetExactScroll_iface; + SET_EXPECT( rowset_QI_IRowset ); + SET_EXPECT( rowset_QI_IRowsetInfo ); + SET_EXPECT( rowset_QI_IRowsetExactScroll ); + SET_EXPECT( rowset_QI_IDBAsynchStatus ); + SET_EXPECT( rowset_QI_IColumnsInfo ); SET_EXPECT( rowset_info_GetProperties ); SET_EXPECT( column_info_GetColumnInfo ); hr = ADORecordsetConstruction_put_Rowset( construct, rowset ); + CHECK_CALLED( rowset_QI_IRowset ); + todo_wine CHECK_CALLED( rowset_QI_IRowsetInfo ); + todo_wine CHECK_CALLED( rowset_QI_IRowsetExactScroll ); + todo_wine CHECK_CALLED( rowset_QI_IDBAsynchStatus ); todo_wine CHECK_CALLED( rowset_info_GetProperties ); + if (exact_scroll) CHECK_CALLED( rowset_QI_IColumnsInfo ); + else todo_wine CHECK_NOT_CALLED( rowset_QI_IColumnsInfo ); if (exact_scroll) CHECK_CALLED( column_info_GetColumnInfo ); else todo_wine CHECK_NOT_CALLED( column_info_GetColumnInfo ); ok( hr == S_OK, "got %08lx\n", hr ); @@ -892,8 +909,10 @@ static void test_ADORecordsetConstruction(BOOL exact_scroll) todo_wine ok( state == adStateOpen, "state = %ld\n", state ); count = -1; + SET_EXPECT( rowset_QI_IColumnsInfo ); SET_EXPECT( column_info_GetColumnInfo ); hr = Fields_get_Count( fields, &count ); + todo_wine CHECK_CALLED( rowset_QI_IColumnsInfo ); todo_wine CHECK_CALLED( column_info_GetColumnInfo ); ok( count == 1, "got %ld\n", count ); @@ -919,8 +938,10 @@ static void test_ADORecordsetConstruction(BOOL exact_scroll) Field_Release( field ); + SET_EXPECT( rowset_QI_IRowsetExactScroll ); if (exact_scroll) SET_EXPECT( rowset_GetExactPosition ); hr = _Recordset_get_RecordCount( recordset, &size ); + todo_wine CHECK_CALLED( rowset_QI_IRowsetExactScroll ); if (exact_scroll) todo_wine CHECK_CALLED( rowset_GetExactPosition ); ok( hr == S_OK, "got %08lx\n", hr ); todo_wine ok( size == (exact_scroll ? 3 : -1), "size = %Id\n", size ); @@ -954,7 +975,9 @@ static void test_ADORecordsetConstruction(BOOL exact_scroll) Fields_Release(fields); ADORecordsetConstruction_Release(construct); + SET_EXPECT( rowset_QI_IAccessor ); ok( !_Recordset_Release( recordset ), "_Recordset not released\n" ); + todo_wine CHECK_CALLED( rowset_QI_IAccessor ); ok( testrowset.refs == 1, "got %ld\n", testrowset.refs ); } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9292
From: Piotr Caban <piotr(a)codeweavers.com> --- dlls/msado15/recordset.c | 3 +++ dlls/msado15/tests/msado15.c | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/dlls/msado15/recordset.c b/dlls/msado15/recordset.c index bb1102b1be7..10e2eb47740 100644 --- a/dlls/msado15/recordset.c +++ b/dlls/msado15/recordset.c @@ -2811,6 +2811,8 @@ static HRESULT WINAPI rsconstruction_put_Rowset(ADORecordsetConstruction *iface, TRACE( "%p, %p\n", recordset, unk ); + if (recordset->state == adStateOpen) return MAKE_ADO_HRESULT( adErrObjectOpen ); + hr = IUnknown_QueryInterface(unk, &IID_IRowset, (void**)&rowset); if ( FAILED(hr) ) return E_FAIL; @@ -2820,6 +2822,7 @@ static HRESULT WINAPI rsconstruction_put_Rowset(ADORecordsetConstruction *iface, if ( !get_column_count(recordset) ) map_rowset_fields(recordset, &recordset->fields); + recordset->state = adStateOpen; return S_OK; } diff --git a/dlls/msado15/tests/msado15.c b/dlls/msado15/tests/msado15.c index 893742e75df..d81ab7da6cf 100644 --- a/dlls/msado15/tests/msado15.c +++ b/dlls/msado15/tests/msado15.c @@ -906,7 +906,7 @@ static void test_ADORecordsetConstruction(BOOL exact_scroll) hr = _Recordset_get_State( recordset, &state ); ok( hr == S_OK, "got %08lx\n", hr ); - todo_wine ok( state == adStateOpen, "state = %ld\n", state ); + ok( state == adStateOpen, "state = %ld\n", state ); count = -1; SET_EXPECT( rowset_QI_IColumnsInfo ); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9292
participants (2)
-
Piotr Caban -
Piotr Caban (@piotr)