//-------------------------------------------------------------------- // Microsoft OLE DB Test // // Copyright (C) 1995-2000 Microsoft Corporation // // @doc // // @module IRNotify.cpp | This module is a general library for interface testing // /////////////////////////////////////////////////////////////////// // Includes // /////////////////////////////////////////////////////////////////// #define DBINITCONSTANTS // Must be defined to initialize constants in OLEDB.H #define INITGUID #include "MODStandard.hpp" #include "IRNotify.h" // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Module Values // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // {{ TCW_MODULE_GLOBALS DECLARE_MODULE_CLSID = { 0x7cd27cb8, 0xa1f8, 0x11d0, { 0x94, 0xda, 0x00, 0xc0, 0x4f, 0xb6, 0x6a, 0x50 }}; DECLARE_MODULE_NAME("IRowsetNotify"); DECLARE_MODULE_OWNER("Microsoft"); DECLARE_MODULE_DESCRIP("Test IRowsetNotify Interface"); DECLARE_MODULE_VERSION(795921705); // TCW_WizardVersion(2) // TCW_Automation(True) // }} TCW_MODULE_GLOBALS_END //-------------------------------------------------------------------- // @func Module level initialization routine // // @rdesc Success or Failure // @flag TRUE | Successful initialization // @flag FALSE | Initialization problems // BOOL ModuleInit(CThisTestModule* pThisTestModule) { return CommonModuleInit(pThisTestModule, IID_IRowsetNotify, SIZEOF_TABLE, ROWSET_INTERFACE); } //-------------------------------------------------------------------- // @func Module level termination routine // // @rdesc Success or Failure // @flag TRUE | Successful initialization // @flag FALSE | Initialization problems // BOOL ModuleTerminate(CThisTestModule* pThisTestModule) { return CommonModuleTerminate(pThisTestModule); } /////////////////////////////////////////////////////////////////////////////// // Helper Functions // /////////////////////////////////////////////////////////////////////////////// BOOL IsValidEvent(DBREASON eReason, DBEVENTPHASE ePhase) { //This check is a little more than just making sure eReason/ePhase //fall into a valid range. Some reasons only have 1 phase, while others //have all phases... //So this comparion is, "is this a valid phase for this reason"... switch(eReason) { //All Phases can occur case DBREASON_ROWSET_FETCHPOSITIONCHANGE: case DBREASON_ROWSET_CHANGED: case DBREASON_COLUMN_SET: case DBREASON_ROW_DELETE: case DBREASON_ROW_FIRSTCHANGE: case DBREASON_ROW_INSERT: case DBREASON_ROW_RESYNCH: case DBREASON_ROW_UNDOCHANGE: case DBREASON_ROW_UNDOINSERT: case DBREASON_ROW_UNDODELETE: case DBREASON_ROW_UPDATE: switch(ePhase) { case DBEVENTPHASE_OKTODO: case DBEVENTPHASE_ABOUTTODO: case DBEVENTPHASE_SYNCHAFTER: case DBEVENTPHASE_DIDEVENT: case DBEVENTPHASE_FAILEDTODO: return TRUE; default: break; } //DIDEVENT can occur case DBREASON_ROWSET_RELEASE: case DBREASON_COLUMN_RECALCULATED: case DBREASON_ROW_ACTIVATE: case DBREASON_ROW_RELEASE: switch(ePhase) { case DBEVENTPHASE_DIDEVENT: return TRUE; default: break; } } return FALSE; } REASONTYPE ReasonType(DBREASON eReason) { ASSERT(IsValidEvent(eReason)); switch(eReason) { //All Phases can occur case DBREASON_ROWSET_FETCHPOSITIONCHANGE: case DBREASON_ROWSET_CHANGED: case DBREASON_ROWSET_RELEASE: return REASONTYPE_ROWSET; case DBREASON_COLUMN_SET: case DBREASON_COLUMN_RECALCULATED: return REASONTYPE_COLUMN; case DBREASON_ROW_DELETE: case DBREASON_ROW_FIRSTCHANGE: case DBREASON_ROW_INSERT: case DBREASON_ROW_RESYNCH: case DBREASON_ROW_UNDOCHANGE: case DBREASON_ROW_UNDOINSERT: case DBREASON_ROW_UNDODELETE: case DBREASON_ROW_UPDATE: case DBREASON_ROW_ACTIVATE: case DBREASON_ROW_RELEASE: return REASONTYPE_ROW; } return REASONTYPE_INVALID; } BOOL IsMultiPhaseReason(DBREASON eReason) { ASSERT(IsValidEvent(eReason)); switch(eReason) { //All Single Phase Reasons case DBREASON_ROWSET_RELEASE: case DBREASON_COLUMN_RECALCULATED: case DBREASON_ROW_ACTIVATE: case DBREASON_ROW_RELEASE: return FALSE; } return TRUE; } BOOL DisplayNotification(WCHAR* pwszHeader, DBCOUNTITEM cRows, const HROW rghRows[], DBORDINAL cColumns, DBORDINAL* rgColumns, DBREASON eReason, DBEVENTPHASE ePhase, BOOL fError) { //Header TOUTPUT_(pwszHeader); //Reason TOUTPUT_(L" - " << GetReasonDesc(eReason)); //Phase TOUTPUT_(L" - " << GetPhaseDesc(ePhase)); //cRows if(cRows) { TOUTPUT_(L" - cRows - " << cRows); TOUTPUT_(L"["); for(DBCOUNTITEM i=0; iGetErrorObject()))++; return TRUE; } BOOL IsSameRow(IUnknown* pIUnkRowset, HROW hRow1, HROW hRow2) { TBEGIN IRowsetIdentity* pIRowsetIdentity = NULL; if(hRow1 != hRow2) { //Obtain the IRowsetIdentity interface TESTC_(QI(pIUnkRowset, IID_IRowsetIdentity, (void**)&pIRowsetIdentity),S_OK); //See of these rows are equal... QTESTC_(pIRowsetIdentity->IsSameRow(hRow1, hRow2),S_OK); } CLEANUP: SAFE_RELEASE(pIRowsetIdentity); TRETURN } /////////////////////////////////////////////////////////////////////////////// // COMMAND // /////////////////////////////////////////////////////////////////////////////// COMMAND::COMMAND ( COMMANDTYPE eCommandType ) { m_eCommandType = eCommandType; m_pvObjectId = NULL; m_ulCommandLevel = 0; m_cThreads = 0; m_eReason = 0; m_ePhase = 0; m_cRows = 0; m_cColumns = 0; m_rgColumns = NULL; m_dwOption = 0; m_hrExpected = S_OK; m_fCanceled = FALSE; } COMMAND::COMMAND ( COMMANDTYPE eCommandType, void* pvObjectId, ULONG ulCommandLevel, ULONG cThreads, DBREASON eReason, DBEVENTPHASE ePhase, HRESULT hrExpected, DBCOUNTITEM cRows, ULONG rgRowIds[], DBORDINAL cColumns, ULONG rgColumns[], DWORD dwOption ) { ASSERT(pvObjectId); m_pvObjectId = pvObjectId; m_eCommandType = eCommandType; m_ulCommandLevel= ulCommandLevel; m_cThreads = cThreads; m_eReason = eReason; m_ePhase = ePhase; m_cRows = cRows; memset(m_rgRowIds, 0, MAX_ROW_COUNT * sizeof(DBCOUNTITEM)); memset(m_rghRows, 0, MAX_ROW_COUNT * sizeof(HROW)); DBCOUNTITEM sum = 0; DBCOUNTITEM i = 0; for(i=0; iNextPhase(m_eReason, m_ePhase)) { SetPhase(m_pListener->NextPhase(m_eReason, m_ePhase)); } else { m_bCompleted = TRUE; } return TRUE; } BOOL EXPECT::IsEqual(DBEVENTPHASE ePhase) { return IsEqual(m_pListener, m_pIRowset, m_cRows, m_rghRows, m_cColumns, m_rgColumns, m_eReason, ePhase); } BOOL EXPECT::IsEqual(CImpIListener* pListener, IRowset* pIRowset, DBCOUNTITEM cRows, HROW* rghRows, DBORDINAL cColumns, DBORDINAL rgColumns[], DBREASON eReason, DBEVENTPHASE ePhase) { TBEGIN ASSERT(pListener); ASSERT(pIRowset); DBORDINAL i; //Listener QTESTC(m_pListener == pListener); //IRowset QTESTC(m_pIRowset == pIRowset); //Rows QTESTC(m_cRows == cRows); for(i=0; iIsWantedReason(m_eReason)) { if(!m_pListener->IsWantedPhase(m_eReason, DBEVENTPHASE_DIDEVENT)) { if(IsMultiPhaseReason(m_eReason) && m_ulTimesNotified==0) DisplayExpectation(); QTESTC(VerifyEqual(DBEVENTPHASE_DIDEVENT)); } else { //We should have been notified for this reason //If not we have a problem, display expected notification //The only exception to the rule is ROW_RELEASE. //Some providers may not have exact refcounts, or the rows may always //be active, (row count always 1), so just indicate warning... //The other exception to the rule is DBREASON_COLUMN_RECALCULATED //Providers are not required to support notifications for this reason (see MDAC bug 16595) if(m_eReason == DBREASON_ROW_RELEASE) { if(m_ulTimesNotified == 0 || !m_bCompleted) TWARNING(L"ROW_RELEASE never called, Row RefCounts may not be exact..."); QTESTC(VerifyEqual(DBEVENTPHASE_DIDEVENT)); } else if (m_eReason == DBREASON_COLUMN_RECALCULATED) { if(m_ulTimesNotified == 0 || !m_bCompleted) TWARNING(L"Did not receive notifications for DBREASON_COLUMN_RECALCULATED ..."); QTESTC(VerifyEqual(DBEVENTPHASE_DIDEVENT)); } else if (m_eReason == DBREASON_ROW_ACTIVATE) { if(m_ulTimesNotified == 0) { DBCOUNTITEM cRowsExpected = 0; for (DBCOUNTITEM i=0; i Release testing making sure no notifications m_cRowsetRef++; //AddRef the rowset so it doesn't fire a notification pIRowset()->AddRef(); return m_cRowsetRef; } ULONG CRowsetObj::ReleaseRowset() { if(m_cRowsetRef) { m_cRowsetRef--; pIRowset()->Release(); return m_cRowsetRef; } return m_cRowsetRef; } BOOL CRowsetObj::GetReentrantEvents() { return m_bReentrantEvents; } BOOL CRowsetObj::IsQuickRestart() { return m_bQuickRestart; } ULONG_PTR CRowsetObj::GetGranularity() { return m_ulSupportedGranularity; } ULONG_PTR CRowsetObj::GetSupportedPhases() { return m_ulSupportedPhases; } BOOL CRowsetObj::IsSupportedPhase(DBEVENTPHASE ePhase) { ASSERT(IsValidEvent(DBREASON_ROWSET_FETCHPOSITIONCHANGE, ePhase)); switch(ePhase) { case DBEVENTPHASE_OKTODO: return ((m_ulSupportedPhases & DBPROPVAL_NP_OKTODO) != 0); case DBEVENTPHASE_ABOUTTODO: return ((m_ulSupportedPhases & DBPROPVAL_NP_ABOUTTODO) != 0); case DBEVENTPHASE_SYNCHAFTER: return ((m_ulSupportedPhases & DBPROPVAL_NP_SYNCHAFTER) != 0); case DBEVENTPHASE_DIDEVENT: return ((m_ulSupportedPhases & DBPROPVAL_NP_DIDEVENT) != 0); case DBEVENTPHASE_FAILEDTODO: return ((m_ulSupportedPhases & DBPROPVAL_NP_FAILEDTODO) != 0); } return FALSE; } BOOL CRowsetObj::GetNotificationProperties() { TBEGIN //Initialize all property values, incase some are not supported m_ulSupportedGranularity = DBPROPVAL_NT_SINGLEROW; m_ulSupportedPhases = DBPROPVAL_NP_FAILEDTODO | DBPROPVAL_NP_DIDEVENT; m_bReentrantEvents = TRUE; m_bQuickRestart = TRUE; VARIANT_BOOL bValue = VARIANT_TRUE; //DBPROP_NOTIFICATIONGRANULARITY if(SupportedProperty(DBPROP_NOTIFICATIONGRANULARITY, DBPROPSET_ROWSET)) TCHECK(GetProperty(DBPROP_NOTIFICATIONGRANULARITY, DBPROPSET_ROWSET, &m_ulSupportedGranularity),TRUE); //DBPROP_NOTIFICATIONPHASES if(SupportedProperty(DBPROP_NOTIFICATIONPHASES, DBPROPSET_ROWSET)) TCHECK(GetProperty(DBPROP_NOTIFICATIONPHASES, DBPROPSET_ROWSET, &m_ulSupportedPhases),TRUE); //DBPROP_REENTRANTEVENTS if(SupportedProperty(DBPROP_REENTRANTEVENTS, DBPROPSET_ROWSET)) TCHECK(GetProperty(DBPROP_REENTRANTEVENTS, DBPROPSET_ROWSET, &bValue),TRUE); m_bReentrantEvents = ((bValue==VARIANT_TRUE) ? TRUE : FALSE); //DBPROP_QUICKRESTART if(SupportedProperty(DBPROP_QUICKRESTART, DBPROPSET_ROWSET)) TCHECK(GetProperty(DBPROP_QUICKRESTART, DBPROPSET_ROWSET, &bValue),TRUE); m_bQuickRestart = ((bValue==VARIANT_TRUE) ? TRUE : FALSE); //DBPROP_NOTIFY* Cancelable Events GetProperty(DBPROP_NOTIFYROWSETFETCHPOSITIONCHANGE, DBPROPSET_ROWSET, &m_rgCancelableEvents[DBREASON_ROWSET_FETCHPOSITIONCHANGE]); GetProperty(DBPROP_NOTIFYROWSETRELEASE, DBPROPSET_ROWSET, &m_rgCancelableEvents[DBREASON_ROWSET_RELEASE]); GetProperty(DBPROP_NOTIFYROWSETCHANGED, DBPROPSET_ROWSET, &m_rgCancelableEvents[DBREASON_ROWSET_CHANGED]); GetProperty(DBPROP_NOTIFYCOLUMNSET, DBPROPSET_ROWSET, &m_rgCancelableEvents[DBREASON_COLUMN_SET]); GetProperty(DBPROP_NOTIFYROWDELETE, DBPROPSET_ROWSET, &m_rgCancelableEvents[DBREASON_ROW_DELETE]); GetProperty(DBPROP_NOTIFYROWFIRSTCHANGE, DBPROPSET_ROWSET, &m_rgCancelableEvents[DBREASON_ROW_FIRSTCHANGE]); GetProperty(DBPROP_NOTIFYROWINSERT, DBPROPSET_ROWSET, &m_rgCancelableEvents[DBREASON_ROW_INSERT]); GetProperty(DBPROP_NOTIFYROWRESYNCH, DBPROPSET_ROWSET, &m_rgCancelableEvents[DBREASON_ROW_RESYNCH]); GetProperty(DBPROP_NOTIFYROWUNDOCHANGE, DBPROPSET_ROWSET, &m_rgCancelableEvents[DBREASON_ROW_UNDOCHANGE]); GetProperty(DBPROP_NOTIFYROWUNDOINSERT, DBPROPSET_ROWSET, &m_rgCancelableEvents[DBREASON_ROW_UNDOINSERT]); GetProperty(DBPROP_NOTIFYROWUNDODELETE, DBPROPSET_ROWSET, &m_rgCancelableEvents[DBREASON_ROW_UNDODELETE]); GetProperty(DBPROP_NOTIFYROWUPDATE, DBPROPSET_ROWSET, &m_rgCancelableEvents[DBREASON_ROW_UPDATE]); TRETURN; } BOOL CRowsetObj::IsCancelableEvent(DBREASON eReason, DBEVENTPHASE ePhase) { ASSERT(IsValidEvent(eReason, ePhase)); switch(ePhase) { case DBEVENTPHASE_OKTODO: return ((m_rgCancelableEvents[eReason] & DBPROPVAL_NP_OKTODO) != 0); case DBEVENTPHASE_ABOUTTODO: return ((m_rgCancelableEvents[eReason] & DBPROPVAL_NP_ABOUTTODO) != 0); case DBEVENTPHASE_SYNCHAFTER: return ((m_rgCancelableEvents[eReason] & DBPROPVAL_NP_SYNCHAFTER) != 0); } return FALSE; } HRESULT CRowsetObj::SetData(COMMAND* pCommand) { ASSERT(pCommand); HRESULT hr = S_OK; void* pMakeData = NULL; IRowsetChange* pIRowsetChange = NULL; ROWINFO* pRowInfo = GetRowInfo(pCommand->m_rgRowIds[0]); //Make Data for the row MakeRowData(&pMakeData, m_hUpAccessor); //Obtain IRowsetChange interface... TESTC_(hr = QI(pIRowset(), IID_IRowsetChange, (void**)&pIRowsetChange),S_OK); //The test will sometime expect BADROWHANDLE since it thinks that previous calls may have veto'd //an insertion. Some providers don't allow vetos, so the badrowhandle is dependent upon wither //it was successful or not. If the row is in our cache, then it must have been allowed... // if(pCommand->m_hrExpected == DB_E_BADROWHANDLE) // { // if(pRowInfo && pRowInfo->m_h`Row) // pCommand->m_hrExpected = S_OK; // } //Now finally Modify the row... //Can return an Error such as DB_E_CANCELED within a listener switch(pCommand->m_hrExpected) { case DB_E_BADACCESSORHANDLE: hr = pIRowsetChange->SetData(pCommand->m_rghRows[0], DB_NULL_HACCESSOR, pMakeData); break; default: hr = pIRowsetChange->SetData(pCommand->m_rghRows[0], m_hUpAccessor, pMakeData); break; }; //If SetData is successful then we can mark this row as having been changed. if(SUCCEEDED(hr)) { TESTC(pRowInfo != NULL); pRowInfo->m_fFirstChange = FALSE; //Get the Data for this row PROVIDER_FREE(pRowInfo->m_pNewData); pRowInfo->m_pNewData = PROVIDER_ALLOC(SIZEOF_ONEROW); TESTC_(GetData(pRowInfo->m_hRow, pRowInfo->m_pNewData),S_OK); } CLEANUP: ReleaseRowData(pMakeData, m_hUpAccessor); SAFE_RELEASE(pIRowsetChange); return hr; } HRESULT CRowsetObj::Update(COMMAND* pCommand) { ASSERT(pCommand); HRESULT hr = S_OK; IRowsetUpdate* pIRowsetUpdate = NULL; DBCOUNTITEM cRowsUpdated = 0; HROW* rghRowsUpdated = NULL; DBROWSTATUS* rgRowStatus = NULL; //IRowsetUpdate->Update TESTC_(hr = pIRowset()->QueryInterface(IID_IRowsetUpdate,(void**)&pIRowsetUpdate),S_OK); //Can return an error DB_S/DB_E if canceled from within a listener hr = pIRowsetUpdate->Update(NULL, pCommand->m_cRows, pCommand->m_rghRows, &cRowsUpdated, &rghRowsUpdated, &rgRowStatus); //If the Update succeeded, then we can clear the RowStatus flags //only for those rows actually updated if(SUCCEEDED(hr)) { //Verify the results first if(pCommand->m_cRows) { TESTC(cRowsUpdated == pCommand->m_cRows); TESTC(rgRowStatus != NULL); } if(pCommand->m_dwOption) { TESTC(cRowsUpdated == pCommand->m_dwOption); TESTC(rgRowStatus != NULL); } //dwOptions represent the number of pending rows for the (0,NULL) case... for(DBCOUNTITEM i=0; im_cRows || im_dwOption; i++) { ROWINFO* pRowInfo = GetRowInfo(pCommand->m_rgRowIds[i]); if(pRowInfo == NULL) continue; //Only update our flags if row was successflly updated if(rgRowStatus && rgRowStatus[i] != DBROWSTATUS_S_OK) continue; //Update of a DeletedRow forces the row to no longer be valid if(pRowInfo->m_eRowStatus != ROWSTATUS_DELETED) { //Save the current Data PROVIDER_FREE(pRowInfo->m_pOrgData); pRowInfo->m_pOrgData = PROVIDER_ALLOC(SIZEOF_ONEROW); memmove(pRowInfo->m_pOrgData, pRowInfo->m_pNewData, (size_t) SIZEOF_ONEROW); //Get the Data for this row PROVIDER_FREE(pRowInfo->m_pNewData); pRowInfo->m_pNewData = PROVIDER_ALLOC(SIZEOF_ONEROW); TESTC_(GetData(pRowInfo->m_hRow, pRowInfo->m_pNewData),S_OK); //Verify Update, actually Updated the Values TESTC(CompareRowData(pRowInfo->m_pOrgData, pRowInfo->m_pNewData, m_hAccessor)); //Get the Original Data for this row PROVIDER_FREE(pRowInfo->m_pOrgData); pRowInfo->m_pOrgData = PROVIDER_ALLOC(SIZEOF_ONEROW); TESTC_(GetOriginalData(pRowInfo->m_hRow, pRowInfo->m_pOrgData),S_OK); //Verify OrginalData matches current Data after Update TESTC(CompareRowData(pRowInfo->m_pOrgData, pRowInfo->m_pNewData, m_hAccessor)); } //Clear the FirstChange status pRowInfo->m_fFirstChange = TRUE; //Clear the ChangeStatus pRowInfo->m_eRowStatus = ROWSTATUS_NOCHANGE; } } CLEANUP: SAFE_RELEASE(pIRowsetUpdate); PROVIDER_FREE(rghRowsUpdated); PROVIDER_FREE(rgRowStatus); return hr; } HRESULT CRowsetObj::Undo(COMMAND* pCommand) { ASSERT(pCommand); HRESULT hr = S_OK; IRowsetUpdate* pIRowsetUpdate = NULL; DBCOUNTITEM cRowsUndone = 0; HROW* rghRowsUndone = NULL; DBROWSTATUS* rgRowStatus = NULL; //IRowsetUpdate->Update TESTC_(hr = pIRowset()->QueryInterface(IID_IRowsetUpdate,(void**)&pIRowsetUpdate),S_OK); //Can return an error DB_S/DB_E if canceled from within a listener hr = pIRowsetUpdate->Undo(NULL, pCommand->m_cRows, pCommand->m_rghRows, &cRowsUndone, &rghRowsUndone, &rgRowStatus); //If the Undo succeeded, then we can clear the UndoStatus flags if(SUCCEEDED(hr)) { //Verify the results first if(pCommand->m_cRows) { TESTC(cRowsUndone == pCommand->m_cRows); TESTC(rgRowStatus != NULL); } if(pCommand->m_dwOption) { TESTC(cRowsUndone == pCommand->m_dwOption); TESTC(rgRowStatus != NULL); } //dwOptions represent the number of pending rows for the (0,NULL) case... for(DBCOUNTITEM i=0; im_cRows || im_dwOption; i++) { ROWINFO* pRowInfo = NULL; TESTC((pRowInfo = GetRowInfo(pCommand->m_rgRowIds[i])) != NULL); //Only update our flags if row was successflly undone if(rgRowStatus && rgRowStatus[i] != DBROWSTATUS_S_OK) continue; //Undo of an InsertedRow forces the row to no longer be valid if(pRowInfo->m_eRowStatus != ROWSTATUS_INSERTED) { //Get the Data for this row PROVIDER_FREE(pRowInfo->m_pNewData); pRowInfo->m_pNewData = PROVIDER_ALLOC(SIZEOF_ONEROW); TESTC_(GetData(pRowInfo->m_hRow, pRowInfo->m_pNewData),S_OK); //Verify Undo, actually undoes the Data TESTC(CompareRowData(pRowInfo->m_pOrgData, pRowInfo->m_pNewData, m_hAccessor)); } //Clear the FirstChange status pRowInfo->m_fFirstChange = TRUE; //Clear the ChangeStatus pRowInfo->m_eRowStatus = ROWSTATUS_NOCHANGE; } } CLEANUP: SAFE_RELEASE(pIRowsetUpdate); PROVIDER_FREE(rghRowsUndone); PROVIDER_FREE(rgRowStatus); return hr; } HRESULT CRowsetObj::AddRefRows(COMMAND* pCommand) { ASSERT(pCommand); ROWINFO* pRowInfo = NULL; ULONG rgRefCounts[MAX_ROW_COUNT]; //IRowset::AddRefRows HRESULT hr = pIRowset()->AddRefRows(pCommand->m_cRows, pCommand->m_rghRows, rgRefCounts, NULL); //Increment reference counts if(SUCCEEDED(hr)) { for(DBCOUNTITEM i=0; im_cRows; i++) if(pRowInfo = GetRowInfo(pCommand->m_rgRowIds[i])) { //Update the reference count. pRowInfo->m_cRefCount = rgRefCounts[i]; } } return hr; } HRESULT CRowsetObj::ReleaseRows(COMMAND* pCommand) { ASSERT(pCommand); ROWINFO* pRowInfo = NULL; HRESULT hr = S_OK; ULONG rgRefCounts[MAX_ROW_COUNT]; //IRowset::ReleaseRows switch(pCommand->m_hrExpected) { case E_INVALIDARG: hr = pIRowset()->ReleaseRows(pCommand->m_cRows, NULL, NULL, NULL, NULL); break; default: hr = pIRowset()->ReleaseRows(pCommand->m_cRows, pCommand->m_rghRows, NULL, rgRefCounts, NULL); break; } //Store reference counts if(SUCCEEDED(hr)) { for(DBCOUNTITEM i=0; im_cRows; i++) if(pRowInfo = GetRowInfo(pCommand->m_rgRowIds[i])) { //Update the reference count. pRowInfo->m_cRefCount = rgRefCounts[i]; } } return hr; } HRESULT CRowsetObj::InsertRow(COMMAND* pCommand) { ASSERT(pCommand); HRESULT hr = S_OK; IRowsetChange* pIRowsetChange = NULL; ROWINFO* pRowInfo = NULL; //Make data for the inserted row TESTC(m_mapRowInfo.Lookup(pCommand->m_rgRowIds[0], pRowInfo)); PROVIDER_FREE(pRowInfo->m_pOrgData); pRowInfo->m_pOrgData = PROVIDER_ALLOC(SIZEOF_ONEROW); TESTC(MakeRowData(&pRowInfo->m_pOrgData)) //InsertRow //Can return an error such as DB_E_CANCELED inside a listener TESTC_(hr = QI(pIRowset(), IID_IRowsetChange, (void**)&pIRowsetChange),S_OK); switch(pCommand->m_hrExpected) { case DB_E_BADACCESSORHANDLE: hr = pIRowsetChange->InsertRow(NULL, DB_NULL_HACCESSOR, pRowInfo->m_pOrgData, &pCommand->m_rghRows[0]); break; default: hr = pIRowsetChange->InsertRow(NULL, m_hAccessor, pRowInfo->m_pOrgData, &pCommand->m_rghRows[0]); break; } //If successful, we have store the row handle! if(SUCCEEDED(hr)) { //Verify row handle TESTC(pCommand->m_rghRows[0]!=DB_NULL_HROW) //Set the row handle //ROWINFO* pRowInfo = NULL; //TESTC(m_mapRowInfo.Lookup(pCommand->m_rgRowIds[0], pRowInfo)); pRowInfo->m_hRow = pCommand->m_rghRows[0]; //Get the Data for this row PROVIDER_FREE(pRowInfo->m_pNewData); pRowInfo->m_pNewData = PROVIDER_ALLOC(SIZEOF_ONEROW); TESTC_(GetData(pRowInfo->m_hRow, pRowInfo->m_pNewData),S_OK); //Make sure the newly inserted row matches the original data... TESTC(CompareRowData(pRowInfo->m_pNewData/*pGetData*/, pRowInfo->m_pOrgData/*pSetData*/, m_hAccessor, TRUE/*fSetData*/)); } CLEANUP: SAFE_RELEASE(pIRowsetChange); return hr; } HRESULT CRowsetObj::GetNextRows(COMMAND* pCommand) { ASSERT(pCommand); HRESULT hr = S_OK; DBCOUNTITEM cOffset = 0; DBCOUNTITEM cRows = pCommand->m_cRows; HROW* rghRows = pCommand->m_rghRows; DBCOUNTITEM cRowsObtained = 0; DBCOUNTITEM i; //GetNextRows //The Command may want to produce a particualr error condition switch(pCommand->m_hrExpected) { case DB_S_ENDOFROWSET: { if (cRows==0) hr = pIRowset()->GetNextRows(NULL, 0, MAX_ROW_COUNT, &cRowsObtained, &rghRows); else hr = pIRowset()->GetNextRows(NULL, 0, cRows, &cRowsObtained, &rghRows); pCommand->m_cRows = cRowsObtained; } break; case DB_E_BADSTARTPOSITION: hr = pIRowset()->GetNextRows(NULL, MAX_ROW_COUNT, cRows, &cRowsObtained, &rghRows); break; case E_INVALIDARG: hr = pIRowset()->GetNextRows(NULL, 0, cRows, NULL, NULL); break; default: hr = pIRowset()->GetNextRows(NULL, 0, cRows, &cRowsObtained, &rghRows); break; } //Loop through rows obtained for(i=0; im_rgRowIds[i],pRowInfo)) SAFE_DELETE(pRowInfo); pRowInfo = new ROWINFO(pCommand->m_rghRows[i]); //Get the bookmark for this row, if bookmarks are on... if(m_dwRowsetMode & ROWSETLOCATE_ROWSET) TESTC_(GetBookmark(pRowInfo->m_hRow, pRowInfo),S_OK); //Get the Data for this row PROVIDER_FREE(pRowInfo->m_pNewData); pRowInfo->m_pNewData = PROVIDER_ALLOC(SIZEOF_ONEROW); TESTC_(GetData(pRowInfo->m_hRow, pRowInfo->m_pNewData),S_OK); //Save the OrgData for this row PROVIDER_FREE(pRowInfo->m_pOrgData); pRowInfo->m_pOrgData = PROVIDER_ALLOC(SIZEOF_ONEROW); TESTC_(GetData(pRowInfo->m_hRow, pRowInfo->m_pOrgData),S_OK); m_mapRowInfo.SetAt(pCommand->m_rgRowIds[i], pRowInfo); } //Increment the NextFetchPosition if(SUCCEEDED(hr) && cRowsObtained) m_ulNextFetchPos += (cOffset + cRowsObtained); CLEANUP: return hr; } HRESULT CRowsetObj::RestartPosition(COMMAND* pCommand) { ASSERT(pCommand); HRESULT hr = S_OK; // Provider may require release of existing rows before restarting // if DBPROP_QUICKRESTART=FALSE even if the provider supports a value of VARIANT_TRUE for DBPROP_CANHOLDROWS if (!IsQuickRestart()) { DBCOUNTITEM cRows = 0; HROW rghRows[MAX_ROW_COUNT]; ROWINFO* pRowInfo = NULL; ULONG rgRefCounts[MAX_ROW_COUNT]; GetRowsToRelease(MAX_ROW_COUNT, cRows, rghRows); if (cRows) { hr = pIRowset()->ReleaseRows(cRows, rghRows, NULL, rgRefCounts, NULL); //Store reference counts if(SUCCEEDED(hr)) { POSITION pos = m_mapRowInfo.GetStartPosition(); while(pos) { DBCOUNTITEM Key = 0; ROWINFO* pRowInfo = NULL; m_mapRowInfo.GetNextAssoc(pos, Key, pRowInfo); SAFE_DELETE(pRowInfo); pRowInfo = new ROWINFO(DB_NULL_HROW); m_mapRowInfo.SetAt(Key, pRowInfo); } } } } //RestartPosition hr = pIRowset()->RestartPosition(NULL); //Can return DB_S_COMMANDREEXECUTED if(hr==DB_S_COMMANDREEXECUTED) hr = S_OK; //Reset the rowset values if(SUCCEEDED(hr)) { m_ulNextFetchPos = 0; m_fTableAltered = FALSE; } return hr; } HRESULT CRowsetObj::GetRowsAt(COMMAND* pCommand) { ASSERT(pCommand); HRESULT hr = S_OK; IRowsetLocate* pIRowsetLocate = NULL; DBCOUNTITEM cRowsObtained = 0; DBCOUNTITEM cRows = pCommand->m_cRows; HROW* rghRows = pCommand->m_rghRows; DBCOUNTITEM i=0; //Bookmark for this row should be DBBMK_FIRST or DBBMK_LAST ULONG Bookmark = pCommand->m_dwOption; TESTC(Bookmark==DBBMK_FIRST || Bookmark==DBBMK_LAST); //GetRowsAt TESTC_(hr = pIRowset()->QueryInterface(IID_IRowsetLocate,(void**)&pIRowsetLocate),S_OK); //Can return an error if canceled from within a listener //Standard BMK size is 1 byte for DBBMK_FIRST or DBBMK_LAST switch(pCommand->m_hrExpected) { case DB_E_BADSTARTPOSITION: hr = pIRowsetLocate->GetRowsAt(NULL, NULL, sizeof(BYTE), (BYTE*)&Bookmark, MAX_ROW_COUNT, cRows, &cRowsObtained, &rghRows); break; case DB_S_ENDOFROWSET: hr = pIRowsetLocate->GetRowsAt(NULL, NULL, sizeof(BYTE), (BYTE*)&Bookmark, 0, MAX_ROW_COUNT, &cRowsObtained, &rghRows); break; default: hr = pIRowsetLocate->GetRowsAt(NULL, NULL, sizeof(BYTE), (BYTE*)&Bookmark, 0, cRows, &cRowsObtained, &rghRows); break; } //Verify results if(hr==S_OK) TESTC(cRows == cRowsObtained); //Loop through rows obtained for(i=0; im_rgRowIds[i]); SAFE_DELETE(pRowInfo); pRowInfo = new ROWINFO(pCommand->m_rghRows[i]); //Get the bookmark for this row if(m_dwRowsetMode & ROWSETLOCATE_ROWSET) TESTC_(GetBookmark(pRowInfo->m_hRow, pRowInfo),S_OK); //Get the Data for this row PROVIDER_FREE(pRowInfo->m_pNewData); pRowInfo->m_pNewData = PROVIDER_ALLOC(SIZEOF_ONEROW); TESTC_(GetData(pRowInfo->m_hRow, pRowInfo->m_pNewData),S_OK); //Save the Data for this row PROVIDER_FREE(pRowInfo->m_pOrgData); pRowInfo->m_pOrgData = PROVIDER_ALLOC(SIZEOF_ONEROW); TESTC_(GetData(pRowInfo->m_hRow, pRowInfo->m_pOrgData),S_OK); m_mapRowInfo.SetAt(pCommand->m_rgRowIds[i], pRowInfo); } CLEANUP: SAFE_RELEASE(pIRowsetLocate); return hr; } HRESULT CRowsetObj::GetRowsAtRatio(COMMAND* pCommand) { ASSERT(pCommand); HRESULT hr = S_OK; IRowsetScroll* pIRowsetScroll = NULL; DBCOUNTITEM cRows = pCommand->m_cRows; HROW* rghRows = pCommand->m_rghRows; ULONG ulRatio = pCommand->m_dwOption; DBCOUNTITEM cRowsObtained = 0; DBCOUNTITEM i; //GetRowsAtRatio TESTC_(hr = pIRowset()->QueryInterface(IID_IRowsetScroll,(void**)&pIRowsetScroll),S_OK); //Can return an error if canceled from within a listener switch(pCommand->m_hrExpected) { case DB_S_ENDOFROWSET: hr = pIRowsetScroll->GetRowsAtRatio(NULL, NULL, 0, ulRatio, MAX_ROW_COUNT, &cRowsObtained, &rghRows); break; default: hr = pIRowsetScroll->GetRowsAtRatio(NULL, NULL, 0, ulRatio, cRows, &cRowsObtained, &rghRows); break; } //Verify results if(hr==S_OK) TESTC(cRows == cRowsObtained); //Loop over rows retrived for(i=0; im_rgRowIds[i]); SAFE_DELETE(pRowInfo); pRowInfo = new ROWINFO(pCommand->m_rghRows[i]); //Get the bookmark for this row if(m_dwRowsetMode & ROWSETLOCATE_ROWSET) TESTC_(GetBookmark(pRowInfo->m_hRow, pRowInfo),S_OK); //Get the Data for this row PROVIDER_FREE(pRowInfo->m_pNewData); pRowInfo->m_pNewData = PROVIDER_ALLOC(SIZEOF_ONEROW); TESTC_(GetData(pRowInfo->m_hRow, pRowInfo->m_pNewData),S_OK); //Save the Data for this row PROVIDER_FREE(pRowInfo->m_pOrgData); pRowInfo->m_pOrgData = PROVIDER_ALLOC(SIZEOF_ONEROW); TESTC_(GetData(pRowInfo->m_hRow, pRowInfo->m_pOrgData),S_OK); m_mapRowInfo.SetAt(pCommand->m_rgRowIds[i],pRowInfo); } CLEANUP: SAFE_RELEASE(pIRowsetScroll); return hr; } HRESULT CRowsetObj::GetRowsByBookmark(COMMAND* pCommand) { ASSERT(pCommand); HRESULT hr = S_OK; IRowsetLocate* pIRowsetLocate = NULL; DBCOUNTITEM i = 0; //Need to lookup the bookmark value for these rows ROWINFO* pRowInfo = NULL; DBBKMARK rgcbBookmarks[MAX_ROW_COUNT]; const BYTE* rgpBookmarks[MAX_ROW_COUNT]; for(i=0; im_cRows; i++) { if(pRowInfo = GetRowInfo(pCommand->m_rgRowIds[i])) { rgcbBookmarks[i] = pRowInfo->m_cbBookmark; //Bookmark size rgpBookmarks[i] = pRowInfo->m_pBookmark; } } //IRowsetLocate TESTC_(hr = pIRowset()->QueryInterface(IID_IRowsetLocate,(void**)&pIRowsetLocate),S_OK); switch(pCommand->m_hrExpected) { case E_INVALIDARG: hr = pIRowsetLocate->GetRowsByBookmark(NULL, pCommand->m_cRows, NULL, NULL, pCommand->m_rghRows, NULL); break; default: hr = pIRowsetLocate->GetRowsByBookmark(NULL, pCommand->m_cRows, rgcbBookmarks, rgpBookmarks, pCommand->m_rghRows, NULL); break; }; //Loop through rows obtained for(i=0; im_cRows; i++) { if(SUCCEEDED(hr) && pCommand->m_rghRows[i]!=DB_NULL_HROW) { ROWINFO* pRowInfo = NULL; if(m_mapRowInfo.Lookup(pCommand->m_rgRowIds[i],pRowInfo)) SAFE_DELETE(pRowInfo); pRowInfo = new ROWINFO(pCommand->m_rghRows[i]); //Get the bookmark for this row, if bookmarks are on... if(m_dwRowsetMode & ROWSETLOCATE_ROWSET) TESTC_(GetBookmark(pRowInfo->m_hRow, pRowInfo),S_OK); //Get the Data for this row PROVIDER_FREE(pRowInfo->m_pNewData); pRowInfo->m_pNewData = PROVIDER_ALLOC(SIZEOF_ONEROW); TESTC_(GetData(pRowInfo->m_hRow, pRowInfo->m_pNewData),S_OK); //Save the OrgData for this row PROVIDER_FREE(pRowInfo->m_pOrgData); pRowInfo->m_pOrgData = PROVIDER_ALLOC(SIZEOF_ONEROW); TESTC_(GetData(pRowInfo->m_hRow, pRowInfo->m_pOrgData),S_OK); m_mapRowInfo.SetAt(pCommand->m_rgRowIds[i], pRowInfo); } } CLEANUP: SAFE_RELEASE(pIRowsetLocate); return hr; } HRESULT CRowsetObj::DeleteRows(COMMAND* pCommand) { ASSERT(pCommand); HRESULT hr = S_OK; IRowsetChange* pIRowsetChange = NULL; //DeleteRows TESTC_(hr = QI(pIRowset(), IID_IRowsetChange, (void**)&pIRowsetChange),S_OK); hr = pIRowsetChange->DeleteRows(NULL, pCommand->m_cRows, pCommand->m_rghRows, NULL); CLEANUP: SAFE_RELEASE(pIRowsetChange); return hr; } HRESULT CRowsetObj::ResynchRows(COMMAND* pCommand) { ASSERT(pCommand); HRESULT hr = S_OK; void* pVisibleData = NULL; DBROWSTATUS* rgRowStatus = NULL; //ResynchRows hr = CRowset::ResynchRows(pCommand->m_cRows, pCommand->m_rghRows, NULL, NULL, &rgRowStatus); //Loop over rows Resynched if(SUCCEEDED(hr)) { for(DBCOUNTITEM i=0; im_cRows; i++) { //Only update our flags if row was successfully resynched if(rgRowStatus[i] != DBROWSTATUS_S_OK) continue; if(pCommand->m_rghRows[i] != DB_NULL_HROW) { ROWINFO* pRowInfo = GetRowInfo(pCommand->m_rgRowIds[i]); SAFE_DELETE(pRowInfo); pRowInfo = new ROWINFO(pCommand->m_rghRows[i]); m_mapRowInfo.SetAt(pCommand->m_rgRowIds[i],pRowInfo); //Get the Data for this row PROVIDER_FREE(pRowInfo->m_pNewData); pRowInfo->m_pNewData = PROVIDER_ALLOC(SIZEOF_ONEROW); TESTC_(GetData(pRowInfo->m_hRow, pRowInfo->m_pNewData),S_OK); //GetVisible Data for this row PROVIDER_FREE(pVisibleData); pVisibleData = PROVIDER_ALLOC(SIZEOF_ONEROW); TESTC_(GetVisibleData(pRowInfo->m_hRow, pVisibleData),S_OK); //Verify both Visible and Current Data are equal after Resynch TESTC(CompareRowData(pRowInfo->m_pNewData, pVisibleData, m_hAccessor)); } } } CLEANUP: PROVIDER_FREE(pVisibleData); PROVIDER_FREE(rgRowStatus); return hr; } BOOL CRowsetObj::MapRowIds(COMMAND* pCommand) { TBEGIN ASSERT(pCommand); DBCOUNTITEM cRows = pCommand->m_cRows; DBCOUNTITEM* rgRowIds = pCommand->m_rgRowIds; HROW* rghRows = pCommand->m_rghRows; ROWINFO* pRowInfo = NULL; switch (pCommand->m_eCommandType) { case INSERTROW: { pRowInfo = new ROWINFO(DB_NULL_HROW); pRowInfo->m_eRowStatus = ROWSTATUS_INSERTED; m_mapRowInfo.SetAt(rgRowIds[0], pRowInfo); } break; case DELETEROWS: { // Set HROW's to delete for(DBCOUNTITEM i=0; im_hRow; //Insert -> Deleted row is not change, //Otherwsie this is considerd a deleted row if(pRowInfo->m_eRowStatus == ROWSTATUS_INSERTED) pRowInfo->m_eRowStatus = ROWSTATUS_INVALID; else pRowInfo->m_eRowStatus = ROWSTATUS_DELETED; } } break; case SETDATA: { if(pRowInfo = GetRowInfo(rgRowIds[0])) { rghRows[0] = pRowInfo->m_hRow; //This row is now treated as modiifed, unless it is an inserted row. //If inserted it still is treated as inserted if(pRowInfo->m_eRowStatus != ROWSTATUS_INSERTED) pRowInfo->m_eRowStatus = ROWSTATUS_CHANGED; } } break; case UNDO: case UPDATE: case RESYNCHROWS: { //Set HROW's to Get for(DBCOUNTITEM i=0; im_hRow; } //If cRows==0, (0,NULL) will "do" all rows with //pending changes. So loop through all rows if(cRows==0) { DBCOUNTITEM key = 0; DBCOUNTITEM cRowsPending = 0; POSITION pos = m_mapRowInfo.GetStartPosition(); while(pos) { m_mapRowInfo.GetNextAssoc(pos, key, pRowInfo); if(pRowInfo && pRowInfo->m_eRowStatus != ROWSTATUS_NOCHANGE) { rgRowIds[cRowsPending] = key; rghRows[cRowsPending] = pRowInfo->m_hRow; cRowsPending++; } } pCommand->m_dwOption = (DWORD) cRowsPending; } } break; case REFRESHROWS: { //Set HROW's to Get for(DBCOUNTITEM i=0; im_hRow; } //If cRows==0, (0,NULL) will "do" all active //rows. So loop through all rows if(cRows==0) { DBCOUNTITEM key = 0; DBCOUNTITEM cRowsActive = 0; POSITION pos = m_mapRowInfo.GetStartPosition(); while(pos) { m_mapRowInfo.GetNextAssoc(pos, key, pRowInfo); if(pRowInfo && pRowInfo->m_eRowStatus != ROWSTATUS_INSERTED && pRowInfo->m_eRowStatus != ROWSTATUS_DELETED) { rgRowIds[cRowsActive] = key; rghRows[cRowsActive] = pRowInfo->m_hRow; cRowsActive++; } } pCommand->m_dwOption = (ULONG) cRowsActive; } } break; default: { //Set HROW's to Get for(DBCOUNTITEM i=0; im_hRow; } } break; } CLEANUP: TRETURN; } HRESULT CRowsetObj::GetData(HROW hRow, void* pData) { ASSERT(hRow != DB_NULL_HROW); ASSERT(pData); HRESULT hr = S_OK; //GetData TESTC_(pIRowset()->GetData(hRow, m_hAccessor, pData),S_OK); CLEANUP: return hr; } HRESULT CRowsetObj::GetOriginalData(HROW hRow, void* pData) { ASSERT(hRow != DB_NULL_HROW); ASSERT(pData); HRESULT hr = S_OK; IRowsetUpdate* pIRowsetUpdate = NULL; //Obtain IRowsetUpdate TESTC_(QI(pIRowset(), IID_IRowsetUpdate, (void**)&pIRowsetUpdate),S_OK); //GetOriginalData hr = pIRowsetUpdate->GetOriginalData(hRow, m_hAccessor, pData); CLEANUP: SAFE_RELEASE(pIRowsetUpdate); return hr; } HRESULT CRowsetObj::GetVisibleData(HROW hRow, void* pData) { ASSERT(hRow != DB_NULL_HROW); ASSERT(pData); HRESULT hr = S_OK; IRowsetResynch* pIRowsetResynch = NULL; //Obtain IRowsetResynch TESTC_(QI(pIRowset(), IID_IRowsetResynch, (void**)&pIRowsetResynch),S_OK); //GetVisibleData hr = pIRowsetResynch->GetVisibleData(hRow, m_hAccessor, pData); CLEANUP: SAFE_RELEASE(pIRowsetResynch); return hr; } HRESULT CRowsetObj::GetLastVisibleData(HROW hRow, void* pData) { ASSERT(hRow != DB_NULL_HROW); ASSERT(pData); HRESULT hr = S_OK; IRowsetRefresh* pIRowsetRefresh = NULL; //Obtain IRowsetRefresh TESTC_(QI(pIRowset(), IID_IRowsetRefresh, (void**)&pIRowsetRefresh),S_OK); //RefreshVisibleData hr = pIRowsetRefresh->GetLastVisibleData(hRow, m_hAccessor, pData); CLEANUP: SAFE_RELEASE(pIRowsetRefresh); return hr; } HRESULT CRowsetObj::GetData(COMMAND* pCommand) { ASSERT(pCommand); HRESULT hr = S_OK; HRESULT hrExpected = S_OK; ROWINFO* pRowInfo = NULL; void* pData = NULL; //Loop though all specificed rows and make sure GetData returns the correc //data for this row for(DBCOUNTITEM i=0; im_cRows; i++) { if (pCommand->m_rghRows[i] != DB_NULL_HROW) { //Get the "Current" Data for this row pData = PROVIDER_ALLOC(SIZEOF_ONEROW); TESTC_(pIRowset()->GetData(pCommand->m_rghRows[i], m_hAccessor, pData),S_OK); //Lookup the Saved data for this row TESTC((pRowInfo = GetRowInfo(pCommand->m_rgRowIds[i])) != NULL); //Compare data TESTC(CompareRowData(pData, pRowInfo->m_pNewData, m_hAccessor)); PROVIDER_FREE(pData); } } CLEANUP: PROVIDER_FREE(pData); return hr; } HRESULT CRowsetObj::GetOriginalData(COMMAND* pCommand) { ASSERT(pCommand); HRESULT hr = S_OK; HRESULT hrExpected = pCommand->m_hrExpected; ROWINFO* pRowInfo = NULL; void* pData = NULL; IRowsetUpdate* pIRowsetUpdate = NULL; DBCOUNTITEM i=0; //Obtain IRowsetUpdate interface TESTC_(hr = QI(pIRowset(), IID_IRowsetUpdate, (void**)&pIRowsetUpdate),S_OK); //Loop though all rows and make sure GetData returns the correct data for(i=0; im_cRows; i++) { //Get the "Current" Data for this row pData = PROVIDER_ALLOC(SIZEOF_ONEROW); //As can call during notification may receive DB_E_NOTREENTRANT (pCommand->m_hrExpected) TEST2C_(hr = pIRowsetUpdate->GetOriginalData(pCommand->m_rghRows[i], m_hAccessor, pData), S_OK, hrExpected); if (hr==S_OK) { // if received S_OK for one row should receive it for all if (i==0) hrExpected = S_OK; //Lookup the Saved data for this row TESTC((pRowInfo = GetRowInfo(pCommand->m_rgRowIds[i])) != NULL); //Compare data TESTC(CompareRowData(pRowInfo->m_pOrgData, pData, m_hAccessor)); } PROVIDER_FREE(pData); } CLEANUP: SAFE_RELEASE(pIRowsetUpdate); PROVIDER_FREE(pData); return hr; } HRESULT CRowsetObj::GetVisibleData(COMMAND* pCommand) { ASSERT(pCommand); HRESULT hr = S_OK; HRESULT hrExpected = pCommand->m_hrExpected; ROWINFO* pRowInfo = NULL; void* pData = NULL; IRowsetResynch* pIRowsetResynch = NULL; DBCOUNTITEM i=0; //Obtain IRowsetUpdate interface TESTC_(hr = QI(pIRowset(), IID_IRowsetResynch, (void**)&pIRowsetResynch),S_OK); //Loop though all rows and make sure GetData returns the correct data for(i=0; im_cRows; i++) { //Get the "Current" Data for this row pData = PROVIDER_ALLOC(SIZEOF_ONEROW); //As can call during notification may receive DB_E_NOTREENTRANT (pCommand->m_hrExpected) TEST2C_(hr = pIRowsetResynch->GetVisibleData(pCommand->m_rghRows[i], m_hAccessor, pData), S_OK, hrExpected); if (hr==S_OK) { // if received S_OK for one row should receive it for all if (i==0) hrExpected = S_OK; //Lookup the Saved data for this row TESTC((pRowInfo = GetRowInfo(pCommand->m_rgRowIds[i])) != NULL); //Compare data TESTC(CompareRowData(pData, pRowInfo->m_pOrgData, m_hAccessor)); } PROVIDER_FREE(pData); } CLEANUP: SAFE_RELEASE(pIRowsetResynch); PROVIDER_FREE(pData); return hr; } HRESULT CRowsetObj::GetLastVisibleData(COMMAND* pCommand) { ASSERT(pCommand); HRESULT hr = S_OK; ROWINFO* pRowInfo = NULL; void* pData = NULL; IRowsetRefresh* pIRowsetRefresh = NULL; DBCOUNTITEM i=0; //Obtain IRowsetUpdate interface TESTC_(hr = QI(pIRowset(), IID_IRowsetRefresh, (void**)&pIRowsetRefresh),S_OK); //Loop though all rows and make sure GetData returns the correct data for(i=0; im_cRows; i++) { //Get the "Current" Data for this row pData = PROVIDER_ALLOC(SIZEOF_ONEROW); TESTC_(pIRowsetRefresh->GetLastVisibleData(pCommand->m_rghRows[i], m_hAccessor, pData),S_OK); //Lookup the Saved data for this row TESTC((pRowInfo = GetRowInfo(pCommand->m_rgRowIds[i])) != NULL); //Compare data TESTC(CompareRowData(pData, pRowInfo->m_pOrgData, m_hAccessor)); PROVIDER_FREE(pData); } CLEANUP: SAFE_RELEASE(pIRowsetRefresh); PROVIDER_FREE(pData); return hr; } HRESULT CRowsetObj::AddColumn() { ASSERT(g_pTable); HRESULT hr = S_OK; //Add a column to the table WCHAR strColName[80]; CCol cCol; //Get first column information g_pTable->GetColInfo(1, cCol); //Provider Type name may be NULL. If running with an INI File, or //just the fact that our Privlib addColumn loses all the provider typenames when it regenerates //the columninfo after an add... if(cCol.GetProviderTypeName()) swprintf(strColName, L"C%02lu%.4s", GetTotalColumns() + 1, cCol.GetProviderTypeName()); else swprintf(strColName, L"C%02lu", GetTotalColumns() + 1); cCol.SetColName(strColName); // add the column hr = g_pTable->AddColumn(cCol); //Indicate the underlying Table has been altered if(SUCCEEDED(hr)) m_fTableAltered = TRUE; return hr; } HRESULT CRowsetObj::DropColumn() { ASSERT(g_pTable); HRESULT hr = S_OK; const DBORDINAL nColNum = 1; //Drop the first column from the table hr = g_pTable->DropColumn(nColNum); //Indicate the underlying Table has been altered if(SUCCEEDED(hr)) m_fTableAltered = TRUE; return hr; } HRESULT CRowsetObj::GetColumnInfo() { HRESULT hr = S_OK; DBORDINAL cColInfo = 0; DBCOLUMNINFO* rgColInfo = NULL; WCHAR* pStringBuffer = NULL; //IColumnsInfo::GetColumnInfo hr = GetColInfo(&cColInfo, &rgColInfo, &pStringBuffer); SAFE_FREE(rgColInfo); SAFE_FREE(pStringBuffer); return hr; } HRESULT CRowsetObj::GetBookmark ( HROW hRow, ROWINFO* pRowInfo ) { ASSERT(pRowInfo); HRESULT hr = S_OK; //GetBookmark TESTC_(hr = CRowset::GetBookmark(hRow, &pRowInfo->m_cbBookmark, &pRowInfo->m_pBookmark),S_OK); CLEANUP: return hr; } ROWINFO* CRowsetObj::GetRowInfo(DBCOUNTITEM ulRowId) { ROWINFO* pRowInfo = NULL; m_mapRowInfo.Lookup(ulRowId, pRowInfo); return pRowInfo; } BOOL CRowsetObj::DestroyRowData() { POSITION pos = m_mapRowInfo.GetStartPosition(); while(pos) { DBCOUNTITEM Key = 0; ROWINFO* pRowInfo = NULL; m_mapRowInfo.GetNextAssoc(pos, Key, pRowInfo); if(pIRowset()) { HRESULT hr = pIRowset()->ReleaseRows(1, &pRowInfo->m_hRow, NULL, NULL, NULL); } SAFE_DELETE(pRowInfo); } m_mapRowInfo.RemoveAll(); return TRUE; } BOOL CRowsetObj::GetRowsToRelease(DBCOUNTITEM cRows, DBCOUNTITEM &cRowsObtained, HROW *rghRows) { ASSERT(rghRows); cRowsObtained = 0; POSITION pos = m_mapRowInfo.GetStartPosition(); int i=0; while(pos && cRowsObtainedm_hRow != DB_NULL_HROW && pRowInfo->m_cRefCount) rghRows[cRowsObtained++] = pRowInfo->m_hRow; pRowInfo = NULL; } return TRUE; } //////////////////////////////////////////////////////////////////////// // CImpIListener // //////////////////////////////////////////////////////////////////////// CImpIListener::CImpIListener(CExecutionManager* pExecutionManager) { ASSERT(pExecutionManager); m_pExecutionManager = pExecutionManager; m_cRef = 1; m_dwCookie = 0; //Set all WantedEvents to TRUE memset(&m_rgWantedEvent, TRUE, sizeof(m_rgWantedEvent)); //Set times notified to 0 ResetTimesNotified(); } CImpIListener::~CImpIListener() { ASSERT(m_cRef==0); } ULONG CImpIListener::AddRef(void) { return ++m_cRef; } ULONG CImpIListener::Release(void) { ASSERT(m_cRef > 0); if(--m_cRef) return m_cRef; delete this; return 0; } HRESULT CImpIListener::QueryInterface(REFIID riid, void** ppv) { if(!ppv) return E_INVALIDARG; if(riid == IID_IUnknown) *ppv = this; else if(riid == IID_IRowsetNotify) *ppv = this; else { *ppv = NULL; return E_NOINTERFACE; } ((IUnknown*)*ppv)->AddRef(); return S_OK; } ULONG CImpIListener::GetTimesNotified(DBREASON eReason, DBEVENTPHASE ePhase) { ASSERT(eReason <= DBREASON_ALL); ASSERT(ePhase <= DBEVENTPHASE_ALL); //Can return the number of times notified for either all reasons / phases //or just a particular reason / phase ULONG cTimesNotified = 0; for(ULONG iReason=0; iReasonFindExpectation(this, pIRowset, cRows, (HROW*)rghRows, cColumns, rgColumns, eReason, ePhase, fCantDeny)) { //Find the Command which corresponds to this Reason/Phase pCommand = pExecutionManager()->PopCommand(this, eReason, ePhase); TESTC(pCommand != NULL); switch(pCommand->m_eCommandType) { case RETURN_ACCEPT: pExpectationsManager()->PushNextExpectation(pExpect); SAFE_DELETE(pCommand); return S_OK; case RETURN_VETO: if(pExecutionManager()->IsCancelableEvent(eReason, ePhase)) { TESTC(pExpectationsManager()->PushFalseExpectation(pExpect)); } else { TESTC(pExpectationsManager()->PushNextExpectation(pExpect)); } SAFE_DELETE(pCommand); return S_FALSE; case RETURN_UNWANTEDREASON: //We no longer want this Reason //Mark as completed since we might not get any more Notifications SetUnwantedReason(eReason); pExpectationsManager()->PushUnwantedReason(this, pIRowset, eReason); SAFE_DELETE(pCommand); return DB_S_UNWANTEDREASON; case RETURN_UNWANTEDPHASE: //Since this Phase is no longer wanted, //set the expectation to the next wanted phase... SetUnwantedPhase(eReason, ePhase); pExpectationsManager()->PushUnwantedPhase(this, pIRowset, eReason, ePhase); SAFE_DELETE(pCommand); return DB_S_UNWANTEDPHASE; case RETURN_EFAIL: case RETURN_EOUTOFMEMORY: case RETURN_EINVALIDARG: //Errors returned should be treated like S_OK (no VETO) pExpectationsManager()->PushNextExpectation(pExpect); switch(pCommand->m_eCommandType) { case RETURN_EFAIL: SAFE_DELETE(pCommand); return E_FAIL; case RETURN_EOUTOFMEMORY: SAFE_DELETE(pCommand); return E_OUTOFMEMORY; case RETURN_EINVALIDARG: SAFE_DELETE(pCommand); return E_INVALIDARG; } break; case RETURN_ADVISE: { //Create a new Listener and add to list pExpectationsManager()->PushAdviseExpectation(pExpect); return S_OK; } case RETURN_UNADVISE: { //Unadvise this listener from the Rowset and remove from list pExpectationsManager()->PushUnadviseExpectation(pExpect); return S_OK; } default: { //Execute the nested Command QTESTC(pExpectationsManager()->PushNestedExpectation(pCommand)); QTESTC(pExecutionManager()->ExecuteCommand(pCommand)); QTESTC(pExpectationsManager()->PopNestedExpectation(pCommand)) SAFE_DELETE(pCommand); } } } CLEANUP: SAFE_DELETE(pCommand); return hr; } HRESULT CImpIListener::OnFieldChange ( IRowset* pIRowset, HROW hRow, DBORDINAL cColumns, DBORDINAL rgColumns[], DBREASON eReason, DBEVENTPHASE ePhase, BOOL fCantDeny ) { //Accept / Veto the change, and do processing HRESULT hr = AcceptOrVeto(pIRowset, ONE_ROW, &hRow, cColumns, rgColumns, eReason, ePhase, fCantDeny); //Display Notification is user is interested... PRVTRACE(L" 0x%08x::OnFieldChange(0x%08x, 0x%08x, %d, 0x%08x, %s, %s, %s) - %s\n", this, pIRowset, hRow, cColumns, rgColumns, GetReasonDesc(eReason), GetPhaseDesc(ePhase), fCantDeny==TRUE ? L"TRUE" : L"FALSE", GetErrorName(hr)); return hr; } HRESULT CImpIListener::OnRowChange ( IRowset* pIRowset, DBCOUNTITEM cRows, const HROW rghRows[], DBREASON eReason, DBEVENTPHASE ePhase, BOOL fCantDeny ) { //Accept / Veto the change, and do processing HRESULT hr = AcceptOrVeto(pIRowset, cRows, rghRows, 0, NULL, eReason, ePhase, fCantDeny); //Display Notification is user is interested... PRVTRACE(L" 0x%08x::OnRowChange(0x%08x, %d, 0x%08x, %s, %s, %s) - %s\n", this, pIRowset, cRows, rghRows, GetReasonDesc(eReason), GetPhaseDesc(ePhase), fCantDeny==TRUE ? L"TRUE" : L"FALSE", GetErrorName(hr)); return hr; } HRESULT CImpIListener::OnRowsetChange ( IRowset* pIRowset, DBREASON eReason, DBEVENTPHASE ePhase, BOOL fCantDeny ) { //Accept / Veto the change, and do processing HRESULT hr = AcceptOrVeto(pIRowset, 0, NULL, 0, NULL, eReason, ePhase, fCantDeny); //Display Notification is user is interested... PRVTRACE(L" 0x%08x::OnRowsetChange(0x%08x, %s, %s, %s) - %s\n", this, pIRowset, GetReasonDesc(eReason), GetPhaseDesc(ePhase), fCantDeny==TRUE ? L"TRUE" : L"FALSE", GetErrorName(hr)); return hr; } HRESULT CImpIListener::Advise(IRowset* pIRowset) { ASSERT(pIRowset); ASSERT(m_dwCookie == 0); //Implementation only suited for 1 advise per listener //We can't just use m_pIRowset, since we could Advise / Connect this listener //to other rowsets besides just the one we wer created with //But if no rowset* is passed in, we'll use the current one IConnectionPoint* pICP = NULL; IConnectionPointContainer* pICPC = NULL; HRESULT hr = S_OK; //Obtain the connection point container TESTC_(hr = pIRowset->QueryInterface(IID_IConnectionPointContainer,(void**)&pICPC),S_OK) TESTC(pICPC != NULL); //Obtain the IRowsetNotify connection point TESTC_(hr = pICPC->FindConnectionPoint(IID_IRowsetNotify,&pICP),S_OK) TESTC(pICP != NULL); //Now we can advise the connection TESTC_(hr = pICP->Advise(this, &m_dwCookie),S_OK) CLEANUP: SAFE_RELEASE(pICP); SAFE_RELEASE(pICPC); return hr; } HRESULT CImpIListener::Unadvise(IRowset* pIRowset) { ASSERT(pIRowset); ASSERT(m_dwCookie != 0); //We can't just use m_pIRowset, since we could Advise / Connect this listener //to other rowsets besides just the one we were created with //But if no rowset* is passed in, we'll use the current one IConnectionPoint* pICP = NULL; IConnectionPointContainer* pICPC = NULL; HRESULT hr = S_OK; //Obtain the connection point container TESTC_(hr = pIRowset->QueryInterface(IID_IConnectionPointContainer,(void**)&pICPC),S_OK) TESTC(pICPC != NULL); //Obtain the IRowsetNotify connection point TESTC_(hr = pICPC->FindConnectionPoint(IID_IRowsetNotify,&pICP),S_OK) TESTC(pICP != NULL); //Now we can advise the connection TESTC_(hr = pICP->Unadvise(m_dwCookie),S_OK) //Set Cookie back to 0 m_dwCookie = 0; CLEANUP: SAFE_RELEASE(pICP); SAFE_RELEASE(pICPC); return hr; } BOOL CImpIListener::IsWantedReason(DBREASON eReason) { ASSERT(IsValidEvent(eReason)); //Find the Reason index for(ULONG iReason=0; iReasonpCRowsetObj()->IsSupportedPhase(DBEVENTPHASE_ABOUTTODO)) return DBEVENTPHASE_ABOUTTODO; case DBEVENTPHASE_ABOUTTODO: if(pExecutionManager()->pCRowsetObj()->IsSupportedPhase(DBEVENTPHASE_SYNCHAFTER)) return DBEVENTPHASE_SYNCHAFTER; case DBEVENTPHASE_SYNCHAFTER: if(pExecutionManager()->pCRowsetObj()->IsSupportedPhase(DBEVENTPHASE_DIDEVENT)) return DBEVENTPHASE_DIDEVENT; } } return 0; } CExecutionManager* CImpIListener::pExecutionManager() { ASSERT(m_pExecutionManager); return m_pExecutionManager; } CExpectationsManager* CImpIListener::pExpectationsManager() { ASSERT(m_pExecutionManager); return m_pExecutionManager->pExpectationsManager(); } /////////////////////////////////////////////////////////////////////////////// // CControl // /////////////////////////////////////////////////////////////////////////////// CControl::CControl(CExecutionManager* pExecutionManager) { ASSERT(pExecutionManager); m_pExecutionManager = pExecutionManager; //Create a Suspended Thread m_hThread = CreateThread(NULL, 1024, CControl::ThreadFunction, this, CREATE_SUSPENDED, &m_dwThreadId); TESTC(m_hThread != 0); CLEANUP: return; } CControl::~CControl() { CloseHandle(m_hThread); } DWORD CControl::GetThreadId() { return m_dwThreadId; } DWORD CControl::WaitForThread() { return WaitForThreads(1, &m_hThread); } ULONG CControl::Execute() { return ResumeThread(m_hThread); } ULONG WINAPI CControl::ThreadFunction(void* pv) { THREAD_BEGIN CControl* pThis = (CControl*)pv; ASSERT(pThis); CExecutionManager* pExecutionManager = pThis->pExecutionManager(); CExpectationsManager* pExpectationsManager = pThis->pExpectationsManager(); ASSERT(pExecutionManager && pExpectationsManager); HRESULT hr = S_OK; //This is a Thread function, it must be a static function, taking void* and //returning ULONG. Since it must be static, there is no "this" pointer, //so we pass in the this pointer to the object... //While there are Commands to be executed while(!pExecutionManager->IsCommandListEmpty()) { //On the list are "Listener" Commands and "Control" Commands //Pop off a "Control" Command, if there is not one left but there //are items still on the list, that means some listeners never //got to use their commands, meanig they didn't get called for that //reason/phase they were looking for... COMMAND* pCommand = pExecutionManager->PopCommand(pThis); if(pCommand != NULL) { //Popoff and execute indented command QTESTC(pExpectationsManager->PushNestedExpectation(pCommand)); QTESTC(pExecutionManager->ExecuteCommand(pCommand)); QTESTC(pExpectationsManager->PopNestedExpectation(pCommand)); } else { //Display and indicate Commands that never got to be used... pCommand = pExecutionManager->PopCommand(); pCommand->DisplayCommand(); } //Cleanup objects SAFE_DELETE(pCommand); } CLEANUP: THREAD_RETURN; } CExecutionManager* CControl::pExecutionManager() { ASSERT(m_pExecutionManager); return m_pExecutionManager; } CExpectationsManager* CControl::pExpectationsManager() { ASSERT(m_pExecutionManager); return m_pExecutionManager->pExpectationsManager(); } /////////////////////////////////////////////////////////////////////////////// // CExecutionManager // /////////////////////////////////////////////////////////////////////////////// CExecutionManager::CExecutionManager(const WCHAR* pwszTestCaseName) : CTestCases(pwszTestCaseName) { HRESULT hr = S_OK; m_pCRowsetObj = NULL; m_pExpectationsManager = NULL; m_pCurrentCommand = NULL; // This test case was just instantiated, so check the threading model of the creating thread: // If we are in an STA (single-threaded apartment), then the ThreadID of the calling thread is not // sufficient to identify the calling control. This is because all notifications are marshalled // across apartment (thread) boundaries. m_fFreeThreaded = true; hr = CoInitializeEx(NULL, 0 /* COINIT_MULTITHREADED */); if (RPC_E_CHANGED_MODE == hr) m_fFreeThreaded = false; // We are in an STA else CoUninitialize(); // Make sure Init is matched by Uninit } CExecutionManager::~CExecutionManager() { Terminate(); } BOOL CExecutionManager::Init() { m_pExpectationsManager = new CExpectationsManager(this); return m_pExpectationsManager != NULL; } BOOL CExecutionManager::Terminate() { //Need to destory everything here SAFE_DELETE(m_pCRowsetObj); SAFE_DELETE(m_pExpectationsManager); DestroyStacks(); return TRUE; } ULONG CExecutionManager::Execute(LPCWSTR wszCommandString, ROWSET_MODE dwRowsetMode) { TBEGIN TESTC(ParseCommandString(wszCommandString)); // If we're running in an STA, listeners cannot receive notifications from multiple controls if (!m_fFreeThreaded && m_mapControl.GetCount() > 1) { TOUTPUT(L"Listeners cannot receive notifications from multiple controls when running in apartment model."); return TEST_SKIPPED; } //Execute TESTC_PROVIDER(CreateRowset(dwRowsetMode)==S_OK); TESTC(AdviseListeners()); TESTC(RunControls()); //For some SCENARIOS, it would be useful (ie: save duplicataion of code), if we also //tested the same senario (same commandstring) with a different rowset type. //For example: if the request rowset is buffered mode, it might also be useful to //test the QBU mode code as well. This way the one variation tests both types of rowsets //for the senario without duplication or maintaince issues... if(dwRowsetMode & CHANGE_BUFFERRED) { //Execute if(SupportedProperty(KAGPROP_QUERYBASEDUPDATES, DBPROPSET_PROVIDERROWSET)) { dwRowsetMode |= CHANGE_QBU; TESTC_(CreateRowset(dwRowsetMode),S_OK); TESTC(AdviseListeners()); TESTC(RunControls()); } } //For example: many SCENARIOS are the "least common demoninator" meaning to get coverage on //all providers they don't ask for many (or any properties). But as we have seen many properties //will trigger different code paths and tigger bugs in notifications as well. So if the senario //requires a bare-bones (default) rowset, then also try and somewhat more functional rowset. //We obvious can loop through all possible rowset combinations (in a reasonable amount of time) //but this seems to be the most interesting (default=usally forward only, second=keyset-scrollable). if(dwRowsetMode & DEFAULT_ROWSET) { dwRowsetMode |= (SCROLLBACKWARDS | FETCHBACKWARDS); if(CreateRowset(dwRowsetMode)==S_OK) { TESTC(AdviseListeners()); TESTC(RunControls()); } } CLEANUP: UnadviseListeners(); DestroyStacks(); TRETURN; } BOOL CExecutionManager::ParseCommandString(LPCWSTR wszCommandString) { yylpwzInput = wszCommandString; yypExecutionManager = this; yypCommandListMap = &m_mapCommandList; yypControlMap = &m_mapControl; yypListenerMap = &m_mapListener; yylexInit(); return yyparse() == 0; } HRESULT CExecutionManager::CreateRowset(ROWSET_MODE dwRowsetMode) { SAFE_DELETE(m_pCRowsetObj); m_pCRowsetObj = new CRowsetObj(); return m_pCRowsetObj->CreateRowset(dwRowsetMode); } BOOL CExecutionManager::DestroyStacks() { POSITION pos = 0; DWORD Key = 0; //CContol pos = m_mapControl.GetStartPosition(); while(pos) { CControl* pControl = NULL; m_mapControl.GetNextAssoc(pos, Key, pControl); SAFE_DELETE(pControl); } m_mapControl.RemoveAll(); //CImpIListener pos = m_mapListener.GetStartPosition(); while(pos) { CImpIListener* pListener = NULL; m_mapListener.GetNextAssoc(pos, Key, pListener); SAFE_RELEASE(pListener); } m_mapListener.RemoveAll(); //CommandList pos = m_mapCommandList.GetStartPosition(); while(pos) { COMMANDLIST* pCommandList = NULL; m_mapCommandList.GetNextAssoc(pos, Key, pCommandList); //CCOMAND POSITION pos2 = pCommandList->GetHeadPosition(); while(pos2) { COMMAND* pCommand = NULL; pCommand = pCommandList->GetNext(pos2); SAFE_DELETE(pCommand); } SAFE_DELETE(pCommandList); } m_mapCommandList.RemoveAll(); return TRUE; } BOOL CExecutionManager::AdviseListeners(CImpIListener* pListener) { //If pListener == NULL, it will Advise all Listeners //Otherwise just the specified Listener with be Added and Advised ULONG key = 0; CImpIListener* pImpIListener = NULL; IRowset* pIRowset = m_pCRowsetObj ? pCRowsetObj()->pIRowset() : NULL; //If NULL Advise all Listeners POSITION pos = m_mapListener.GetStartPosition(); while(pos && pListener==NULL && pIRowset) { m_mapListener.GetNextAssoc(pos, key, pImpIListener); pImpIListener->Advise(pCRowsetObj()->pIRowset()); } if(pListener && pIRowset) { m_mapListener.SetAt(PtrToUlong(pListener), pListener); pListener->Advise(pCRowsetObj()->pIRowset()); } return TRUE; } BOOL CExecutionManager::UnadviseListeners(CImpIListener* pListener) { //If pListener == NULL, it will Unadvise and remove all Listeners //Otherwise just Unadvise/Remvoe the specified Listener ULONG key = 0; CImpIListener* pImpIListener = NULL; IRowset* pIRowset = m_pCRowsetObj ? pCRowsetObj()->pIRowset() : NULL; //Remove Listener from list POSITION pos = m_mapListener.GetStartPosition(); while(pIRowset && pos) { m_mapListener.GetNextAssoc(pos, key, pImpIListener); if(pListener==NULL || pListener==pImpIListener) { pImpIListener->Unadvise(pCRowsetObj()->pIRowset()); m_mapListener.RemoveKey(key); SAFE_RELEASE(pImpIListener); } } return TRUE; } BOOL CExecutionManager::RunControls() { ULONG_PTR nControlCount = m_mapControl.GetCount(); ULONG key = 0; CControl* pControl = NULL; POSITION pos = NULL; ULONG_PTR i = 0; //Start all the threads pos = m_mapControl.GetStartPosition(); for(i = 0; i < nControlCount; i++) { m_mapControl.GetNextAssoc(pos, key, pControl); pControl->Execute(); } //Wait for all threads to finish pos = m_mapControl.GetStartPosition(); for(i=0; iWaitForThread(); } UnadviseListeners(); DestroyStacks(); return TRUE; } POSITION CExecutionManager::GetListenerStartPosition() { return m_mapListener.GetStartPosition(); } CImpIListener* CExecutionManager::NextListener(POSITION& pos) { ULONG key = 0; CImpIListener* pImpIListener = NULL; m_mapListener.GetNextAssoc(pos, key, pImpIListener); return pImpIListener; } BOOL CExecutionManager::ExecuteCommand(COMMAND* pCOMMAND) { ASSERT(pCOMMAND); //Setup the Thread arguments THREADARG T1 = { this, pCOMMAND }; BOOL bResult = TRUE; if(pCOMMAND->m_cThreads) { DWORD dwThreadId = 0; HANDLE hThread = CreateThread(NULL, 1024, CExecutionManager::Thread_ExecuteCommand, &T1, 0, &dwThreadId); //Wait for it to finish... WaitForThreads(1, &hThread); bResult = GetThreadCode(hThread); } else { //No threads... bResult = Thread_ExecuteCommand(&T1); } return bResult; } ULONG CExecutionManager::Thread_ExecuteCommand(void* pv) { HRESULT hr = E_FAIL; BOOL bReturn = FALSE; CExecutionManager* pThis = (CExecutionManager*)THREAD_FUNC; COMMAND* pCommand = (COMMAND*)THREAD_ARG1; //Save the old command COMMAND* pSavedCommand = pThis->GetCurrentCommand(); pThis->m_pCurrentCommand = pCommand; //Make our lives easier... CRowsetObj* pCRowsetObj = pThis->pCRowsetObj(); //Determine the OLEDB Method to call switch(pCommand->m_eCommandType) { case SETDATA: hr = pCRowsetObj->SetData(pCommand); break; case DELETEROWS: hr = pCRowsetObj->DeleteRows(pCommand); break; case INSERTROW: hr = pCRowsetObj->InsertRow(pCommand); break; case GETNEXTROWS: hr = pCRowsetObj->GetNextRows(pCommand); break; case ADDREFROWS: hr = pCRowsetObj->AddRefRows(pCommand); break; case RELEASEROWS: hr = pCRowsetObj->ReleaseRows(pCommand); break; case UPDATE: hr = pCRowsetObj->Update(pCommand); break; case UNDO: hr = pCRowsetObj->Undo(pCommand); break; case RESYNCHROWS: hr = pCRowsetObj->ResynchRows(pCommand); break; case ADDREFROWSET: pCRowsetObj->AddRefRowset(); hr = S_OK; break; case RELEASEROWSET: if(pCRowsetObj->m_cRowsetRef==0) { SAFE_DELETE(pThis->m_pCRowsetObj); } else { pCRowsetObj->ReleaseRowset(); } hr = S_OK; break; case RESTARTPOSITION: hr = pCRowsetObj->RestartPosition(pCommand); break; case GETROWSAT: hr = pCRowsetObj->GetRowsAt(pCommand); break; case GETROWSATRATIO: hr = pCRowsetObj->GetRowsAtRatio(pCommand); break; case GETROWSBYBOOKMARK: hr = pCRowsetObj->GetRowsByBookmark(pCommand); break; case GETDATA: hr = pCRowsetObj->GetData(pCommand); break; case GETORIGINALDATA: hr = pCRowsetObj->GetOriginalData(pCommand); break; case GETVISIBLEDATA: hr = pCRowsetObj->GetVisibleData(pCommand); break; case ADDCOLUMN: hr = pCRowsetObj->AddColumn(); if(FAILED(hr)) { bReturn = FALSE; goto CLEANUP; } break; case DROPCOLUMN: hr = pCRowsetObj->DropColumn(); if(FAILED(hr)) { bReturn = FALSE; goto CLEANUP; } break; case GETCOLUMNINFO: hr = pCRowsetObj->GetColumnInfo(); break; default: //Unknown Command TCHECK(hr, S_OK); } //Verify HRESULT returned if(pCommand->m_fCanceled) { //if the command was Vetod by a listener then it should be //one of the "CANCELED" return codes switch(pCommand->m_eCommandType) { case DELETEROWS: case RESYNCHROWS: case UPDATE: if (pCommand->m_cRows == 1) TESTC_(hr, DB_E_ERRORSOCCURRED) else TESTC_(hr, DB_S_ERRORSOCCURRED); break; case UNDO: TESTC_(hr, DB_E_ERRORSOCCURRED); break; default: TESTC_(hr, DB_E_CANCELED); break; } } else { //Otherwise it should be whatever was epected switch(pCommand->m_hrExpected) { case DB_E_NOTREENTRANT: //According to the spec Providers may or may not support reentrantcy //And even if they support it, some methods still might not be. if(pCRowsetObj->GetReentrantEvents()==FALSE) TESTC_(hr, DB_E_NOTREENTRANT) else TEST2C_(hr, S_OK, DB_E_NOTREENTRANT); pCommand->m_hrExpected = hr; break; case DB_E_BADSTARTPOSITION: //We need to expect DB_E_BADSTARTPOSITION as this indicates to the //framework that we want to pass a large offset, but the spec //actually requires DB_S_ENDOFROWSET for 2.x+ providers. //So we will as well, but still need the 2 states for testing... TESTC_(hr, DB_S_ENDOFROWSET); break; default: TESTC_(hr, pCommand->m_hrExpected); break; } } bReturn = TRUE; CLEANUP: //Restore the Saved command pThis->m_pCurrentCommand = pSavedCommand; return bReturn; } CRowsetObj* CExecutionManager::pCRowsetObj() { ASSERT(m_pCRowsetObj); return m_pCRowsetObj; } CExpectationsManager* CExecutionManager::pExpectationsManager() { ASSERT(m_pExpectationsManager); return m_pExpectationsManager; } COMMAND* CExecutionManager::GetCurrentCommand() { return m_pCurrentCommand; } COMMANDLIST * CExecutionManager::LookupCommandList() { COMMANDLIST * pCommandList = NULL; // If we're free-threaded, then use the current thread ID to locate the correct command list if (m_fFreeThreaded) m_mapCommandList.Lookup(GetCurrentThreadId(), pCommandList); // Otherwise, there should be only one command list. Get that by iterating. else { POSITION pos = 0; DWORD dwKey = 0; ASSERT(1 == m_mapCommandList.GetCount()); pos = m_mapCommandList.GetStartPosition(); m_mapCommandList.GetNextAssoc(pos, dwKey, pCommandList); } return pCommandList; } BOOL CExecutionManager::IsCommandListEmpty() { COMMANDLIST* pCommandList = LookupCommandList(); return pCommandList ? pCommandList->IsEmpty() : TRUE; } COMMAND* CExecutionManager::PopCommand(CControl* pControl) { //Passing NULL with just pop of the head of the list... COMMANDLIST* pCommandList = NULL; POSITION pos = 0; pCommandList = LookupCommandList(); TESTC(NULL != pCommandList); pos = pCommandList->GetHeadPosition(); while(pos) { POSITION posSave = pos; COMMAND* pCommand = pCommandList->GetNext(pos); if(pControl && pCommand->m_pvObjectId != pControl) continue; pCommandList->RemoveAt(posSave); return pCommand; } CLEANUP: return NULL; } COMMAND* CExecutionManager::PopCommand ( CImpIListener* pListener, DBREASON eReason, DBEVENTPHASE ePhase ) { ASSERT(pListener); COMMANDLIST* pCommandList = NULL; POSITION pos = 0; pCommandList = LookupCommandList(); TESTC(NULL != pCommandList); pos = pCommandList->GetHeadPosition(); while(pos) { POSITION posSave = pos; COMMAND* pCommand = pCommandList->GetNext(pos); if(pCommand->m_pvObjectId != pListener) continue; if(pCommand->m_ulCommandLevel != GetCurrentCommand()->m_ulCommandLevel) continue; if(pCommand->m_eReason != eReason) continue; if(pCommand->m_ePhase != ePhase) continue; pCommandList->RemoveAt(posSave); return pCommand; } CLEANUP: return new COMMAND(RETURN_ACCEPT); } BOOL CExecutionManager::IsCancelableEvent(DBREASON eReason, DBEVENTPHASE ePhase) { return pCRowsetObj()->IsCancelableEvent(eReason, ePhase); } ///////////////////////////////////////////////////////////////// // CExpectationsManager // ///////////////////////////////////////////////////////////////// CExpectationsManager::CExpectationsManager(CExecutionManager* pExecutionManager) { ASSERT(pExecutionManager); m_pExecutionManager = pExecutionManager; } CExpectationsManager::~CExpectationsManager() { } CRowsetObj* CExpectationsManager::pCRowsetObj() { ASSERT(m_pExecutionManager); return m_pExecutionManager->pCRowsetObj(); } CExecutionManager* CExpectationsManager::pExecutionManager() { ASSERT(m_pExecutionManager); return m_pExecutionManager; } BOOL CExpectationsManager::PushNextExpectation(EXPECT* pExpect) { ASSERT(pExpect); return pExpect->SetNextPhase(); } BOOL CExpectationsManager::PushUnwantedReason(CImpIListener* pListener, IRowset* pIRowset, DBREASON eReason) { TBEGIN ASSERT(pListener); ASSERT(pIRowset); POSITION pos = 0; //All Expecations for this reason COMMAND* pCommand = pExecutionManager()->GetCurrentCommand(); pos = pCommand->m_listExpect.GetHeadPosition(); while(pos) { EXPECT* pExpect = pCommand->m_listExpect.GetNext(pos); TESTC(pExpect != NULL); //Should not expect any more notifications if(pExpect->m_pListener == pListener && pExpect->m_pIRowset == pIRowset && pExpect->m_eReason == eReason) pExpect->m_bCompleted = TRUE; } CLEANUP: TRETURN; } BOOL CExpectationsManager::PushUnwantedPhase(CImpIListener* pListener, IRowset* pIRowset, DBREASON eReason, DBEVENTPHASE ePhase) { TBEGIN ASSERT(pListener); ASSERT(pIRowset); POSITION pos = 0; //All Expecations for this reason/phase should expect the next phase... - not quite correct: see bug 62019 COMMAND* pCommand = pExecutionManager()->GetCurrentCommand(); pos = pCommand->m_listExpect.GetHeadPosition(); while(pos) { EXPECT* pExpect = pCommand->m_listExpect.GetNext(pos); TESTC(pExpect != NULL); //Per the spec:DB_S_UNWANTEDPHASE - The provider can optimize by making no further calls with this reason and phase but //but provider can still call consumer with this reason and phase if(pExpect->m_pListener == pListener && pExpect->m_pIRowset == pIRowset && pExpect->m_eReason == eReason && pExpect->m_ePhase == ePhase) pExpect->m_bCompleted = TRUE; } CLEANUP: TRETURN; } BOOL CExpectationsManager::PushAdviseExpectation(EXPECT* pExpect) { ASSERT(pExpect); //Advise a new Listener CImpIListener* pNewListener = new CImpIListener(pExecutionManager()); pExecutionManager()->AdviseListeners(pNewListener); //Also need to add Expectations for this listener! COMMAND* pCommand = pExecutionManager()->GetCurrentCommand(); POSITION pos = pCommand->m_listExpect.GetHeadPosition(); while(pos) { EXPECT* pCurExpect = pCommand->m_listExpect.GetNext(pos); if(pCurExpect->m_pListener == pExpect->m_pListener) { //Create a new Expectation for the newly added Listener //It should be expecting the phases as this listener (Copy constructor) //This expectation is completly optional, meaning that it is provider //specific weither the provider notifies Listeners that have advised //in the middle of a notification. The nice thing about this framework //is that even if the provider does send notifications we can determine //we are getting the correct ones and in the correct order... EXPECT* pNewExpect = new EXPECT(*pCurExpect); pNewExpect->m_pListener = pNewListener; pNewExpect->m_fOptional = TRUE; pNewExpect->m_bCompleted = FALSE; pNewExpect->m_ulTimesNotified = 0; //Add this Listener to the List pCommand->m_listExpect.AddTail(pNewExpect); } } //We have recieved this Notification PushNextExpectation(pExpect); return TRUE; } BOOL CExpectationsManager::PushUnadviseExpectation(EXPECT* pExpect) { TBEGIN ASSERT(pExpect); //We need to save a pointer to the Listener //Since deleting the expectation from the list will remove the same //Expecation passed in... CImpIListener* pListener = pExpect->m_pListener; //Unadvise this Listener pExecutionManager()->UnadviseListeners(pListener); //Also need to remove Expectations for this listener! COMMAND* pCommand = pExecutionManager()->GetCurrentCommand(); POSITION pos = pCommand->m_listExpect.GetHeadPosition(); while(pos) { POSITION posSave = pos; EXPECT* pCurExpect = pCommand->m_listExpect.GetNext(pos); if(pCurExpect->m_pListener == pListener) { pCommand->m_listExpect.RemoveAt(posSave); SAFE_DELETE(pCurExpect); } } TRETURN; } BOOL CExpectationsManager::PushFalseExpectation(EXPECT* pFalseExpect) { //A Listener has Veto'd a change, and we need to figure out whats //expected for all addtional notifications for FAILEDTODO TBEGIN ASSERT(pFalseExpect); POSITION pos = 0; COMMAND* pCommand = pExecutionManager()->GetCurrentCommand(); pCommand->m_fCanceled = (pCommand->m_hrExpected == S_OK); pos = pCommand->m_listExpect.GetHeadPosition(); while(pos) { EXPECT* pExpect = pCommand->m_listExpect.GetNext(pos); //The Expectations not waiting for this notification //Should expect FAILEDTODO if they have already started receiving phases if(pExpect->m_eReason != pFalseExpect->m_eReason) { if(!pExpect->IsCompleted()) { pExpect->m_fCanceled = pCommand->m_fCanceled; if(pExpect->m_ulTimesNotified) pExpect->SetPhase(DBEVENTPHASE_FAILEDTODO); } } //Expectations waiting for this notificaiton //Should expect FAILEDTODO if they have already started receiving phases if(pExpect->IsEqual(pExpect->m_pListener, pFalseExpect->m_pIRowset, pFalseExpect->m_cRows, pFalseExpect->m_rghRows, pFalseExpect->m_cColumns, pFalseExpect->m_rgColumns, pFalseExpect->m_eReason, pExpect->m_ePhase) || (pExpect->m_eReason==DBREASON_ROW_INSERT && pExpect->m_ulTimesNotified==0)) { if(!pExpect->IsCompleted()) { pExpect->m_fCanceled = pCommand->m_fCanceled; if(pExpect->m_ulTimesNotified) pExpect->SetPhase(DBEVENTPHASE_FAILEDTODO); } } } TRETURN; } BOOL CExpectationsManager::PushNestedExpectation(COMMAND* pCommand) { TBEGIN ASSERT(pCommand); POSITION pos = 0; //Setup DBCOUNTITEM cRows = pCommand->m_cRows; HROW* rghRows = pCommand->m_rghRows; IRowset* pIRowset = pCRowsetObj()->pIRowset(); DBCOUNTITEM i; ROWSTATUS rgRowStatus[MAX_ROW_COUNT]; ULONG rgRefCounts[MAX_ROW_COUNT]; ULONG fFirstChange = FALSE; //MapRowIds = RowId -> hRow TESTC(pCRowsetObj()->MapRowIds(pCommand)); //Lookup rowstatus values for(i=0; im_dwOption; i++) { ROWINFO* pRowInfo = NULL; rgRowStatus[i] = ROWSTATUS_NOCHANGE; rgRefCounts[i] = 0; if(pRowInfo = pCRowsetObj()->GetRowInfo(pCommand->m_rgRowIds[i])) { rgRowStatus[i] = pRowInfo->m_eRowStatus; rgRefCounts[i] = pRowInfo->m_cRefCount; fFirstChange = pRowInfo->m_fFirstChange; } } pos = pExecutionManager()->GetListenerStartPosition(); while(pos) { //Get the next listener CImpIListener* pListener = pExecutionManager()->NextListener(pos); TESTC(pListener != NULL); switch(pCommand->m_eCommandType) { case RELEASEROWSET: //DBREASON_ROWSET_RELEASE //Release Rowset only gets sent when Reference count goes to 0 if(pCRowsetObj()->m_cRowsetRef==0) { EXPECT* pExpect = new EXPECT(pListener, pIRowset, 0, NULL, 0, NULL, DBREASON_ROWSET_RELEASE, DBEVENTPHASE_DIDEVENT); pCommand->m_listExpect.AddTail(pExpect); } break; case GETNEXTROWS: { //DBREASON_ROWSET_FETCHPOSITIONCHANGE if(cRows || pCommand->m_hrExpected==DB_S_ENDOFROWSET) { //TODO should only expect FETCHPOSITIONCHANGE if position is going to change! EXPECT* pExpect = new EXPECT(pListener, pIRowset, 0, NULL, 0, NULL, DBREASON_ROWSET_FETCHPOSITIONCHANGE, DBEVENTPHASE_OKTODO); pCommand->m_listExpect.AddTail(pExpect); } //DBREASON_ROW_ACTIVATE //ROW_ACTIVATE is a siglephase event, according to the spec //the provider makes a single call to OnRowChange for all rows DBCOUNTITEM cRowsNew = 0; HROW rghRowsNew[MAX_ROW_COUNT]; memset(rghRowsNew, 0, MAX_ROW_COUNT * sizeof(HROW)); if(cRows && pCommand->m_hrExpected!=DB_S_ENDOFROWSET) { //Only expect new rows to be notified for(DBCOUNTITEM i=0; iGetMaxOpenRows(); if(ulMaxOpenRows!=0 && ulMaxOpenRowsm_hrExpected==DB_S_ENDOFROWSET) cRowsNew = MAX_ROW_COUNT; //If there are any new Rows then expect a notification if(cRowsNew) { EXPECT* pExpect = new EXPECT(pListener, pIRowset, cRowsNew, rghRowsNew, 0, NULL, DBREASON_ROW_ACTIVATE, DBEVENTPHASE_DIDEVENT); pCommand->m_listExpect.AddTail(pExpect); } } break; case RELEASEROWS: //DBREASON_ROW_RELEASE { DBCOUNTITEM cRowsValid = 0; HROW rghRowsValid[MAX_ROW_COUNT]; //Only expect the valid rows to be notified //Also only expect rows that have a will have a reference count //of 0 after ReleaseRows to send notifications for(DBCOUNTITEM i=0; im_listExpect.AddTail(pExpect); } } break; case RESTARTPOSITION: //DBREASON_ROWSET_FETCHPOSITIONCHANGE { //Should only expect FETCHPOSITIONCHANGE if the next fetch position changed if(pCRowsetObj()->m_ulNextFetchPos != 0) { // May require to release rows before RestartPosition if DBPROP_QUICKRESTART = TRUE //should handle this case if (!pCRowsetObj()->IsQuickRestart()) { DBCOUNTITEM cRowsValid = 0; HROW rghRowsValid[MAX_ROW_COUNT]; pCRowsetObj()->GetRowsToRelease(MAX_ROW_COUNT, cRowsValid, rghRowsValid); //If there are any Valid Rows then expect a notification if(cRowsValid) { EXPECT* pExpect = new EXPECT(pListener, pIRowset, cRowsValid, rghRowsValid, 0, NULL, DBREASON_ROW_RELEASE, DBEVENTPHASE_DIDEVENT); pCommand->m_listExpect.AddTail(pExpect); } } } EXPECT* pExpect = new EXPECT(pListener, pIRowset, 0, NULL, 0, NULL, DBREASON_ROWSET_FETCHPOSITIONCHANGE, DBEVENTPHASE_OKTODO); pCommand->m_listExpect.AddTail(pExpect); //DBREASON_ROWSET_CHANGED if(pCRowsetObj()->m_fTableAltered) { EXPECT* pExpect = new EXPECT(pListener, pIRowset, 0, NULL, 0, NULL, DBREASON_ROWSET_CHANGED, DBEVENTPHASE_DIDEVENT); pCommand->m_listExpect.AddTail(pExpect); } } break; case DELETEROWS: //DBREASON_ROW_DELETE if(cRows) { if(pCRowsetObj()->GetGranularity() == DBPROPVAL_NT_SINGLEROW) { for(DBCOUNTITEM i=0; im_listExpect.AddTail(pExpect); } } else { EXPECT* pExpect = new EXPECT(pListener, pIRowset, cRows, rghRows, 0, NULL, DBREASON_ROW_DELETE, DBEVENTPHASE_OKTODO); pCommand->m_listExpect.AddTail(pExpect); } } break; case INSERTROW: { //DBREASON_ROW_INSERT { pCommand->m_listExpect.AddTail(new EXPECT(pListener, pIRowset, cRows, rghRows, 0, NULL, DBREASON_ROW_INSERT, DBEVENTPHASE_OKTODO)); } } break; case SETDATA: //DBREASON_ROW_FIRSTCHANGE //Only is fired in BufferedMode if(pCRowsetObj()->IsBufferedMode() && fFirstChange) { EXPECT* pExpect = new EXPECT(pListener, pIRowset, cRows, rghRows, 0, NULL, DBREASON_ROW_FIRSTCHANGE, DBEVENTPHASE_OKTODO); pCommand->m_listExpect.AddTail(pExpect); } //DBREASON_COLUMN_SET { //We need to setup the expected columns. pCommand->m_cColumns = pCRowsetObj()->m_cUpBindings; SAFE_REALLOC(pCommand->m_rgColumns, DBORDINAL, pCommand->m_cColumns); for(DBORDINAL i=0; im_cColumns; i++) pCommand->m_rgColumns[i] = pCRowsetObj()->m_rgUpBindings[i].iOrdinal; EXPECT* pExpect = new EXPECT(pListener, pIRowset, cRows, rghRows, pCommand->m_cColumns, pCommand->m_rgColumns, DBREASON_COLUMN_SET, DBEVENTPHASE_OKTODO); pCommand->m_listExpect.AddTail(pExpect); } //DBREASON_COLUMN_RECALCULATED if((pCRowsetObj()->m_dwRowsetMode & COMPUTED_COLUMNS) || (pCRowsetObj()->m_dwRowsetMode & COMPUTED_COLUMNS_INCLUDE)) { //We need to setup the expected columns. pCommand->m_cColumns = pCRowsetObj()->m_cUpBindings; SAFE_REALLOC(pCommand->m_rgColumns, DBORDINAL, pCommand->m_cColumns); for(DBORDINAL i=0; im_cColumns; i++) pCommand->m_rgColumns[i] = pCRowsetObj()->m_rgUpBindings[i].iOrdinal; EXPECT* pExpect = new EXPECT(pListener, pIRowset, cRows, rghRows, pCommand->m_cColumns, pCommand->m_rgColumns, DBREASON_COLUMN_RECALCULATED, DBEVENTPHASE_DIDEVENT); pCommand->m_listExpect.AddTail(pExpect); } break; case SEEK: //DBREASON_ROWSET_FETCHPOSITIONCHANGE { //TODO should only expect FETCHPOSITIONCHANGE if position is going to change! EXPECT* pExpect = new EXPECT(pListener, pIRowset, 0, NULL, 0, NULL, DBREASON_ROWSET_FETCHPOSITIONCHANGE, DBEVENTPHASE_OKTODO); pCommand->m_listExpect.AddTail(pExpect); } break; case GETROWSAT: case GETROWSBYBOOKMARK: case GETROWSATRATIO: //DBREASON_ROW_ACTIVATE if(cRows) { //ROW_ACTIVATE is a siglephase event, according to the spec //the provider makes a single call to OnRowChange for all rows /* DBCOUNTITEM cRowsExpected = cRows; if(pCommand->m_dwOption == DBBMK_LAST && pCommand->m_eCommandType == GETROWSAT) cRowsExpected = 1; DBCOUNTITEM cRowsNew = 0; HROW rghRowsNew[MAX_ROW_COUNT]; //Only expect new rows to be notified for(DBCOUNTITEM i=0; iGetMaxOpenRows(); if(ulMaxOpenRows!=0 && ulMaxOpenRowsm_listExpect.AddTail(pExpect); } */ //The provider should send this reason for newly fetched rows only, //but it might be expensive for providers to determine whether or not a row is newly fetched // so will expect DBREASON_ROW_ACTIVATE for all rows DBCOUNTITEM cRowsExpected = cRows; if(pCommand->m_dwOption == DBBMK_LAST && pCommand->m_eCommandType == GETROWSAT) cRowsExpected = 1; HROW rghRowsExpect[MAX_ROW_COUNT]; //All rows might be notified for(DBCOUNTITEM i=0; iGetMaxOpenRows(); if(ulMaxOpenRows!=0 && ulMaxOpenRowsm_listExpect.AddTail(pExpect); } } break; case RESYNCHROWS: //DBREASON_ROW_RESYNCH { DBCOUNTITEM cRowsResynched = 0; HROW rghRowsResynched[MAX_ROW_COUNT]; //Find all "Pending" rows for(DBCOUNTITEM i=0; im_dwOption; i++) { //According to the spec resynch row notifications //are always, regardless if the row needed resynching //or not. So for all rows passed to IRowsetResynch //all should be notified. if(rghRows[i] != DB_NULL_HROW) rghRowsResynched[cRowsResynched++] = rghRows[i]; } if(pCRowsetObj()->GetGranularity() == DBPROPVAL_NT_SINGLEROW) { for(DBCOUNTITEM i=0; im_listExpect.AddTail(pExpect); } } else { EXPECT* pExpect = new EXPECT(pListener, pIRowset, cRowsResynched, rghRowsResynched, 0, NULL, DBREASON_ROW_RESYNCH, DBEVENTPHASE_OKTODO); pCommand->m_listExpect.AddTail(pExpect); } } break; case UNDO: //DBREASON_ROW_UNDOCHANGE { DBCOUNTITEM cRowsChanged = 0; HROW rghRowsChanged[MAX_ROW_COUNT]; //Find all "Changed" rows for(DBCOUNTITEM i=0; im_dwOption; i++) { //UndoChange is only sent for rows that have changed //and are undone, other "no-op" rows do not have notifications if(rghRows[i] && rgRowStatus[i] == ROWSTATUS_CHANGED) rghRowsChanged[cRowsChanged++] = rghRows[i]; } if(pCRowsetObj()->GetGranularity() == DBPROPVAL_NT_SINGLEROW) { for(DBCOUNTITEM i=0; im_listExpect.AddTail(pExpect); } } else { EXPECT* pExpect = new EXPECT(pListener, pIRowset, cRowsChanged, rghRowsChanged, 0, NULL, DBREASON_ROW_UNDOCHANGE, DBEVENTPHASE_OKTODO); pCommand->m_listExpect.AddTail(pExpect); } } //DBREASON_ROW_UNDOINSERT { DBCOUNTITEM cRowsInserted = 0; HROW rghRowsInserted[MAX_ROW_COUNT]; //Find all "Inserted" rows for(DBCOUNTITEM i=0; im_dwOption; i++) { //UndoInsert is only sent for rows that have changed //and are undone, other "no-op" rows do not have notifications if(rghRows[i] && rgRowStatus[i] == ROWSTATUS_INSERTED) rghRowsInserted[cRowsInserted++] = rghRows[i]; } if(pCRowsetObj()->GetGranularity() == DBPROPVAL_NT_SINGLEROW) { for(DBCOUNTITEM i=0; im_listExpect.AddTail(pExpect); } } else { EXPECT* pExpect = new EXPECT(pListener, pIRowset, cRowsInserted, rghRowsInserted, 0, NULL, DBREASON_ROW_UNDOINSERT, DBEVENTPHASE_OKTODO); pCommand->m_listExpect.AddTail(pExpect); } } //DBREASON_ROW_UNDODELETE { DBCOUNTITEM cRowsDeleted = 0; HROW rghRowsDeleted[MAX_ROW_COUNT]; //Find all "Deleted" rows for(DBCOUNTITEM i=0; im_dwOption; i++) { //UndoDelete is only sent for rows that have changed //and are undone, other "no-op" rows do not have notifications if(rghRows[i] && rgRowStatus[i] == ROWSTATUS_DELETED) rghRowsDeleted[cRowsDeleted++] = rghRows[i]; } if(pCRowsetObj()->GetGranularity() == DBPROPVAL_NT_SINGLEROW) { for(DBCOUNTITEM i=0; im_listExpect.AddTail(pExpect); } } else { EXPECT* pExpect = new EXPECT(pListener, pIRowset, cRowsDeleted, rghRowsDeleted, 0, NULL, DBREASON_ROW_UNDODELETE, DBEVENTPHASE_OKTODO); pCommand->m_listExpect.AddTail(pExpect); } } break; case UPDATE: //DBREASON_ROW_UPDATE { DBCOUNTITEM cRowsPending = 0; HROW rghRowsPending[MAX_ROW_COUNT]; //Find all "Pending" rows for(DBCOUNTITEM i=0; im_dwOption; i++) { //Update is only sent for rows that have changed //and are undone, other "no-op" rows do not have notifications if(rghRows[i] && rgRowStatus[i] != ROWSTATUS_NOCHANGE) rghRowsPending[cRowsPending++] = rghRows[i]; } if(pCRowsetObj()->GetGranularity() == DBPROPVAL_NT_SINGLEROW) { for(DBCOUNTITEM i=0; im_listExpect.AddTail(pExpect); } } else { EXPECT* pExpect = new EXPECT(pListener, pIRowset, cRowsPending, rghRowsPending, 0, NULL, DBREASON_ROW_UPDATE, DBEVENTPHASE_OKTODO); pCommand->m_listExpect.AddTail(pExpect); } } break; default: //No expected notifications break; } } CLEANUP: TRETURN } BOOL CExpectationsManager::PopNestedExpectation(COMMAND* pCommand) { TBEGIN while(!pCommand->m_listExpect.IsEmpty()) { EXPECT* pExpect = pCommand->m_listExpect.RemoveHead(); TCHECK(pExpect != NULL, TRUE); //This maybe a optional notification //Optional notifications are for Listeners that have been advised in the //middle, it is provider specific weither or not the provider sends //any notifications to this listener until the next notification if(pExpect->m_fOptional) { if(pExpect->m_bCompleted) TCHECK(pExpect->VerifyComplete(), TRUE); } //If the Notification was veto'd by a listener else if(pCommand->m_fCanceled) { //If it started to receive Notifications, then it should have an //Incomplete sequence, otherwise no phases should have been fired if(pExpect->m_fCanceled) { TCHECK(pExpect->VerifyInComplete(),TRUE); } else { TCHECK(pExpect->VerifyComplete(),TRUE); } } else { //If it wasn't vetod by a listener then the phases should be //COMPLETE if the expected HRESULT was S_OK (default), or if we were //purposly inposing an error, it should be what we expect... switch(pCommand->m_hrExpected) { case E_INVALIDARG: case DB_E_NOTREENTRANT: case DB_E_ERRORSOCCURRED: case DB_E_BADROWHANDLE: case DB_E_BADACCESSORHANDLE: //Failures that should have never been notified TCHECK(pExpect->VerifyInComplete(),TRUE); break; case DB_S_ENDOFROWSET: //Should only get INCOMPLETE if asked for no rows //otherwsie should have changed the position //TODO really should be a more robust way of knowing wither the fetchposition is going to change if(pCommand->m_cRows==0) { TCHECK(pExpect->VerifyInComplete(),TRUE); } else { TCHECK(pExpect->VerifyComplete(),TRUE); } break; case DB_E_BADSTARTPOSITION: //Canceled, should have been an incomplete sequence TCHECK(pExpect->VerifyInComplete(),TRUE); break; case S_OK: case DB_S_ERRORSOCCURRED: case DB_S_COMMANDREEXECUTED: //Success, should have been notified for all phases TCHECK(pExpect->VerifyComplete(),TRUE); break; default: //Unhandled HRESULT TCHECK(TRUE,FALSE); } } SAFE_DELETE(pExpect); } TRETURN; } EXPECT* CExpectationsManager::FindExpectation ( CImpIListener* pListener, IRowset* pIRowset, DBCOUNTITEM cRows, HROW* rghRows, DBORDINAL cColumns, DBORDINAL rgColumns[], DBREASON eReason, DBEVENTPHASE ePhase, BOOL fCantDeny ) { ASSERT(pListener); ASSERT(pIRowset); //PopExpectation EXPECT* pExpect = PopExpectation(pListener, pIRowset, cRows, rghRows, cColumns, rgColumns, eReason, ePhase); COMMAND* pCommand = pExecutionManager()->GetCurrentCommand(); //Received a Notification it was not expecting, Output debug info if(pExpect == NULL) { DisplayNotification(L"Unexpected: ", cRows, rghRows, cColumns, rgColumns, eReason, ePhase); goto CLEANUP; } //Record this notification pExpect->m_ulTimesNotified++; //If we purposely are expecting an error (called OLEDB method with invalid results) //Then we will allow DBEVENTPHASE_FAILEDTODO at anytime if(ePhase==DBEVENTPHASE_FAILEDTODO && pCommand->m_hrExpected!=S_OK) TESTC(PushFalseExpectation(pExpect)); //DBREASON_ROW_ACTIVATE //DBREASON_ROW_INSERT if(eReason == DBREASON_ROW_ACTIVATE || eReason == DBREASON_ROW_INSERT) { //With these reason you have no way of knowing ahead of time the //row handle values, just set when notified and then remember them... for(DBCOUNTITEM i=0; im_rghRows[i] == DB_NULL_HROW) { //Update the expectation pExpect->m_rghRows[i] = rghRows[i]; //Update the RowInfo as well... //TODO: The expectation should also have RowIDs to match this up with... ROWINFO* pRowInfo = pCRowsetObj()->GetRowInfo(pCommand->m_rgRowIds[i]); if(pRowInfo) { if(pRowInfo->m_hRow == DB_NULL_HROW || pRowInfo->m_cRefCount==0) pRowInfo->m_hRow = rghRows[i]; } } } } //We need to handle UnWanted Phases. //Since this is an optimization, its upto the provider wiether or not they send //unwanted phases. We need to be prepared and handle both cases... //Note that we never go to an endless loop because ePhase is a valid phase for eReason and we expect all phases for the reason while(pExpect->m_ePhase != ePhase && !pExpect->m_pListener->IsWantedPhase(eReason, pExpect->m_ePhase)) { //Get the next phase in sequence pExpect->SetNextPhase(); } //We need to handle Optional Phases. //Since it is provider specific wither newly advised listeners reveice some //or all the phases of the current notification, we need to allow the case //where its the first time and the starting phases is "later" than whats expected... if(pExpect->m_ePhase != ePhase && pExpect->m_fOptional) { //Get the next phase in sequence if(pExpect->m_ulTimesNotified == 1) pExpect->SetNextPhase(); } //Verify the Notifcation QTESTC(pExpect->VerifyEqual(pListener, pIRowset, cRows, rghRows, cColumns, rgColumns, eReason, ePhase)); CLEANUP: return pExpect; } EXPECT* CExpectationsManager::PopExpectation ( CImpIListener* pListener, IRowset* pIRowset, DBCOUNTITEM cRows, HROW* rghRows, DBORDINAL cColumns, DBORDINAL rgColumns[], DBREASON eReason, DBEVENTPHASE ePhase ) { ASSERT(pListener); ASSERT(pIRowset); DBCOUNTITEM i = 0; COMMAND* pCommand = pExecutionManager()->GetCurrentCommand(); POSITION pos = pCommand->m_listExpect.GetHeadPosition(); while(pos) { EXPECT* pExpect = pCommand->m_listExpect.GetNext(pos); if(pExpect->m_pListener != pListener) continue; if(pExpect->m_pIRowset != pIRowset) continue; if(pExpect->m_eReason != eReason) continue; //This is a hack for DB_S_ENDOFROWSET, since we don't neccessaryly //know ahead of time the number of rows in the rowset without traversing //the rowset, and traversing the rowset would fire ROW_ACTIVATE and the //next call to GetNextRows would now not fire ROW_ACTIVE... if(pCommand->m_hrExpected == DB_S_ENDOFROWSET) pExpect->m_cRows = cRows; //Provider should send DBREASON_ROW_ACTIVATE for newly fetched rows only, but may send far all rows if (eReason == DBREASON_ROW_ACTIVATE && pExpect->m_cRows > cRows) { //get only newly fetched rows DBCOUNTITEM cRowsExpect=0; for(i=0; im_cRows; i++) if (pExpect->m_rghRows[i] == DB_NULL_HROW) cRowsExpect++; for(i=0; im_rghRows[i] = DB_NULL_HROW; pExpect->m_cRows = cRowsExpect; } if(pExpect->m_cRows != cRows) continue; BOOL bEqual = TRUE; for(i=0; im_rghRows[i] != DB_NULL_HROW) if(!IsSameRow(pIRowset, pExpect->m_rghRows[i], rghRows[i])) bEqual = FALSE; if(!bEqual) continue; if(pExpect->m_cColumns != cColumns) continue; bEqual = TRUE; for(i=0; im_rgColumns[i] != rgColumns[i]) bEqual = FALSE; if(!bEqual) continue; //Finally found the right expectation! return pExpect; } return NULL; } /////////////////////////////////////////////////////////////////////////////// // IRNOTIFY.Y // /////////////////////////////////////////////////////////////////////////////// /* %{ #include "MODStandard.hpp" //ModuleCore headers #include "IRNotify.h" //IRowsetNotify header #define lint //Removes warnings for unused labels // Input string to parse LPCWSTR yylpwzInput; CExecutionManager *yypExecutionManager; COMMANDLIST *yypCommandList; COMMANDLISTMAP *yypCommandListMap; CONTROLMAP *yypControlMap; LISTENERMAP *yypListenerMap; static LPVOID pvObjectId = NULL; static CControl* pControl = NULL; static DBREASON eReason = 0; static DBEVENTPHASE ePhase = 0; static ULONG ulCommandLevel = 1; static ULONG cRows = 0; static ULONG rgRowIds[MAX_ROW_COUNT]; static ULONG cColumns = 0; static ULONG rgColumns[MAX_ROW_COUNT]; static HRESULT hrExpected = S_OK; static ULONG cThreads = 0; %} %union { ULONG Number; ULONG IdentifierId; } %token yyNUMBER %token yyIDENTIFIERID //Notification REASONS %token yyROWSET_FETCHPOSITIONCHANGE %token yyROWSET_RELEASE %token yyROWSET_CHANGED %token yyCOLUMN_SET %token yyCOLUMN_RECALCULATED %token yyROW_ACTIVATE %token yyROW_RELEASE %token yyROW_DELETE %token yyROW_FIRSTCHANGE %token yyROW_INSERT %token yyROW_RESYNCH %token yyROW_UNDOCHANGE %token yyROW_UNDOINSERT %token yyROW_UNDODELETE %token yyROW_UPDATE //Notification PHASES %token yyOKTODO %token yyABOUTTODO %token yySYNCHAFTER %token yyDIDEVENT %token yyFAILEDTODO //OLEDB Methods (which generate Notifications) %token yyGETDATA %token yyGETORIGINALDATA %token yyGETVISIBLEDATA %token yyRELEASEROWSET %token yyADDREFROWSET %token yyGETNEXTROWS %token yyRELEASEROWS %token yyADDREFROWS %token yyRESTARTPOSITION %token yyDELETEROWS %token yyINSERTROW %token yySETDATA %token yySEEK %token yyGETROWSAT %token yyGETROWSBYBOOKMARK %token yyRESYNCHROWS %token yyGETROWSATRATIO %token yyUNDO %token yyUPDATE %token yyABORT %token yyCOMMIT %token yyADDCOLUMN %token yyDROPCOLUMN %token yyGETCOLUMNINFO //Identifiers %token yyCONTROL %token yyLISTENER %token yyTHREAD %token yyDBBMK_FIRST %token yyDBBMK_LAST %token yyRETURN_ACCEPT %token yyRETURN_VETO %token yyRETURN_EFAIL %token yyRETURN_EOUTOFMEMORY %token yyRETURN_EINVALIDARG %token yyRETURN_UNWANTEDREASON %token yyRETURN_UNWANTEDPHASE %token yyRETURN_ADVISE %token yyRETURN_UNADVISE //hrExpected %token yyDB_S_ENDOFROWSET %token yyDB_E_BADSTARTPOSITION %token yyDB_E_NOTREENTRANT %token yyDB_S_ERRORSOCCURRED %token yyDB_E_ERRORSOCCURRED %token yyE_INVALIDARG %token yyDB_E_ROWSNOTRELEASED %token yyDB_E_BADACCESSORHANDLE %token yyDB_E_BADROWHANDLE %% Notification_Test : {ulCommandLevel = 1; } '{' ListenerList ControlList '}' ListenerList : Listener | ListenerList Listener //Listener Syntax Listener : yyLISTENER yyIDENTIFIERID ';' {yypListenerMap->SetAt($2,new CImpIListener(yypExecutionManager));} ControlList : Control | ControlList Control Control : '{' yyCONTROL yyIDENTIFIERID ';' { pControl = new CControl(yypExecutionManager); pvObjectId = pControl; ulCommandLevel = 1; yypControlMap->SetAt($3,pControl); yypCommandList = new COMMANDLIST; yypCommandListMap->SetAt(pControl->GetThreadId(), yypCommandList); } '{' ControlStmtList '}' '}' ControlStmtList : ControlStmt | ControlStmtList ControlStmt ControlStmt : OLEDBMethod '{' ListenerStmtList '}' { ulCommandLevel++; pvObjectId = pControl; } | OLEDBMethod '{' '}' { ulCommandLevel++; pvObjectId = pControl; } ListenerStmtList : ListenerStmt | ListenerStmtList ListenerStmt ListenerStmt : ListenerIdentifier '.' Reason '.' Phase '.' ListenerMethod ListenerIdentifier : yyIDENTIFIERID {CImpIListener *pImpIListener; BOOL Ok = yypListenerMap->Lookup($1,pImpIListener); if (!Ok) yyerror("Invalid Listener"); pvObjectId = pImpIListener;} ListenerMethod : ListenerReturn { } | OLEDBMethod '{' ListenerStmtList '}' { } | OLEDBMethod '{' '}' { } | yyTHREAD { cThreads = 1; } '{' ListenerMethod '}' { cThreads = 0; } ListenerReturn : yyRETURN_ACCEPT {yypCommandList->AddTail( new COMMAND(RETURN_ACCEPT, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase));} //ePhase | yyRETURN_VETO {yypCommandList->AddTail( new COMMAND(RETURN_VETO, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase));} //ePhase | yyRETURN_EFAIL {yypCommandList->AddTail( new COMMAND(RETURN_EFAIL, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase));} //ePhase | yyRETURN_EOUTOFMEMORY {yypCommandList->AddTail( new COMMAND(RETURN_EOUTOFMEMORY, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase));} //ePhase | yyRETURN_EINVALIDARG {yypCommandList->AddTail( new COMMAND(RETURN_EINVALIDARG, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase));} //ePhase | yyRETURN_UNWANTEDREASON {yypCommandList->AddTail( new COMMAND(RETURN_UNWANTEDREASON, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase));} //ePhase |yyRETURN_UNWANTEDPHASE {yypCommandList->AddTail( new COMMAND(RETURN_UNWANTEDPHASE, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase));} //ePhase |yyRETURN_ADVISE {yypCommandList->AddTail( new COMMAND(RETURN_ADVISE, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase));} //ePhase |yyRETURN_UNADVISE {yypCommandList->AddTail( new COMMAND(RETURN_UNADVISE, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase));} //ePhase OLEDBMethod : ReleaseRowsetMethod | GetNextRows | ReleaseRowsMethod | RestartPositionMethod | DeleteRowsMethod | InsertRowMethod | SetDataMethod | SeekMethod | GetRowsAtMethod | GetRowsByBookmarkMethod | ResynchRowsMethod | GetRowsAtRatioMethod | UndoMethod | UpdateMethod | AddRefRowsetMethod | AddRefRowsMethod | GetDataMethod | GetOriginalDataMethod | GetVisibleDataMethod | AbortMethod | CommitMethod | AddColumnMethod | DropColumnMethod | GetColumnInfoMethod ReleaseRowsMethod : yyRELEASEROWS '(' IdentifierList ')' {yypCommandList->AddTail( new COMMAND(RELEASEROWS, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase, //ePhase hrExpected, //hrExpected cRows, //cRows rgRowIds));} //rgRowIds GetNextRows : yyGETNEXTROWS '(' IdentifierList ')' {yypCommandList->AddTail( new COMMAND(GETNEXTROWS, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase, //ePhase hrExpected, //hrExpected cRows, //cRows rgRowIds));} //rgRowIds ReleaseRowsetMethod : yyRELEASEROWSET '(' EmptyList ')' {yypCommandList->AddTail( new COMMAND(RELEASEROWSET, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase, //ePhase hrExpected));} //hrExpected RestartPositionMethod : yyRESTARTPOSITION '(' EmptyList ')' {yypCommandList->AddTail( new COMMAND(RESTARTPOSITION, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase, //ePhase hrExpected));} //hrExpected DeleteRowsMethod : yyDELETEROWS '(' IdentifierList ')' {yypCommandList->AddTail( new COMMAND(DELETEROWS, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase, //ePhase hrExpected, //hrExpected cRows, //cRows rgRowIds));} //rgRowIds InsertRowMethod : yyINSERTROW '(' yyIDENTIFIERID ')' {yypCommandList->AddTail( new COMMAND(INSERTROW, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase, //ePhase S_OK, //hrExpected 1, //cRows &($3)));} //rgRowIds | yyINSERTROW '(' yyIDENTIFIERID ',' ExpectedHRESULT ')' {yypCommandList->AddTail( new COMMAND(INSERTROW, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase, //ePhase hrExpected, //hrExpected 1, //cRows &($3)));} //rgRowIds SetDataMethod : yySETDATA '(' yyIDENTIFIERID ',' OrdinalList ')' {yypCommandList->AddTail( new COMMAND(SETDATA, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase, //ePhase S_OK, //hrExpected 1, //cRows &($3), //rgRowIds cColumns, //cColumns rgColumns));} //rgColumns | yySETDATA '(' yyIDENTIFIERID ',' OrdinalList ',' ExpectedHRESULT ')' {yypCommandList->AddTail( new COMMAND(SETDATA, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase, //ePhase hrExpected, //hrExpected 1, //cRows &($3), //rgRowIds cColumns, //cColumns rgColumns));} //rgColumns SeekMethod : yySEEK '(' yyNUMBER ')' {yypCommandList->AddTail( new COMMAND(SEEK, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase, //ePhase hrExpected, //hrExpected $3, //cRows rgRowIds));} //rgRowIds | yySEEK '(' yyNUMBER ',' ExpectedHRESULT ')' {yypCommandList->AddTail( new COMMAND(SEEK, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase, //ePhase hrExpected, //hrExpected $3, //cRows rgRowIds));} //rgRowIds GetRowsAtMethod : yyGETROWSAT '(' yyDBBMK_FIRST ',' IdentifierList ')' {yypCommandList->AddTail( new COMMAND(GETROWSAT, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase, //ePhase hrExpected, //hrExpected cRows, //cRows rgRowIds, //rgRowIds 0, //cColumns NULL, //rgColumns DBBMK_FIRST));} //dwOption | yyGETROWSAT '(' yyDBBMK_FIRST ')' {yypCommandList->AddTail( new COMMAND(GETROWSAT, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase, //ePhase S_OK, //hrExpected 0, //cRows NULL, //rgRowIds 0, //cColumns NULL, //rgColumns DBBMK_FIRST));} //dwOption | yyGETROWSAT '(' yyDBBMK_LAST ',' IdentifierList ')' {yypCommandList->AddTail( new COMMAND(GETROWSAT, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase, //ePhase hrExpected, //hrExpected cRows, //cRows rgRowIds, //rgRowIds 0, //cColumns NULL, //rgColumns DBBMK_LAST));} //dwOption | yyGETROWSAT '(' yyDBBMK_LAST ')' {yypCommandList->AddTail( new COMMAND(GETROWSAT, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase, //ePhase hrExpected, //hrExpected 0, //cRows NULL, //rgRowIds 0, //cColumns NULL, //rgColumns DBBMK_LAST));} //dwOption GetRowsByBookmarkMethod : yyGETROWSBYBOOKMARK '(' IdentifierList ')' {yypCommandList->AddTail( new COMMAND(GETROWSBYBOOKMARK, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase, //ePhase hrExpected, //hrExpected cRows, //cRows rgRowIds));} //rgRowIds ResynchRowsMethod : yyRESYNCHROWS '(' IdentifierList ')' {yypCommandList->AddTail( new COMMAND(RESYNCHROWS, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase, //ePhase hrExpected, //hrExpected cRows, //cRows rgRowIds));} //rgRowIds GetRowsAtRatioMethod : yyGETROWSATRATIO '(' yyNUMBER ')' {yypCommandList->AddTail( new COMMAND(GETROWSATRATIO, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase, //ePhase hrExpected, //hrExpected 0, //cRows NULL, //rgRowIds 0, //cColumns NULL, //rgColumns $3));} //dwOption | yyGETROWSATRATIO '(' yyNUMBER ',' IdentifierList ')' {yypCommandList->AddTail( new COMMAND(GETROWSATRATIO, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase, //ePhase hrExpected, //hrExpected cRows, //cRows rgRowIds, //rgRowIds 0, //cColumns NULL, //rgColumns $3));} //dwOption UndoMethod : yyUNDO '(' IdentifierList ')' {yypCommandList->AddTail( new COMMAND(UNDO, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase, //ePhase hrExpected, //hrExpected cRows, //cRows rgRowIds));} //rgRowIds UpdateMethod : yyUPDATE '(' IdentifierList ')' {yypCommandList->AddTail( new COMMAND(UPDATE, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase, //ePhase hrExpected, //hrExpected cRows, //cRows rgRowIds));} //rgRowIds AddRefRowsMethod : yyADDREFROWS '(' IdentifierList ')' {yypCommandList->AddTail( new COMMAND(ADDREFROWS, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase, //ePhase hrExpected, //hrExpected cRows, //cRows rgRowIds));} //rgRowIds AddRefRowsetMethod : yyADDREFROWSET '(' EmptyList ')' {yypCommandList->AddTail( new COMMAND(ADDREFROWSET, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase, //ePhase hrExpected));} //hrExpected GetDataMethod : yyGETDATA '(' yyIDENTIFIERID ')' {yypCommandList->AddTail( new COMMAND(GETDATA, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase, //ePhase S_OK, //hrExpected 1, //cRows &($3) ));} //rgRowIds GetOriginalDataMethod : yyGETORIGINALDATA '(' yyIDENTIFIERID ')' {yypCommandList->AddTail( new COMMAND(GETORIGINALDATA, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase, //ePhase S_OK, //hrExpected 1, //cRows &($3) ));} //rgRowIds | yyGETORIGINALDATA '(' yyIDENTIFIERID ',' ExpectedHRESULT ')' {yypCommandList->AddTail( new COMMAND(GETORIGINALDATA, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase, //ePhase hrExpected, //hrExpected 1, //cRows &($3)));} //rgRowIds GetVisibleDataMethod : yyGETVISIBLEDATA '(' yyIDENTIFIERID ')' {yypCommandList->AddTail( new COMMAND(GETVISIBLEDATA, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase, //ePhase S_OK, //hrExpected 1, //cRows &($3) ));} //rgRowIds | yyGETVISIBLEDATA '(' yyIDENTIFIERID ',' ExpectedHRESULT ')' {yypCommandList->AddTail( new COMMAND(GETVISIBLEDATA, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase, //ePhase hrExpected, //hrExpected 1, //cRows &($3)));} //rgRowIds AbortMethod : yyABORT '(' EmptyList ')' {yypCommandList->AddTail( new COMMAND(ABORT, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase, //ePhase hrExpected));} //hrExpected CommitMethod : yyCOMMIT '(' EmptyList ')' {yypCommandList->AddTail( new COMMAND(COMMIT, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase, //ePhase hrExpected));} //hrExpected AddColumnMethod : yyADDCOLUMN '(' EmptyList ')' {yypCommandList->AddTail( new COMMAND(ADDCOLUMN, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase, //ePhase hrExpected));} //hrExpected DropColumnMethod : yyDROPCOLUMN '(' EmptyList ')' {yypCommandList->AddTail( new COMMAND(DROPCOLUMN, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase, //ePhase hrExpected));} //hrExpected GetColumnInfoMethod : yyGETCOLUMNINFO '(' EmptyList ')' {yypCommandList->AddTail( new COMMAND(GETCOLUMNINFO, //eCOMMANDTYPE pvObjectId, //pvObjectId ulCommandLevel, //ulCommandLevel cThreads, //cThreads eReason, //eReason ePhase, //ePhase hrExpected));} //hrExpected OrdinalList : yyNUMBER {cColumns = 0; rgColumns[cColumns++] = $1;} | OrdinalList ',' yyNUMBER {rgColumns[cColumns++] = $3;} IdentifierList : yyIDENTIFIERID { cRows = 0; rgRowIds[cRows++] = $1; hrExpected = S_OK; } | EmptyList { } | IdentifierList ',' yyIDENTIFIERID { rgRowIds[cRows++] = $3; } | IdentifierList ',' ExpectedHRESULT { } EmptyList : ExpectedHRESULT { cRows = 0; cColumns = 0; } | // Empty { cRows = 0; cColumns = 0; hrExpected = S_OK; } ExpectedHRESULT : yyDB_S_ENDOFROWSET { cRows = SIZEOF_TABLE; hrExpected = DB_S_ENDOFROWSET; } | yyDB_E_BADSTARTPOSITION { hrExpected = DB_E_BADSTARTPOSITION; } | yyDB_E_NOTREENTRANT { hrExpected = DB_E_NOTREENTRANT; } | yyDB_S_ERRORSOCCURRED { hrExpected = DB_S_ERRORSOCCURRED; } | yyDB_E_ERRORSOCCURRED { hrExpected = DB_E_ERRORSOCCURRED; } | yyE_INVALIDARG { hrExpected = E_INVALIDARG; } | yyDB_E_ROWSNOTRELEASED { hrExpected = DB_E_ROWSNOTRELEASED; } | yyDB_E_BADACCESSORHANDLE { hrExpected = DB_E_BADACCESSORHANDLE; } | yyDB_E_BADROWHANDLE { hrExpected = DB_E_BADROWHANDLE; } Reason : yyROWSET_FETCHPOSITIONCHANGE {eReason = DBREASON_ROWSET_FETCHPOSITIONCHANGE;} | yyROWSET_RELEASE {eReason = DBREASON_ROWSET_RELEASE;} | yyROWSET_CHANGED {eReason = DBREASON_ROWSET_CHANGED;} | yyCOLUMN_SET {eReason = DBREASON_COLUMN_SET;} | yyCOLUMN_RECALCULATED {eReason = DBREASON_COLUMN_RECALCULATED;} | yyROW_ACTIVATE {eReason = DBREASON_ROW_ACTIVATE;} | yyROW_RELEASE {eReason = DBREASON_ROW_RELEASE;} | yyROW_DELETE {eReason = DBREASON_ROW_DELETE;} | yyROW_FIRSTCHANGE {eReason = DBREASON_ROW_FIRSTCHANGE;} | yyROW_INSERT {eReason = DBREASON_ROW_INSERT;} | yyROW_RESYNCH {eReason = DBREASON_ROW_RESYNCH;} | yyROW_UNDOCHANGE {eReason = DBREASON_ROW_UNDOCHANGE;} | yyROW_UNDOINSERT {eReason = DBREASON_ROW_UNDOINSERT;} | yyROW_UNDODELETE {eReason = DBREASON_ROW_UNDODELETE;} | yyROW_UPDATE {eReason = DBREASON_ROW_UPDATE;} Phase : yyOKTODO {ePhase = DBEVENTPHASE_OKTODO;} | yyABOUTTODO {ePhase = DBEVENTPHASE_ABOUTTODO;} | yySYNCHAFTER {ePhase = DBEVENTPHASE_SYNCHAFTER;} | yyDIDEVENT {ePhase = DBEVENTPHASE_DIDEVENT;} | yyFAILEDTODO {ePhase = DBEVENTPHASE_FAILEDTODO;} %% int yyerror(char*s) { return 0; } // Keyword Table for Parser typedef CMap TABLE; class KEYWORDTABLE : public TABLE { public: KEYWORDTABLE(); ~KEYWORDTABLE(); }; KEYWORDTABLE::KEYWORDTABLE() { SetAt(_T("IRowset::GetData"),yyGETDATA); SetAt(_T("IRowsetUpdate::GetOriginalData"),yyGETORIGINALDATA); SetAt(_T("IRowsetResynch::GetVisibleData"),yyGETVISIBLEDATA); SetAt(_T("IRowsetChange::SetData"),yySETDATA); SetAt(_T("IRowsetIndex::Seek"),yySEEK); SetAt(_T("IRowsetChange::DeleteRows"),yyDELETEROWS); SetAt(_T("IRowsetChange::InsertRow"),yyINSERTROW); SetAt(_T("IRowsetUpdate::Update"),yyUPDATE); SetAt(_T("IRowsetUpdate::Undo"),yyUNDO); SetAt(_T("IRowset::GetNextRows"),yyGETNEXTROWS); SetAt(_T("IRowset::ReleaseRows"),yyRELEASEROWS); SetAt(_T("IRowset::AddRefRows"),yyADDREFROWS); SetAt(_T("IRowset::AddRef"),yyADDREFROWSET); SetAt(_T("IRowset::Release"),yyRELEASEROWSET); SetAt(_T("IRowsetResynch::ResynchRows"),yyRESYNCHROWS); SetAt(_T("IRowsetLocate::GetRowsAt"),yyGETROWSAT); SetAt(_T("IRowsetScroll::GetRowsAtRatio"),yyGETROWSATRATIO); SetAt(_T("IRowset::RestartPosition"),yyRESTARTPOSITION); SetAt(_T("IRowsetLocate::GetRowsByBookmark"),yyGETROWSBYBOOKMARK); SetAt(_T("ITransaction::Abort"), yyABORT); SetAt(_T("ITransaction::Commit"), yyCOMMIT); SetAt(_T("ITableDefinition::AddColumn"), yyADDCOLUMN); SetAt(_T("ITableDefinition::DropColumn"), yyDROPCOLUMN); SetAt(_T("IColumnsInfo::GetColumnInfo"), yyGETCOLUMNINFO); //Listener Return values SetAt(_T("RETURN_ACCEPT"),yyRETURN_ACCEPT); SetAt(_T("RETURN_VETO"),yyRETURN_VETO); SetAt(_T("RETURN_EFAIL"),yyRETURN_EFAIL); SetAt(_T("RETURN_EOUTOFMEMORY"),yyRETURN_EOUTOFMEMORY); SetAt(_T("RETURN_EINVALIDARG"),yyRETURN_EINVALIDARG); SetAt(_T("RETURN_UNWANTEDREASON"),yyRETURN_UNWANTEDREASON); SetAt(_T("RETURN_UNWANTEDPHASE"),yyRETURN_UNWANTEDPHASE); SetAt(_T("RETURN_ADVISE"),yyRETURN_ADVISE); SetAt(_T("RETURN_UNADVISE"),yyRETURN_UNADVISE); SetAt(_T("Control"),yyCONTROL); SetAt(_T("Listener"),yyLISTENER); SetAt(_T("Thread"),yyTHREAD); SetAt(_T("COLUMN_SET"),yyCOLUMN_SET); SetAt(_T("ROW_DELETE"),yyROW_DELETE); SetAt(_T("ROW_INSERT"),yyROW_INSERT); SetAt(_T("ROW_FIRSTCHANGE"),yyROW_FIRSTCHANGE); SetAt(_T("ROW_ACTIVATE"),yyROW_ACTIVATE); SetAt(_T("ROW_RELEASE"),yyROW_RELEASE); SetAt(_T("ROW_UNDOCHANGE"),yyROW_UNDOCHANGE); SetAt(_T("ROW_UNDOINSERT"),yyROW_UNDOINSERT); SetAt(_T("ROW_UNDODELETE"),yyROW_UNDODELETE); SetAt(_T("ROW_UPDATE"),yyROW_UPDATE); SetAt(_T("ROW_RESYNCH"),yyROW_RESYNCH); SetAt(_T("ROWSET_RELEASE"),yyROWSET_RELEASE); SetAt(_T("ROWSET_FETCHPOSITIONCHANGE"), yyROWSET_FETCHPOSITIONCHANGE); SetAt(_T("ROWSET_CHANGED"), yyROWSET_CHANGED); SetAt(_T("COLUMN_RECALCULATED"), yyCOLUMN_RECALCULATED); SetAt(_T("DBBMK_FIRST"),yyDBBMK_FIRST); SetAt(_T("DBBMK_LAST"),yyDBBMK_LAST); SetAt(_T("OKTODO"),yyOKTODO); SetAt(_T("ABOUTTODO"),yyABOUTTODO); SetAt(_T("SYNCHAFTER"),yySYNCHAFTER); SetAt(_T("DIDEVENT"),yyDIDEVENT); SetAt(_T("FAILEDTODO"),yyFAILEDTODO); //HrExpected SetAt(_T("DB_S_ENDOFROWSET"),yyDB_S_ENDOFROWSET); SetAt(_T("DB_E_BADSTARTPOSITION"),yyDB_E_BADSTARTPOSITION); SetAt(_T("DB_E_NOTREENTRANT"),yyDB_E_NOTREENTRANT); SetAt(_T("DB_S_ERRORSOCCURRED"),yyDB_S_ERRORSOCCURRED); SetAt(_T("DB_E_ERRORSOCCURRED"),yyDB_E_ERRORSOCCURRED); SetAt(_T("E_INVALIDARG"),yyE_INVALIDARG); SetAt(_T("DB_E_ROWSNOTRELEASED"),yyDB_E_ROWSNOTRELEASED); SetAt(_T("DB_E_BADACCESSORHANDLE"),yyDB_E_BADACCESSORHANDLE); SetAt(_T("DB_E_BADROWHANDLE"),yyDB_E_BADROWHANDLE); } KEYWORDTABLE::~KEYWORDTABLE() { RemoveAll(); } // Keyword Table KEYWORDTABLE KeywordTable; // Identifier Table TABLE IdentifierTable; WCHAR LexBuf[100]; WCHAR *LexPtr; ULONG TokenId; ULONG IdentifierId = 1; int yylexInit() { IdentifierId = 1; IdentifierTable.RemoveAll(); return TRUE; } int yylex() { start: // Get next char from input string WCHAR wcChar = *yylpwzInput++; // Check for end of input string if (wcChar == L'\0') { IdentifierId = 1; IdentifierTable.RemoveAll(); return 0; } if (iswspace(wcChar)) goto start; // Check for special char and return it if (!iswalpha(wcChar) && wcChar != L'_' && !iswdigit(wcChar)) { char AnsiBuf[3]; WideCharToMultiByte(CP_ACP,0,LPCWSTR(&wcChar),1,AnsiBuf,sizeof(AnsiBuf),NULL,NULL); return AnsiBuf[0]; } // Check for digit and collect it if (iswdigit(wcChar)) { LexPtr = LexBuf; *LexPtr++ = wcChar; while (iswdigit(*yylpwzInput)) *LexPtr++ = *yylpwzInput++; *LexPtr = L'\0'; yylval.Number = _wtol(LexBuf); return yyNUMBER; } // Collect Identifier or Keyword LexPtr = LexBuf; *LexPtr++ = wcChar; while (iswalnum(*yylpwzInput)|| *yylpwzInput == L'_' || *yylpwzInput == L':') *LexPtr++ = *yylpwzInput++; *LexPtr = L'\0'; TCHAR tszLexBuf[200]; #ifndef _UNICODE WideCharToMultiByte(CP_ACP,0,LexBuf,-1,tszLexBuf,200,NULL,NULL); #else wcscpy(tszLexBuf, LexBuf); #endif //_UNICODE // If Keyword, return Token Id else return Identifier Id if (KeywordTable.Lookup(tszLexBuf,TokenId)) return TokenId; else { if (!IdentifierTable.Lookup(tszLexBuf,yylval.IdentifierId)) { yylval.IdentifierId = IdentifierId++; IdentifierTable.SetAt(tszLexBuf,yylval.IdentifierId); } return yyIDENTIFIERID; } } */ /////////////////////////////////////////////////////////////////////////////// // Y_TAB.C // /////////////////////////////////////////////////////////////////////////////// #ifndef lint static char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93"; #endif #define YYBYACC 1 #define YYMAJOR 1 #define YYMINOR 9 #define yyclearin (yychar=(-1)) #define yyerrok (yyerrflag=0) #define YYRECOVERING (yyerrflag!=0) #define YYPREFIX "yy" #include "MODStandard.hpp" /*ModuleCore headers*/ #include "IRNotify.h" /*IRowsetNotify header*/ #define lint /*Removes warnings for unused labels*/ /* Input string to parse */ LPCWSTR yylpwzInput; CExecutionManager *yypExecutionManager; COMMANDLIST *yypCommandList; COMMANDLISTMAP *yypCommandListMap; CONTROLMAP *yypControlMap; LISTENERMAP *yypListenerMap; static LPVOID pvObjectId = NULL; static CControl* pControl = NULL; static DBREASON eReason = 0; static DBEVENTPHASE ePhase = 0; static ULONG ulCommandLevel = 1; static ULONG cRows = 0; static ULONG rgRowIds[MAX_ROW_COUNT]; static ULONG cColumns = 0; static ULONG rgColumns[MAX_ROW_COUNT]; static HRESULT hrExpected = S_OK; static ULONG cThreads = 0; typedef union { ULONG Number; ULONG IdentifierId; } YYSTYPE; #define yyNUMBER 257 #define yyIDENTIFIERID 258 #define yyROWSET_FETCHPOSITIONCHANGE 259 #define yyROWSET_RELEASE 260 #define yyROWSET_CHANGED 261 #define yyCOLUMN_SET 262 #define yyCOLUMN_RECALCULATED 263 #define yyROW_ACTIVATE 264 #define yyROW_RELEASE 265 #define yyROW_DELETE 266 #define yyROW_FIRSTCHANGE 267 #define yyROW_INSERT 268 #define yyROW_RESYNCH 269 #define yyROW_UNDOCHANGE 270 #define yyROW_UNDOINSERT 271 #define yyROW_UNDODELETE 272 #define yyROW_UPDATE 273 #define yyOKTODO 274 #define yyABOUTTODO 275 #define yySYNCHAFTER 276 #define yyDIDEVENT 277 #define yyFAILEDTODO 278 #define yyGETDATA 279 #define yyGETORIGINALDATA 280 #define yyGETVISIBLEDATA 281 #define yyRELEASEROWSET 282 #define yyADDREFROWSET 283 #define yyGETNEXTROWS 284 #define yyRELEASEROWS 285 #define yyADDREFROWS 286 #define yyRESTARTPOSITION 287 #define yyDELETEROWS 288 #define yyINSERTROW 289 #define yySETDATA 290 #define yySEEK 291 #define yyGETROWSAT 292 #define yyGETROWSBYBOOKMARK 293 #define yyRESYNCHROWS 294 #define yyGETROWSATRATIO 295 #define yyUNDO 296 #define yyUPDATE 297 #define yyABORT 298 #define yyCOMMIT 299 #define yyADDCOLUMN 300 #define yyDROPCOLUMN 301 #define yyGETCOLUMNINFO 302 #define yyCONTROL 303 #define yyLISTENER 304 #define yyTHREAD 305 #define yyDBBMK_FIRST 306 #define yyDBBMK_LAST 307 #define yyRETURN_ACCEPT 308 #define yyRETURN_VETO 309 #define yyRETURN_EFAIL 310 #define yyRETURN_EOUTOFMEMORY 311 #define yyRETURN_EINVALIDARG 312 #define yyRETURN_UNWANTEDREASON 313 #define yyRETURN_UNWANTEDPHASE 314 #define yyRETURN_ADVISE 315 #define yyRETURN_UNADVISE 316 #define yyDB_S_ENDOFROWSET 317 #define yyDB_E_BADSTARTPOSITION 318 #define yyDB_E_NOTREENTRANT 319 #define yyDB_S_ERRORSOCCURRED 320 #define yyDB_E_ERRORSOCCURRED 321 #define yyE_INVALIDARG 322 #define yyDB_E_ROWSNOTRELEASED 323 #define yyDB_E_BADACCESSORHANDLE 324 #define yyDB_E_BADROWHANDLE 325 #define YYERRCODE 256 short yylhs[] = { -1, 1, 0, 2, 2, 4, 3, 3, 6, 5, 7, 7, 8, 8, 10, 10, 11, 12, 15, 15, 15, 17, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 20, 19, 18, 21, 22, 23, 23, 24, 24, 25, 25, 26, 26, 26, 26, 27, 28, 29, 29, 30, 31, 33, 32, 34, 35, 35, 36, 36, 37, 38, 39, 40, 41, 45, 45, 42, 42, 42, 42, 43, 43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, }; short yylen[] = { 2, 0, 5, 1, 2, 3, 1, 2, 0, 9, 1, 2, 4, 3, 1, 2, 7, 1, 1, 4, 3, 0, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 6, 6, 8, 4, 6, 6, 4, 6, 4, 4, 4, 4, 6, 4, 4, 4, 4, 4, 4, 6, 4, 6, 4, 4, 4, 4, 4, 1, 3, 1, 1, 3, 3, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; short yydefred[] = { 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 6, 5, 0, 2, 7, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 97, 98, 99, 100, 101, 102, 103, 104, 105, 0, 95, 0, 91, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 17, 13, 0, 14, 0, 79, 80, 0, 82, 0, 58, 78, 57, 0, 56, 77, 59, 60, 61, 0, 0, 65, 0, 68, 0, 70, 0, 71, 72, 73, 0, 75, 76, 84, 85, 86, 87, 88, 12, 15, 0, 0, 0, 93, 94, 0, 89, 0, 0, 0, 0, 0, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 0, 81, 83, 62, 63, 0, 66, 67, 69, 74, 0, 90, 0, 121, 122, 123, 124, 125, 0, 64, 0, 21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 0, 16, 18, 0, 0, 0, 20, 0, 0, 19, 22, }; short yydgoto[] = { 1, 2, 5, 9, 6, 11, 18, 44, 45, 46, 138, 139, 140, 203, 221, 235, 236, 237, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 114, 115, 111, 183, }; short yysindex[] = { 0, 0, -87, -260, -210, -123, 0, -10, -237, -94, 0, 0, 0, -180, 0, 0, 29, 0, -34, -59, 108, 111, 112, 113, 114, 139, 140, 166, 167, 169, 170, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, -124, 0, -30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 3, 4, -262, -262, -238, -238, -238, -262, -238, 5, 6, 8, -294, -238, -238, 9, -238, -238, -262, -262, -262, -262, -262, 133, 0, -122, 218, -27, -11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 0, 226, 0, -4, 0, 1, 2, 227, 23, 24, 225, 53, 54, 58, 59, 60, 89, 90, 91, 229, 230, 231, 232, 233, 0, 0, 0, -121, 0, 234, 0, 0, -262, 0, -262, 0, 0, 0, -211, 0, 0, 0, 0, 0, -262, 18, 0, -262, 0, -238, 0, -238, 0, 0, 0, -238, 0, 0, 0, 0, 0, 0, 0, 0, 0, -144, 235, 236, 0, 0, 237, 0, 99, 238, 100, 101, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, -248, 0, 0, 0, 0, -253, 0, 240, 0, 0, 0, 0, 0, 241, 0, -97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 160, -120, -97, 0, -119, 161, 0, 0, }; short yyrindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 243, 106, 106, 106, 243, 106, 0, 0, 0, 0, 106, 106, 0, 106, 106, 243, 243, 243, 243, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 106, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; short yygindex[] = { 0, 0, 0, 0, 283, 280, 0, 0, 246, -212, 55, -136, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, -40, -117, 0, }; #define YYTABLESIZE 293 short yytable[] = { 8, 95, 175, 137, 174, 240, 243, 116, 117, 214, 119, 234, 123, 124, 142, 125, 126, 143, 128, 129, 113, 216, 217, 218, 219, 220, 177, 234, 178, 8, 144, 14, 180, 145, 110, 112, 3, 148, 181, 118, 149, 184, 150, 151, 4, 149, 149, 179, 7, 12, 130, 131, 132, 133, 134, 101, 102, 103, 104, 105, 106, 107, 108, 109, 153, 154, 13, 149, 155, 101, 102, 103, 104, 105, 106, 107, 108, 109, 16, 101, 102, 103, 104, 105, 106, 107, 108, 109, 17, 19, 185, 215, 186, 97, 157, 159, 187, 158, 160, 161, 163, 164, 162, 149, 149, 175, 101, 102, 103, 104, 105, 106, 107, 108, 109, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 165, 167, 168, 166, 149, 149, 136, 136, 136, 136, 207, 210, 211, 208, 149, 149, 212, 96, 71, 149, 96, 72, 73, 74, 75, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 76, 77, 4, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 78, 79, 224, 80, 81, 225, 226, 227, 228, 229, 230, 231, 232, 233, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 98, 135, 141, 146, 99, 100, 120, 121, 122, 127, 147, 152, 156, 169, 170, 171, 172, 173, 182, 204, 205, 206, 209, 176, 222, 238, 239, 96, 213, 244, 223, 10, 15, 96, 242, 0, 241, }; short yycheck[] = { 123, 125, 138, 125, 125, 125, 125, 77, 78, 257, 80, 223, 306, 307, 41, 85, 86, 44, 88, 89, 258, 274, 275, 276, 277, 278, 143, 239, 145, 123, 41, 125, 149, 44, 74, 75, 123, 41, 155, 79, 44, 158, 41, 41, 304, 44, 44, 258, 258, 59, 90, 91, 92, 93, 94, 317, 318, 319, 320, 321, 322, 323, 324, 325, 41, 41, 303, 44, 44, 317, 318, 319, 320, 321, 322, 323, 324, 325, 258, 317, 318, 319, 320, 321, 322, 323, 324, 325, 59, 123, 160, 208, 162, 123, 41, 41, 166, 44, 44, 41, 41, 41, 44, 44, 44, 241, 317, 318, 319, 320, 321, 322, 323, 324, 325, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 41, 41, 41, 44, 44, 44, 258, 258, 258, 258, 41, 41, 41, 44, 44, 44, 41, 41, 40, 44, 44, 40, 40, 40, 40, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 40, 40, 304, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 40, 40, 305, 40, 40, 308, 309, 310, 311, 312, 313, 314, 315, 316, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 258, 125, 41, 41, 258, 258, 258, 258, 257, 257, 41, 41, 44, 41, 41, 41, 41, 41, 257, 41, 41, 41, 41, 46, 41, 123, 123, 41, 46, 125, 46, 5, 9, 44, 239, -1, 238, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 325 #if YYDEBUG char *yyname[] = { "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"'('","')'",0,0,"','",0,"'.'",0,0,0,0,0,0,0,0,0,0,0,0,"';'",0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'{'",0,"'}'",0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, "yyNUMBER","yyIDENTIFIERID","yyROWSET_FETCHPOSITIONCHANGE","yyROWSET_RELEASE", "yyROWSET_CHANGED","yyCOLUMN_SET","yyCOLUMN_RECALCULATED","yyROW_ACTIVATE", "yyROW_RELEASE","yyROW_DELETE","yyROW_FIRSTCHANGE","yyROW_INSERT", "yyROW_RESYNCH","yyROW_UNDOCHANGE","yyROW_UNDOINSERT","yyROW_UNDODELETE", "yyROW_UPDATE","yyOKTODO","yyABOUTTODO","yySYNCHAFTER","yyDIDEVENT", "yyFAILEDTODO","yyGETDATA","yyGETORIGINALDATA","yyGETVISIBLEDATA", "yyRELEASEROWSET","yyADDREFROWSET","yyGETNEXTROWS","yyRELEASEROWS", "yyADDREFROWS","yyRESTARTPOSITION","yyDELETEROWS","yyINSERTROW","yySETDATA", "yySEEK","yyGETROWSAT","yyGETROWSBYBOOKMARK","yyRESYNCHROWS","yyGETROWSATRATIO", "yyUNDO","yyUPDATE","yyABORT","yyCOMMIT","yyADDCOLUMN","yyDROPCOLUMN", "yyGETCOLUMNINFO","yyCONTROL","yyLISTENER","yyTHREAD","yyDBBMK_FIRST", "yyDBBMK_LAST","yyRETURN_ACCEPT","yyRETURN_VETO","yyRETURN_EFAIL", "yyRETURN_EOUTOFMEMORY","yyRETURN_EINVALIDARG","yyRETURN_UNWANTEDREASON", "yyRETURN_UNWANTEDPHASE","yyRETURN_ADVISE","yyRETURN_UNADVISE", "yyDB_S_ENDOFROWSET","yyDB_E_BADSTARTPOSITION","yyDB_E_NOTREENTRANT", "yyDB_S_ERRORSOCCURRED","yyDB_E_ERRORSOCCURRED","yyE_INVALIDARG", "yyDB_E_ROWSNOTRELEASED","yyDB_E_BADACCESSORHANDLE","yyDB_E_BADROWHANDLE", }; char *yyrule[] = { "$accept : Notification_Test", "$$1 :", "Notification_Test : $$1 '{' ListenerList ControlList '}'", "ListenerList : Listener", "ListenerList : ListenerList Listener", "Listener : yyLISTENER yyIDENTIFIERID ';'", "ControlList : Control", "ControlList : ControlList Control", "$$2 :", "Control : '{' yyCONTROL yyIDENTIFIERID ';' $$2 '{' ControlStmtList '}' '}'", "ControlStmtList : ControlStmt", "ControlStmtList : ControlStmtList ControlStmt", "ControlStmt : OLEDBMethod '{' ListenerStmtList '}'", "ControlStmt : OLEDBMethod '{' '}'", "ListenerStmtList : ListenerStmt", "ListenerStmtList : ListenerStmtList ListenerStmt", "ListenerStmt : ListenerIdentifier '.' Reason '.' Phase '.' ListenerMethod", "ListenerIdentifier : yyIDENTIFIERID", "ListenerMethod : ListenerReturn", "ListenerMethod : OLEDBMethod '{' ListenerStmtList '}'", "ListenerMethod : OLEDBMethod '{' '}'", "$$3 :", "ListenerMethod : yyTHREAD $$3 '{' ListenerMethod '}'", "ListenerReturn : yyRETURN_ACCEPT", "ListenerReturn : yyRETURN_VETO", "ListenerReturn : yyRETURN_EFAIL", "ListenerReturn : yyRETURN_EOUTOFMEMORY", "ListenerReturn : yyRETURN_EINVALIDARG", "ListenerReturn : yyRETURN_UNWANTEDREASON", "ListenerReturn : yyRETURN_UNWANTEDPHASE", "ListenerReturn : yyRETURN_ADVISE", "ListenerReturn : yyRETURN_UNADVISE", "OLEDBMethod : ReleaseRowsetMethod", "OLEDBMethod : GetNextRows", "OLEDBMethod : ReleaseRowsMethod", "OLEDBMethod : RestartPositionMethod", "OLEDBMethod : DeleteRowsMethod", "OLEDBMethod : InsertRowMethod", "OLEDBMethod : SetDataMethod", "OLEDBMethod : SeekMethod", "OLEDBMethod : GetRowsAtMethod", "OLEDBMethod : GetRowsByBookmarkMethod", "OLEDBMethod : ResynchRowsMethod", "OLEDBMethod : GetRowsAtRatioMethod", "OLEDBMethod : UndoMethod", "OLEDBMethod : UpdateMethod", "OLEDBMethod : AddRefRowsetMethod", "OLEDBMethod : AddRefRowsMethod", "OLEDBMethod : GetDataMethod", "OLEDBMethod : GetOriginalDataMethod", "OLEDBMethod : GetVisibleDataMethod", "OLEDBMethod : AbortMethod", "OLEDBMethod : CommitMethod", "OLEDBMethod : AddColumnMethod", "OLEDBMethod : DropColumnMethod", "OLEDBMethod : GetColumnInfoMethod", "ReleaseRowsMethod : yyRELEASEROWS '(' IdentifierList ')'", "GetNextRows : yyGETNEXTROWS '(' IdentifierList ')'", "ReleaseRowsetMethod : yyRELEASEROWSET '(' EmptyList ')'", "RestartPositionMethod : yyRESTARTPOSITION '(' EmptyList ')'", "DeleteRowsMethod : yyDELETEROWS '(' IdentifierList ')'", "InsertRowMethod : yyINSERTROW '(' yyIDENTIFIERID ')'", "InsertRowMethod : yyINSERTROW '(' yyIDENTIFIERID ',' ExpectedHRESULT ')'", "SetDataMethod : yySETDATA '(' yyIDENTIFIERID ',' OrdinalList ')'", "SetDataMethod : yySETDATA '(' yyIDENTIFIERID ',' OrdinalList ',' ExpectedHRESULT ')'", "SeekMethod : yySEEK '(' yyNUMBER ')'", "SeekMethod : yySEEK '(' yyNUMBER ',' ExpectedHRESULT ')'", "GetRowsAtMethod : yyGETROWSAT '(' yyDBBMK_FIRST ',' IdentifierList ')'", "GetRowsAtMethod : yyGETROWSAT '(' yyDBBMK_FIRST ')'", "GetRowsAtMethod : yyGETROWSAT '(' yyDBBMK_LAST ',' IdentifierList ')'", "GetRowsAtMethod : yyGETROWSAT '(' yyDBBMK_LAST ')'", "GetRowsByBookmarkMethod : yyGETROWSBYBOOKMARK '(' IdentifierList ')'", "ResynchRowsMethod : yyRESYNCHROWS '(' IdentifierList ')'", "GetRowsAtRatioMethod : yyGETROWSATRATIO '(' yyNUMBER ')'", "GetRowsAtRatioMethod : yyGETROWSATRATIO '(' yyNUMBER ',' IdentifierList ')'", "UndoMethod : yyUNDO '(' IdentifierList ')'", "UpdateMethod : yyUPDATE '(' IdentifierList ')'", "AddRefRowsMethod : yyADDREFROWS '(' IdentifierList ')'", "AddRefRowsetMethod : yyADDREFROWSET '(' EmptyList ')'", "GetDataMethod : yyGETDATA '(' yyIDENTIFIERID ')'", "GetOriginalDataMethod : yyGETORIGINALDATA '(' yyIDENTIFIERID ')'", "GetOriginalDataMethod : yyGETORIGINALDATA '(' yyIDENTIFIERID ',' ExpectedHRESULT ')'", "GetVisibleDataMethod : yyGETVISIBLEDATA '(' yyIDENTIFIERID ')'", "GetVisibleDataMethod : yyGETVISIBLEDATA '(' yyIDENTIFIERID ',' ExpectedHRESULT ')'", "AbortMethod : yyABORT '(' EmptyList ')'", "CommitMethod : yyCOMMIT '(' EmptyList ')'", "AddColumnMethod : yyADDCOLUMN '(' EmptyList ')'", "DropColumnMethod : yyDROPCOLUMN '(' EmptyList ')'", "GetColumnInfoMethod : yyGETCOLUMNINFO '(' EmptyList ')'", "OrdinalList : yyNUMBER", "OrdinalList : OrdinalList ',' yyNUMBER", "IdentifierList : yyIDENTIFIERID", "IdentifierList : EmptyList", "IdentifierList : IdentifierList ',' yyIDENTIFIERID", "IdentifierList : IdentifierList ',' ExpectedHRESULT", "EmptyList : ExpectedHRESULT", "EmptyList :", "ExpectedHRESULT : yyDB_S_ENDOFROWSET", "ExpectedHRESULT : yyDB_E_BADSTARTPOSITION", "ExpectedHRESULT : yyDB_E_NOTREENTRANT", "ExpectedHRESULT : yyDB_S_ERRORSOCCURRED", "ExpectedHRESULT : yyDB_E_ERRORSOCCURRED", "ExpectedHRESULT : yyE_INVALIDARG", "ExpectedHRESULT : yyDB_E_ROWSNOTRELEASED", "ExpectedHRESULT : yyDB_E_BADACCESSORHANDLE", "ExpectedHRESULT : yyDB_E_BADROWHANDLE", "Reason : yyROWSET_FETCHPOSITIONCHANGE", "Reason : yyROWSET_RELEASE", "Reason : yyROWSET_CHANGED", "Reason : yyCOLUMN_SET", "Reason : yyCOLUMN_RECALCULATED", "Reason : yyROW_ACTIVATE", "Reason : yyROW_RELEASE", "Reason : yyROW_DELETE", "Reason : yyROW_FIRSTCHANGE", "Reason : yyROW_INSERT", "Reason : yyROW_RESYNCH", "Reason : yyROW_UNDOCHANGE", "Reason : yyROW_UNDOINSERT", "Reason : yyROW_UNDODELETE", "Reason : yyROW_UPDATE", "Phase : yyOKTODO", "Phase : yyABOUTTODO", "Phase : yySYNCHAFTER", "Phase : yyDIDEVENT", "Phase : yyFAILEDTODO", }; #endif #ifdef YYSTACKSIZE #undef YYMAXDEPTH #define YYMAXDEPTH YYSTACKSIZE #else #ifdef YYMAXDEPTH #define YYSTACKSIZE YYMAXDEPTH #else #define YYSTACKSIZE 500 #define YYMAXDEPTH 500 #endif #endif int yydebug; int yynerrs; int yyerrflag; int yychar; short *yyssp; YYSTYPE *yyvsp; YYSTYPE yyval; YYSTYPE yylval; short yyss[YYSTACKSIZE]; YYSTYPE yyvs[YYSTACKSIZE]; #define yystacksize YYSTACKSIZE int yyerror(char*s) { return 0; } // Keyword Table for Parser typedef CMap TABLE; class KEYWORDTABLE : public TABLE { public: KEYWORDTABLE(); ~KEYWORDTABLE(); }; KEYWORDTABLE::KEYWORDTABLE() { SetAt(_T("IRowset::GetData"),yyGETDATA); SetAt(_T("IRowsetUpdate::GetOriginalData"),yyGETORIGINALDATA); SetAt(_T("IRowsetResynch::GetVisibleData"),yyGETVISIBLEDATA); SetAt(_T("IRowsetChange::SetData"),yySETDATA); SetAt(_T("IRowsetIndex::Seek"),yySEEK); SetAt(_T("IRowsetChange::DeleteRows"),yyDELETEROWS); SetAt(_T("IRowsetChange::InsertRow"),yyINSERTROW); SetAt(_T("IRowsetUpdate::Update"),yyUPDATE); SetAt(_T("IRowsetUpdate::Undo"),yyUNDO); SetAt(_T("IRowset::GetNextRows"),yyGETNEXTROWS); SetAt(_T("IRowset::ReleaseRows"),yyRELEASEROWS); SetAt(_T("IRowset::AddRefRows"),yyADDREFROWS); SetAt(_T("IRowset::AddRef"),yyADDREFROWSET); SetAt(_T("IRowset::Release"),yyRELEASEROWSET); SetAt(_T("IRowsetResynch::ResynchRows"),yyRESYNCHROWS); SetAt(_T("IRowsetLocate::GetRowsAt"),yyGETROWSAT); SetAt(_T("IRowsetScroll::GetRowsAtRatio"),yyGETROWSATRATIO); SetAt(_T("IRowset::RestartPosition"),yyRESTARTPOSITION); SetAt(_T("IRowsetLocate::GetRowsByBookmark"),yyGETROWSBYBOOKMARK); SetAt(_T("ITransaction::Abort"), yyABORT); SetAt(_T("ITransaction::Commit"), yyCOMMIT); SetAt(_T("ITableDefinition::AddColumn"), yyADDCOLUMN); SetAt(_T("ITableDefinition::DropColumn"), yyDROPCOLUMN); SetAt(_T("IColumnsInfo::GetColumnInfo"), yyGETCOLUMNINFO); //Listener Return values SetAt(_T("RETURN_ACCEPT"),yyRETURN_ACCEPT); SetAt(_T("RETURN_VETO"),yyRETURN_VETO); SetAt(_T("RETURN_EFAIL"),yyRETURN_EFAIL); SetAt(_T("RETURN_EOUTOFMEMORY"),yyRETURN_EOUTOFMEMORY); SetAt(_T("RETURN_EINVALIDARG"),yyRETURN_EINVALIDARG); SetAt(_T("RETURN_UNWANTEDREASON"),yyRETURN_UNWANTEDREASON); SetAt(_T("RETURN_UNWANTEDPHASE"),yyRETURN_UNWANTEDPHASE); SetAt(_T("RETURN_ADVISE"),yyRETURN_ADVISE); SetAt(_T("RETURN_UNADVISE"),yyRETURN_UNADVISE); SetAt(_T("Control"),yyCONTROL); SetAt(_T("Listener"),yyLISTENER); SetAt(_T("Thread"),yyTHREAD); SetAt(_T("COLUMN_SET"),yyCOLUMN_SET); SetAt(_T("ROW_DELETE"),yyROW_DELETE); SetAt(_T("ROW_INSERT"),yyROW_INSERT); SetAt(_T("ROW_FIRSTCHANGE"),yyROW_FIRSTCHANGE); SetAt(_T("ROW_ACTIVATE"),yyROW_ACTIVATE); SetAt(_T("ROW_RELEASE"),yyROW_RELEASE); SetAt(_T("ROW_UNDOCHANGE"),yyROW_UNDOCHANGE); SetAt(_T("ROW_UNDOINSERT"),yyROW_UNDOINSERT); SetAt(_T("ROW_UNDODELETE"),yyROW_UNDODELETE); SetAt(_T("ROW_UPDATE"),yyROW_UPDATE); SetAt(_T("ROW_RESYNCH"),yyROW_RESYNCH); SetAt(_T("ROWSET_RELEASE"),yyROWSET_RELEASE); SetAt(_T("ROWSET_FETCHPOSITIONCHANGE"), yyROWSET_FETCHPOSITIONCHANGE); SetAt(_T("ROWSET_CHANGED"), yyROWSET_CHANGED); SetAt(_T("COLUMN_RECALCULATED"), yyCOLUMN_RECALCULATED); SetAt(_T("DBBMK_FIRST"),yyDBBMK_FIRST); SetAt(_T("DBBMK_LAST"),yyDBBMK_LAST); SetAt(_T("OKTODO"),yyOKTODO); SetAt(_T("ABOUTTODO"),yyABOUTTODO); SetAt(_T("SYNCHAFTER"),yySYNCHAFTER); SetAt(_T("DIDEVENT"),yyDIDEVENT); SetAt(_T("FAILEDTODO"),yyFAILEDTODO); //HrExpected SetAt(_T("DB_S_ENDOFROWSET"),yyDB_S_ENDOFROWSET); SetAt(_T("DB_E_BADSTARTPOSITION"),yyDB_E_BADSTARTPOSITION); SetAt(_T("DB_E_NOTREENTRANT"),yyDB_E_NOTREENTRANT); SetAt(_T("DB_S_ERRORSOCCURRED"),yyDB_S_ERRORSOCCURRED); SetAt(_T("DB_E_ERRORSOCCURRED"),yyDB_E_ERRORSOCCURRED); SetAt(_T("E_INVALIDARG"),yyE_INVALIDARG); SetAt(_T("DB_E_ROWSNOTRELEASED"),yyDB_E_ROWSNOTRELEASED); SetAt(_T("DB_E_BADACCESSORHANDLE"),yyDB_E_BADACCESSORHANDLE); SetAt(_T("DB_E_BADROWHANDLE"),yyDB_E_BADROWHANDLE); } KEYWORDTABLE::~KEYWORDTABLE() { RemoveAll(); } // Keyword Table KEYWORDTABLE KeywordTable; // Identifier Table TABLE IdentifierTable; WCHAR LexBuf[100]; WCHAR *LexPtr; ULONG TokenId; ULONG IdentifierId = 1; int yylexInit() { IdentifierId = 1; IdentifierTable.RemoveAll(); return TRUE; } int yylex() { start: // Get next char from input string WCHAR wcChar = *yylpwzInput++; // Check for end of input string if (wcChar == L'\0') { IdentifierId = 1; IdentifierTable.RemoveAll(); return 0; } if (iswspace(wcChar)) goto start; // Check for special char and return it if (!iswalpha(wcChar) && wcChar != L'_' && !iswdigit(wcChar)) { char AnsiBuf[3]; WideCharToMultiByte(CP_ACP,0,LPCWSTR(&wcChar),1,AnsiBuf,sizeof(AnsiBuf),NULL,NULL); return AnsiBuf[0]; } // Check for digit and collect it if (iswdigit(wcChar)) { LexPtr = LexBuf; *LexPtr++ = wcChar; while (iswdigit(*yylpwzInput)) *LexPtr++ = *yylpwzInput++; *LexPtr = L'\0'; yylval.Number = _wtol(LexBuf); return yyNUMBER; } // Collect Identifier or Keyword LexPtr = LexBuf; *LexPtr++ = wcChar; while (iswalnum(*yylpwzInput)|| *yylpwzInput == L'_' || *yylpwzInput == L':') *LexPtr++ = *yylpwzInput++; *LexPtr = L'\0'; TCHAR tszLexBuf[200]; #ifndef _UNICODE WideCharToMultiByte(CP_ACP,0,LexBuf,-1,tszLexBuf,200,NULL,NULL); #else wcscpy(tszLexBuf, LexBuf); #endif //_UNICODE // If Keyword, return Token Id else return Identifier Id if (KeywordTable.Lookup(tszLexBuf,TokenId)) return TokenId; else { if (!IdentifierTable.Lookup(tszLexBuf,yylval.IdentifierId)) { yylval.IdentifierId = IdentifierId++; IdentifierTable.SetAt(tszLexBuf,yylval.IdentifierId); } return yyIDENTIFIERID; } } #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab int yyparse() { register int yym, yyn, yystate; #if YYDEBUG register char *yys; extern char *getenv(); if (yys = getenv("YYDEBUG")) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } #endif yynerrs = 0; yyerrflag = 0; yychar = (-1); yyssp = yyss; yyvsp = yyvs; *yyssp = yystate = 0; yyloop: if (yyn = yydefred[yystate]) goto yyreduce; if (yychar < 0) { if ((yychar = yylex()) < 0) yychar = 0; #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yychar) { #if YYDEBUG if (yydebug) printf("%sdebug: state %d, shifting to state %d\n", YYPREFIX, yystate, yytable[yyn]); #endif if (yyssp >= yyss + yystacksize - 1) { goto yyoverflow; } *++yyssp = yystate = yytable[yyn]; *++yyvsp = yylval; yychar = (-1); if (yyerrflag > 0) --yyerrflag; goto yyloop; } if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag) goto yyinrecovery; #ifdef lint goto yynewerror; #endif yynewerror: yyerror("syntax error"); #ifdef lint goto yyerrlab; #endif yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) { #if YYDEBUG if (yydebug) printf("%sdebug: state %d, error recovery shifting\ to state %d\n", YYPREFIX, *yyssp, yytable[yyn]); #endif if (yyssp >= yyss + yystacksize - 1) { goto yyoverflow; } *++yyssp = yystate = yytable[yyn]; *++yyvsp = yylval; goto yyloop; } else { #if YYDEBUG if (yydebug) printf("%sdebug: error recovery discarding state %d\n", YYPREFIX, *yyssp); #endif if (yyssp <= yyss) goto yyabort; --yyssp; --yyvsp; } } } else { if (yychar == 0) goto yyabort; #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, error recovery discards token %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif yychar = (-1); goto yyloop; } yyreduce: #if YYDEBUG if (yydebug) printf("%sdebug: state %d, reducing by rule %d (%s)\n", YYPREFIX, yystate, yyn, yyrule[yyn]); #endif yym = yylen[yyn]; yyval = yyvsp[1-yym]; switch (yyn) { case 1: {ulCommandLevel = 1; } break; case 5: {yypListenerMap->SetAt(yyvsp[-1].IdentifierId,new CImpIListener(yypExecutionManager));} break; case 8: { pControl = new CControl(yypExecutionManager); pvObjectId = pControl; ulCommandLevel = 1; yypControlMap->SetAt(yyvsp[-1].IdentifierId,pControl); yypCommandList = new COMMANDLIST; yypCommandListMap->SetAt(pControl->GetThreadId(), yypCommandList); } break; case 12: { ulCommandLevel++; pvObjectId = pControl; } break; case 13: { ulCommandLevel++; pvObjectId = pControl; } break; case 17: {CImpIListener *pImpIListener; BOOL Ok = yypListenerMap->Lookup(yyvsp[0].IdentifierId,pImpIListener); if (!Ok) yyerror("Invalid Listener"); pvObjectId = pImpIListener;} break; case 18: { } break; case 19: { } break; case 20: { } break; case 21: { cThreads = 1; } break; case 22: { cThreads = 0; } break; case 23: {yypCommandList->AddTail( new COMMAND(RETURN_ACCEPT, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase));} break; case 24: {yypCommandList->AddTail( new COMMAND(RETURN_VETO, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase));} break; case 25: {yypCommandList->AddTail( new COMMAND(RETURN_EFAIL, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase));} break; case 26: {yypCommandList->AddTail( new COMMAND(RETURN_EOUTOFMEMORY, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase));} break; case 27: {yypCommandList->AddTail( new COMMAND(RETURN_EINVALIDARG, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase));} break; case 28: {yypCommandList->AddTail( new COMMAND(RETURN_UNWANTEDREASON, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase));} break; case 29: {yypCommandList->AddTail( new COMMAND(RETURN_UNWANTEDPHASE, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase));} break; case 30: {yypCommandList->AddTail( new COMMAND(RETURN_ADVISE, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase));} break; case 31: {yypCommandList->AddTail( new COMMAND(RETURN_UNADVISE, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase));} break; case 56: {yypCommandList->AddTail( new COMMAND(RELEASEROWS, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase, /*ePhase*/ hrExpected, /*hrExpected*/ cRows, /*cRows*/ rgRowIds));} break; case 57: {yypCommandList->AddTail( new COMMAND(GETNEXTROWS, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase, /*ePhase*/ hrExpected, /*hrExpected*/ cRows, /*cRows*/ rgRowIds));} break; case 58: {yypCommandList->AddTail( new COMMAND(RELEASEROWSET, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase, /*ePhase*/ hrExpected));} break; case 59: {yypCommandList->AddTail( new COMMAND(RESTARTPOSITION, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase, /*ePhase*/ hrExpected));} break; case 60: {yypCommandList->AddTail( new COMMAND(DELETEROWS, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase, /*ePhase*/ hrExpected, /*hrExpected*/ cRows, /*cRows*/ rgRowIds));} break; case 61: {yypCommandList->AddTail( new COMMAND(INSERTROW, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase, /*ePhase*/ S_OK, /*hrExpected*/ 1, /*cRows*/ &(yyvsp[-1].IdentifierId)));} break; case 62: {yypCommandList->AddTail( new COMMAND(INSERTROW, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase, /*ePhase*/ hrExpected, /*hrExpected*/ 1, /*cRows*/ &(yyvsp[-3].IdentifierId)));} break; case 63: {yypCommandList->AddTail( new COMMAND(SETDATA, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase, /*ePhase*/ S_OK, /*hrExpected*/ 1, /*cRows*/ &(yyvsp[-3].IdentifierId), /*rgRowIds*/ cColumns, /*cColumns*/ rgColumns));} break; case 64: {yypCommandList->AddTail( new COMMAND(SETDATA, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase, /*ePhase*/ hrExpected, /*hrExpected*/ 1, /*cRows*/ &(yyvsp[-5].IdentifierId), /*rgRowIds*/ cColumns, /*cColumns*/ rgColumns));} break; case 65: {yypCommandList->AddTail( new COMMAND(SEEK, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase, /*ePhase*/ hrExpected, /*hrExpected*/ yyvsp[-1].Number, /*cRows*/ rgRowIds));} break; case 66: {yypCommandList->AddTail( new COMMAND(SEEK, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase, /*ePhase*/ hrExpected, /*hrExpected*/ yyvsp[-3].Number, /*cRows*/ rgRowIds));} break; case 67: {yypCommandList->AddTail( new COMMAND(GETROWSAT, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase, /*ePhase*/ hrExpected, /*hrExpected*/ cRows, /*cRows*/ rgRowIds, /*rgRowIds*/ 0, /*cColumns*/ NULL, /*rgColumns*/ DBBMK_FIRST));} break; case 68: {yypCommandList->AddTail( new COMMAND(GETROWSAT, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase, /*ePhase*/ S_OK, /*hrExpected*/ 0, /*cRows*/ NULL, /*rgRowIds*/ 0, /*cColumns*/ NULL, /*rgColumns*/ DBBMK_FIRST));} break; case 69: {yypCommandList->AddTail( new COMMAND(GETROWSAT, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase, /*ePhase*/ hrExpected, /*hrExpected*/ cRows, /*cRows*/ rgRowIds, /*rgRowIds*/ 0, /*cColumns*/ NULL, /*rgColumns*/ DBBMK_LAST));} break; case 70: {yypCommandList->AddTail( new COMMAND(GETROWSAT, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase, /*ePhase*/ hrExpected, /*hrExpected*/ 0, /*cRows*/ NULL, /*rgRowIds*/ 0, /*cColumns*/ NULL, /*rgColumns*/ DBBMK_LAST));} break; case 71: {yypCommandList->AddTail( new COMMAND(GETROWSBYBOOKMARK, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase, /*ePhase*/ hrExpected, /*hrExpected*/ cRows, /*cRows*/ rgRowIds));} break; case 72: {yypCommandList->AddTail( new COMMAND(RESYNCHROWS, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase, /*ePhase*/ hrExpected, /*hrExpected*/ cRows, /*cRows*/ rgRowIds));} break; case 73: {yypCommandList->AddTail( new COMMAND(GETROWSATRATIO, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase, /*ePhase*/ hrExpected, /*hrExpected*/ 0, /*cRows*/ NULL, /*rgRowIds*/ 0, /*cColumns*/ NULL, /*rgColumns*/ yyvsp[-1].Number));} break; case 74: {yypCommandList->AddTail( new COMMAND(GETROWSATRATIO, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase, /*ePhase*/ hrExpected, /*hrExpected*/ cRows, /*cRows*/ rgRowIds, /*rgRowIds*/ 0, /*cColumns*/ NULL, /*rgColumns*/ yyvsp[-3].Number));} break; case 75: {yypCommandList->AddTail( new COMMAND(UNDO, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase, /*ePhase*/ hrExpected, /*hrExpected*/ cRows, /*cRows*/ rgRowIds));} break; case 76: {yypCommandList->AddTail( new COMMAND(UPDATE, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase, /*ePhase*/ hrExpected, /*hrExpected*/ cRows, /*cRows*/ rgRowIds));} break; case 77: {yypCommandList->AddTail( new COMMAND(ADDREFROWS, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase, /*ePhase*/ hrExpected, /*hrExpected*/ cRows, /*cRows*/ rgRowIds));} break; case 78: {yypCommandList->AddTail( new COMMAND(ADDREFROWSET, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase, /*ePhase*/ hrExpected));} break; case 79: {yypCommandList->AddTail( new COMMAND(GETDATA, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase, /*ePhase*/ S_OK, /*hrExpected*/ 1, /*cRows*/ &(yyvsp[-1].IdentifierId) ));} break; case 80: {yypCommandList->AddTail( new COMMAND(GETORIGINALDATA, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase, /*ePhase*/ S_OK, /*hrExpected*/ 1, /*cRows*/ &(yyvsp[-1].IdentifierId) ));} break; case 81: {yypCommandList->AddTail( new COMMAND(GETORIGINALDATA, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase, /*ePhase*/ hrExpected, /*hrExpected*/ 1, /*cRows*/ &(yyvsp[-3].IdentifierId)));} break; case 82: {yypCommandList->AddTail( new COMMAND(GETVISIBLEDATA, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase, /*ePhase*/ S_OK, /*hrExpected*/ 1, /*cRows*/ &(yyvsp[-1].IdentifierId) ));} break; case 83: {yypCommandList->AddTail( new COMMAND(GETVISIBLEDATA, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase, /*ePhase*/ hrExpected, /*hrExpected*/ 1, /*cRows*/ &(yyvsp[-3].IdentifierId)));} break; case 84: {yypCommandList->AddTail( new COMMAND(ABORT, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase, /*ePhase*/ hrExpected));} break; case 85: {yypCommandList->AddTail( new COMMAND(COMMIT, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase, /*ePhase*/ hrExpected));} break; case 86: {yypCommandList->AddTail( new COMMAND(ADDCOLUMN, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase, /*ePhase*/ hrExpected));} break; case 87: {yypCommandList->AddTail( new COMMAND(DROPCOLUMN, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase, /*ePhase*/ hrExpected));} break; case 88: {yypCommandList->AddTail( new COMMAND(GETCOLUMNINFO, /*eCOMMANDTYPE*/ pvObjectId, /*pvObjectId*/ ulCommandLevel, /*ulCommandLevel*/ cThreads, /*cThreads*/ eReason, /*eReason*/ ePhase, /*ePhase*/ hrExpected));} break; case 89: {cColumns = 0; rgColumns[cColumns++] = yyvsp[0].Number;} break; case 90: {rgColumns[cColumns++] = yyvsp[0].Number;} break; case 91: { cRows = 0; rgRowIds[cRows++] = yyvsp[0].IdentifierId; hrExpected = S_OK; } break; case 92: { } break; case 93: { rgRowIds[cRows++] = yyvsp[0].IdentifierId; } break; case 94: { } break; case 95: { cRows = 0; cColumns = 0; } break; case 96: { cRows = 0; cColumns = 0; hrExpected = S_OK; } break; case 97: { // cRows = SIZEOF_TABLE; hrExpected = DB_S_ENDOFROWSET; } break; case 98: { hrExpected = DB_E_BADSTARTPOSITION; } break; case 99: { hrExpected = DB_E_NOTREENTRANT; } break; case 100: { hrExpected = DB_S_ERRORSOCCURRED; } break; case 101: { hrExpected = DB_E_ERRORSOCCURRED; } break; case 102: { hrExpected = E_INVALIDARG; } break; case 103: { hrExpected = DB_E_ROWSNOTRELEASED; } break; case 104: { hrExpected = DB_E_BADACCESSORHANDLE; } break; case 105: { hrExpected = DB_E_BADROWHANDLE; } break; case 106: {eReason = DBREASON_ROWSET_FETCHPOSITIONCHANGE;} break; case 107: {eReason = DBREASON_ROWSET_RELEASE;} break; case 108: {eReason = DBREASON_ROWSET_CHANGED;} break; case 109: {eReason = DBREASON_COLUMN_SET;} break; case 110: {eReason = DBREASON_COLUMN_RECALCULATED;} break; case 111: {eReason = DBREASON_ROW_ACTIVATE;} break; case 112: {eReason = DBREASON_ROW_RELEASE;} break; case 113: {eReason = DBREASON_ROW_DELETE;} break; case 114: {eReason = DBREASON_ROW_FIRSTCHANGE;} break; case 115: {eReason = DBREASON_ROW_INSERT;} break; case 116: {eReason = DBREASON_ROW_RESYNCH;} break; case 117: {eReason = DBREASON_ROW_UNDOCHANGE;} break; case 118: {eReason = DBREASON_ROW_UNDOINSERT;} break; case 119: {eReason = DBREASON_ROW_UNDODELETE;} break; case 120: {eReason = DBREASON_ROW_UPDATE;} break; case 121: {ePhase = DBEVENTPHASE_OKTODO;} break; case 122: {ePhase = DBEVENTPHASE_ABOUTTODO;} break; case 123: {ePhase = DBEVENTPHASE_SYNCHAFTER;} break; case 124: {ePhase = DBEVENTPHASE_DIDEVENT;} break; case 125: {ePhase = DBEVENTPHASE_FAILEDTODO;} break; } yyssp -= yym; yystate = *yyssp; yyvsp -= yym; yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) printf("%sdebug: after reduction, shifting from state 0 to\ state %d\n", YYPREFIX, YYFINAL); #endif yystate = YYFINAL; *++yyssp = YYFINAL; *++yyvsp = yyval; if (yychar < 0) { if ((yychar = yylex()) < 0) yychar = 0; #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == 0) goto yyaccept; goto yyloop; } if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) printf("%sdebug: after reduction, shifting from state %d \ to state %d\n", YYPREFIX, *yyssp, yystate); #endif if (yyssp >= yyss + yystacksize - 1) { goto yyoverflow; } *++yyssp = (short)yystate; *++yyvsp = yyval; goto yyloop; yyoverflow: yyerror("yacc stack overflow"); yyabort: return (1); yyaccept: return (0); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Test Case Section // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // {{ TCW_TEST_CASE_MAP(Release) //-------------------------------------------------------------------- // @class Tests Notifications for IRowset::Release // class Release : public CExecutionManager { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(Release,CExecutionManager); // }} TCW_DECLARE_FUNCS_END // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // {{ TCW_TESTVARS() // @cmember ROWSET_RELEASE - Accept all phases int Variation_1(); // @cmember Empty int Variation_2(); // @cmember Empty int Variation_3(); // @cmember ROWSET_RELEASE - DB_E_CANCELED int Variation_4(); // @cmember ROWSET_RELEASE - DB_E_NOTREENTRANT int Variation_5(); // @cmember Empty int Variation_6(); // @cmember Empty int Variation_7(); // @cmember ROWSET_RELEASE - Veto DIDEVENT, Listener 1 int Variation_8(); // @cmember Empty int Variation_9(); // @cmember Empty int Variation_10(); // @cmember ROWSET_RELEASE - UNWANTED REASON int Variation_11(); // @cmember ROWSET_RELEASE - UNWANTED PHASE - DIDEVENT int Variation_12(); // @cmember Empty int Variation_13(); // @cmember Empty int Variation_14(); // @cmember ROWSET_RELEASE - E_FAIL - All Phases int Variation_15(); // @cmember ROWSET_RELEASE - E_OUTOFMEMORY - All Phases int Variation_16(); // @cmember ROWSET_RELEASE - E_INVALIDARG - All Phases int Variation_17(); // @cmember Empty int Variation_18(); // @cmember Empty int Variation_19(); // @cmember OTHER SCENARIOS - AddRef - Release - no notifications int Variation_20(); // @cmember OTHER SCENARIOS - EmptyRowset int Variation_21(); // @cmember OTHER SCENARIOS - Remove Listeners int Variation_22(); // @cmember OTHER SCENARIOS - Add Listeners int Variation_23(); // }} TCW_TESTVARS_END }; // {{ TCW_TESTCASE(Release) #define THE_CLASS Release BEG_TEST_CASE(Release, CExecutionManager, L"Tests Notifications for IRowset::Release") TEST_VARIATION(1, L"ROWSET_RELEASE - Accept all phases") TEST_VARIATION(2, L"Empty") TEST_VARIATION(3, L"Empty") TEST_VARIATION(4, L"ROWSET_RELEASE - DB_E_CANCELED") TEST_VARIATION(5, L"ROWSET_RELEASE - DB_E_NOTREENTRANT") TEST_VARIATION(6, L"Empty") TEST_VARIATION(7, L"Empty") TEST_VARIATION(8, L"ROWSET_RELEASE - Veto DIDEVENT, Listener 1") TEST_VARIATION(9, L"Empty") TEST_VARIATION(10, L"Empty") TEST_VARIATION(11, L"ROWSET_RELEASE - UNWANTED REASON") TEST_VARIATION(12, L"ROWSET_RELEASE - UNWANTED PHASE - DIDEVENT") TEST_VARIATION(13, L"Empty") TEST_VARIATION(14, L"Empty") TEST_VARIATION(15, L"ROWSET_RELEASE - E_FAIL - All Phases") TEST_VARIATION(16, L"ROWSET_RELEASE - E_OUTOFMEMORY - All Phases") TEST_VARIATION(17, L"ROWSET_RELEASE - E_INVALIDARG - All Phases") TEST_VARIATION(18, L"Empty") TEST_VARIATION(19, L"Empty") TEST_VARIATION(20, L"OTHER SCENARIOS - AddRef - Release - no notifications") TEST_VARIATION(21, L"OTHER SCENARIOS - EmptyRowset") TEST_VARIATION(22, L"OTHER SCENARIOS - Remove Listeners") TEST_VARIATION(23, L"OTHER SCENARIOS - Add Listeners") END_TEST_CASE() #undef THE_CLASS // }} TCW_TESTCASE_END // }} TCW_TEST_CASE_MAP_END // {{ TCW_TEST_CASE_MAP(GetNextRows) //-------------------------------------------------------------------- // @class Tests Notifications for IRowset::GetNextRows // class GetNextRows : public CExecutionManager { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(GetNextRows,CExecutionManager); // }} TCW_DECLARE_FUNCS_END // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // {{ TCW_TESTVARS() // @cmember FETCHPOSITIONCHANGE - SINGLEROW - Accept all phases int Variation_1(); // @cmember FETCHPOSITIONCHANGE - MULTIPLEROWS - Accept all phases int Variation_2(); // @cmember Empty int Variation_3(); // @cmember Empty int Variation_4(); // @cmember FETCHPOSITIONCHANGE - DB_E_CANCELED int Variation_5(); // @cmember FETCHPOSITIONCHANGE - DB_E_NOTREENTRANT int Variation_6(); // @cmember FETCHPOSITIONCHANGE - DB_E_NOTREENTRANT - Non-notification method int Variation_7(); // @cmember Empty int Variation_8(); // @cmember FETCHPOSITIONCHANGE - Veto OKTODO, Listener 1 int Variation_9(); // @cmember FETCHPOSITIONCHANGE - Veto ABOUTTODO, Listener 1 int Variation_10(); // @cmember FETCHPOSITIONCHANGE - Veto SYNCHAFTER, Listener 1 int Variation_11(); // @cmember FETCHPOSITIONCHANGE - Veto DIDEVENT, Listener 1 int Variation_12(); // @cmember FETCHPOSITIONCHANGE - Veto FAILEDTODO, Listener 1 int Variation_13(); // @cmember FETCHPOSITIONCHANGE - Veto OKTODO, Listener 2 int Variation_14(); // @cmember FETCHPOSITIONCHANGE - Veto ABOUTTODO, Listener 2 int Variation_15(); // @cmember FETCHPOSITIONCHANGE - Veto SYNCHAFTER, Listener 3 int Variation_16(); // @cmember Empty int Variation_17(); // @cmember Empty int Variation_18(); // @cmember FETCHPOSITIONCHANGE - UNWANTED REASON int Variation_19(); // @cmember FETCHPOSITIONCHANGE - UNWANTED PHASE - OKTODO int Variation_20(); // @cmember FETCHPOSITIONCHANGE - UNWANTED PHASE - ABOUTTODO int Variation_21(); // @cmember FETCHPOSITIONCHANGE - UNWANTED PHASE - SYNCHAFTER int Variation_22(); // @cmember FETCHPOSITIONCHANGE - UNWANTED PHASE - DIDENVENT int Variation_23(); // @cmember FETCHPOSITIONCHANGE - UNWANTED PHASE - FAILEDTODO int Variation_24(); // @cmember Empty int Variation_25(); // @cmember Empty int Variation_26(); // @cmember FETCHPOSITIONCHANGE - E_FAIL - All Phases int Variation_27(); // @cmember FETCHPOSITIONCHANGE - E_OUTOFMEMORY - All Phases int Variation_28(); // @cmember FETCHPOSITIONCHANGE - E_INVALIDARG - All Phases int Variation_29(); // @cmember Empty int Variation_30(); // @cmember Empty int Variation_31(); // @cmember ROW_ACTIVATE - SINGLEROW - Accept all phases int Variation_32(); // @cmember ROW_ACTIVATE - MULTIPLEROWS - Accept all phases int Variation_33(); // @cmember Empty int Variation_34(); // @cmember Empty int Variation_35(); // @cmember ROW_ACTIVATE - DB_E_CANCELED int Variation_36(); // @cmember ROW_ACTIVATE - DB_E_NOTREENTRANT int Variation_37(); // @cmember Empty int Variation_38(); // @cmember Empty int Variation_39(); // @cmember ROW_ACTIVATE - Veto DIDEVENT, Listener 1 int Variation_40(); // @cmember Empty int Variation_41(); // @cmember Empty int Variation_42(); // @cmember ROW_ACTIVATE - UNWANTED REASON int Variation_43(); // @cmember ROW_ACTIVATE - UNWANTED PHASE - DIDEVENT int Variation_44(); // @cmember Empty int Variation_45(); // @cmember Empty int Variation_46(); // @cmember ROW_ACTIVATE - E_FAIL - All Phases int Variation_47(); // @cmember ROW_ACTIVATE - E_OUTOFMEMORY - All Phases int Variation_48(); // @cmember ROW_ACTIVATE - E_INVALIDARG - All Phases int Variation_49(); // @cmember Empty int Variation_50(); // @cmember Empty int Variation_51(); // @cmember OTHER SCENARIOS - Fetch no rows - no notifications int Variation_52(); // @cmember OTHER SCENARIOS - Fetch A, Fetch A again int Variation_53(); // @cmember OTHER SCENARIOS - Fetch A, Fetch A,B int Variation_54(); // @cmember OTHER SCENARIOS - Fetch A, ReleaseRows A, Fetch A int Variation_55(); // @cmember Empty int Variation_56(); // @cmember OTHER SCENARIOS - DB_S_ENDOFROWSET - 1 more than in rowset int Variation_57(); // @cmember OTHER SCENARIOS - DB_S_ENDOFROWSET - 1 more at end of rowset int Variation_58(); // @cmember OTHER SCENARIOS - DB_S_ENDOFROWSET - Stepping backward int Variation_59(); // @cmember Empty int Variation_60(); // @cmember OTHER SCENARIOS - DB_E_BADSTARTPOSITION int Variation_61(); // @cmember OTHER SCENARIOS - E_INVALIDARG int Variation_62(); // @cmember OTHER SCENARIOS - EmptyRowset int Variation_63(); // @cmember OTHER SCENARIOS - Remove Listeners int Variation_64(); // @cmember OTHER SCENARIOS - Add Listeners int Variation_65(); // @cmember OTHER SCENARIOS - GetData int Variation_66(); // }} TCW_TESTVARS_END }; // {{ TCW_TESTCASE(GetNextRows) #define THE_CLASS GetNextRows BEG_TEST_CASE(GetNextRows, CExecutionManager, L"Tests Notifications for IRowset::GetNextRows") TEST_VARIATION(1, L"FETCHPOSITIONCHANGE - SINGLEROW - Accept all phases") TEST_VARIATION(2, L"FETCHPOSITIONCHANGE - MULTIPLEROWS - Accept all phases") TEST_VARIATION(3, L"Empty") TEST_VARIATION(4, L"Empty") TEST_VARIATION(5, L"FETCHPOSITIONCHANGE - DB_E_CANCELED") TEST_VARIATION(6, L"FETCHPOSITIONCHANGE - DB_E_NOTREENTRANT") TEST_VARIATION(7, L"FETCHPOSITIONCHANGE - DB_E_NOTREENTRANT - Non-notification method") TEST_VARIATION(8, L"Empty") TEST_VARIATION(9, L"FETCHPOSITIONCHANGE - Veto OKTODO, Listener 1") TEST_VARIATION(10, L"FETCHPOSITIONCHANGE - Veto ABOUTTODO, Listener 1") TEST_VARIATION(11, L"FETCHPOSITIONCHANGE - Veto SYNCHAFTER, Listener 1") TEST_VARIATION(12, L"FETCHPOSITIONCHANGE - Veto DIDEVENT, Listener 1") TEST_VARIATION(13, L"FETCHPOSITIONCHANGE - Veto FAILEDTODO, Listener 1") TEST_VARIATION(14, L"FETCHPOSITIONCHANGE - Veto OKTODO, Listener 2") TEST_VARIATION(15, L"FETCHPOSITIONCHANGE - Veto ABOUTTODO, Listener 2") TEST_VARIATION(16, L"FETCHPOSITIONCHANGE - Veto SYNCHAFTER, Listener 3") TEST_VARIATION(17, L"Empty") TEST_VARIATION(18, L"Empty") TEST_VARIATION(19, L"FETCHPOSITIONCHANGE - UNWANTED REASON") TEST_VARIATION(20, L"FETCHPOSITIONCHANGE - UNWANTED PHASE - OKTODO") TEST_VARIATION(21, L"FETCHPOSITIONCHANGE - UNWANTED PHASE - ABOUTTODO") TEST_VARIATION(22, L"FETCHPOSITIONCHANGE - UNWANTED PHASE - SYNCHAFTER") TEST_VARIATION(23, L"FETCHPOSITIONCHANGE - UNWANTED PHASE - DIDENVENT") TEST_VARIATION(24, L"FETCHPOSITIONCHANGE - UNWANTED PHASE - FAILEDTODO") TEST_VARIATION(25, L"Empty") TEST_VARIATION(26, L"Empty") TEST_VARIATION(27, L"FETCHPOSITIONCHANGE - E_FAIL - All Phases") TEST_VARIATION(28, L"FETCHPOSITIONCHANGE - E_OUTOFMEMORY - All Phases") TEST_VARIATION(29, L"FETCHPOSITIONCHANGE - E_INVALIDARG - All Phases") TEST_VARIATION(30, L"Empty") TEST_VARIATION(31, L"Empty") TEST_VARIATION(32, L"ROW_ACTIVATE - SINGLEROW - Accept all phases") TEST_VARIATION(33, L"ROW_ACTIVATE - MULTIPLEROWS - Accept all phases") TEST_VARIATION(34, L"Empty") TEST_VARIATION(35, L"Empty") TEST_VARIATION(36, L"ROW_ACTIVATE - DB_E_CANCELED") TEST_VARIATION(37, L"ROW_ACTIVATE - DB_E_NOTREENTRANT") TEST_VARIATION(38, L"Empty") TEST_VARIATION(39, L"Empty") TEST_VARIATION(40, L"ROW_ACTIVATE - Veto DIDEVENT, Listener 1") TEST_VARIATION(41, L"Empty") TEST_VARIATION(42, L"Empty") TEST_VARIATION(43, L"ROW_ACTIVATE - UNWANTED REASON") TEST_VARIATION(44, L"ROW_ACTIVATE - UNWANTED PHASE - DIDEVENT") TEST_VARIATION(45, L"Empty") TEST_VARIATION(46, L"Empty") TEST_VARIATION(47, L"ROW_ACTIVATE - E_FAIL - All Phases") TEST_VARIATION(48, L"ROW_ACTIVATE - E_OUTOFMEMORY - All Phases") TEST_VARIATION(49, L"ROW_ACTIVATE - E_INVALIDARG - All Phases") TEST_VARIATION(50, L"Empty") TEST_VARIATION(51, L"Empty") TEST_VARIATION(52, L"OTHER SCENARIOS - Fetch no rows - no notifications") TEST_VARIATION(53, L"OTHER SCENARIOS - Fetch A, Fetch A again") TEST_VARIATION(54, L"OTHER SCENARIOS - Fetch A, Fetch A,B") TEST_VARIATION(55, L"OTHER SCENARIOS - Fetch A, ReleaseRows A, Fetch A") TEST_VARIATION(56, L"Empty") TEST_VARIATION(57, L"OTHER SCENARIOS - DB_S_ENDOFROWSET - 1 more than in rowset") TEST_VARIATION(58, L"OTHER SCENARIOS - DB_S_ENDOFROWSET - 1 more at end of rowset") TEST_VARIATION(59, L"OTHER SCENARIOS - DB_S_ENDOFROWSET - Stepping backward") TEST_VARIATION(60, L"Empty") TEST_VARIATION(61, L"OTHER SCENARIOS - DB_E_BADSTARTPOSITION") TEST_VARIATION(62, L"OTHER SCENARIOS - E_INVALIDARG") TEST_VARIATION(63, L"OTHER SCENARIOS - EmptyRowset") TEST_VARIATION(64, L"OTHER SCENARIOS - Remove Listeners") TEST_VARIATION(65, L"OTHER SCENARIOS - Add Listeners") TEST_VARIATION(66, L"OTHER SCENARIOS - GetData") END_TEST_CASE() #undef THE_CLASS // }} TCW_TESTCASE_END // }} TCW_TEST_CASE_MAP_END // {{ TCW_TEST_CASE_MAP(ReleaseRows) //-------------------------------------------------------------------- // @class Tests Notifications for IRowset::ReleaseRows // class ReleaseRows : public CExecutionManager { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(ReleaseRows,CExecutionManager); // }} TCW_DECLARE_FUNCS_END // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // {{ TCW_TESTVARS() // @cmember ROW_RELEASE - SINGLEROW - Accept all phases int Variation_1(); // @cmember ROW_RELEASE - MULTIPLEROWS - Accept all phases int Variation_2(); // @cmember Empty int Variation_3(); // @cmember Empty int Variation_4(); // @cmember ROW_RELEASE - DB_E_CANCELED - Accept all phases int Variation_5(); // @cmember ROW_RELEASE - DB_E_NOTREENTRANT - Accept all phases int Variation_6(); // @cmember Empty int Variation_7(); // @cmember Empty int Variation_8(); // @cmember ROW_RELEASE - Veto DIDEVENT, Listener 2 int Variation_9(); // @cmember Empty int Variation_10(); // @cmember Empty int Variation_11(); // @cmember ROW_RELEASE - UNWANTED REASON int Variation_12(); // @cmember ROW_RELEASE - UNWANTED PHASE - DIDEVENT int Variation_13(); // @cmember Empty int Variation_14(); // @cmember Empty int Variation_15(); // @cmember ROW_RELEASE - E_FAIL - All Phases int Variation_16(); // @cmember ROW_RELEASE - E_OUTOFMEMORY - All Phases int Variation_17(); // @cmember ROW_RELEASE - E_INVALIDARG - All Phases int Variation_18(); // @cmember Empty int Variation_19(); // @cmember Empty int Variation_20(); // @cmember OTHER SCENARIOS - Release 0 rows int Variation_21(); // @cmember OTHER SCENARIOS - AddRef Row, ReleaseRows int Variation_22(); // @cmember OTHER SCENARIOS - ReleaseRow, ReleaseRow int Variation_23(); // @cmember OTHER SCENARIOS - ReleaseRows [valid, invalid] int Variation_24(); // @cmember Empty int Variation_25(); // @cmember OTHER SCENARIOS - DBROWSTATUS_S_PENDINGCHANGES int Variation_26(); // @cmember OTHER SCENARIOS - E_INVALIDARG int Variation_27(); // @cmember OTHER SCENARIOS - EmptyRowset int Variation_28(); // @cmember OTHER SCENARIOS - Add/Remove Listeners int Variation_29(); // @cmember OTHER SCENARIOS - GetData int Variation_30(); // }} TCW_TESTVARS_END }; // {{ TCW_TESTCASE(ReleaseRows) #define THE_CLASS ReleaseRows BEG_TEST_CASE(ReleaseRows, CExecutionManager, L"Tests Notifications for IRowset::ReleaseRows") TEST_VARIATION(1, L"ROW_RELEASE - SINGLEROW - Accept all phases") TEST_VARIATION(2, L"ROW_RELEASE - MULTIPLEROWS - Accept all phases") TEST_VARIATION(3, L"Empty") TEST_VARIATION(4, L"Empty") TEST_VARIATION(5, L"ROW_RELEASE - DB_E_CANCELED - Accept all phases") TEST_VARIATION(6, L"ROW_RELEASE - DB_E_NOTREENTRANT - Accept all phases") TEST_VARIATION(7, L"Empty") TEST_VARIATION(8, L"Empty") TEST_VARIATION(9, L"ROW_RELEASE - Veto DIDEVENT, Listener 2") TEST_VARIATION(10, L"Empty") TEST_VARIATION(11, L"Empty") TEST_VARIATION(12, L"ROW_RELEASE - UNWANTED REASON") TEST_VARIATION(13, L"ROW_RELEASE - UNWANTED PHASE - DIDEVENT") TEST_VARIATION(14, L"Empty") TEST_VARIATION(15, L"Empty") TEST_VARIATION(16, L"ROW_RELEASE - E_FAIL - All Phases") TEST_VARIATION(17, L"ROW_RELEASE - E_OUTOFMEMORY - All Phases") TEST_VARIATION(18, L"ROW_RELEASE - E_INVALIDARG - All Phases") TEST_VARIATION(19, L"Empty") TEST_VARIATION(20, L"Empty") TEST_VARIATION(21, L"OTHER SCENARIOS - Release 0 rows") TEST_VARIATION(22, L"OTHER SCENARIOS - AddRef Row, ReleaseRows") TEST_VARIATION(23, L"OTHER SCENARIOS - ReleaseRow, ReleaseRow") TEST_VARIATION(24, L"OTHER SCENARIOS - ReleaseRows [valid, invalid]") TEST_VARIATION(25, L"Empty") TEST_VARIATION(26, L"OTHER SCENARIOS - DBROWSTATUS_S_PENDINGCHANGES") TEST_VARIATION(27, L"OTHER SCENARIOS - E_INVALIDARG") TEST_VARIATION(28, L"OTHER SCENARIOS - EmptyRowset") TEST_VARIATION(29, L"OTHER SCENARIOS - Add/Remove Listeners") TEST_VARIATION(30, L"OTHER SCENARIOS - GetData") END_TEST_CASE() #undef THE_CLASS // }} TCW_TESTCASE_END // }} TCW_TEST_CASE_MAP_END // {{ TCW_TEST_CASE_MAP(RestartPosition) //-------------------------------------------------------------------- // @class Tests Notificatons for IRowset::RestartPosition // class RestartPosition : public CExecutionManager { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(RestartPosition,CExecutionManager); // }} TCW_DECLARE_FUNCS_END // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // {{ TCW_TESTVARS() // @cmember FETCHPOSITIONCHANGE - Accept all phases int Variation_1(); // @cmember Empty int Variation_2(); // @cmember Empty int Variation_3(); // @cmember FETCHPOSITIONCHANGE - DB_E_CANCELED int Variation_4(); // @cmember FETCHPOSITIONCHANGE - DB_E_NOTREENTRANT int Variation_5(); // @cmember Empty int Variation_6(); // @cmember Empty int Variation_7(); // @cmember FETCHPOSITIONCHANGE - Veto OKTODO int Variation_8(); // @cmember FETCHPOSITIONCHANGE - Veto ABOUTTODO int Variation_9(); // @cmember FETCHPOSITIONCHANGE - Veto SYNCHAFTER int Variation_10(); // @cmember FETCHPOSITIONCHANGE - Veto DIDEVENT int Variation_11(); // @cmember FETCHPOSITIONCHANGE - Veto FAILEDTODO int Variation_12(); // @cmember Empty int Variation_13(); // @cmember Empty int Variation_14(); // @cmember FETCHPOSITIONCHANGE - UNWANTED REASON int Variation_15(); // @cmember FETCHPOSITIONCHANGE - UNWANTED PHASE - OKTODO int Variation_16(); // @cmember FETCHPOSITIONCHANGE - UNWANTED PHASE - ABOUTTODO int Variation_17(); // @cmember FETCHPOSITIONCHANGE - UNWANTED PHASE - SYNCHAFTER int Variation_18(); // @cmember FETCHPOSITIONCHANGE - UNWANTED PHASE - DIDEVENT int Variation_19(); // @cmember FETCHPOSITIONCHANGE - UNWANTED PHASE - FAILEDTODO int Variation_20(); // @cmember Empty int Variation_21(); // @cmember Empty int Variation_22(); // @cmember FETCHPOSITIONCHANGE - E_FAIL - All Phases int Variation_23(); // @cmember FETCHPOSITIONCHANGE - E_OUTOFMEMORY - All Phases int Variation_24(); // @cmember FETCHPOSITIONCHANGE - E_INVALIDARG - All Phases int Variation_25(); // @cmember Empty int Variation_26(); // @cmember Empty int Variation_27(); // @cmember ROWSET_CHANGED - Accept all phases int Variation_28(); // @cmember Empty int Variation_29(); // @cmember Empty int Variation_30(); // @cmember ROWSET_CHANGED - DB_E_CANCELED int Variation_31(); // @cmember ROWSET_CHANGED - DB_E_NOTREENTRANT int Variation_32(); // @cmember Empty int Variation_33(); // @cmember Empty int Variation_34(); // @cmember ROWSET_CHANGED - Veto OKTODO int Variation_35(); // @cmember ROWSET_CHANGED - Veto ABOUTTODO int Variation_36(); // @cmember ROWSET_CHANGED - Veto SYNCHAFTER int Variation_37(); // @cmember ROWSET_CHANGED - Veto DIDEVENT int Variation_38(); // @cmember ROWSET_CHANGED - Veto FAILEDTODO int Variation_39(); // @cmember Empty int Variation_40(); // @cmember Empty int Variation_41(); // @cmember ROWSET_CHANGED - UNWANTED REASON int Variation_42(); // @cmember ROWSET_CHANGED - UNWANTED PHASE OKTODO int Variation_43(); // @cmember ROWSET_CHANGED - UNWANTED PHASE ABOUTTODO int Variation_44(); // @cmember ROWSET_CHANGED - UNWANTED PHASE SYNCHAFTER int Variation_45(); // @cmember ROWSET_CHANGED - UNWANTED PHASE DIDEVENT int Variation_46(); // @cmember ROWSET_CHANGED - UNWANTED PHASE FAILEDTODO int Variation_47(); // @cmember Empty int Variation_48(); // @cmember Empty int Variation_49(); // @cmember ROWSET_CHANGED - E_FAIL - All Phases int Variation_50(); // @cmember ROWSET_CHANGED - E_OUTOFMEMORY - All Phases int Variation_51(); // @cmember ROWSET_CHANGED - E_INVALIDARG - All Phases int Variation_52(); // @cmember Empty int Variation_53(); // @cmember Empty int Variation_54(); // @cmember OTHER SCENARIOS - RestartPosition int Variation_55(); // @cmember OTHER SCENARIOS - GetNextRows - RestartPosition - RestartPosition int Variation_56(); // @cmember Empty int Variation_57(); // @cmember OTHER SCENARIOS - DB_E_ROWSNOTRELEASED int Variation_58(); // @cmember OTHER SCENARIOS - EmptyRowset int Variation_59(); // @cmember OTHER SCENARIOS - Add/Remove Listeners int Variation_60(); // @cmember OTHER SCENARIOS - GetData int Variation_61(); // }} TCW_TESTVARS_END }; // {{ TCW_TESTCASE(RestartPosition) #define THE_CLASS RestartPosition BEG_TEST_CASE(RestartPosition, CExecutionManager, L"Tests Notificatons for IRowset::RestartPosition") TEST_VARIATION(1, L"FETCHPOSITIONCHANGE - Accept all phases") TEST_VARIATION(2, L"Empty") TEST_VARIATION(3, L"Empty") TEST_VARIATION(4, L"FETCHPOSITIONCHANGE - DB_E_CANCELED") TEST_VARIATION(5, L"FETCHPOSITIONCHANGE - DB_E_NOTREENTRANT") TEST_VARIATION(6, L"Empty") TEST_VARIATION(7, L"Empty") TEST_VARIATION(8, L"FETCHPOSITIONCHANGE - Veto OKTODO") TEST_VARIATION(9, L"FETCHPOSITIONCHANGE - Veto ABOUTTODO") TEST_VARIATION(10, L"FETCHPOSITIONCHANGE - Veto SYNCHAFTER") TEST_VARIATION(11, L"FETCHPOSITIONCHANGE - Veto DIDEVENT") TEST_VARIATION(12, L"FETCHPOSITIONCHANGE - Veto FAILEDTODO") TEST_VARIATION(13, L"Empty") TEST_VARIATION(14, L"Empty") TEST_VARIATION(15, L"FETCHPOSITIONCHANGE - UNWANTED REASON") TEST_VARIATION(16, L"FETCHPOSITIONCHANGE - UNWANTED PHASE - OKTODO") TEST_VARIATION(17, L"FETCHPOSITIONCHANGE - UNWANTED PHASE - ABOUTTODO") TEST_VARIATION(18, L"FETCHPOSITIONCHANGE - UNWANTED PHASE - SYNCHAFTER") TEST_VARIATION(19, L"FETCHPOSITIONCHANGE - UNWANTED PHASE - DIDEVENT") TEST_VARIATION(20, L"FETCHPOSITIONCHANGE - UNWANTED PHASE - FAILEDTODO") TEST_VARIATION(21, L"Empty") TEST_VARIATION(22, L"Empty") TEST_VARIATION(23, L"FETCHPOSITIONCHANGE - E_FAIL - All Phases") TEST_VARIATION(24, L"FETCHPOSITIONCHANGE - E_OUTOFMEMORY - All Phases") TEST_VARIATION(25, L"FETCHPOSITIONCHANGE - E_INVALIDARG - All Phases") TEST_VARIATION(26, L"Empty") TEST_VARIATION(27, L"Empty") TEST_VARIATION(28, L"ROWSET_CHANGED - Accept all phases") TEST_VARIATION(29, L"Empty") TEST_VARIATION(30, L"Empty") TEST_VARIATION(31, L"ROWSET_CHANGED - DB_E_CANCELED") TEST_VARIATION(32, L"ROWSET_CHANGED - DB_E_NOTREENTRANT") TEST_VARIATION(33, L"Empty") TEST_VARIATION(34, L"Empty") TEST_VARIATION(35, L"ROWSET_CHANGED - Veto OKTODO") TEST_VARIATION(36, L"ROWSET_CHANGED - Veto ABOUTTODO") TEST_VARIATION(37, L"ROWSET_CHANGED - Veto SYNCHAFTER") TEST_VARIATION(38, L"ROWSET_CHANGED - Veto DIDEVENT") TEST_VARIATION(39, L"ROWSET_CHANGED - Veto FAILEDTODO") TEST_VARIATION(40, L"Empty") TEST_VARIATION(41, L"Empty") TEST_VARIATION(42, L"ROWSET_CHANGED - UNWANTED REASON") TEST_VARIATION(43, L"ROWSET_CHANGED - UNWANTED PHASE OKTODO") TEST_VARIATION(44, L"ROWSET_CHANGED - UNWANTED PHASE ABOUTTODO") TEST_VARIATION(45, L"ROWSET_CHANGED - UNWANTED PHASE SYNCHAFTER") TEST_VARIATION(46, L"ROWSET_CHANGED - UNWANTED PHASE DIDEVENT") TEST_VARIATION(47, L"ROWSET_CHANGED - UNWANTED PHASE FAILEDTODO") TEST_VARIATION(48, L"Empty") TEST_VARIATION(49, L"Empty") TEST_VARIATION(50, L"ROWSET_CHANGED - E_FAIL - All Phases") TEST_VARIATION(51, L"ROWSET_CHANGED - E_OUTOFMEMORY - All Phases") TEST_VARIATION(52, L"ROWSET_CHANGED - E_INVALIDARG - All Phases") TEST_VARIATION(53, L"Empty") TEST_VARIATION(54, L"Empty") TEST_VARIATION(55, L"OTHER SCENARIOS - RestartPosition") TEST_VARIATION(56, L"OTHER SCENARIOS - GetNextRows - RestartPosition - RestartPosition") TEST_VARIATION(57, L"Empty") TEST_VARIATION(58, L"OTHER SCENARIOS - DB_E_ROWSNOTRELEASED") TEST_VARIATION(59, L"OTHER SCENARIOS - EmptyRowset") TEST_VARIATION(60, L"OTHER SCENARIOS - Add/Remove Listeners") TEST_VARIATION(61, L"OTHER SCENARIOS - GetData") END_TEST_CASE() #undef THE_CLASS // }} TCW_TESTCASE_END // }} TCW_TEST_CASE_MAP_END // {{ TCW_TEST_CASE_MAP(Seek) //-------------------------------------------------------------------- // @class Test Notifications for IRowsetIndex::Seek // class Seek : public CExecutionManager { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(Seek,CExecutionManager); // }} TCW_DECLARE_FUNCS_END // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // {{ TCW_TESTVARS() // @cmember FETCHPOSITIONCHANGE - Accept all phases int Variation_1(); // @cmember Empty int Variation_2(); // @cmember Empty int Variation_3(); // @cmember FETCHPOSITIONCHANGE - DB_E_CANCELED int Variation_4(); // @cmember FETCHPOSITIONCHANGE - DB_E_NOTREENTRANT int Variation_5(); // @cmember Empty int Variation_6(); // @cmember Empty int Variation_7(); // @cmember FETCHPOSITIONCHANGE - Veto OKTODO int Variation_8(); // @cmember FETCHPOSITIONCHANGE - Veto ABOUTTODO int Variation_9(); // @cmember FETCHPOSITIONCHANGE - Veto SYNCHAFTER int Variation_10(); // @cmember FETCHPOSITIONCHANGE - Veto DIDEVENT int Variation_11(); // @cmember FETCHPOSITIONCHANGE - Veto FAILEDTODO int Variation_12(); // @cmember Empty int Variation_13(); // @cmember Empty int Variation_14(); // @cmember FETCHPOSITIONCHANGE - UNWANTED REASON int Variation_15(); // @cmember FETCHPOSITIONCHANGE - UNWANTED PHASE - OKTODO int Variation_16(); // @cmember FETCHPOSITIONCHANGE - UNWANTED PHASE - ABOUTTODO int Variation_17(); // @cmember FETCHPOSITIONCHANGE - UNWANTED PHASE - SYNCHAFTER int Variation_18(); // @cmember FETCHPOSITIONCHANGE - UNWANTED PHASE - DIDEVENT int Variation_19(); // @cmember FETCHPOSITIONCHANGE - UNWANTED PHASE - FAILEDTODO int Variation_20(); // @cmember Empty int Variation_21(); // @cmember Empty int Variation_22(); // @cmember FETCHPOSITIONCHANGE - E_FAIL - All Phases int Variation_23(); // @cmember FETCHPOSITIONCHANGE - E_OUTOFMEMORY - All Phases int Variation_24(); // @cmember FETCHPOSITIONCHANGE - E_INVALIDARG - All Phases int Variation_25(); // @cmember Empty int Variation_26(); // @cmember Empty int Variation_27(); // @cmember OTHER SCENARIOS - DB_E_BADACCESSORHANDLE int Variation_28(); // @cmember OTHER SCENARIOS - EmptyRowset int Variation_29(); // @cmember OTHER SCENARIOS - Add/Remove Listeners int Variation_30(); // @cmember OTHER SCENARIOS - GetData int Variation_31(); // }} TCW_TESTVARS_END }; // {{ TCW_TESTCASE(Seek) #define THE_CLASS Seek BEG_TEST_CASE(Seek, CExecutionManager, L"Test Notifications for IRowsetIndex::Seek") TEST_VARIATION(1, L"FETCHPOSITIONCHANGE - Accept all phases") TEST_VARIATION(2, L"Empty") TEST_VARIATION(3, L"Empty") TEST_VARIATION(4, L"FETCHPOSITIONCHANGE - DB_E_CANCELED") TEST_VARIATION(5, L"FETCHPOSITIONCHANGE - DB_E_NOTREENTRANT") TEST_VARIATION(6, L"Empty") TEST_VARIATION(7, L"Empty") TEST_VARIATION(8, L"FETCHPOSITIONCHANGE - Veto OKTODO") TEST_VARIATION(9, L"FETCHPOSITIONCHANGE - Veto ABOUTTODO") TEST_VARIATION(10, L"FETCHPOSITIONCHANGE - Veto SYNCHAFTER") TEST_VARIATION(11, L"FETCHPOSITIONCHANGE - Veto DIDEVENT") TEST_VARIATION(12, L"FETCHPOSITIONCHANGE - Veto FAILEDTODO") TEST_VARIATION(13, L"Empty") TEST_VARIATION(14, L"Empty") TEST_VARIATION(15, L"FETCHPOSITIONCHANGE - UNWANTED REASON") TEST_VARIATION(16, L"FETCHPOSITIONCHANGE - UNWANTED PHASE - OKTODO") TEST_VARIATION(17, L"FETCHPOSITIONCHANGE - UNWANTED PHASE - ABOUTTODO") TEST_VARIATION(18, L"FETCHPOSITIONCHANGE - UNWANTED PHASE - SYNCHAFTER") TEST_VARIATION(19, L"FETCHPOSITIONCHANGE - UNWANTED PHASE - DIDEVENT") TEST_VARIATION(20, L"FETCHPOSITIONCHANGE - UNWANTED PHASE - FAILEDTODO") TEST_VARIATION(21, L"Empty") TEST_VARIATION(22, L"Empty") TEST_VARIATION(23, L"FETCHPOSITIONCHANGE - E_FAIL - All Phases") TEST_VARIATION(24, L"FETCHPOSITIONCHANGE - E_OUTOFMEMORY - All Phases") TEST_VARIATION(25, L"FETCHPOSITIONCHANGE - E_INVALIDARG - All Phases") TEST_VARIATION(26, L"Empty") TEST_VARIATION(27, L"Empty") TEST_VARIATION(28, L"OTHER SCENARIOS - DB_E_BADACCESSORHANDLE") TEST_VARIATION(29, L"OTHER SCENARIOS - EmptyRowset") TEST_VARIATION(30, L"OTHER SCENARIOS - Add/Remove Listeners") TEST_VARIATION(31, L"OTHER SCENARIOS - GetData") END_TEST_CASE() #undef THE_CLASS // }} TCW_TESTCASE_END // }} TCW_TEST_CASE_MAP_END // {{ TCW_TEST_CASE_MAP(GetRowsAt) //-------------------------------------------------------------------- // @class Tests Notificatons for IRowsetLocate::GetRowsAt // class GetRowsAt : public CExecutionManager { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(GetRowsAt,CExecutionManager); // }} TCW_DECLARE_FUNCS_END // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // {{ TCW_TESTVARS() // @cmember ROW_ACTIVATE - SINGLEROW - Accept all phases int Variation_1(); // @cmember ROW_ACTIVATE - MULTIPLEROWS - Accept all phases int Variation_2(); // @cmember Empty int Variation_3(); // @cmember Empty int Variation_4(); // @cmember ROW_ACTIVATE - DB_E_CANCELED int Variation_5(); // @cmember ROW_ACTIVATE - DB_E_NOTREENTRANT int Variation_6(); // @cmember Empty int Variation_7(); // @cmember Empty int Variation_8(); // @cmember ROW_ACTIVATE - Veto DIDEVENT, Listener 1 int Variation_9(); // @cmember Empty int Variation_10(); // @cmember Empty int Variation_11(); // @cmember ROW_ACTIVATE - UNWANTED REASON int Variation_12(); // @cmember ROW_ACTIVATE - UNWANTED PHASE - DIDEVENT int Variation_13(); // @cmember Empty int Variation_14(); // @cmember Empty int Variation_15(); // @cmember ROW_ACTIVATE - E_FAIL - All Phases int Variation_16(); // @cmember ROW_ACTIVATE - E_OUTOFMEMORY - All Phases int Variation_17(); // @cmember ROW_ACTIVATE - E_INVALIDARG - All Phases int Variation_18(); // @cmember Empty int Variation_19(); // @cmember Empty int Variation_20(); // @cmember OTHER SCENARIOS - Get same row twice int Variation_21(); // @cmember OTHER SCENARIOS - DB_E_BADSTARTPOSITION int Variation_22(); // @cmember OTHER SCENARIOS - EmptyRowset int Variation_23(); // @cmember OTHER SCENARIOS - DB_S_ENDOFROWSET - more rows than are in the rowset int Variation_24(); // @cmember OTHER SCENARIOS - DB_S_ENDOFROWSET - at end of rowset int Variation_25(); // @cmember OTHER SCENARIOS - no rows at head of rowset int Variation_26(); // @cmember OTHER SCENARIOS - no rows at end of rowset int Variation_27(); // @cmember OTHER SCENARIOS - Add/Remove Listeners int Variation_28(); // @cmember OTHER SCENARIOS - GetData int Variation_29(); // }} TCW_TESTVARS_END }; // {{ TCW_TESTCASE(GetRowsAt) #define THE_CLASS GetRowsAt BEG_TEST_CASE(GetRowsAt, CExecutionManager, L"Tests Notificatons for IRowsetLocate::GetRowsAt") TEST_VARIATION(1, L"ROW_ACTIVATE - SINGLEROW - Accept all phases") TEST_VARIATION(2, L"ROW_ACTIVATE - MULTIPLEROWS - Accept all phases") TEST_VARIATION(3, L"Empty") TEST_VARIATION(4, L"Empty") TEST_VARIATION(5, L"ROW_ACTIVATE - DB_E_CANCELED") TEST_VARIATION(6, L"ROW_ACTIVATE - DB_E_NOTREENTRANT") TEST_VARIATION(7, L"Empty") TEST_VARIATION(8, L"Empty") TEST_VARIATION(9, L"ROW_ACTIVATE - Veto DIDEVENT, Listener 1") TEST_VARIATION(10, L"Empty") TEST_VARIATION(11, L"Empty") TEST_VARIATION(12, L"ROW_ACTIVATE - UNWANTED REASON") TEST_VARIATION(13, L"ROW_ACTIVATE - UNWANTED PHASE - DIDEVENT") TEST_VARIATION(14, L"Empty") TEST_VARIATION(15, L"Empty") TEST_VARIATION(16, L"ROW_ACTIVATE - E_FAIL - All Phases") TEST_VARIATION(17, L"ROW_ACTIVATE - E_OUTOFMEMORY - All Phases") TEST_VARIATION(18, L"ROW_ACTIVATE - E_INVALIDARG - All Phases") TEST_VARIATION(19, L"Empty") TEST_VARIATION(20, L"Empty") TEST_VARIATION(21, L"OTHER SCENARIOS - Get same row twice") TEST_VARIATION(22, L"OTHER SCENARIOS - DB_E_BADSTARTPOSITION") TEST_VARIATION(23, L"OTHER SCENARIOS - EmptyRowset") TEST_VARIATION(24, L"OTHER SCENARIOS - DB_S_ENDOFROWSET - more rows than are in the rowset") TEST_VARIATION(25, L"OTHER SCENARIOS - DB_S_ENDOFROWSET - at end of rowset") TEST_VARIATION(26, L"OTHER SCENARIOS - no rows at head of rowset") TEST_VARIATION(27, L"OTHER SCENARIOS - no rows at end of rowset") TEST_VARIATION(28, L"OTHER SCENARIOS - Add/Remove Listeners") TEST_VARIATION(29, L"OTHER SCENARIOS - GetData") END_TEST_CASE() #undef THE_CLASS // }} TCW_TESTCASE_END // }} TCW_TEST_CASE_MAP_END // {{ TCW_TEST_CASE_MAP(GetRowsByBookmark) //-------------------------------------------------------------------- // @class Tests Notifications for IRowsetLocate::GetRowsbyBookmark // class GetRowsByBookmark : public CExecutionManager { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(GetRowsByBookmark,CExecutionManager); // }} TCW_DECLARE_FUNCS_END // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // {{ TCW_TESTVARS() // @cmember ROW_ACTIVATE - SINGLEROW - Accept all phases int Variation_1(); // @cmember ROW_ACTIVATE - MULTIPLEROWS - Accept all phases int Variation_2(); // @cmember Empty int Variation_3(); // @cmember Empty int Variation_4(); // @cmember ROW_ACTIVATE - DB_E_CANCELED int Variation_5(); // @cmember ROW_ACTIVATE - DB_E_NOTREENTRANT int Variation_6(); // @cmember Empty int Variation_7(); // @cmember Empty int Variation_8(); // @cmember ROW_ACTIVATE - Veto DIDEVENT, Listener 1 int Variation_9(); // @cmember Empty int Variation_10(); // @cmember Empty int Variation_11(); // @cmember ROW_ACTIVATE - UNWANTED REASON int Variation_12(); // @cmember ROW_ACTIVATE - UNWANTED PHASE - DIDEVENT int Variation_13(); // @cmember Empty int Variation_14(); // @cmember Empty int Variation_15(); // @cmember ROW_ACTIVATE - E_FAIL - All Phases int Variation_16(); // @cmember ROW_ACTIVATE - E_OUTOFMEMORY - All Phases int Variation_17(); // @cmember ROW_ACTIVATE - E_INVALIDARG - All Phases int Variation_18(); // @cmember Empty int Variation_19(); // @cmember Empty int Variation_20(); // @cmember OTHER SCENARIOS - Get no rows int Variation_21(); // @cmember OTHER SCENARIOS - Get same row twice int Variation_22(); // @cmember OTHER SCENARIOS - E_INVALIDARG int Variation_23(); // @cmember OTHER SCENARIOS - EmptyRowset int Variation_24(); // @cmember OTHER SCENARIOS - Add/Remove Listeners int Variation_25(); // @cmember OTHER SCENARIOS - GetData int Variation_26(); // }} TCW_TESTVARS_END }; // {{ TCW_TESTCASE(GetRowsByBookmark) #define THE_CLASS GetRowsByBookmark BEG_TEST_CASE(GetRowsByBookmark, CExecutionManager, L"Tests Notifications for IRowsetLocate::GetRowsbyBookmark") TEST_VARIATION(1, L"ROW_ACTIVATE - SINGLEROW - Accept all phases") TEST_VARIATION(2, L"ROW_ACTIVATE - MULTIPLEROWS - Accept all phases") TEST_VARIATION(3, L"Empty") TEST_VARIATION(4, L"Empty") TEST_VARIATION(5, L"ROW_ACTIVATE - DB_E_CANCELED") TEST_VARIATION(6, L"ROW_ACTIVATE - DB_E_NOTREENTRANT") TEST_VARIATION(7, L"Empty") TEST_VARIATION(8, L"Empty") TEST_VARIATION(9, L"ROW_ACTIVATE - Veto DIDEVENT, Listener 1") TEST_VARIATION(10, L"Empty") TEST_VARIATION(11, L"Empty") TEST_VARIATION(12, L"ROW_ACTIVATE - UNWANTED REASON") TEST_VARIATION(13, L"ROW_ACTIVATE - UNWANTED PHASE - DIDEVENT") TEST_VARIATION(14, L"Empty") TEST_VARIATION(15, L"Empty") TEST_VARIATION(16, L"ROW_ACTIVATE - E_FAIL - All Phases") TEST_VARIATION(17, L"ROW_ACTIVATE - E_OUTOFMEMORY - All Phases") TEST_VARIATION(18, L"ROW_ACTIVATE - E_INVALIDARG - All Phases") TEST_VARIATION(19, L"Empty") TEST_VARIATION(20, L"Empty") TEST_VARIATION(21, L"OTHER SCENARIOS - Get no rows") TEST_VARIATION(22, L"OTHER SCENARIOS - Get same row twice") TEST_VARIATION(23, L"OTHER SCENARIOS - E_INVALIDARG") TEST_VARIATION(24, L"OTHER SCENARIOS - EmptyRowset") TEST_VARIATION(25, L"OTHER SCENARIOS - Add/Remove Listeners") TEST_VARIATION(26, L"OTHER SCENARIOS - GetData") END_TEST_CASE() #undef THE_CLASS // }} TCW_TESTCASE_END // }} TCW_TEST_CASE_MAP_END // {{ TCW_TEST_CASE_MAP(GetRowsAtRatio) //-------------------------------------------------------------------- // @class Test Nofications for IRowsetScroll::GetRowsAtRatio // class GetRowsAtRatio : public CExecutionManager { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(GetRowsAtRatio,CExecutionManager); // }} TCW_DECLARE_FUNCS_END // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // {{ TCW_TESTVARS() // @cmember ROW_ACTIVATE - SINGLEROW - Accept all phases int Variation_1(); // @cmember ROW_ACTIVATE - MULTIPLEROWS - Accept all phases int Variation_2(); // @cmember Empty int Variation_3(); // @cmember Empty int Variation_4(); // @cmember ROW_ACTIVATE - DB_E_CANCELED int Variation_5(); // @cmember ROW_ACTIVATE - DB_E_NOTREENTRANT int Variation_6(); // @cmember Empty int Variation_7(); // @cmember Empty int Variation_8(); // @cmember ROW_ACTIVATE - Veto DIDEVENT, Listener 1 int Variation_9(); // @cmember Empty int Variation_10(); // @cmember Empty int Variation_11(); // @cmember ROW_ACTIVATE - UNWANTED REASON int Variation_12(); // @cmember ROW_ACTIVATE - UNWANTED PHASE - DIDEVENT int Variation_13(); // @cmember Empty int Variation_14(); // @cmember Empty int Variation_15(); // @cmember ROW_ACTIVATE - E_FAIL - All Phases int Variation_16(); // @cmember ROW_ACTIVATE - E_OUTOFMEMORY - All Phases int Variation_17(); // @cmember ROW_ACTIVATE - E_INVALIDARG - All Phases int Variation_18(); // @cmember Empty int Variation_19(); // @cmember Empty int Variation_20(); // @cmember OTHER SCENARIOS - No rows int Variation_21(); // @cmember OTHER SCENARIOS - DB_S_ENDOFROWSET 1 more than rowset int Variation_22(); // @cmember OTHER SCENARIOS - DB_S_ENDOFROWSET - at end of rowset int Variation_23(); // @cmember OTHER SCENARIOS - EmptyRowset int Variation_24(); // @cmember OTHER SCENARIOS - Add/Remove Listeners int Variation_25(); // @cmember OTHER SCENARIOS - GetData int Variation_26(); // }} TCW_TESTVARS_END }; // {{ TCW_TESTCASE(GetRowsAtRatio) #define THE_CLASS GetRowsAtRatio BEG_TEST_CASE(GetRowsAtRatio, CExecutionManager, L"Test Nofications for IRowsetScroll::GetRowsAtRatio") TEST_VARIATION(1, L"ROW_ACTIVATE - SINGLEROW - Accept all phases") TEST_VARIATION(2, L"ROW_ACTIVATE - MULTIPLEROWS - Accept all phases") TEST_VARIATION(3, L"Empty") TEST_VARIATION(4, L"Empty") TEST_VARIATION(5, L"ROW_ACTIVATE - DB_E_CANCELED") TEST_VARIATION(6, L"ROW_ACTIVATE - DB_E_NOTREENTRANT") TEST_VARIATION(7, L"Empty") TEST_VARIATION(8, L"Empty") TEST_VARIATION(9, L"ROW_ACTIVATE - Veto DIDEVENT, Listener 1") TEST_VARIATION(10, L"Empty") TEST_VARIATION(11, L"Empty") TEST_VARIATION(12, L"ROW_ACTIVATE - UNWANTED REASON") TEST_VARIATION(13, L"ROW_ACTIVATE - UNWANTED PHASE - DIDEVENT") TEST_VARIATION(14, L"Empty") TEST_VARIATION(15, L"Empty") TEST_VARIATION(16, L"ROW_ACTIVATE - E_FAIL - All Phases") TEST_VARIATION(17, L"ROW_ACTIVATE - E_OUTOFMEMORY - All Phases") TEST_VARIATION(18, L"ROW_ACTIVATE - E_INVALIDARG - All Phases") TEST_VARIATION(19, L"Empty") TEST_VARIATION(20, L"Empty") TEST_VARIATION(21, L"OTHER SCENARIOS - No rows") TEST_VARIATION(22, L"OTHER SCENARIOS - DB_S_ENDOFROWSET 1 more than rowset") TEST_VARIATION(23, L"OTHER SCENARIOS - DB_S_ENDOFROWSET - at end of rowset") TEST_VARIATION(24, L"OTHER SCENARIOS - EmptyRowset") TEST_VARIATION(25, L"OTHER SCENARIOS - Add/Remove Listeners") TEST_VARIATION(26, L"OTHER SCENARIOS - GetData") END_TEST_CASE() #undef THE_CLASS // }} TCW_TESTCASE_END // }} TCW_TEST_CASE_MAP_END // {{ TCW_TEST_CASE_MAP(DeleteRows) //-------------------------------------------------------------------- // @class Tests Notifications for IRowsetChange::DeleteRows // class DeleteRows : public CExecutionManager { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(DeleteRows,CExecutionManager); // }} TCW_DECLARE_FUNCS_END // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // {{ TCW_TESTVARS() // @cmember ROW_DELETE - SINGLEROW - Accept all phases int Variation_1(); // @cmember ROW_DELETE - MULTIPLEROWS - Accept all phases int Variation_2(); // @cmember Empty int Variation_3(); // @cmember ROW_DELETE - MULTIPLEROWS - DB_E_CANCELED int Variation_4(); // @cmember ROW_DELETE - SINGLEROW - DB_E_NOTREENTRANT int Variation_5(); // @cmember Empty int Variation_6(); // @cmember Empty int Variation_7(); // @cmember ROW_DELETE - MULTIPLEROWS - Veto OKTODO Listener 1 int Variation_8(); // @cmember ROW_DELETE - MULTIPLEROWS - Veto ABOUTTODO Listener 1 int Variation_9(); // @cmember ROW_DELETE - MULTIPLEROWS - Veto SYNCHAFTER Listener 1 int Variation_10(); // @cmember ROW_DELETE - MULTIPLEROWS - Veto DIDEVENT Listener 2 int Variation_11(); // @cmember ROW_DELETE - MULTIPLEROWS - Veto ABOUTTODO Listener 1 - Veto FAILEDTODO Listener 2 int Variation_12(); // @cmember OTHER SCENARIOS - Add/Remove Listeners - SINGLEROW int Variation_13(); // @cmember OTHER SCENARIOS - GetData - SINGLEROW int Variation_14(); // @cmember ROW_DELETE - SINGLEROW - UNWANTED REASON int Variation_15(); // @cmember ROW_DELETE - SINGLEROW - UNWANTED PHASE OKTODO int Variation_16(); // @cmember ROW_DELETE - SINGLEROW - UNWANTED PHASE ABOUTTODO int Variation_17(); // @cmember ROW_DELETE - SINGLEROW - UNWANTED PHASE SYNCHAFTER int Variation_18(); // @cmember ROW_DELETE - SINGLEROW - UNWANTED PHASE DIDEVENT int Variation_19(); // @cmember ROW_DELETE - MULTIPLEROWS - Veto ABOUTTODO Listener 1 - UNWANTED PHASE FAILEDTODO int Variation_20(); // @cmember OTHER SCENARIOS - DBROWSTATUS_DELETED - SINGLEROW int Variation_21(); // @cmember ROW_DELETE - SINGLEROW - Veto ABOUTTODO Listener 1 - E_FAIL - All Phases int Variation_22(); // @cmember ROW_DELETE - MULTIPLEROWS - Veto ABOUTTODO Listener 1 - E_FAIL - All Phases int Variation_23(); // @cmember ROW_DELETE - MULTIPLEROWS - Veto ABOUTTODO Listener 1 - E_OUTOFMEMORY - All Phases int Variation_24(); // @cmember ROW_DELETE - MULTIPLEROWS - Veto ABOUTTODO Listener 1 - E_INVALIDARG - All Phases int Variation_25(); // @cmember ROW_DELETE - SINGLEROW - E_OUTOFMEMORY - All Phases int Variation_26(); // @cmember ROW_DELETE - SINGLEROW - E_INVALIDARG - All Phases int Variation_27(); // @cmember OTHER SCENARIOS - Delete no rows - Delete MULTIPLEROWS int Variation_28(); // @cmember OTHER SCENARIOS - DBROWSTATUS_DELETED - MULTIPLEROWS int Variation_29(); // @cmember OTHER SCENARIOS - EmptyRowset int Variation_30(); // @cmember OTHER SCENARIOS - Add/Remove Listeners - MULTIPLEROWS int Variation_31(); // @cmember OTHER SCENARIOS - GetData - MULTIPLEROWS int Variation_32(); // }} TCW_TESTVARS_END }; // {{ TCW_TESTCASE(DeleteRows) #define THE_CLASS DeleteRows BEG_TEST_CASE(DeleteRows, CExecutionManager, L"Tests Notifications for IRowsetChange::DeleteRows") TEST_VARIATION(1, L"ROW_DELETE - SINGLEROW - Accept all phases") TEST_VARIATION(2, L"ROW_DELETE - MULTIPLEROWS - Accept all phases") TEST_VARIATION(3, L"Empty") TEST_VARIATION(4, L"ROW_DELETE - MULTIPLEROWS - DB_E_CANCELED") TEST_VARIATION(5, L"ROW_DELETE - SINGLEROW - DB_E_NOTREENTRANT") TEST_VARIATION(6, L"Empty") TEST_VARIATION(7, L"Empty") TEST_VARIATION(8, L"ROW_DELETE - MULTIPLEROWS - Veto OKTODO Listener 1") TEST_VARIATION(9, L"ROW_DELETE - MULTIPLEROWS - Veto ABOUTTODO Listener 1") TEST_VARIATION(10, L"ROW_DELETE - MULTIPLEROWS - Veto SYNCHAFTER Listener 1") TEST_VARIATION(11, L"ROW_DELETE - MULTIPLEROWS - Veto DIDEVENT Listener 2") TEST_VARIATION(12, L"ROW_DELETE - MULTIPLEROWS - Veto ABOUTTODO Listener 1 - Veto FAILEDTODO Listener 2") TEST_VARIATION(13, L"OTHER SCENARIOS - Add/Remove Listeners - SINGLEROW") TEST_VARIATION(14, L"OTHER SCENARIOS - GetData - SINGLEROW") TEST_VARIATION(15, L"ROW_DELETE - SINGLEROW - UNWANTED REASON") TEST_VARIATION(16, L"ROW_DELETE - SINGLEROW - UNWANTED PHASE OKTODO") TEST_VARIATION(17, L"ROW_DELETE - SINGLEROW - UNWANTED PHASE ABOUTTODO") TEST_VARIATION(18, L"ROW_DELETE - SINGLEROW - UNWANTED PHASE SYNCHAFTER") TEST_VARIATION(19, L"ROW_DELETE - SINGLEROW - UNWANTED PHASE DIDEVENT") TEST_VARIATION(20, L"ROW_DELETE - MULTIPLEROWS - Veto ABOUTTODO Listener 1 - UNWANTED PHASE FAILEDTODO") TEST_VARIATION(21, L"OTHER SCENARIOS - DBROWSTATUS_DELETED - SINGLEROW") TEST_VARIATION(22, L"ROW_DELETE - SINGLEROW - Veto ABOUTTODO Listener 1 - E_FAIL - All Phases") TEST_VARIATION(23, L"ROW_DELETE - MULTIPLEROWS - Veto ABOUTTODO Listener 1 - E_FAIL - All Phases") TEST_VARIATION(24, L"ROW_DELETE - MULTIPLEROWS - Veto ABOUTTODO Listener 1 - E_OUTOFMEMORY - All Phases") TEST_VARIATION(25, L"ROW_DELETE - MULTIPLEROWS - Veto ABOUTTODO Listener 1 - E_INVALIDARG - All Phases") TEST_VARIATION(26, L"ROW_DELETE - SINGLEROW - E_OUTOFMEMORY - All Phases") TEST_VARIATION(27, L"ROW_DELETE - SINGLEROW - E_INVALIDARG - All Phases") TEST_VARIATION(28, L"OTHER SCENARIOS - Delete no rows - Delete MULTIPLEROWS") TEST_VARIATION(29, L"OTHER SCENARIOS - DBROWSTATUS_DELETED - MULTIPLEROWS") TEST_VARIATION(30, L"OTHER SCENARIOS - EmptyRowset") TEST_VARIATION(31, L"OTHER SCENARIOS - Add/Remove Listeners - MULTIPLEROWS") TEST_VARIATION(32, L"OTHER SCENARIOS - GetData - MULTIPLEROWS") END_TEST_CASE() #undef THE_CLASS // }} TCW_TESTCASE_END // }} TCW_TEST_CASE_MAP_END // {{ TCW_TEST_CASE_MAP(DeleteRows_Bufferred) //-------------------------------------------------------------------- // @class Test Notifications for IRowsetChange::DeleteRows in Buffered Mode // class DeleteRows_Bufferred : public CExecutionManager { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(DeleteRows_Bufferred,CExecutionManager); // }} TCW_DECLARE_FUNCS_END // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // {{ TCW_TESTVARS() // @cmember ROW_DELETE - SINGLEROW - Accept all phases int Variation_1(); // @cmember ROW_DELETE - MULTIPLEROWS - Accept all phases int Variation_2(); // @cmember Empty int Variation_3(); // @cmember ROW_DELETE - DB_E_CANCELED int Variation_4(); // @cmember ROW_DELETE - DB_E_NOTREENTRANT int Variation_5(); // @cmember Empty int Variation_6(); // @cmember Empty int Variation_7(); // @cmember ROW_DELETE - Veto OKTODO Listener 1 int Variation_8(); // @cmember ROW_DELETE - Veto ABOUTTODO Listener 1 int Variation_9(); // @cmember ROW_DELETE - Veto SYNCHAFTER Listener 1 int Variation_10(); // @cmember ROW_DELETE - Veto DIDEVENT Listener 2 int Variation_11(); // @cmember ROW_DELETE - Veto FAILEDTODO Listener 2 int Variation_12(); // @cmember Empty int Variation_13(); // @cmember Empty int Variation_14(); // @cmember ROW_DELETE - UNWANTED REASON int Variation_15(); // @cmember ROW_DELETE - UNWANTED PHASE OKTODO int Variation_16(); // @cmember ROW_DELETE - UNWANTED PHASE ABOUTTODO int Variation_17(); // @cmember ROW_DELETE - UNWANTED PHASE SYNCHAFTER int Variation_18(); // @cmember ROW_DELETE - UNWANTED PHASE DIDEVENT int Variation_19(); // @cmember ROW_DELETE - UNWANTED PHASE FAILEDTODO int Variation_20(); // @cmember Empty int Variation_21(); // @cmember Empty int Variation_22(); // @cmember ROW_DELETE - E_FAIL - All Phases int Variation_23(); // @cmember ROW_DELETE - E_OUTOFMEMORY - All Phases int Variation_24(); // @cmember ROW_DELETE - E_INVALIDARG - All Phases int Variation_25(); // @cmember Empty int Variation_26(); // @cmember Empty int Variation_27(); // @cmember OTHER SCENARIOS - Delete no rows int Variation_28(); // @cmember OTHER SCENARIOS - DBROWSTATUS_DELETED int Variation_29(); // @cmember OTHER SCENARIOS - EmptyRowset int Variation_30(); // @cmember OTHER SCENARIOS - Add/Remove Listeners int Variation_31(); // @cmember OTHER SCENARIOS - GetData int Variation_32(); // @cmember OTHER SCENARIOS - GetOriginalData int Variation_33(); // }} TCW_TESTVARS_END }; // {{ TCW_TESTCASE(DeleteRows_Bufferred) #define THE_CLASS DeleteRows_Bufferred BEG_TEST_CASE(DeleteRows_Bufferred, CExecutionManager, L"Test Notifications for IRowsetChange::DeleteRows in Buffered Mode") TEST_VARIATION(1, L"ROW_DELETE - SINGLEROW - Accept all phases") TEST_VARIATION(2, L"ROW_DELETE - MULTIPLEROWS - Accept all phases") TEST_VARIATION(3, L"Empty") TEST_VARIATION(4, L"ROW_DELETE - DB_E_CANCELED") TEST_VARIATION(5, L"ROW_DELETE - DB_E_NOTREENTRANT") TEST_VARIATION(6, L"Empty") TEST_VARIATION(7, L"Empty") TEST_VARIATION(8, L"ROW_DELETE - Veto OKTODO Listener 1") TEST_VARIATION(9, L"ROW_DELETE - Veto ABOUTTODO Listener 1") TEST_VARIATION(10, L"ROW_DELETE - Veto SYNCHAFTER Listener 1") TEST_VARIATION(11, L"ROW_DELETE - Veto DIDEVENT Listener 2") TEST_VARIATION(12, L"ROW_DELETE - Veto FAILEDTODO Listener 2") TEST_VARIATION(13, L"Empty") TEST_VARIATION(14, L"Empty") TEST_VARIATION(15, L"ROW_DELETE - UNWANTED REASON") TEST_VARIATION(16, L"ROW_DELETE - UNWANTED PHASE OKTODO") TEST_VARIATION(17, L"ROW_DELETE - UNWANTED PHASE ABOUTTODO") TEST_VARIATION(18, L"ROW_DELETE - UNWANTED PHASE SYNCHAFTER") TEST_VARIATION(19, L"ROW_DELETE - UNWANTED PHASE DIDEVENT") TEST_VARIATION(20, L"ROW_DELETE - UNWANTED PHASE FAILEDTODO") TEST_VARIATION(21, L"Empty") TEST_VARIATION(22, L"Empty") TEST_VARIATION(23, L"ROW_DELETE - E_FAIL - All Phases") TEST_VARIATION(24, L"ROW_DELETE - E_OUTOFMEMORY - All Phases") TEST_VARIATION(25, L"ROW_DELETE - E_INVALIDARG - All Phases") TEST_VARIATION(26, L"Empty") TEST_VARIATION(27, L"Empty") TEST_VARIATION(28, L"OTHER SCENARIOS - Delete no rows") TEST_VARIATION(29, L"OTHER SCENARIOS - DBROWSTATUS_DELETED") TEST_VARIATION(30, L"OTHER SCENARIOS - EmptyRowset") TEST_VARIATION(31, L"OTHER SCENARIOS - Add/Remove Listeners") TEST_VARIATION(32, L"OTHER SCENARIOS - GetData") TEST_VARIATION(33, L"OTHER SCENARIOS - GetOriginalData") END_TEST_CASE() #undef THE_CLASS // }} TCW_TESTCASE_END // }} TCW_TEST_CASE_MAP_END // {{ TCW_TEST_CASE_MAP(InsertRow) //-------------------------------------------------------------------- // @class Tests Notifications for IRowsetChange::InsertRow // class InsertRow : public CExecutionManager { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(InsertRow,CExecutionManager); // }} TCW_DECLARE_FUNCS_END // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // {{ TCW_TESTVARS() // @cmember ROW_INSERT - Accept all phases int Variation_1(); // @cmember Empty int Variation_2(); // @cmember Empty int Variation_3(); // @cmember ROW_INSERT - DB_E_NOTREENTRANT int Variation_4(); // @cmember ROW_INSERT - DB_E_CANCELED int Variation_5(); // @cmember Empty int Variation_6(); // @cmember Empty int Variation_7(); // @cmember ROW_INSERT - Veto OKTODO, Listener 1 int Variation_8(); // @cmember ROW_INSERT - Veto ABOUTTODO, Listener 1 int Variation_9(); // @cmember ROW_INSERT - Veto SYNCHAFTER, Listener 2 int Variation_10(); // @cmember ROW_INSERT - Veto DIDEVENT, Listener 3 int Variation_11(); // @cmember ROW_INSERT - Veto FAILEDTODO, Listener 3 int Variation_12(); // @cmember Empty int Variation_13(); // @cmember ROW_INSERT - UNWANTED REASON int Variation_14(); // @cmember ROW_INSERT - UNWANTED PHASE OKTODO int Variation_15(); // @cmember ROW_INSERT - UNWANTED PHASE ABOUTTODO int Variation_16(); // @cmember ROW_INSERT - UNWANTED PHASE SYNCHAFTER int Variation_17(); // @cmember ROW_INSERT - UNWANTED PHASE DIDEVENT int Variation_18(); // @cmember ROW_INSERT - UNWANTED PHASE FAILEDTODO int Variation_19(); // @cmember Empty int Variation_20(); // @cmember Empty int Variation_21(); // @cmember ROW_INSERT - E_FAIL - All Phases int Variation_22(); // @cmember ROW_INSERT - E_OUTOFMEMORY - All Phases int Variation_23(); // @cmember ROW_INSERT - E_INVALIDARG - All Phases int Variation_24(); // @cmember Empty int Variation_25(); // @cmember Empty int Variation_26(); // @cmember OTHER SCENARIOS - DB_E_BADACCESSORHANDLE int Variation_27(); // @cmember OTHER SCENARIOS - EmptyRowset int Variation_28(); // @cmember OTHER SCENARIOS - Add/Remove Listeners int Variation_29(); // @cmember OTHER SCENARIOS - GetData int Variation_30(); // }} TCW_TESTVARS_END }; // {{ TCW_TESTCASE(InsertRow) #define THE_CLASS InsertRow BEG_TEST_CASE(InsertRow, CExecutionManager, L"Tests Notifications for IRowsetChange::InsertRow") TEST_VARIATION(1, L"ROW_INSERT - Accept all phases") TEST_VARIATION(2, L"Empty") TEST_VARIATION(3, L"Empty") TEST_VARIATION(4, L"ROW_INSERT - DB_E_NOTREENTRANT") TEST_VARIATION(5, L"ROW_INSERT - DB_E_CANCELED") TEST_VARIATION(6, L"Empty") TEST_VARIATION(7, L"Empty") TEST_VARIATION(8, L"ROW_INSERT - Veto OKTODO, Listener 1") TEST_VARIATION(9, L"ROW_INSERT - Veto ABOUTTODO, Listener 1") TEST_VARIATION(10, L"ROW_INSERT - Veto SYNCHAFTER, Listener 2") TEST_VARIATION(11, L"ROW_INSERT - Veto DIDEVENT, Listener 3") TEST_VARIATION(12, L"ROW_INSERT - Veto FAILEDTODO, Listener 3") TEST_VARIATION(13, L"Empty") TEST_VARIATION(14, L"ROW_INSERT - UNWANTED REASON") TEST_VARIATION(15, L"ROW_INSERT - UNWANTED PHASE OKTODO") TEST_VARIATION(16, L"ROW_INSERT - UNWANTED PHASE ABOUTTODO") TEST_VARIATION(17, L"ROW_INSERT - UNWANTED PHASE SYNCHAFTER") TEST_VARIATION(18, L"ROW_INSERT - UNWANTED PHASE DIDEVENT") TEST_VARIATION(19, L"ROW_INSERT - UNWANTED PHASE FAILEDTODO") TEST_VARIATION(20, L"Empty") TEST_VARIATION(21, L"Empty") TEST_VARIATION(22, L"ROW_INSERT - E_FAIL - All Phases") TEST_VARIATION(23, L"ROW_INSERT - E_OUTOFMEMORY - All Phases") TEST_VARIATION(24, L"ROW_INSERT - E_INVALIDARG - All Phases") TEST_VARIATION(25, L"Empty") TEST_VARIATION(26, L"Empty") TEST_VARIATION(27, L"OTHER SCENARIOS - DB_E_BADACCESSORHANDLE") TEST_VARIATION(28, L"OTHER SCENARIOS - EmptyRowset") TEST_VARIATION(29, L"OTHER SCENARIOS - Add/Remove Listeners") TEST_VARIATION(30, L"OTHER SCENARIOS - GetData") END_TEST_CASE() #undef THE_CLASS // }} TCW_TESTCASE_END // }} TCW_TEST_CASE_MAP_END // {{ TCW_TEST_CASE_MAP(InsertRow_Bufferred) //-------------------------------------------------------------------- // @class Test Notifications for IRowsetChange::InsertRow in Buffered Mode // class InsertRow_Bufferred : public CExecutionManager { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(InsertRow_Bufferred,CExecutionManager); // }} TCW_DECLARE_FUNCS_END // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // {{ TCW_TESTVARS() // @cmember ROW_INSERT - Accept all phases int Variation_1(); // @cmember Empty int Variation_2(); // @cmember Empty int Variation_3(); // @cmember ROW_INSERT - DB_E_NOTREENTRANT int Variation_4(); // @cmember ROW_INSERT - DB_E_CANCELED int Variation_5(); // @cmember Empty int Variation_6(); // @cmember Empty int Variation_7(); // @cmember ROW_INSERT - Veto OKTODO, Listener 1 int Variation_8(); // @cmember ROW_INSERT - Veto ABOUTTODO, Listener 1 int Variation_9(); // @cmember ROW_INSERT - Veto SYNCHAFTER, Listener 2 int Variation_10(); // @cmember ROW_INSERT - Veto DIDEVENT, Listener 3 int Variation_11(); // @cmember ROW_INSERT - Veto FAILEDTODO, Listener 3 int Variation_12(); // @cmember Empty int Variation_13(); // @cmember ROW_INSERT - UNWANTED REASON int Variation_14(); // @cmember ROW_INSERT - UNWANTED PHASE OKTODO int Variation_15(); // @cmember ROW_INSERT - UNWANTED PHASE ABOUTTODO int Variation_16(); // @cmember ROW_INSERT - UNWANTED PHASE SYNCHAFTER int Variation_17(); // @cmember ROW_INSERT - UNWANTED PHASE DIDEVENT int Variation_18(); // @cmember ROW_INSERT - UNWANTED PHASE FAILEDTODO int Variation_19(); // @cmember Empty int Variation_20(); // @cmember Empty int Variation_21(); // @cmember ROW_INSERT - E_FAIL - All Phases int Variation_22(); // @cmember ROW_INSERT - E_OUTOFMEMORY - All Phases int Variation_23(); // @cmember ROW_INSERT - E_INVALIDARG - All Phases int Variation_24(); // @cmember Empty int Variation_25(); // @cmember Empty int Variation_26(); // @cmember OTHER SCENARIOS - DB_E_BADACCESSORHANDLE int Variation_27(); // @cmember OTHER SCENARIOS - EmptyRowset int Variation_28(); // @cmember OTHER SCENARIOS - Add/Remove Listeners int Variation_29(); // @cmember OTHER SCENARIOS - GetData int Variation_30(); // @cmember OTHER SCENARIOS - GetOriginalData int Variation_31(); // }} TCW_TESTVARS_END }; // {{ TCW_TESTCASE(InsertRow_Bufferred) #define THE_CLASS InsertRow_Bufferred BEG_TEST_CASE(InsertRow_Bufferred, CExecutionManager, L"Test Notifications for IRowsetChange::InsertRow in Buffered Mode") TEST_VARIATION(1, L"ROW_INSERT - Accept all phases") TEST_VARIATION(2, L"Empty") TEST_VARIATION(3, L"Empty") TEST_VARIATION(4, L"ROW_INSERT - DB_E_NOTREENTRANT") TEST_VARIATION(5, L"ROW_INSERT - DB_E_CANCELED") TEST_VARIATION(6, L"Empty") TEST_VARIATION(7, L"Empty") TEST_VARIATION(8, L"ROW_INSERT - Veto OKTODO, Listener 1") TEST_VARIATION(9, L"ROW_INSERT - Veto ABOUTTODO, Listener 1") TEST_VARIATION(10, L"ROW_INSERT - Veto SYNCHAFTER, Listener 2") TEST_VARIATION(11, L"ROW_INSERT - Veto DIDEVENT, Listener 3") TEST_VARIATION(12, L"ROW_INSERT - Veto FAILEDTODO, Listener 3") TEST_VARIATION(13, L"Empty") TEST_VARIATION(14, L"ROW_INSERT - UNWANTED REASON") TEST_VARIATION(15, L"ROW_INSERT - UNWANTED PHASE OKTODO") TEST_VARIATION(16, L"ROW_INSERT - UNWANTED PHASE ABOUTTODO") TEST_VARIATION(17, L"ROW_INSERT - UNWANTED PHASE SYNCHAFTER") TEST_VARIATION(18, L"ROW_INSERT - UNWANTED PHASE DIDEVENT") TEST_VARIATION(19, L"ROW_INSERT - UNWANTED PHASE FAILEDTODO") TEST_VARIATION(20, L"Empty") TEST_VARIATION(21, L"Empty") TEST_VARIATION(22, L"ROW_INSERT - E_FAIL - All Phases") TEST_VARIATION(23, L"ROW_INSERT - E_OUTOFMEMORY - All Phases") TEST_VARIATION(24, L"ROW_INSERT - E_INVALIDARG - All Phases") TEST_VARIATION(25, L"Empty") TEST_VARIATION(26, L"Empty") TEST_VARIATION(27, L"OTHER SCENARIOS - DB_E_BADACCESSORHANDLE") TEST_VARIATION(28, L"OTHER SCENARIOS - EmptyRowset") TEST_VARIATION(29, L"OTHER SCENARIOS - Add/Remove Listeners") TEST_VARIATION(30, L"OTHER SCENARIOS - GetData") TEST_VARIATION(31, L"OTHER SCENARIOS - GetOriginalData") END_TEST_CASE() #undef THE_CLASS // }} TCW_TESTCASE_END // }} TCW_TEST_CASE_MAP_END // {{ TCW_TEST_CASE_MAP(SetData) //-------------------------------------------------------------------- // @class Tests Notifications for IRowsetChange::SetData // class SetData : public CExecutionManager { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(SetData,CExecutionManager); // }} TCW_DECLARE_FUNCS_END // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // {{ TCW_TESTVARS() // @cmember COLUMN_SET - Accept all phases int Variation_1(); // @cmember Empty int Variation_2(); // @cmember Empty int Variation_3(); // @cmember COLUMN_SET - DB_E_CANCELED int Variation_4(); // @cmember COLUMN_SET - DB_E_NOTREENTRANT int Variation_5(); // @cmember Empty int Variation_6(); // @cmember Empty int Variation_7(); // @cmember COLUMN_SET - Veto OKTODO int Variation_8(); // @cmember COLUMN_SET - Veto ABOUTTODO int Variation_9(); // @cmember COLUMN_SET - Veto SYNCHAFTER int Variation_10(); // @cmember COLUMN_SET - Veto DIDEVENT int Variation_11(); // @cmember COLUMN_SET - Veto FAILEDTODO int Variation_12(); // @cmember Empty int Variation_13(); // @cmember COLUMN_SET - UNWANTED REASON int Variation_14(); // @cmember COLUMN_SET - UNWANTED PHASE OKTODO int Variation_15(); // @cmember COLUMN_SET - UNWANTED PHASE ABOUTTO int Variation_16(); // @cmember COLUMN_SET - UNWANTED PHASE SYNCHAFTER int Variation_17(); // @cmember COLUMN_SET- UNWANTED PHASE DIDEVENT int Variation_18(); // @cmember COLUMN_SET - UNWANTED PHASE FAILEDTODO int Variation_19(); // @cmember Empty int Variation_20(); // @cmember Empty int Variation_21(); // @cmember COLUMN_SET - E_FAIL - All Phases int Variation_22(); // @cmember COLUMN_SET - E_OUTOFMEMORY - All Phases int Variation_23(); // @cmember COLUMN_SET - E_INVALIDARG - All Phases int Variation_24(); // @cmember Empty int Variation_25(); // @cmember Empty int Variation_26(); // @cmember COLUMN_RECALCULATED - DB_E_ERRORSOCCURRED - Accept all phases int Variation_27(); // @cmember Empty int Variation_28(); // @cmember Empty int Variation_29(); // @cmember COLUMN_RECALCULATED - DB_E_CANCELED int Variation_30(); // @cmember COLUMN_RECALCULATED - DB_E_NOTREENTRANT int Variation_31(); // @cmember Empty int Variation_32(); // @cmember Empty int Variation_33(); // @cmember COLUMN_RECALCULATED - Veto DIDEVENT int Variation_34(); // @cmember Empty int Variation_35(); // @cmember Empty int Variation_36(); // @cmember COLUMN_RECALCULATED - UNWANTED REASON int Variation_37(); // @cmember COLUMN_RECALCULATED - UNWANTED PHASE DIDEVENT int Variation_38(); // @cmember Empty int Variation_39(); // @cmember Empty int Variation_40(); // @cmember COLUMN_RECALCULATED - E_FAIL - All Phases int Variation_41(); // @cmember COLUMN_RECALCULATED - E_OUTOFMEMORY - All Phases int Variation_42(); // @cmember COLUMN_RECALCULATED - E_INVALIDARG - All Phases int Variation_43(); // @cmember Empty int Variation_44(); // @cmember Empty int Variation_45(); // @cmember OTHER SCENARIOS - DB_E_BADACCESSORHANDLE int Variation_46(); // @cmember OTHER SCENARIOS - EmptyRowset int Variation_47(); // @cmember OTHER SCENARIOS - Add/Remove Listeners int Variation_48(); // @cmember OTHER SCENARIOS - GetData int Variation_49(); // }} TCW_TESTVARS_END }; // {{ TCW_TESTCASE(SetData) #define THE_CLASS SetData BEG_TEST_CASE(SetData, CExecutionManager, L"Tests Notifications for IRowsetChange::SetData") TEST_VARIATION(1, L"COLUMN_SET - Accept all phases") TEST_VARIATION(2, L"Empty") TEST_VARIATION(3, L"Empty") TEST_VARIATION(4, L"COLUMN_SET - DB_E_CANCELED") TEST_VARIATION(5, L"COLUMN_SET - DB_E_NOTREENTRANT") TEST_VARIATION(6, L"Empty") TEST_VARIATION(7, L"Empty") TEST_VARIATION(8, L"COLUMN_SET - Veto OKTODO") TEST_VARIATION(9, L"COLUMN_SET - Veto ABOUTTODO") TEST_VARIATION(10, L"COLUMN_SET - Veto SYNCHAFTER") TEST_VARIATION(11, L"COLUMN_SET - Veto DIDEVENT") TEST_VARIATION(12, L"COLUMN_SET - Veto FAILEDTODO") TEST_VARIATION(13, L"Empty") TEST_VARIATION(14, L"COLUMN_SET - UNWANTED REASON") TEST_VARIATION(15, L"COLUMN_SET - UNWANTED PHASE OKTODO") TEST_VARIATION(16, L"COLUMN_SET - UNWANTED PHASE ABOUTTO") TEST_VARIATION(17, L"COLUMN_SET - UNWANTED PHASE SYNCHAFTER") TEST_VARIATION(18, L"COLUMN_SET- UNWANTED PHASE DIDEVENT") TEST_VARIATION(19, L"COLUMN_SET - UNWANTED PHASE FAILEDTODO") TEST_VARIATION(20, L"Empty") TEST_VARIATION(21, L"Empty") TEST_VARIATION(22, L"COLUMN_SET - E_FAIL - All Phases") TEST_VARIATION(23, L"COLUMN_SET - E_OUTOFMEMORY - All Phases") TEST_VARIATION(24, L"COLUMN_SET - E_INVALIDARG - All Phases") TEST_VARIATION(25, L"Empty") TEST_VARIATION(26, L"Empty") TEST_VARIATION(27, L"COLUMN_RECALCULATED - DB_E_ERRORSOCCURRED - Accept all phases") TEST_VARIATION(28, L"Empty") TEST_VARIATION(29, L"Empty") TEST_VARIATION(30, L"COLUMN_RECALCULATED - DB_E_CANCELED") TEST_VARIATION(31, L"COLUMN_RECALCULATED - DB_E_NOTREENTRANT") TEST_VARIATION(32, L"Empty") TEST_VARIATION(33, L"Empty") TEST_VARIATION(34, L"COLUMN_RECALCULATED - Veto DIDEVENT") TEST_VARIATION(35, L"Empty") TEST_VARIATION(36, L"Empty") TEST_VARIATION(37, L"COLUMN_RECALCULATED - UNWANTED REASON") TEST_VARIATION(38, L"COLUMN_RECALCULATED - UNWANTED PHASE DIDEVENT") TEST_VARIATION(39, L"Empty") TEST_VARIATION(40, L"Empty") TEST_VARIATION(41, L"COLUMN_RECALCULATED - E_FAIL - All Phases") TEST_VARIATION(42, L"COLUMN_RECALCULATED - E_OUTOFMEMORY - All Phases") TEST_VARIATION(43, L"COLUMN_RECALCULATED - E_INVALIDARG - All Phases") TEST_VARIATION(44, L"Empty") TEST_VARIATION(45, L"Empty") TEST_VARIATION(46, L"OTHER SCENARIOS - DB_E_BADACCESSORHANDLE") TEST_VARIATION(47, L"OTHER SCENARIOS - EmptyRowset") TEST_VARIATION(48, L"OTHER SCENARIOS - Add/Remove Listeners") TEST_VARIATION(49, L"OTHER SCENARIOS - GetData") END_TEST_CASE() #undef THE_CLASS // }} TCW_TESTCASE_END // }} TCW_TEST_CASE_MAP_END // {{ TCW_TEST_CASE_MAP(SetData_Bufferred) //-------------------------------------------------------------------- // @class Test Notifications for IRowsetChange::SetData in Buffered Mode // class SetData_Bufferred : public CExecutionManager { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(SetData_Bufferred,CExecutionManager); // }} TCW_DECLARE_FUNCS_END // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // {{ TCW_TESTVARS() // @cmember ROW_FIRSTCHANGE - Accept all phases int Variation_1(); // @cmember Empty int Variation_2(); // @cmember Empty int Variation_3(); // @cmember ROW_FIRSTCHANGE - DB_E_CANCELED int Variation_4(); // @cmember ROW_FIRSTCHANGE - DB_E_NOTREENTRANT int Variation_5(); // @cmember Empty int Variation_6(); // @cmember Empty int Variation_7(); // @cmember ROW_FIRSTCHANGE - Veto OKTODO int Variation_8(); // @cmember ROW_FIRSTCHANGE - Veto ABOUTTODO int Variation_9(); // @cmember ROW_FIRSTCHANGE - Veto SYNCHAFTER int Variation_10(); // @cmember ROW_FIRSTCHANGE - Veto DIDEVENT int Variation_11(); // @cmember ROW_FIRSTCHANGE - Veto FAILEDTODO int Variation_12(); // @cmember Empty int Variation_13(); // @cmember Empty int Variation_14(); // @cmember ROW_FIRSTCHANGE - UNWANTED REASON int Variation_15(); // @cmember ROW_FIRSTCHANGE - UNWANTED PHASE OKTODO int Variation_16(); // @cmember ROW_FIRSTCHANGE - UNWANTED PHASE ABOUTTODO int Variation_17(); // @cmember ROW_FIRSTCHANGE - UNWANTED PHASE SYNCHAFTER int Variation_18(); // @cmember ROW_FIRSTCHANGE - UNWANTED PHASE DIDEVENT int Variation_19(); // @cmember ROW_FIRSTCHANGE - UNWANTED PHASE FAILEDTODO int Variation_20(); // @cmember Empty int Variation_21(); // @cmember Empty int Variation_22(); // @cmember ROW_FIRSTCHANGE - E_FAIL - All Phases int Variation_23(); // @cmember ROW_FIRSTCHANGE - E_OUTOFMEMORY - All Phases int Variation_24(); // @cmember ROW_FIRSTCHANGE - E_INVALIDARG - All Phases int Variation_25(); // @cmember Empty int Variation_26(); // @cmember Empty int Variation_27(); // @cmember COLUMN_SET - Accept all phases int Variation_28(); // @cmember Empty int Variation_29(); // @cmember Empty int Variation_30(); // @cmember COLUMN_SET - DB_E_CANCELED int Variation_31(); // @cmember COLUMN_SET - DB_E_NOTREENTRANT int Variation_32(); // @cmember Empty int Variation_33(); // @cmember Empty int Variation_34(); // @cmember COLUMN_SET - Veto OKTODO int Variation_35(); // @cmember COLUMN_SET - Veto ABOUTTODO int Variation_36(); // @cmember COLUMN_SET - Veto SYNCHAFTER int Variation_37(); // @cmember COLUMN_SET - Veto DIDEVENT int Variation_38(); // @cmember COLUMN_SET - Veto FAILEDTODO int Variation_39(); // @cmember Empty int Variation_40(); // @cmember COLUMN_SET - UNWANTED REASON int Variation_41(); // @cmember COLUMN_SET - UNWANTED PHASE OKTODO int Variation_42(); // @cmember COLUMN_SET - UNWANTED PHASE ABOUTTO int Variation_43(); // @cmember COLUMN_SET - UNWANTED PHASE SYNCHAFTER int Variation_44(); // @cmember COLUMN_SET- UNWANTED PHASE DIDEVENT int Variation_45(); // @cmember COLUMN_SET - UNWANTED PHASE FAILEDTODO int Variation_46(); // @cmember Empty int Variation_47(); // @cmember Empty int Variation_48(); // @cmember COLUMN_SET - E_FAIL - All Phases int Variation_49(); // @cmember COLUMN_SET - E_OUTOFMEMORY - All Phases int Variation_50(); // @cmember COLUMN_SET - E_INVALIDARG - All Phases int Variation_51(); // @cmember Empty int Variation_52(); // @cmember Empty int Variation_53(); // @cmember COLUMN_RECALCULATED - Accept all phases int Variation_54(); // @cmember Empty int Variation_55(); // @cmember Empty int Variation_56(); // @cmember COLUMN_RECALCULATED - DB_E_CANCELED int Variation_57(); // @cmember COLUMN_RECALCULATED - DB_E_NOTREENTRANT int Variation_58(); // @cmember Empty int Variation_59(); // @cmember Empty int Variation_60(); // @cmember COLUMN_RECALCULATED - Veto DIDEVENT int Variation_61(); // @cmember Empty int Variation_62(); // @cmember Empty int Variation_63(); // @cmember COLUMN_RECALCULATED - UNWANTED REASON int Variation_64(); // @cmember COLUMN_RECALCULATED - UNWANTED PHASE DIDEVENT int Variation_65(); // @cmember Empty int Variation_66(); // @cmember Empty int Variation_67(); // @cmember COLUMN_RECALCULATED - E_FAIL - All Phases int Variation_68(); // @cmember COLUMN_RECALCULATED - E_OUTOFMEMORY - All Phases int Variation_69(); // @cmember COLUMN_RECALCULATED - E_INVALIDARG - All Phases int Variation_70(); // @cmember Empty int Variation_71(); // @cmember Empty int Variation_72(); // @cmember OTHER SCENARIOS - DB_E_BADACCESSORHANDLE int Variation_73(); // @cmember OTHER SCENARIOS - EmptyRowset int Variation_74(); // @cmember OTHER SCENARIOS - Add/Remove Listeners int Variation_75(); // @cmember OTHER SCENARIOS - GetData int Variation_76(); // @cmember OTHER SCENARIOS - GetOriginalData int Variation_77(); // }} TCW_TESTVARS_END }; // {{ TCW_TESTCASE(SetData_Bufferred) #define THE_CLASS SetData_Bufferred BEG_TEST_CASE(SetData_Bufferred, CExecutionManager, L"Test Notifications for IRowsetChange::SetData in Buffered Mode") TEST_VARIATION(1, L"ROW_FIRSTCHANGE - Accept all phases") TEST_VARIATION(2, L"Empty") TEST_VARIATION(3, L"Empty") TEST_VARIATION(4, L"ROW_FIRSTCHANGE - DB_E_CANCELED") TEST_VARIATION(5, L"ROW_FIRSTCHANGE - DB_E_NOTREENTRANT") TEST_VARIATION(6, L"Empty") TEST_VARIATION(7, L"Empty") TEST_VARIATION(8, L"ROW_FIRSTCHANGE - Veto OKTODO") TEST_VARIATION(9, L"ROW_FIRSTCHANGE - Veto ABOUTTODO") TEST_VARIATION(10, L"ROW_FIRSTCHANGE - Veto SYNCHAFTER") TEST_VARIATION(11, L"ROW_FIRSTCHANGE - Veto DIDEVENT") TEST_VARIATION(12, L"ROW_FIRSTCHANGE - Veto FAILEDTODO") TEST_VARIATION(13, L"Empty") TEST_VARIATION(14, L"Empty") TEST_VARIATION(15, L"ROW_FIRSTCHANGE - UNWANTED REASON") TEST_VARIATION(16, L"ROW_FIRSTCHANGE - UNWANTED PHASE OKTODO") TEST_VARIATION(17, L"ROW_FIRSTCHANGE - UNWANTED PHASE ABOUTTODO") TEST_VARIATION(18, L"ROW_FIRSTCHANGE - UNWANTED PHASE SYNCHAFTER") TEST_VARIATION(19, L"ROW_FIRSTCHANGE - UNWANTED PHASE DIDEVENT") TEST_VARIATION(20, L"ROW_FIRSTCHANGE - UNWANTED PHASE FAILEDTODO") TEST_VARIATION(21, L"Empty") TEST_VARIATION(22, L"Empty") TEST_VARIATION(23, L"ROW_FIRSTCHANGE - E_FAIL - All Phases") TEST_VARIATION(24, L"ROW_FIRSTCHANGE - E_OUTOFMEMORY - All Phases") TEST_VARIATION(25, L"ROW_FIRSTCHANGE - E_INVALIDARG - All Phases") TEST_VARIATION(26, L"Empty") TEST_VARIATION(27, L"Empty") TEST_VARIATION(28, L"COLUMN_SET - Accept all phases") TEST_VARIATION(29, L"Empty") TEST_VARIATION(30, L"Empty") TEST_VARIATION(31, L"COLUMN_SET - DB_E_CANCELED") TEST_VARIATION(32, L"COLUMN_SET - DB_E_NOTREENTRANT") TEST_VARIATION(33, L"Empty") TEST_VARIATION(34, L"Empty") TEST_VARIATION(35, L"COLUMN_SET - Veto OKTODO") TEST_VARIATION(36, L"COLUMN_SET - Veto ABOUTTODO") TEST_VARIATION(37, L"COLUMN_SET - Veto SYNCHAFTER") TEST_VARIATION(38, L"COLUMN_SET - Veto DIDEVENT") TEST_VARIATION(39, L"COLUMN_SET - Veto FAILEDTODO") TEST_VARIATION(40, L"Empty") TEST_VARIATION(41, L"COLUMN_SET - UNWANTED REASON") TEST_VARIATION(42, L"COLUMN_SET - UNWANTED PHASE OKTODO") TEST_VARIATION(43, L"COLUMN_SET - UNWANTED PHASE ABOUTTO") TEST_VARIATION(44, L"COLUMN_SET - UNWANTED PHASE SYNCHAFTER") TEST_VARIATION(45, L"COLUMN_SET- UNWANTED PHASE DIDEVENT") TEST_VARIATION(46, L"COLUMN_SET - UNWANTED PHASE FAILEDTODO") TEST_VARIATION(47, L"Empty") TEST_VARIATION(48, L"Empty") TEST_VARIATION(49, L"COLUMN_SET - E_FAIL - All Phases") TEST_VARIATION(50, L"COLUMN_SET - E_OUTOFMEMORY - All Phases") TEST_VARIATION(51, L"COLUMN_SET - E_INVALIDARG - All Phases") TEST_VARIATION(52, L"Empty") TEST_VARIATION(53, L"Empty") TEST_VARIATION(54, L"COLUMN_RECALCULATED - Accept all phases") TEST_VARIATION(55, L"Empty") TEST_VARIATION(56, L"Empty") TEST_VARIATION(57, L"COLUMN_RECALCULATED - DB_E_CANCELED") TEST_VARIATION(58, L"COLUMN_RECALCULATED - DB_E_NOTREENTRANT") TEST_VARIATION(59, L"Empty") TEST_VARIATION(60, L"Empty") TEST_VARIATION(61, L"COLUMN_RECALCULATED - Veto DIDEVENT") TEST_VARIATION(62, L"Empty") TEST_VARIATION(63, L"Empty") TEST_VARIATION(64, L"COLUMN_RECALCULATED - UNWANTED REASON") TEST_VARIATION(65, L"COLUMN_RECALCULATED - UNWANTED PHASE DIDEVENT") TEST_VARIATION(66, L"Empty") TEST_VARIATION(67, L"Empty") TEST_VARIATION(68, L"COLUMN_RECALCULATED - E_FAIL - All Phases") TEST_VARIATION(69, L"COLUMN_RECALCULATED - E_OUTOFMEMORY - All Phases") TEST_VARIATION(70, L"COLUMN_RECALCULATED - E_INVALIDARG - All Phases") TEST_VARIATION(71, L"Empty") TEST_VARIATION(72, L"Empty") TEST_VARIATION(73, L"OTHER SCENARIOS - DB_E_BADACCESSORHANDLE") TEST_VARIATION(74, L"OTHER SCENARIOS - EmptyRowset") TEST_VARIATION(75, L"OTHER SCENARIOS - Add/Remove Listeners") TEST_VARIATION(76, L"OTHER SCENARIOS - GetData") TEST_VARIATION(77, L"OTHER SCENARIOS - GetOriginalData") END_TEST_CASE() #undef THE_CLASS // }} TCW_TESTCASE_END // }} TCW_TEST_CASE_MAP_END // {{ TCW_TEST_CASE_MAP(Resynch) //-------------------------------------------------------------------- // @class Tests Notifications for IRowsetResynch::ResyncRows // class Resynch : public CExecutionManager { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(Resynch,CExecutionManager); // }} TCW_DECLARE_FUNCS_END // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // {{ TCW_TESTVARS() // @cmember ROW_RESYNCH - Accept all phases int Variation_1(); // @cmember Empty int Variation_2(); // @cmember Empty int Variation_3(); // @cmember ROW_RESYNCH - DB_E_CANCELED int Variation_4(); // @cmember ROW_RESYNCH - DB_E_NOTREENTRANT int Variation_5(); // @cmember Empty int Variation_6(); // @cmember Empty int Variation_7(); // @cmember ROW_RESYNCH - Veto OKTODO int Variation_8(); // @cmember ROW_RESYNCH - Veto ABOUTTODO int Variation_9(); // @cmember ROW_RESYNCH - Veto SYNCHAFTER int Variation_10(); // @cmember ROW_RESYNCH - Veto DIDEVENT int Variation_11(); // @cmember ROW_RESYNCH - Veto FAILEDTODO int Variation_12(); // @cmember Empty int Variation_13(); // @cmember Empty int Variation_14(); // @cmember ROW_RESYNCH - UNWANTED REASON int Variation_15(); // @cmember ROW_RESYNCH - UNWANTED PHASE - OKTODO int Variation_16(); // @cmember ROW_RESYNCH - UNWANTED PHASE - ABOUTTODO int Variation_17(); // @cmember ROW_RESYNCH - UNWANTED PHASE - SYNCHAFTER int Variation_18(); // @cmember ROW_RESYNCH - UNWANTED PHASE - DIDEVENT int Variation_19(); // @cmember ROW_RESYNCH - UNWANTED PHASE - FAILEDTODO int Variation_20(); // @cmember Empty int Variation_21(); // @cmember Empty int Variation_22(); // @cmember ROW_RESYNCH - E_FAIL - All Phases int Variation_23(); // @cmember ROW_RESYNCH - E_OUTOFMEMORY - All Phases int Variation_24(); // @cmember ROW_RESYNCH - E_INVALIDARG - All Phases int Variation_25(); // @cmember Empty int Variation_26(); // @cmember Empty int Variation_27(); // @cmember OTHER SCENARIOS - Resynch all rows int Variation_28(); // @cmember OTHER SCENARIOS - Resynch 2 rows, 1 changed 1 not changed int Variation_29(); // @cmember OTHER SCENARIOS - 1 valid, 1 not valid int Variation_30(); // @cmember OTHER SCENARIOS - EmptyRowset int Variation_31(); // @cmember OTHER SCENARIOS - Add/Remove Listeners int Variation_32(); // @cmember OTHER SCENARIOS - GetData int Variation_33(); // @cmember OTHER SCENARIOS - GetVisibleData int Variation_34(); // }} TCW_TESTVARS_END }; // {{ TCW_TESTCASE(Resynch) #define THE_CLASS Resynch BEG_TEST_CASE(Resynch, CExecutionManager, L"Tests Notifications for IRowsetResynch::ResyncRows") TEST_VARIATION(1, L"ROW_RESYNCH - Accept all phases") TEST_VARIATION(2, L"Empty") TEST_VARIATION(3, L"Empty") TEST_VARIATION(4, L"ROW_RESYNCH - DB_E_CANCELED") TEST_VARIATION(5, L"ROW_RESYNCH - DB_E_NOTREENTRANT") TEST_VARIATION(6, L"Empty") TEST_VARIATION(7, L"Empty") TEST_VARIATION(8, L"ROW_RESYNCH - Veto OKTODO") TEST_VARIATION(9, L"ROW_RESYNCH - Veto ABOUTTODO") TEST_VARIATION(10, L"ROW_RESYNCH - Veto SYNCHAFTER") TEST_VARIATION(11, L"ROW_RESYNCH - Veto DIDEVENT") TEST_VARIATION(12, L"ROW_RESYNCH - Veto FAILEDTODO") TEST_VARIATION(13, L"Empty") TEST_VARIATION(14, L"Empty") TEST_VARIATION(15, L"ROW_RESYNCH - UNWANTED REASON") TEST_VARIATION(16, L"ROW_RESYNCH - UNWANTED PHASE - OKTODO") TEST_VARIATION(17, L"ROW_RESYNCH - UNWANTED PHASE - ABOUTTODO") TEST_VARIATION(18, L"ROW_RESYNCH - UNWANTED PHASE - SYNCHAFTER") TEST_VARIATION(19, L"ROW_RESYNCH - UNWANTED PHASE - DIDEVENT") TEST_VARIATION(20, L"ROW_RESYNCH - UNWANTED PHASE - FAILEDTODO") TEST_VARIATION(21, L"Empty") TEST_VARIATION(22, L"Empty") TEST_VARIATION(23, L"ROW_RESYNCH - E_FAIL - All Phases") TEST_VARIATION(24, L"ROW_RESYNCH - E_OUTOFMEMORY - All Phases") TEST_VARIATION(25, L"ROW_RESYNCH - E_INVALIDARG - All Phases") TEST_VARIATION(26, L"Empty") TEST_VARIATION(27, L"Empty") TEST_VARIATION(28, L"OTHER SCENARIOS - Resynch all rows") TEST_VARIATION(29, L"OTHER SCENARIOS - Resynch 2 rows, 1 changed 1 not changed") TEST_VARIATION(30, L"OTHER SCENARIOS - 1 valid, 1 not valid") TEST_VARIATION(31, L"OTHER SCENARIOS - EmptyRowset") TEST_VARIATION(32, L"OTHER SCENARIOS - Add/Remove Listeners") TEST_VARIATION(33, L"OTHER SCENARIOS - GetData") TEST_VARIATION(34, L"OTHER SCENARIOS - GetVisibleData") END_TEST_CASE() #undef THE_CLASS // }} TCW_TESTCASE_END // }} TCW_TEST_CASE_MAP_END // {{ TCW_TEST_CASE_MAP(Resynch_Bufferred) //-------------------------------------------------------------------- // @class Tests Notifications for IRowsetResynch_Bufferred::ResyncRows // class Resynch_Bufferred : public CExecutionManager { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(Resynch_Bufferred,CExecutionManager); // }} TCW_DECLARE_FUNCS_END // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // {{ TCW_TESTVARS() // @cmember ROW_RESYNCH - Accept all phases int Variation_1(); // @cmember Empty int Variation_2(); // @cmember Empty int Variation_3(); // @cmember ROW_RESYNCH - DB_E_CANCELED int Variation_4(); // @cmember ROW_RESYNCH - DB_E_NOTREENTRANT int Variation_5(); // @cmember Empty int Variation_6(); // @cmember Empty int Variation_7(); // @cmember ROW_RESYNCH - Veto OKTODO int Variation_8(); // @cmember ROW_RESYNCH - Veto ABOUTTODO int Variation_9(); // @cmember ROW_RESYNCH - Veto SYNCHAFTER int Variation_10(); // @cmember ROW_RESYNCH - Veto DIDEVENT int Variation_11(); // @cmember ROW_RESYNCH - Veto FAILEDTODO int Variation_12(); // @cmember Empty int Variation_13(); // @cmember Empty int Variation_14(); // @cmember ROW_RESYNCH - UNWANTED REASON int Variation_15(); // @cmember ROW_RESYNCH - UNWANTED PHASE - OKTODO int Variation_16(); // @cmember ROW_RESYNCH - UNWANTED PHASE - ABOUTTODO int Variation_17(); // @cmember ROW_RESYNCH - UNWANTED PHASE - SYNCHAFTER int Variation_18(); // @cmember ROW_RESYNCH - UNWANTED PHASE - DIDEVENT int Variation_19(); // @cmember ROW_RESYNCH - UNWANTED PHASE - FAILEDTODO int Variation_20(); // @cmember Empty int Variation_21(); // @cmember Empty int Variation_22(); // @cmember ROW_RESYNCH - E_FAIL - All Phases int Variation_23(); // @cmember ROW_RESYNCH - E_OUTOFMEMORY - All Phases int Variation_24(); // @cmember ROW_RESYNCH - E_INVALIDARG - All Phases int Variation_25(); // @cmember Empty int Variation_26(); // @cmember Empty int Variation_27(); // @cmember OTHER SCENARIOS - Resynch_Bufferred all rows int Variation_28(); // @cmember OTHER SCENARIOS - Resynch_Bufferred 2 rows, 1 changed 1 not changed int Variation_29(); // @cmember OTHER SCENARIOS - 1 valid, 1 not valid int Variation_30(); // @cmember OTHER SCENARIOS - EmptyRowset int Variation_31(); // @cmember OTHER SCENARIOS - Add/Remove Listeners int Variation_32(); // @cmember OTHER SCENARIOS - GetData int Variation_33(); // @cmember OTHER SCENARIOS - GetVisibleData int Variation_34(); // }} TCW_TESTVARS_END }; // {{ TCW_TESTCASE(Resynch_Bufferred) #define THE_CLASS Resynch_Bufferred BEG_TEST_CASE(Resynch_Bufferred, CExecutionManager, L"Tests Notifications for IRowsetResynch_Bufferred::ResyncRows") TEST_VARIATION(1, L"ROW_RESYNCH - Accept all phases") TEST_VARIATION(2, L"Empty") TEST_VARIATION(3, L"Empty") TEST_VARIATION(4, L"ROW_RESYNCH - DB_E_CANCELED") TEST_VARIATION(5, L"ROW_RESYNCH - DB_E_NOTREENTRANT") TEST_VARIATION(6, L"Empty") TEST_VARIATION(7, L"Empty") TEST_VARIATION(8, L"ROW_RESYNCH - Veto OKTODO") TEST_VARIATION(9, L"ROW_RESYNCH - Veto ABOUTTODO") TEST_VARIATION(10, L"ROW_RESYNCH - Veto SYNCHAFTER") TEST_VARIATION(11, L"ROW_RESYNCH - Veto DIDEVENT") TEST_VARIATION(12, L"ROW_RESYNCH - Veto FAILEDTODO") TEST_VARIATION(13, L"Empty") TEST_VARIATION(14, L"Empty") TEST_VARIATION(15, L"ROW_RESYNCH - UNWANTED REASON") TEST_VARIATION(16, L"ROW_RESYNCH - UNWANTED PHASE - OKTODO") TEST_VARIATION(17, L"ROW_RESYNCH - UNWANTED PHASE - ABOUTTODO") TEST_VARIATION(18, L"ROW_RESYNCH - UNWANTED PHASE - SYNCHAFTER") TEST_VARIATION(19, L"ROW_RESYNCH - UNWANTED PHASE - DIDEVENT") TEST_VARIATION(20, L"ROW_RESYNCH - UNWANTED PHASE - FAILEDTODO") TEST_VARIATION(21, L"Empty") TEST_VARIATION(22, L"Empty") TEST_VARIATION(23, L"ROW_RESYNCH - E_FAIL - All Phases") TEST_VARIATION(24, L"ROW_RESYNCH - E_OUTOFMEMORY - All Phases") TEST_VARIATION(25, L"ROW_RESYNCH - E_INVALIDARG - All Phases") TEST_VARIATION(26, L"Empty") TEST_VARIATION(27, L"Empty") TEST_VARIATION(28, L"OTHER SCENARIOS - Resynch_Bufferred all rows") TEST_VARIATION(29, L"OTHER SCENARIOS - Resynch_Bufferred 2 rows, 1 changed 1 not changed") TEST_VARIATION(30, L"OTHER SCENARIOS - 1 valid, 1 not valid") TEST_VARIATION(31, L"OTHER SCENARIOS - EmptyRowset") TEST_VARIATION(32, L"OTHER SCENARIOS - Add/Remove Listeners") TEST_VARIATION(33, L"OTHER SCENARIOS - GetData") TEST_VARIATION(34, L"OTHER SCENARIOS - GetVisibleData") END_TEST_CASE() #undef THE_CLASS // }} TCW_TESTCASE_END // }} TCW_TEST_CASE_MAP_END // {{ TCW_TEST_CASE_MAP(Undo) //-------------------------------------------------------------------- // @class Tests Notifications for IRowsetUpdate::Undo // class Undo : public CExecutionManager { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(Undo,CExecutionManager); // }} TCW_DECLARE_FUNCS_END // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // {{ TCW_TESTVARS() // @cmember ROW_UNDOCHANGE - Accept all phases int Variation_1(); // @cmember Empty int Variation_2(); // @cmember Empty int Variation_3(); // @cmember ROW_UNDOCHANGE - DB_E_CANCELED int Variation_4(); // @cmember ROW_UNDOCHANGE - DB_E_NOTREENTRANT int Variation_5(); // @cmember Empty int Variation_6(); // @cmember Empty int Variation_7(); // @cmember ROW_UNDOCHANGE - Veto OKTODO int Variation_8(); // @cmember ROW_UNDOCHANGE - Veto ABOUTTODO int Variation_9(); // @cmember ROW_UNDOCHANGE - Veto SYNCHAFTER int Variation_10(); // @cmember ROW_UNDOCHANGE - Veto DIDEVENT int Variation_11(); // @cmember ROW_UNDOCHANGE - Veto FAILEDTODO int Variation_12(); // @cmember Empty int Variation_13(); // @cmember Empty int Variation_14(); // @cmember ROW_UNDOCHANGE - UNWANTED REASON int Variation_15(); // @cmember ROW_UNDOCHANGE - UNWANTED PHASE OKTODO int Variation_16(); // @cmember ROW_UNDOCHANGE - UNWANTED PHASE ABOUTTODO int Variation_17(); // @cmember ROW_UNDOCHANGE - UNWANTED PHASE SYNCHAFTER int Variation_18(); // @cmember ROW_UNDOCHANGE - UNWANTED PHASE DIDEVENT int Variation_19(); // @cmember ROW_UNDOCHANGE - UNWANTED PHASE FAILEDTODO int Variation_20(); // @cmember Empty int Variation_21(); // @cmember Empty int Variation_22(); // @cmember ROW_UNDOCHANGE - E_FAIL - All Phases int Variation_23(); // @cmember ROW_UNDOCHANGE - E_OUTOFMEMORY - All Phases int Variation_24(); // @cmember ROW_UNDOCHANGE - E_INVALIDARG - All Phases int Variation_25(); // @cmember Empty int Variation_26(); // @cmember Empty int Variation_27(); // @cmember ROW_UNDOINSERT - Accept all phases int Variation_28(); // @cmember Empty int Variation_29(); // @cmember Empty int Variation_30(); // @cmember ROW_UNDOINSERT - DB_E_CANCELED int Variation_31(); // @cmember ROW_UNDOINSERT - DB_E_NOTREENTRANT int Variation_32(); // @cmember Empty int Variation_33(); // @cmember Empty int Variation_34(); // @cmember ROW_UNDOINSERT - Veto OKTODO int Variation_35(); // @cmember ROW_UNDOINSERT - Veto ABOUTTODO int Variation_36(); // @cmember ROW_UNDOINSERT - Veto SYNCHAFTER int Variation_37(); // @cmember ROW_UNDOINSERT - Veto DIDEVENT int Variation_38(); // @cmember ROW_UNDOINSERT - Veto FAILEDTODO int Variation_39(); // @cmember Empty int Variation_40(); // @cmember ROW_UNDOINSERT - UNWANTED REASON int Variation_41(); // @cmember ROW_UNDOINSERT - UNWANTED PHASE OKTODO int Variation_42(); // @cmember ROW_UNDOINSERT - UNWANTED PHASE ABOUTTO int Variation_43(); // @cmember ROW_UNDOINSERT - UNWANTED PHASE SYNCHAFTER int Variation_44(); // @cmember ROW_UNDOINSERT- UNWANTED PHASE DIDEVENT int Variation_45(); // @cmember ROW_UNDOINSERT - UNWANTED PHASE FAILEDTODO int Variation_46(); // @cmember Empty int Variation_47(); // @cmember Empty int Variation_48(); // @cmember ROW_UNDOINSERT - E_FAIL - All Phases int Variation_49(); // @cmember ROW_UNDOINSERT - E_OUTOFMEMORY - All Phases int Variation_50(); // @cmember ROW_UNDOINSERT - E_INVALIDARG - All Phases int Variation_51(); // @cmember Empty int Variation_52(); // @cmember Empty int Variation_53(); // @cmember ROW_UNDODELETE - Accept all phases int Variation_54(); // @cmember Empty int Variation_55(); // @cmember Empty int Variation_56(); // @cmember ROW_UNDODELETE - DB_E_CANCELED int Variation_57(); // @cmember ROW_UNDODELETE - DB_E_NOTREENTRANT int Variation_58(); // @cmember Empty int Variation_59(); // @cmember Empty int Variation_60(); // @cmember ROW_UNDODELETE - Veto OKTODO int Variation_61(); // @cmember ROW_UNDODELETE - Veto ABOUTTODO int Variation_62(); // @cmember ROW_UNDODELETE - Veto SYNCHAFTER int Variation_63(); // @cmember ROW_UNDODELETE - Veto DIDEVENT int Variation_64(); // @cmember ROW_UNDODELETE - Veto FAILEDTODO int Variation_65(); // @cmember Empty int Variation_66(); // @cmember Empty int Variation_67(); // @cmember ROW_UNDODELETE - UNWANTED REASON int Variation_68(); // @cmember ROW_UNDODELETE - UNWANTED PHASE OKTODO int Variation_69(); // @cmember ROW_UNDODELETE - UNWANTED PHASE ABOUTTODO int Variation_70(); // @cmember ROW_UNDODELETE - UNWANTED PHASE SYNCHAFTER int Variation_71(); // @cmember ROW_UNDODELETE - UNWANTED PHASE DIDEVENT int Variation_72(); // @cmember ROW_UNDODELETE - UNWANTED PHASE FAILEDTODO int Variation_73(); // @cmember Empty int Variation_74(); // @cmember Empty int Variation_75(); // @cmember ROW_UNDODELETE - E_FAIL - All Phases int Variation_76(); // @cmember ROW_UNDODELETE - E_OUTOFMEMORY - All Phases int Variation_77(); // @cmember ROW_UNDODELETE - E_INVALIDARG - All Phases int Variation_78(); // @cmember Empty int Variation_79(); // @cmember Empty int Variation_80(); // @cmember OTHER SCENARIOS - Undo unchanged row int Variation_81(); // @cmember OTHER SCENARIOS - Undo all rows int Variation_82(); // @cmember OTHER SCENARIOS - Undo changed and unchanged int Variation_83(); // @cmember Empty int Variation_84(); // @cmember OTHER SCENARIOS - Verify Undo clears the FIRSTCHANGE status int Variation_85(); // @cmember Empty int Variation_86(); // @cmember OTHER SCENARIOS - DBROWSTATUS_E_INVALID int Variation_87(); // @cmember OTHER SCENARIOS - EmptyRowset int Variation_88(); // @cmember OTHER SCENARIOS - Add/Remove Listeners int Variation_89(); // @cmember OTHER SCENARIOS - GetData int Variation_90(); // @cmember OTHER SCENARIOS - GetOriginalData int Variation_91(); // }} TCW_TESTVARS_END }; // {{ TCW_TESTCASE(Undo) #define THE_CLASS Undo BEG_TEST_CASE(Undo, CExecutionManager, L"Tests Notifications for IRowsetUpdate::Undo") TEST_VARIATION(1, L"ROW_UNDOCHANGE - Accept all phases") TEST_VARIATION(2, L"Empty") TEST_VARIATION(3, L"Empty") TEST_VARIATION(4, L"ROW_UNDOCHANGE - DB_E_CANCELED") TEST_VARIATION(5, L"ROW_UNDOCHANGE - DB_E_NOTREENTRANT") TEST_VARIATION(6, L"Empty") TEST_VARIATION(7, L"Empty") TEST_VARIATION(8, L"ROW_UNDOCHANGE - Veto OKTODO") TEST_VARIATION(9, L"ROW_UNDOCHANGE - Veto ABOUTTODO") TEST_VARIATION(10, L"ROW_UNDOCHANGE - Veto SYNCHAFTER") TEST_VARIATION(11, L"ROW_UNDOCHANGE - Veto DIDEVENT") TEST_VARIATION(12, L"ROW_UNDOCHANGE - Veto FAILEDTODO") TEST_VARIATION(13, L"Empty") TEST_VARIATION(14, L"Empty") TEST_VARIATION(15, L"ROW_UNDOCHANGE - UNWANTED REASON") TEST_VARIATION(16, L"ROW_UNDOCHANGE - UNWANTED PHASE OKTODO") TEST_VARIATION(17, L"ROW_UNDOCHANGE - UNWANTED PHASE ABOUTTODO") TEST_VARIATION(18, L"ROW_UNDOCHANGE - UNWANTED PHASE SYNCHAFTER") TEST_VARIATION(19, L"ROW_UNDOCHANGE - UNWANTED PHASE DIDEVENT") TEST_VARIATION(20, L"ROW_UNDOCHANGE - UNWANTED PHASE FAILEDTODO") TEST_VARIATION(21, L"Empty") TEST_VARIATION(22, L"Empty") TEST_VARIATION(23, L"ROW_UNDOCHANGE - E_FAIL - All Phases") TEST_VARIATION(24, L"ROW_UNDOCHANGE - E_OUTOFMEMORY - All Phases") TEST_VARIATION(25, L"ROW_UNDOCHANGE - E_INVALIDARG - All Phases") TEST_VARIATION(26, L"Empty") TEST_VARIATION(27, L"Empty") TEST_VARIATION(28, L"ROW_UNDOINSERT - Accept all phases") TEST_VARIATION(29, L"Empty") TEST_VARIATION(30, L"Empty") TEST_VARIATION(31, L"ROW_UNDOINSERT - DB_E_CANCELED") TEST_VARIATION(32, L"ROW_UNDOINSERT - DB_E_NOTREENTRANT") TEST_VARIATION(33, L"Empty") TEST_VARIATION(34, L"Empty") TEST_VARIATION(35, L"ROW_UNDOINSERT - Veto OKTODO") TEST_VARIATION(36, L"ROW_UNDOINSERT - Veto ABOUTTODO") TEST_VARIATION(37, L"ROW_UNDOINSERT - Veto SYNCHAFTER") TEST_VARIATION(38, L"ROW_UNDOINSERT - Veto DIDEVENT") TEST_VARIATION(39, L"ROW_UNDOINSERT - Veto FAILEDTODO") TEST_VARIATION(40, L"Empty") TEST_VARIATION(41, L"ROW_UNDOINSERT - UNWANTED REASON") TEST_VARIATION(42, L"ROW_UNDOINSERT - UNWANTED PHASE OKTODO") TEST_VARIATION(43, L"ROW_UNDOINSERT - UNWANTED PHASE ABOUTTO") TEST_VARIATION(44, L"ROW_UNDOINSERT - UNWANTED PHASE SYNCHAFTER") TEST_VARIATION(45, L"ROW_UNDOINSERT- UNWANTED PHASE DIDEVENT") TEST_VARIATION(46, L"ROW_UNDOINSERT - UNWANTED PHASE FAILEDTODO") TEST_VARIATION(47, L"Empty") TEST_VARIATION(48, L"Empty") TEST_VARIATION(49, L"ROW_UNDOINSERT - E_FAIL - All Phases") TEST_VARIATION(50, L"ROW_UNDOINSERT - E_OUTOFMEMORY - All Phases") TEST_VARIATION(51, L"ROW_UNDOINSERT - E_INVALIDARG - All Phases") TEST_VARIATION(52, L"Empty") TEST_VARIATION(53, L"Empty") TEST_VARIATION(54, L"ROW_UNDODELETE - Accept all phases") TEST_VARIATION(55, L"Empty") TEST_VARIATION(56, L"Empty") TEST_VARIATION(57, L"ROW_UNDODELETE - DB_E_CANCELED") TEST_VARIATION(58, L"ROW_UNDODELETE - DB_E_NOTREENTRANT") TEST_VARIATION(59, L"Empty") TEST_VARIATION(60, L"Empty") TEST_VARIATION(61, L"ROW_UNDODELETE - Veto OKTODO") TEST_VARIATION(62, L"ROW_UNDODELETE - Veto ABOUTTODO") TEST_VARIATION(63, L"ROW_UNDODELETE - Veto SYNCHAFTER") TEST_VARIATION(64, L"ROW_UNDODELETE - Veto DIDEVENT") TEST_VARIATION(65, L"ROW_UNDODELETE - Veto FAILEDTODO") TEST_VARIATION(66, L"Empty") TEST_VARIATION(67, L"Empty") TEST_VARIATION(68, L"ROW_UNDODELETE - UNWANTED REASON") TEST_VARIATION(69, L"ROW_UNDODELETE - UNWANTED PHASE OKTODO") TEST_VARIATION(70, L"ROW_UNDODELETE - UNWANTED PHASE ABOUTTODO") TEST_VARIATION(71, L"ROW_UNDODELETE - UNWANTED PHASE SYNCHAFTER") TEST_VARIATION(72, L"ROW_UNDODELETE - UNWANTED PHASE DIDEVENT") TEST_VARIATION(73, L"ROW_UNDODELETE - UNWANTED PHASE FAILEDTODO") TEST_VARIATION(74, L"Empty") TEST_VARIATION(75, L"Empty") TEST_VARIATION(76, L"ROW_UNDODELETE - E_FAIL - All Phases") TEST_VARIATION(77, L"ROW_UNDODELETE - E_OUTOFMEMORY - All Phases") TEST_VARIATION(78, L"ROW_UNDODELETE - E_INVALIDARG - All Phases") TEST_VARIATION(79, L"Empty") TEST_VARIATION(80, L"Empty") TEST_VARIATION(81, L"OTHER SCENARIOS - Undo unchanged row") TEST_VARIATION(82, L"OTHER SCENARIOS - Undo all rows") TEST_VARIATION(83, L"OTHER SCENARIOS - Undo changed and unchanged") TEST_VARIATION(84, L"Empty") TEST_VARIATION(85, L"OTHER SCENARIOS - Verify Undo clears the FIRSTCHANGE status") TEST_VARIATION(86, L"Empty") TEST_VARIATION(87, L"OTHER SCENARIOS - DBROWSTATUS_E_INVALID") TEST_VARIATION(88, L"OTHER SCENARIOS - EmptyRowset") TEST_VARIATION(89, L"OTHER SCENARIOS - Add/Remove Listeners") TEST_VARIATION(90, L"OTHER SCENARIOS - GetData") TEST_VARIATION(91, L"OTHER SCENARIOS - GetOriginalData") END_TEST_CASE() #undef THE_CLASS // }} TCW_TESTCASE_END // }} TCW_TEST_CASE_MAP_END // {{ TCW_TEST_CASE_MAP(Update) //-------------------------------------------------------------------- // @class Tests Notifications for IRowsetUpdate::Update // class Update : public CExecutionManager { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(Update,CExecutionManager); // }} TCW_DECLARE_FUNCS_END // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // {{ TCW_TESTVARS() // @cmember ROW_UPDATE - Accept all phases int Variation_1(); // @cmember Empty int Variation_2(); // @cmember Empty int Variation_3(); // @cmember ROW_UPDATE - DB_E_CANCELED int Variation_4(); // @cmember ROW_UPDATE - DB_E_NOTREENTRANT int Variation_5(); // @cmember Empty int Variation_6(); // @cmember Empty int Variation_7(); // @cmember ROW_UPDATE - Veto OKTODO int Variation_8(); // @cmember ROW_UPDATE - Veto ABOUTTODO int Variation_9(); // @cmember ROW_UPDATE - Veto SYNCHAFTER int Variation_10(); // @cmember ROW_UPDATE - Veto DIDEVENT int Variation_11(); // @cmember ROW_UPDATE - Veto FAILEDTODO int Variation_12(); // @cmember Empty int Variation_13(); // @cmember Empty int Variation_14(); // @cmember ROW_UPDATE - UNWANTED REASON int Variation_15(); // @cmember ROW_UPDATE - UNWANTED PHASE - OKTODO int Variation_16(); // @cmember ROW_UPDATE - UNWANTED PHASE - ABOUTTODO int Variation_17(); // @cmember ROW_UPDATE - UNWANTED PHASE - SYNCHAFTER int Variation_18(); // @cmember ROW_UPDATE - UNWANTED PHASE - DIDEVENT int Variation_19(); // @cmember ROW_UPDATE - UNWANTED PHASE - FAILEDTODO int Variation_20(); // @cmember Empty int Variation_21(); // @cmember Empty int Variation_22(); // @cmember ROW_UPDATE - E_FAIL - All Phases int Variation_23(); // @cmember ROW_UPDATE - E_OUTOFMEMORY - All Phases int Variation_24(); // @cmember ROW_UPDATE - E_INVALIDARG - All Phases int Variation_25(); // @cmember Empty int Variation_26(); // @cmember Empty int Variation_27(); // @cmember OTHER SCENARIOS - Update all [no changes] int Variation_28(); // @cmember OTHER SCENARIOS - Update all [changes] int Variation_29(); // @cmember OTHER SCENARIOS - Update changed and unchanged int Variation_30(); // @cmember Empty int Variation_31(); // @cmember OTHER SCENARIOS - Verify Update clears FIRSTCHANGE status int Variation_32(); // @cmember Empty int Variation_33(); // @cmember OTHER SCENARIOS - DBROWSTATUS_E_INVALID int Variation_34(); // @cmember OTHER SCENARIOS - EmptyRowset int Variation_35(); // @cmember OTHER SCENARIOS - Add/Remove Listeners int Variation_36(); // @cmember OTHER SCENARIOS - GetData int Variation_37(); // @cmember OTHER SCENARIOS - GetOriginalData int Variation_38(); // }} TCW_TESTVARS_END }; // {{ TCW_TESTCASE(Update) #define THE_CLASS Update BEG_TEST_CASE(Update, CExecutionManager, L"Tests Notifications for IRowsetUpdate::Update") TEST_VARIATION(1, L"ROW_UPDATE - Accept all phases") TEST_VARIATION(2, L"Empty") TEST_VARIATION(3, L"Empty") TEST_VARIATION(4, L"ROW_UPDATE - DB_E_CANCELED") TEST_VARIATION(5, L"ROW_UPDATE - DB_E_NOTREENTRANT") TEST_VARIATION(6, L"Empty") TEST_VARIATION(7, L"Empty") TEST_VARIATION(8, L"ROW_UPDATE - Veto OKTODO") TEST_VARIATION(9, L"ROW_UPDATE - Veto ABOUTTODO") TEST_VARIATION(10, L"ROW_UPDATE - Veto SYNCHAFTER") TEST_VARIATION(11, L"ROW_UPDATE - Veto DIDEVENT") TEST_VARIATION(12, L"ROW_UPDATE - Veto FAILEDTODO") TEST_VARIATION(13, L"Empty") TEST_VARIATION(14, L"Empty") TEST_VARIATION(15, L"ROW_UPDATE - UNWANTED REASON") TEST_VARIATION(16, L"ROW_UPDATE - UNWANTED PHASE - OKTODO") TEST_VARIATION(17, L"ROW_UPDATE - UNWANTED PHASE - ABOUTTODO") TEST_VARIATION(18, L"ROW_UPDATE - UNWANTED PHASE - SYNCHAFTER") TEST_VARIATION(19, L"ROW_UPDATE - UNWANTED PHASE - DIDEVENT") TEST_VARIATION(20, L"ROW_UPDATE - UNWANTED PHASE - FAILEDTODO") TEST_VARIATION(21, L"Empty") TEST_VARIATION(22, L"Empty") TEST_VARIATION(23, L"ROW_UPDATE - E_FAIL - All Phases") TEST_VARIATION(24, L"ROW_UPDATE - E_OUTOFMEMORY - All Phases") TEST_VARIATION(25, L"ROW_UPDATE - E_INVALIDARG - All Phases") TEST_VARIATION(26, L"Empty") TEST_VARIATION(27, L"Empty") TEST_VARIATION(28, L"OTHER SCENARIOS - Update all [no changes]") TEST_VARIATION(29, L"OTHER SCENARIOS - Update all [changes]") TEST_VARIATION(30, L"OTHER SCENARIOS - Update changed and unchanged") TEST_VARIATION(31, L"Empty") TEST_VARIATION(32, L"OTHER SCENARIOS - Verify Update clears FIRSTCHANGE status") TEST_VARIATION(33, L"Empty") TEST_VARIATION(34, L"OTHER SCENARIOS - DBROWSTATUS_E_INVALID") TEST_VARIATION(35, L"OTHER SCENARIOS - EmptyRowset") TEST_VARIATION(36, L"OTHER SCENARIOS - Add/Remove Listeners") TEST_VARIATION(37, L"OTHER SCENARIOS - GetData") TEST_VARIATION(38, L"OTHER SCENARIOS - GetOriginalData") END_TEST_CASE() #undef THE_CLASS // }} TCW_TESTCASE_END // }} TCW_TEST_CASE_MAP_END // }} END_DECLARE_TEST_CASES() // {{ TCW_TESTMODULE(ThisModule) TEST_MODULE(18, ThisModule, gwszModuleDescrip) TEST_CASE(1, Release) TEST_CASE(2, GetNextRows) TEST_CASE(3, ReleaseRows) TEST_CASE(4, RestartPosition) TEST_CASE(5, Seek) TEST_CASE(6, GetRowsAt) TEST_CASE(7, GetRowsByBookmark) TEST_CASE(8, GetRowsAtRatio) TEST_CASE(9, DeleteRows) TEST_CASE(10, DeleteRows_Bufferred) TEST_CASE(11, InsertRow) TEST_CASE(12, InsertRow_Bufferred) TEST_CASE(13, SetData) TEST_CASE(14, SetData_Bufferred) TEST_CASE(15, Resynch) TEST_CASE(16, Resynch_Bufferred) TEST_CASE(17, Undo) TEST_CASE(18, Update) END_TEST_MODULE() // }} TCW_TESTMODULE_END // {{ TCW_TC_PROTOTYPE(Release) //*----------------------------------------------------------------------- //| Test Case: Release - Tests Notifications for IRowset::Release //| Created: 09/29/96 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Release::Init() { // {{ TCW_INIT_BASECLASS_CHECK if(CExecutionManager::Init()) // }} { //Verify Rowset can be created... if(CreateRowset(DEFAULT_ROWSET)==S_OK) return TRUE; } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc ROWSET_RELEASE - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int Release::Variation_1() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::Release() {} }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Release::Variation_2() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Release::Variation_3() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc ROWSET_RELEASE - DB_E_CANCELED // // @rdesc TEST_PASS or TEST_FAIL // int Release::Variation_4() { //Cannot "successfully" Veto DIDEVENT, so there is no use trying to //use the rowset after Release() since it will no longer be valid WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::Release() " L" {L1.ROWSET_RELEASE.DIDEVENT.RETURN_VETO } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc ROWSET_RELEASE - DB_E_NOTREENTRANT // // @rdesc TEST_PASS or TEST_FAIL // int Release::Variation_5() { //This really isn't a good senario to be testing DB_E_NOTREENTRANT //Once the rowset sends DIDEVENT for IRowset::Release() its fairly dangerous //to do anything!! WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::Release() " L" {L1.ROWSET_RELEASE.DIDEVENT.RETURN_ACCEPT } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(6) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Release::Variation_6() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(7) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Release::Variation_7() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(8) //*----------------------------------------------------------------------- // @mfunc ROWSET_RELEASE - Veto DIDEVENT, Listener 1 // // @rdesc TEST_PASS or TEST_FAIL // int Release::Variation_8() { //Cannot "successfully" Veto DIDEVENT, so there is no use trying to //use the rowset after Release() since it will no longer be valid WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::Release() " L" {L1.ROWSET_RELEASE.DIDEVENT.RETURN_VETO } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(9) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Release::Variation_9() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(10) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Release::Variation_10() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(11) //*----------------------------------------------------------------------- // @mfunc ROWSET_RELEASE - UNWANTED REASON // // @rdesc TEST_PASS or TEST_FAIL // int Release::Variation_11() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::Release() " L" {L1.ROWSET_RELEASE.DIDEVENT.RETURN_UNWANTEDREASON } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(12) //*----------------------------------------------------------------------- // @mfunc ROWSET_RELEASE - UNWANTED PHASE - DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int Release::Variation_12() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::Release() " L" {L1.ROWSET_RELEASE.DIDEVENT.RETURN_UNWANTEDPHASE } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(13) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Release::Variation_13() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(14) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Release::Variation_14() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(15) //*----------------------------------------------------------------------- // @mfunc ROWSET_RELEASE - E_FAIL - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int Release::Variation_15() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::Release() " L" {L1.ROWSET_RELEASE.DIDEVENT.RETURN_EFAIL } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(16) //*----------------------------------------------------------------------- // @mfunc ROWSET_RELEASE - E_OUTOFMEMORY - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int Release::Variation_16() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::Release() " L" {L1.ROWSET_RELEASE.DIDEVENT.RETURN_EOUTOFMEMORY } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(17) //*----------------------------------------------------------------------- // @mfunc ROWSET_RELEASE - E_INVALIDARG - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int Release::Variation_17() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::Release() " L" {L1.ROWSET_RELEASE.DIDEVENT.RETURN_EINVALIDARG } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(18) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Release::Variation_18() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(19) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Release::Variation_19() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(20) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - AddRef - Release - no notifications // // @rdesc TEST_PASS or TEST_FAIL // int Release::Variation_20() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::AddRef() {} " L" IRowset::Release() {} " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(21) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - EmptyRowset // // @rdesc TEST_PASS or TEST_FAIL // int Release::Variation_21() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::Release() " L" {L1.ROWSET_RELEASE.DIDEVENT.RETURN_ACCEPT } " L" }" L" }" L"}"; return Execute(CommandString, EMPTY_ROWSET | DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(22) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Remove Listeners // // @rdesc TEST_PASS or TEST_FAIL // int Release::Variation_22() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::Release() " L" {" // L" L1.ROWSET_RELEASE.DIDEVENT.RETURN_UNADVISE " // L" L2.ROWSET_RELEASE.DIDEVENT.RETURN_UNADVISE " L" }" L" }" L" }" L"}"; //NOTE: On ROWSET_RELEASE notification the rowset pointer is already released. //So trying to QI for IConnectionPointContainer to advise/unadvise listeners may crash //and is considered a user programming error... return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(23) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Add Listeners // // @rdesc TEST_PASS or TEST_FAIL // int Release::Variation_23() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::Release() " L" {" // L" L1.ROWSET_RELEASE.DIDEVENT.RETURN_ADVISE " // L" L2.ROWSET_RELEASE.DIDEVENT.RETURN_ADVISE " L" }" L" }" L" }" L"}"; //NOTE: On ROWSET_RELEASE notification the rowset pointer is already released. //So trying to QI for IConnectionPointContainer to advise/unadvise listeners may crash //and is considered a user programming error... return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Release::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CExecutionManager::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(GetNextRows) //*----------------------------------------------------------------------- //| Test Case: GetNextRows - Tests Notifications for IRowset::GetNextRows //| Created: 09/27/96 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL GetNextRows::Init() { // {{ TCW_INIT_BASECLASS_CHECK if(CExecutionManager::Init()) // }} { //Verify Rowset can be created... if(CreateRowset(DEFAULT_ROWSET)==S_OK) return TRUE; } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - SINGLEROW - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_1() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::GetNextRows(A) {} }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - MULTIPLEROWS - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_2() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::GetNextRows(A,B,C) {} } " L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_3() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_4() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - DB_E_CANCELED // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_5() { //Verify the FetchPosition did not change when the Veto occurs. //Obtain the first row and veto. If method actually succeeds, the next //GetNextRows will fail since it thinks that row has already been retreived... WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A) " L" {L1.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_VETO} " L" IRowset::GetNextRows(A) " L" {L1.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_ACCEPT} " L" }" L" }" L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROWSET_FETCHPOSITIONCHANGE, DBEVENTPHASE_ABOUTTODO)); TESTC(Execute(CommandString, DEFAULT_ROWSET)); CLEANUP: TRETURN; } // }} // {{ TCW_VAR_PROTOTYPE(6) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - DB_E_NOTREENTRANT // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_6() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::GetNextRows(A,B) " L" {L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.IRowset::GetNextRows(C,D,DB_E_NOTREENTRANT) {} }" L" } " L" } " L"} "; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(7) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - DB_E_NOTREENTRANT - Non-notification method // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_7() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::GetNextRows(A,B) " // L" {L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.IColumnsInfo::GetColumnInfo(DB_E_NOTREENTRANT){}}" L" {L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.Thread{IColumnsInfo::GetColumnInfo(DB_E_NOTREENTRANT){}} }" L" } " L" } " L"} "; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(8) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_8() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(9) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - Veto OKTODO, Listener 1 // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_9() { //Have L1 VETO the change on the OKTODO phase WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::GetNextRows(A,B) " L" {L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.RETURN_VETO} " L" } " L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(10) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - Veto ABOUTTODO, Listener 1 // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_10() { //Have L1 VETO the change on the ABOUTTODO phase WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::GetNextRows(A,B) " L" {L1.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_VETO} " L" } " L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(11) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - Veto SYNCHAFTER, Listener 1 // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_11() { //Have L1 VETO the change on the SYNCHAFTER phase WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::GetNextRows(A,B) " L" {L1.ROWSET_FETCHPOSITIONCHANGE.SYNCHAFTER.RETURN_VETO} " L" } " L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(12) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - Veto DIDEVENT, Listener 1 // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_12() { //Have L1 VETO the change on the DIDEVENT phase WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::GetNextRows(A,B) " L" {L1.ROWSET_FETCHPOSITIONCHANGE.DIDEVENT.RETURN_VETO} " L" } " L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(13) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - Veto FAILEDTODO, Listener 1 // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_13() { //Have L1 VETO the change on the OKTODO phase //Then try and have it VETO the FAILEDTODO phase as well! WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::GetNextRows(A,B) " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_VETO " L" L1.ROWSET_FETCHPOSITIONCHANGE.FAILEDTODO.RETURN_VETO " L" } " L" } " L" }" L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROWSET_FETCHPOSITIONCHANGE, DBEVENTPHASE_ABOUTTODO)); TESTC(Execute(CommandString, DEFAULT_ROWSET)); CLEANUP: TRETURN; } // }} // {{ TCW_VAR_PROTOTYPE(14) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - Veto OKTODO, Listener 2 // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_14() { //Have L2 VETO the change on the OKTODO phase WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::GetNextRows(A,B) " L" {L2.ROWSET_FETCHPOSITIONCHANGE.OKTODO.RETURN_VETO} " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(15) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - Veto ABOUTTODO, Listener 2 // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_15() { //Have L2 VETO the change on the ABOUTTODO phase WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::GetNextRows(A,B) " L" {L2.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_VETO} " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(16) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - Veto SYNCHAFTER, Listener 3 // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_16() { //Have L3 VETO the change on the SYNCHAFTER phase WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::GetNextRows(A,B) " L" {L3.ROWSET_FETCHPOSITIONCHANGE.SYNCHAFTER.RETURN_VETO} " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(17) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_17() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(18) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_18() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(19) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - UNWANTED REASON // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_19() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::GetNextRows(A) " L" {L3.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_UNWANTEDREASON} " L" IRowset::GetNextRows(B) {} " L" } " L" } " L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(20) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - UNWANTED PHASE - OKTODO // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_20() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::GetNextRows(A) " L" {L3.ROWSET_FETCHPOSITIONCHANGE.OKTODO.RETURN_UNWANTEDPHASE} " L" IRowset::GetNextRows(B) {} " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(21) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - UNWANTED PHASE - ABOUTTODO // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_21() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::GetNextRows(A) " L" {L3.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_UNWANTEDPHASE} " L" IRowset::GetNextRows(B) {} " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(22) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - UNWANTED PHASE - SYNCHAFTER // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_22() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::GetNextRows(A) " L" {L3.ROWSET_FETCHPOSITIONCHANGE.SYNCHAFTER.RETURN_UNWANTEDPHASE} " L" IRowset::GetNextRows(B) {} " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(23) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - UNWANTED PHASE - DIDENVENT // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_23() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::GetNextRows(A) " L" {L3.ROWSET_FETCHPOSITIONCHANGE.DIDEVENT.RETURN_UNWANTEDPHASE} " L" IRowset::GetNextRows(B) {} " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(24) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - UNWANTED PHASE - FAILEDTODO // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_24() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::GetNextRows(A) " L" {" L" L3.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_VETO " L" L3.ROWSET_FETCHPOSITIONCHANGE.FAILEDTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowset::GetNextRows(B) {} " L" }" L" }" L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROWSET_FETCHPOSITIONCHANGE, DBEVENTPHASE_ABOUTTODO)); TESTC(Execute(CommandString, DEFAULT_ROWSET)); CLEANUP: TRETURN; } // }} // {{ TCW_VAR_PROTOTYPE(25) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_25() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(26) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_26() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(27) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - E_FAIL - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_27() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::GetNextRows(A) " L" {" L" L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.RETURN_EFAIL " L" L2.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_EFAIL " L" L3.ROWSET_FETCHPOSITIONCHANGE.SYNCHAFTER.RETURN_EFAIL " L" L1.ROWSET_FETCHPOSITIONCHANGE.DIDEVENT.RETURN_EFAIL " L" } " L" IRowset::GetNextRows(B) " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(28) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - E_OUTOFMEMORY - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_28() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::GetNextRows(A) " L" {" L" L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.RETURN_EOUTOFMEMORY " L" L2.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_EOUTOFMEMORY " L" L3.ROWSET_FETCHPOSITIONCHANGE.SYNCHAFTER.RETURN_EOUTOFMEMORY " L" L1.ROWSET_FETCHPOSITIONCHANGE.DIDEVENT.RETURN_EOUTOFMEMORY " L" } " L" IRowset::GetNextRows(B) " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(29) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - E_INVALIDARG - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_29() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::GetNextRows(A) " L" {" L" L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.RETURN_EINVALIDARG " L" L2.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_EINVALIDARG " L" L3.ROWSET_FETCHPOSITIONCHANGE.SYNCHAFTER.RETURN_EINVALIDARG " L" L1.ROWSET_FETCHPOSITIONCHANGE.DIDEVENT.RETURN_EINVALIDARG " L" } " L" IRowset::GetNextRows(B) " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(30) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_30() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(31) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_31() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(32) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - SINGLEROW - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_32() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::GetNextRows(A) {} }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(33) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - MULTIPLEROWS - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_33() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::GetNextRows(A,B,C) {} }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(34) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_34() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(35) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_35() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(36) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - DB_E_CANCELED // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_36() { //Cannot "successfully" veto DIDEVENT, so there is really nothing //to test on the Veto, besides making sure they are valid row //handles, which is the purpose of the GetData's WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) " L" {L3.ROW_ACTIVATE.DIDEVENT.RETURN_VETO} " L" IRowset::GetData(A) {} " L" IRowset::GetData(B) {} " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(37) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - DB_E_NOTREENTRANT // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_37() { //Have L1 Call GetNextRows on the DIDEVENT phase WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::GetNextRows(A,B) " L" {" L" L3.ROW_ACTIVATE.DIDEVENT.IRowset::GetNextRows(C,D,DB_E_NOTREENTRANT) {} " L" }" L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(38) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_38() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(39) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_39() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(40) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - Veto DIDEVENT, Listener 1 // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_40() { //Have L1 VETO the change on the DIDEVENT phase WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::GetNextRows(A,B) " L" {" L" L3.ROW_ACTIVATE.DIDEVENT.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(41) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_41() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(42) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_42() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(43) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - UNWANTED REASON // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_43() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {L3.ROW_ACTIVATE.DIDEVENT.RETURN_UNWANTEDREASON} " L" IRowset::GetNextRows(C,D) {} " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(44) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - UNWANTED PHASE - DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_44() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {L3.ROW_ACTIVATE.DIDEVENT.RETURN_UNWANTEDPHASE} " L" IRowset::GetNextRows(C,D) {} " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(45) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_45() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(46) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_46() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(47) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - E_FAIL - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_47() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::GetNextRows(A) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_EFAIL " L" } " L" IRowset::GetNextRows(B) " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(48) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - E_OUTOFMEMORY - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_48() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::GetNextRows(A) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_EOUTOFMEMORY " L" } " L" IRowset::GetNextRows(B) " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(49) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - E_INVALIDARG - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_49() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::GetNextRows(A) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_EINVALIDARG " L" } " L" IRowset::GetNextRows(B) " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(50) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_50() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(51) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_51() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(52) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Fetch no rows - no notifications // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_52() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows() " L" { " L" } " L" IRowset::GetNextRows() " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(53) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Fetch A, Fetch A again // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_53() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::GetNextRows(A) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_ACCEPT " L" } " L" IRowset::RestartPosition() {} " L" IRowset::GetNextRows(A) " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(54) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Fetch A, Fetch A,B // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_54() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::GetNextRows(A) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_ACCEPT " L" } " L" IRowset::RestartPosition() {} " L" IRowset::GetNextRows(A,B) " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(55) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Fetch A, ReleaseRows A, Fetch A // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_55() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::GetNextRows(A) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_ACCEPT " L" } " L" IRowset::ReleaseRows(A) {} " L" IRowset::RestartPosition() {} " L" IRowset::GetNextRows(A) " L" { " L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_ACCEPT " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(56) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_56() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(57) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - DB_S_ENDOFROWSET - 1 more than in rowset // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_57() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(DB_S_ENDOFROWSET) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_ACCEPT " L" }" L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(58) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - DB_S_ENDOFROWSET - 1 more at end of rowset // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_58() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(DB_S_ENDOFROWSET) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_ACCEPT " L" }" L" IRowset::GetNextRows(A, DB_S_ENDOFROWSET) " L" {" L" }" L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(59) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - DB_S_ENDOFROWSET - Stepping backward // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_59() { //TODO need some way to step backward? WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(DB_S_ENDOFROWSET) " L" {" L" }" L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(60) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_60() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(61) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - DB_E_BADSTARTPOSITION // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_61() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A, DB_E_BADSTARTPOSITION) " L" {" L" }" L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(62) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - E_INVALIDARG // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_62() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(E_INVALIDARG) " L" {" L" }" L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(63) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - EmptyRowset // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_63() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(DB_S_ENDOFROWSET) " L" {" L" }" L" }" L" }" L"}"; return Execute(CommandString, EMPTY_ROWSET | DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(64) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Remove Listeners // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_64() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::GetNextRows(A) " L" {" L" L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.RETURN_UNADVISE " L" } " L" IRowset::GetNextRows(B) " L" { " L" L3.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_UNADVISE " L" } " L" IRowset::GetNextRows(C) " L" { " L" L2.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_ACCEPT " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(65) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Add Listeners // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_65() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::GetNextRows(A) " L" {" L" L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.RETURN_ADVISE " L" } " L" IRowset::GetNextRows(B) " L" { " L" L3.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_ADVISE " L" } " L" IRowset::GetNextRows(C) " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_ACCEPT " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(66) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - GetData // // @rdesc TEST_PASS or TEST_FAIL // int GetNextRows::Variation_66() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {IRowset::GetNextRows(A) " L" { " L" } " L" IRowset::GetNextRows(B) " L" {" L" L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.IRowset::GetData(A) {} " L" L2.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.IRowset::GetData(A) {} " L" L3.ROWSET_FETCHPOSITIONCHANGE.SYNCHAFTER.IRowset::GetData(A) {} " L" L1.ROWSET_FETCHPOSITIONCHANGE.DIDEVENT.IRowset::GetData(A) {} " L" } " L" IRowset::GetNextRows(C) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.IRowset::GetData(B) {} " L" L2.ROW_ACTIVATE.DIDEVENT.IRowset::GetData(A) {} " L" L3.ROW_ACTIVATE.DIDEVENT.IRowset::GetData(B) {} " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL GetNextRows::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CExecutionManager::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(ReleaseRows) //*----------------------------------------------------------------------- //| Test Case: ReleaseRows - Tests Notifications for IRowset::ReleaseRows //| Created: 09/29/96 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL ReleaseRows::Init() { // {{ TCW_INIT_BASECLASS_CHECK if(CExecutionManager::Init()) // }} { //Verify Rowset can be created... if(CreateRowset(DEFAULT_ROWSET)==S_OK) return TRUE; } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc ROW_RELEASE - SINGLEROW - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int ReleaseRows::Variation_1() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" { " L" IRowset::GetNextRows(A) {} " L" IRowset::ReleaseRows(A) {} " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc ROW_RELEASE - MULTIPLEROWS - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int ReleaseRows::Variation_2() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B,C) {} " L" IRowset::ReleaseRows(A,B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int ReleaseRows::Variation_3() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int ReleaseRows::Variation_4() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc ROW_RELEASE - DB_E_CANCELED - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int ReleaseRows::Variation_5() { //Cannot "sucessfully" Veto a DIDEVENT reason, so just make sure the row //handle is invalid after a veto of ROW_RELEASE WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" { " L" IRowset::GetNextRows(A) {} " L" IRowset::ReleaseRows(A) " L" { " L" L1.ROW_RELEASE.DIDEVENT.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(6) //*----------------------------------------------------------------------- // @mfunc ROW_RELEASE - DB_E_NOTREENTRANT - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int ReleaseRows::Variation_6() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" { " L" IRowset::GetNextRows(A) {} " L" IRowset::ReleaseRows(A) { L1.ROW_RELEASE.DIDEVENT.IRowset::ReleaseRows(A, DB_E_NOTREENTRANT) {} } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(7) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int ReleaseRows::Variation_7() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(8) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int ReleaseRows::Variation_8() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(9) //*----------------------------------------------------------------------- // @mfunc ROW_RELEASE - Veto DIDEVENT, Listener 2 // // @rdesc TEST_PASS or TEST_FAIL // int ReleaseRows::Variation_9() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" { " L" IRowset::GetNextRows(A) {} " L" IRowset::ReleaseRows(A) { L2.ROW_RELEASE.DIDEVENT.RETURN_VETO } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(10) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int ReleaseRows::Variation_10() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(11) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int ReleaseRows::Variation_11() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(12) //*----------------------------------------------------------------------- // @mfunc ROW_RELEASE - UNWANTED REASON // // @rdesc TEST_PASS or TEST_FAIL // int ReleaseRows::Variation_12() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowset::ReleaseRows(A) { L1.ROW_RELEASE.DIDEVENT.RETURN_UNWANTEDREASON } " L" IRowset::ReleaseRows(B) {} " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(13) //*----------------------------------------------------------------------- // @mfunc ROW_RELEASE - UNWANTED PHASE - DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int ReleaseRows::Variation_13() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowset::ReleaseRows(A) { L1.ROW_RELEASE.DIDEVENT.RETURN_UNWANTEDPHASE } " L" IRowset::ReleaseRows(B) {} " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(14) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int ReleaseRows::Variation_14() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(15) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int ReleaseRows::Variation_15() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(16) //*----------------------------------------------------------------------- // @mfunc ROW_RELEASE - E_FAIL - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int ReleaseRows::Variation_16() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowset::ReleaseRows(A) { L1.ROW_RELEASE.DIDEVENT.RETURN_EFAIL } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(17) //*----------------------------------------------------------------------- // @mfunc ROW_RELEASE - E_OUTOFMEMORY - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int ReleaseRows::Variation_17() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowset::ReleaseRows(A) { L1.ROW_RELEASE.DIDEVENT.RETURN_EOUTOFMEMORY } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(18) //*----------------------------------------------------------------------- // @mfunc ROW_RELEASE - E_INVALIDARG - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int ReleaseRows::Variation_18() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowset::ReleaseRows(A) { L1.ROW_RELEASE.DIDEVENT.RETURN_EINVALIDARG } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(19) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int ReleaseRows::Variation_19() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(20) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int ReleaseRows::Variation_20() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(21) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Release 0 rows // // @rdesc TEST_PASS or TEST_FAIL // int ReleaseRows::Variation_21() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowset::ReleaseRows() {} " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(22) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - AddRef Row, ReleaseRows // // @rdesc TEST_PASS or TEST_FAIL // int ReleaseRows::Variation_22() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowset::AddRefRows(A,B) {} " L" IRowset::ReleaseRows(A,B) {} " L" IRowset::ReleaseRows(A,B) " L" {" L" L1.ROW_RELEASE.DIDEVENT.RETURN_ACCEPT " L" }" L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(23) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - ReleaseRow, ReleaseRow // // @rdesc TEST_PASS or TEST_FAIL // int ReleaseRows::Variation_23() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowset::ReleaseRows(A,B) " L" {" L" L1.ROW_RELEASE.DIDEVENT.RETURN_ACCEPT " L" }" L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(24) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - ReleaseRows [valid, invalid] // // @rdesc TEST_PASS or TEST_FAIL // int ReleaseRows::Variation_24() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowset::ReleaseRows(A,B,C,DB_S_ERRORSOCCURRED) " L" {" L" L1.ROW_RELEASE.DIDEVENT.RETURN_ACCEPT " L" }" L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(25) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int ReleaseRows::Variation_25() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(26) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - DBROWSTATUS_S_PENDINGCHANGES // // @rdesc TEST_PASS or TEST_FAIL // int ReleaseRows::Variation_26() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) {} " L" IRowset::ReleaseRows(A) " L" {" L" L1.ROW_RELEASE.DIDEVENT.RETURN_ACCEPT " L" L2.ROW_RELEASE.DIDEVENT.RETURN_ACCEPT " L" L3.ROW_RELEASE.DIDEVENT.RETURN_ACCEPT " L" }" L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(27) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - E_INVALIDARG // // @rdesc TEST_PASS or TEST_FAIL // int ReleaseRows::Variation_27() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowset::ReleaseRows(A, E_INVALIDARG) " L" {" L" }" L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(28) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - EmptyRowset // // @rdesc TEST_PASS or TEST_FAIL // int ReleaseRows::Variation_28() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" { " L" IRowset::ReleaseRows(A,B,C,DB_E_ERRORSOCCURRED) " L" {" L" }" L" }" L" }" L"}"; return Execute(CommandString, EMPTY_ROWSET | DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(29) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Add/Remove Listeners // // @rdesc TEST_PASS or TEST_FAIL // int ReleaseRows::Variation_29() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowset::ReleaseRows(A) " L" {" L" L1.ROW_RELEASE.DIDEVENT.RETURN_UNADVISE " L" } " L" IRowset::ReleaseRows(B) " L" { " L" L2.ROW_RELEASE.DIDEVENT.RETURN_UNADVISE " L" } " L" IRowset::ReleaseRows(C) " L" { " L" L3.ROW_RELEASE.DIDEVENT.RETURN_ACCEPT " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(30) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - GetData // // @rdesc TEST_PASS or TEST_FAIL // int ReleaseRows::Variation_30() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowset::ReleaseRows(A) " L" {" L" L1.ROW_RELEASE.DIDEVENT.IRowset::GetData(B) {} " L" }" L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL ReleaseRows::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CExecutionManager::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(RestartPosition) //*----------------------------------------------------------------------- //| Test Case: RestartPosition - Tests Notificatons for IRowset::RestartPosition //| Created: 09/29/96 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL RestartPosition::Init() { // {{ TCW_INIT_BASECLASS_CHECK if(CExecutionManager::Init()) // }} { //Verify Rowset can be created... if(CreateRowset(DEFAULT_ROWSET)==S_OK) return TRUE; } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_1() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::RestartPosition() {} " L" IRowset::RestartPosition() {} " L" IRowset::RestartPosition() {} " L" IRowset::GetNextRows(A,B) {} " L" IRowset::ReleaseRows(A,B) {} " L" IRowset::RestartPosition() {} " L" IRowset::RestartPosition() {} " L" IRowset::RestartPosition() {} " L" IRowset::RestartPosition() {} " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_2() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_3() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - DB_E_CANCELED // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_4() { //Need to verify the FETCHPOSITION did not get reset since it was veto'd //Read all the rows in the rowset. Then Veto the RestartPostition(). //The next GetNextRows should fail, if the FetchPosition was truly veto'd WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(DB_S_ENDOFROWSET) {} " L" IRowset::RestartPosition() { L2.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_VETO } " L" IRowset::GetNextRows(A, DB_S_ENDOFROWSET) {} " L" }" L" }" L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROWSET_FETCHPOSITIONCHANGE, DBEVENTPHASE_ABOUTTODO)); TESTC(Execute(CommandString, DEFAULT_ROWSET)); CLEANUP: TRETURN } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - DB_E_NOTREENTRANT // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_5() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowset::RestartPosition() " L" { L2.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.IRowset::RestartPosition(DB_E_NOTREENTRANT) {} } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(6) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_6() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(7) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_7() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(8) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - Veto OKTODO // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_8() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowset::RestartPosition() " L" { L2.ROWSET_FETCHPOSITIONCHANGE.OKTODO.RETURN_VETO } " L" }" L" }" L"}"; //TODO need to verify the fetch position does not change! return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(9) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - Veto ABOUTTODO // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_9() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowset::RestartPosition() " L" { L2.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_VETO } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(10) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - Veto SYNCHAFTER // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_10() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowset::RestartPosition() " L" { L2.ROWSET_FETCHPOSITIONCHANGE.SYNCHAFTER.RETURN_VETO } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(11) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - Veto DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_11() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowset::RestartPosition() " L" { L2.ROWSET_FETCHPOSITIONCHANGE.DIDEVENT.RETURN_VETO } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(12) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - Veto FAILEDTODO // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_12() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowset::RestartPosition() " L" { " L" L3.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_VETO " L" L3.ROWSET_FETCHPOSITIONCHANGE.FAILEDTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROWSET_FETCHPOSITIONCHANGE, DBEVENTPHASE_ABOUTTODO)); TESTC(Execute(CommandString, DEFAULT_ROWSET)); CLEANUP: TRETURN } // }} // {{ TCW_VAR_PROTOTYPE(13) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_13() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(14) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_14() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(15) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - UNWANTED REASON // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_15() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowset::RestartPosition() " L" { L3.ROWSET_FETCHPOSITIONCHANGE.OKTODO.RETURN_UNWANTEDREASON } " L" IRowset::GetNextRows(A,B) {} " L" IRowset::RestartPosition() {} " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(16) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - UNWANTED PHASE - OKTODO // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_16() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowset::RestartPosition() " L" { L3.ROWSET_FETCHPOSITIONCHANGE.OKTODO.RETURN_UNWANTEDPHASE } " L" IRowset::GetNextRows(A,B) {} " L" IRowset::RestartPosition() {} " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(17) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - UNWANTED PHASE - ABOUTTODO // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_17() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowset::RestartPosition() " L" { L3.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_UNWANTEDPHASE } " L" IRowset::GetNextRows(A,B) {} " L" IRowset::RestartPosition() {} " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(18) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - UNWANTED PHASE - SYNCHAFTER // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_18() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowset::RestartPosition() " L" { L3.ROWSET_FETCHPOSITIONCHANGE.SYNCHAFTER.RETURN_UNWANTEDPHASE } " L" IRowset::GetNextRows(A,B) {} " L" IRowset::RestartPosition() {} " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(19) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - UNWANTED PHASE - DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_19() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowset::RestartPosition() " L" { L3.ROWSET_FETCHPOSITIONCHANGE.DIDEVENT.RETURN_UNWANTEDPHASE } " L" IRowset::GetNextRows(A,B) {} " L" IRowset::RestartPosition() {} " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(20) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - UNWANTED PHASE - FAILEDTODO // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_20() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowset::RestartPosition() " L" { " L" L3.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_VETO " L" L3.ROWSET_FETCHPOSITIONCHANGE.FAILEDTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowset::RestartPosition() {} " L" IRowset::GetNextRows(A,B) {} " L" }" L" }" L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROWSET_FETCHPOSITIONCHANGE, DBEVENTPHASE_ABOUTTODO)); TESTC(Execute(CommandString, DEFAULT_ROWSET)); CLEANUP: TRETURN; } // }} // {{ TCW_VAR_PROTOTYPE(21) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_21() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(22) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_22() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(23) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - E_FAIL - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_23() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowset::RestartPosition() " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.RETURN_EFAIL " L" L2.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_EFAIL " L" L3.ROWSET_FETCHPOSITIONCHANGE.SYNCHAFTER.RETURN_EFAIL " L" L1.ROWSET_FETCHPOSITIONCHANGE.DIDEVENT.RETURN_EFAIL " L" } " L" IRowset::GetNextRows(A,B) {} " L" IRowset::RestartPosition() " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(24) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - E_OUTOFMEMORY - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_24() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowset::RestartPosition() " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.RETURN_EOUTOFMEMORY " L" L2.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_EOUTOFMEMORY " L" L3.ROWSET_FETCHPOSITIONCHANGE.SYNCHAFTER.RETURN_EOUTOFMEMORY " L" L1.ROWSET_FETCHPOSITIONCHANGE.DIDEVENT.RETURN_EOUTOFMEMORY " L" } " L" IRowset::GetNextRows(A,B) {} " L" IRowset::RestartPosition() " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(25) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - E_INVALIDARG - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_25() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowset::RestartPosition() " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.RETURN_EINVALIDARG " L" L2.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_EINVALIDARG " L" L3.ROWSET_FETCHPOSITIONCHANGE.SYNCHAFTER.RETURN_EINVALIDARG " L" L1.ROWSET_FETCHPOSITIONCHANGE.DIDEVENT.RETURN_EINVALIDARG " L" } " L" IRowset::GetNextRows(A,B) {} " L" IRowset::RestartPosition() " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(26) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_26() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(27) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_27() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(28) //*----------------------------------------------------------------------- // @mfunc ROWSET_CHANGED - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_28() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" ITableDefinition::AddColumn() {} " L" IRowset::RestartPosition() " L" { " L" L1.ROWSET_CHANGED.DIDEVENT.RETURN_ACCEPT " L" } " L" ITableDefinition::AddColumn() {} " L" IRowset::RestartPosition() " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(29) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_29() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(30) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_30() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(31) //*----------------------------------------------------------------------- // @mfunc ROWSET_CHANGED - DB_E_CANCELED // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_31() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" ITableDefinition::AddColumn() {} " L" IRowset::RestartPosition() " L" { " L" L1.ROWSET_CHANGED.DIDEVENT.RETURN_ACCEPT " L" } " L" ITableDefinition::AddColumn() {} " L" IRowset::RestartPosition() " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(32) //*----------------------------------------------------------------------- // @mfunc ROWSET_CHANGED - DB_E_NOTREENTRANT // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_32() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" ITableDefinition::AddColumn() {} " L" IRowset::RestartPosition() " L" { " L" L1.ROWSET_CHANGED.DIDEVENT.IRowset::RestartPosition() {} " L" } " L" ITableDefinition::AddColumn() {} " L" IRowset::RestartPosition() " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(33) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_33() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(34) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_34() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(35) //*----------------------------------------------------------------------- // @mfunc ROWSET_CHANGED - Veto OKTODO // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_35() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" ITableDefinition::AddColumn() {} " L" IRowset::RestartPosition() " L" { " L" L1.ROWSET_CHANGED.DIDEVENT.RETURN_ACCEPT " L" } " L" ITableDefinition::AddColumn() {} " L" IRowset::RestartPosition() " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(36) //*----------------------------------------------------------------------- // @mfunc ROWSET_CHANGED - Veto ABOUTTODO // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_36() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" ITableDefinition::AddColumn() {} " L" IRowset::RestartPosition() " L" { " L" L1.ROWSET_CHANGED.DIDEVENT.RETURN_ACCEPT " L" } " L" ITableDefinition::AddColumn() {} " L" IRowset::RestartPosition() " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(37) //*----------------------------------------------------------------------- // @mfunc ROWSET_CHANGED - Veto SYNCHAFTER // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_37() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" ITableDefinition::AddColumn() {} " L" IRowset::RestartPosition() " L" { " L" L1.ROWSET_CHANGED.DIDEVENT.RETURN_ACCEPT " L" } " L" ITableDefinition::AddColumn() {} " L" IRowset::RestartPosition() " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(38) //*----------------------------------------------------------------------- // @mfunc ROWSET_CHANGED - Veto DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_38() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" ITableDefinition::AddColumn() {} " L" IRowset::RestartPosition() " L" { " L" L1.ROWSET_CHANGED.DIDEVENT.RETURN_VETO " L" } " L" ITableDefinition::AddColumn() {} " L" IRowset::RestartPosition() " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(39) //*----------------------------------------------------------------------- // @mfunc ROWSET_CHANGED - Veto FAILEDTODO // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_39() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" ITableDefinition::AddColumn() {} " L" IRowset::RestartPosition() " L" { " L" L1.ROWSET_CHANGED.DIDEVENT.RETURN_VETO " L" L1.ROWSET_CHANGED.FAILEDTODO.RETURN_VETO " L" } " L" ITableDefinition::AddColumn() {} " L" IRowset::RestartPosition() " L" { " L" } " L" }" L" }" L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROWSET_CHANGED, DBEVENTPHASE_DIDEVENT)); TESTC(Execute(CommandString, DEFAULT_ROWSET)); CLEANUP: TRETURN } // }} // {{ TCW_VAR_PROTOTYPE(40) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_40() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(41) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_41() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(42) //*----------------------------------------------------------------------- // @mfunc ROWSET_CHANGED - UNWANTED REASON // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_42() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" ITableDefinition::AddColumn() {} " L" IRowset::RestartPosition() " L" { " L" L1.ROWSET_CHANGED.OKTODO.RETURN_UNWANTEDREASON " L" } " L" ITableDefinition::AddColumn() {} " L" IRowset::RestartPosition() " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(43) //*----------------------------------------------------------------------- // @mfunc ROWSET_CHANGED - UNWANTED PHASE OKTODO // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_43() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" ITableDefinition::AddColumn() {} " L" IRowset::RestartPosition() " L" { " L" L1.ROWSET_CHANGED.OKTODO.RETURN_UNWANTEDPHASE " L" } " L" ITableDefinition::AddColumn() {} " L" IRowset::RestartPosition() " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(44) //*----------------------------------------------------------------------- // @mfunc ROWSET_CHANGED - UNWANTED PHASE ABOUTTODO // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_44() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" ITableDefinition::AddColumn() {} " L" IRowset::RestartPosition() " L" { " L" L1.ROWSET_CHANGED.ABOUTTODO.RETURN_UNWANTEDPHASE " L" } " L" ITableDefinition::AddColumn() {} " L" IRowset::RestartPosition() " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(45) //*----------------------------------------------------------------------- // @mfunc ROWSET_CHANGED - UNWANTED PHASE SYNCHAFTER // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_45() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" ITableDefinition::AddColumn() {} " L" IRowset::RestartPosition() " L" { " L" L1.ROWSET_CHANGED.SYNCHAFTER.RETURN_UNWANTEDPHASE " L" } " L" ITableDefinition::AddColumn() {} " L" IRowset::RestartPosition() " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(46) //*----------------------------------------------------------------------- // @mfunc ROWSET_CHANGED - UNWANTED PHASE DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_46() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" ITableDefinition::AddColumn() {} " L" IRowset::RestartPosition() " L" { " L" L1.ROWSET_CHANGED.DIDEVENT.RETURN_UNWANTEDPHASE " L" } " L" ITableDefinition::AddColumn() {} " L" IRowset::RestartPosition() " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(47) //*----------------------------------------------------------------------- // @mfunc ROWSET_CHANGED - UNWANTED PHASE FAILEDTODO // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_47() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" ITableDefinition::AddColumn() {} " L" IRowset::RestartPosition() " L" { " L" L1.ROWSET_CHANGED.OKTODO.RETURN_VETO " L" L1.ROWSET_CHANGED.FAILEDTODO.RETURN_UNWANTEDPHASE " L" } " L" ITableDefinition::AddColumn() {} " L" IRowset::RestartPosition() " L" { " L" } " L" }" L" }" L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROWSET_CHANGED, DBEVENTPHASE_OKTODO)); TESTC(Execute(CommandString, DEFAULT_ROWSET)); CLEANUP: TRETURN } // }} // {{ TCW_VAR_PROTOTYPE(48) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_48() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(49) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_49() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(50) //*----------------------------------------------------------------------- // @mfunc ROWSET_CHANGED - E_FAIL - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_50() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" ITableDefinition::AddColumn() {} " L" IRowset::RestartPosition() " L" { " L" L1.ROWSET_CHANGED.OKTODO.RETURN_EFAIL " L" L2.ROWSET_CHANGED.ABOUTTODO.RETURN_EFAIL " L" L3.ROWSET_CHANGED.SYNCHAFTER.RETURN_EFAIL " L" L1.ROWSET_CHANGED.DIDEVENT.RETURN_EFAIL " L" } " L" ITableDefinition::AddColumn() {} " L" IRowset::RestartPosition() " L" { " L" L1.ROWSET_CHANGED.OKTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(51) //*----------------------------------------------------------------------- // @mfunc ROWSET_CHANGED - E_OUTOFMEMORY - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_51() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" ITableDefinition::AddColumn() {} " L" IRowset::RestartPosition() " L" { " L" L1.ROWSET_CHANGED.OKTODO.RETURN_EOUTOFMEMORY " L" L2.ROWSET_CHANGED.ABOUTTODO.RETURN_EOUTOFMEMORY " L" L3.ROWSET_CHANGED.SYNCHAFTER.RETURN_EOUTOFMEMORY " L" L1.ROWSET_CHANGED.DIDEVENT.RETURN_EOUTOFMEMORY " L" } " L" ITableDefinition::AddColumn() {} " L" IRowset::RestartPosition() " L" { " L" L1.ROWSET_CHANGED.OKTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(52) //*----------------------------------------------------------------------- // @mfunc ROWSET_CHANGED - E_INVALIDARG - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_52() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" ITableDefinition::AddColumn() {} " L" IRowset::RestartPosition() " L" { " L" L1.ROWSET_CHANGED.OKTODO.RETURN_EINVALIDARG " L" L2.ROWSET_CHANGED.ABOUTTODO.RETURN_EINVALIDARG " L" L3.ROWSET_CHANGED.SYNCHAFTER.RETURN_EINVALIDARG " L" L1.ROWSET_CHANGED.DIDEVENT.RETURN_EINVALIDARG " L" } " L" ITableDefinition::AddColumn() {} " L" IRowset::RestartPosition() " L" { " L" L1.ROWSET_CHANGED.OKTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(53) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_53() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(54) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_54() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(55) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - RestartPosition // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_55() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::RestartPosition() " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(56) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - GetNextRows - RestartPosition - RestartPosition // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_56() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowset::RestartPosition() " L" { " L" } " L" IRowset::RestartPosition() " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(57) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_57() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(58) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - DB_E_ROWSNOTRELEASED // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_58() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowset::RestartPosition() " L" { " L" } " L" IRowset::RestartPosition() " L" { " L" } " L" }" L" }" L"}"; //TODO need to specifiy no CANHOLDROWS return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(59) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - EmptyRowset // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_59() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::RestartPosition() " L" { " L" } " L" IRowset::RestartPosition() " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, EMPTY_ROWSET | DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(60) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Add/Remove Listeners // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_60() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowset::RestartPosition() " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.RETURN_UNADVISE " L" L2.ROWSET_FETCHPOSITIONCHANGE.SYNCHAFTER.RETURN_UNADVISE " L" } " L" IRowset::GetNextRows(A,B) {} " L" IRowset::RestartPosition() " L" { " L" L3.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_UNADVISE " L" } " L" IRowset::GetNextRows(A,B) {} " L" IRowset::RestartPosition() " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(61) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - GetData // // @rdesc TEST_PASS or TEST_FAIL // int RestartPosition::Variation_61() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowset::RestartPosition() " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.IRowset::GetData(A) {} " L" L2.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.IRowset::GetData(B) {} " L" L3.ROWSET_FETCHPOSITIONCHANGE.SYNCHAFTER.IRowset::GetData(A) {} " L" L1.ROWSET_FETCHPOSITIONCHANGE.DIDEVENT.IRowset::GetData(B) {} " L" } " L" IRowset::GetNextRows(A,B) {} " L" IRowset::RestartPosition() " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.DIDEVENT.IRowset::GetData(A) {} " L" } " L" IRowset::GetNextRows(A,B) {} " L" IRowset::RestartPosition() " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, DEFAULT_ROWSET); } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL RestartPosition::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CExecutionManager::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(Seek) //*----------------------------------------------------------------------- //| Test Case: Seek - Test Notifications for IRowsetIndex::Seek //| Created: 03/24/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Seek::Init() { // {{ TCW_INIT_BASECLASS_CHECK if(CExecutionManager::Init()) // }} { //Verify Rowset can be created... TEST_PROVIDER(CreateRowset(ROWSETINDEX_ROWSET)==S_OK); return TRUE; } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int Seek::Variation_1() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetIndex::Seek(1) " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.RETURN_ACCEPT " L" } " L" IRowsetIndex::Seek(1) " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.RETURN_ACCEPT " L" } " L" }" L" }" L"}"; return Execute(CommandString, ROWSETINDEX_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Seek::Variation_2() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Seek::Variation_3() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - DB_E_CANCELED // // @rdesc TEST_PASS or TEST_FAIL // int Seek::Variation_4() { //Need to verify the Veto was successful //Verify the FETCHPOSITION is unachanged after veto WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetIndex::Seek(1) " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.RETURN_VETO " L" } " L" IRowsetIndex::Seek(1) " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, ROWSETINDEX_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - DB_E_NOTREENTRANT // // @rdesc TEST_PASS or TEST_FAIL // int Seek::Variation_5() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetIndex::Seek(1) " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.IRowsetIndex::Seek(1) {} " L" } " L" IRowsetIndex::Seek(1) " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.RETURN_ACCEPT " L" } " L" }" L" }" L"}"; return Execute(CommandString, ROWSETINDEX_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(6) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Seek::Variation_6() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(7) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Seek::Variation_7() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(8) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - Veto OKTODO // // @rdesc TEST_PASS or TEST_FAIL // int Seek::Variation_8() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetIndex::Seek(1) " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.RETURN_VETO " L" } " L" IRowsetIndex::Seek(1) " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, ROWSETINDEX_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(9) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - Veto ABOUTTODO // // @rdesc TEST_PASS or TEST_FAIL // int Seek::Variation_9() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetIndex::Seek(1) " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_VETO " L" } " L" IRowsetIndex::Seek(1) " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, ROWSETINDEX_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(10) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - Veto SYNCHAFTER // // @rdesc TEST_PASS or TEST_FAIL // int Seek::Variation_10() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetIndex::Seek(1) " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.SYNCHAFTER.RETURN_VETO " L" } " L" IRowsetIndex::Seek(1) " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, ROWSETINDEX_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(11) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - Veto DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int Seek::Variation_11() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetIndex::Seek(1) " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.DIDEVENT.RETURN_VETO " L" } " L" IRowsetIndex::Seek(1) " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, ROWSETINDEX_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(12) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - Veto FAILEDTODO // // @rdesc TEST_PASS or TEST_FAIL // int Seek::Variation_12() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetIndex::Seek(1) " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.RETURN_VETO " L" L1.ROWSET_FETCHPOSITIONCHANGE.FAILEDTODO.RETURN_VETO " L" } " L" IRowsetIndex::Seek(1) " L" { " L" } " L" }" L" }" L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROWSET_FETCHPOSITIONCHANGE, DBEVENTPHASE_OKTODO)); TESTC(Execute(CommandString, ROWSETINDEX_ROWSET)); CLEANUP: TRETURN } // }} // {{ TCW_VAR_PROTOTYPE(13) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Seek::Variation_13() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(14) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Seek::Variation_14() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(15) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - UNWANTED REASON // // @rdesc TEST_PASS or TEST_FAIL // int Seek::Variation_15() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetIndex::Seek(1) " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.RETURN_UNWANTEDREASON " L" } " L" IRowsetIndex::Seek(1) " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, ROWSETINDEX_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(16) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - UNWANTED PHASE - OKTODO // // @rdesc TEST_PASS or TEST_FAIL // int Seek::Variation_16() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetIndex::Seek(1) " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowsetIndex::Seek(1) " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, ROWSETINDEX_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(17) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - UNWANTED PHASE - ABOUTTODO // // @rdesc TEST_PASS or TEST_FAIL // int Seek::Variation_17() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetIndex::Seek(1) " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowsetIndex::Seek(1) " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, ROWSETINDEX_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(18) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - UNWANTED PHASE - SYNCHAFTER // // @rdesc TEST_PASS or TEST_FAIL // int Seek::Variation_18() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetIndex::Seek(1) " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.SYNCHAFTER.RETURN_UNWANTEDPHASE " L" } " L" IRowsetIndex::Seek(1) " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, ROWSETINDEX_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(19) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - UNWANTED PHASE - DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int Seek::Variation_19() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetIndex::Seek(1) " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.DIDEVENT.RETURN_UNWANTEDPHASE " L" } " L" IRowsetIndex::Seek(1) " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, ROWSETINDEX_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(20) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - UNWANTED PHASE - FAILEDTODO // // @rdesc TEST_PASS or TEST_FAIL // int Seek::Variation_20() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetIndex::Seek(1) " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.RETURN_VETO " L" L1.ROWSET_FETCHPOSITIONCHANGE.FAILEDTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowsetIndex::Seek(1) " L" { " L" } " L" }" L" }" L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROWSET_FETCHPOSITIONCHANGE, DBEVENTPHASE_OKTODO)); TESTC(Execute(CommandString, ROWSETINDEX_ROWSET)); CLEANUP: TRETURN } // }} // {{ TCW_VAR_PROTOTYPE(21) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Seek::Variation_21() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(22) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Seek::Variation_22() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(23) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - E_FAIL - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int Seek::Variation_23() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetIndex::Seek(1) " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.RETURN_EFAIL " L" L1.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_EFAIL " L" L1.ROWSET_FETCHPOSITIONCHANGE.SYNCHAFTER.RETURN_EFAIL " L" L1.ROWSET_FETCHPOSITIONCHANGE.DIDEVENT.RETURN_EFAIL " L" } " L" IRowsetIndex::Seek(1) " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, ROWSETINDEX_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(24) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - E_OUTOFMEMORY - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int Seek::Variation_24() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetIndex::Seek(1) " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.RETURN_EOUTOFMEMORY " L" L1.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_EOUTOFMEMORY " L" L1.ROWSET_FETCHPOSITIONCHANGE.SYNCHAFTER.RETURN_EOUTOFMEMORY " L" L1.ROWSET_FETCHPOSITIONCHANGE.DIDEVENT.RETURN_EOUTOFMEMORY " L" } " L" IRowsetIndex::Seek(1) " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, ROWSETINDEX_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(25) //*----------------------------------------------------------------------- // @mfunc FETCHPOSITIONCHANGE - E_INVALIDARG - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int Seek::Variation_25() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetIndex::Seek(1) " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.RETURN_EINVALIDARG " L" L1.ROWSET_FETCHPOSITIONCHANGE.ABOUTTODO.RETURN_EINVALIDARG " L" L1.ROWSET_FETCHPOSITIONCHANGE.SYNCHAFTER.RETURN_EINVALIDARG " L" L1.ROWSET_FETCHPOSITIONCHANGE.DIDEVENT.RETURN_EINVALIDARG " L" } " L" IRowsetIndex::Seek(1) " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, ROWSETINDEX_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(26) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Seek::Variation_26() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(27) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Seek::Variation_27() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(28) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - DB_E_BADACCESSORHANDLE // // @rdesc TEST_PASS or TEST_FAIL // int Seek::Variation_28() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetIndex::Seek(1,DB_E_BADACCESSORHANDLE) " L" { " L" } " L" IRowsetIndex::Seek(1) " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.RETURN_ACCEPT " L" } " L" }" L" }" L"}"; return Execute(CommandString, ROWSETINDEX_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(29) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - EmptyRowset // // @rdesc TEST_PASS or TEST_FAIL // int Seek::Variation_29() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowsetIndex::Seek(1,DB_S_ENDOFROWSET) " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, EMPTY_ROWSET | ROWSETINDEX_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(30) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Add/Remove Listeners // // @rdesc TEST_PASS or TEST_FAIL // int Seek::Variation_30() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetIndex::Seek(1) " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.RETURN_ADVISE " L" } " L" IRowsetIndex::Seek(1) " L" { " L" L2.ROWSET_FETCHPOSITIONCHANGE.OKTODO.RETURN_UNADVISE " L" } " L" }" L" }" L"}"; return Execute(CommandString, ROWSETINDEX_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(31) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - GetData // // @rdesc TEST_PASS or TEST_FAIL // int Seek::Variation_31() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetIndex::Seek(1) " L" { " L" L1.ROWSET_FETCHPOSITIONCHANGE.OKTODO.IRowset::GetData(A) {} " L" } " L" IRowsetIndex::Seek(1) " L" { " L" L2.ROWSET_FETCHPOSITIONCHANGE.OKTODO.IRowset::GetData(B) " L" } " L" }" L" }" L"}"; return Execute(CommandString, ROWSETINDEX_ROWSET); } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Seek::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CExecutionManager::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(GetRowsAt) //*----------------------------------------------------------------------- //| Test Case: GetRowsAt - Tests Notificatons for IRowsetLocate::GetRowsAt //| Created: 09/29/96 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL GetRowsAt::Init() { // {{ TCW_INIT_BASECLASS_CHECK if(CExecutionManager::Init()) // }} { //Verify Rowset can be created... TEST_PROVIDER(CreateRowset(ROWSETLOCATE_ROWSET)==S_OK); return TRUE; } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - SINGLEROW - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAt::Variation_1() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, A) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_ACCEPT " L" }" L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, A) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETLOCATE_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - MULTIPLEROWS - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAt::Variation_2() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, A,B,C) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_ACCEPT " L" }" L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, A,B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETLOCATE_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAt::Variation_3() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAt::Variation_4() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - DB_E_CANCELED // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAt::Variation_5() { //Cannot "successfully" veto DIDEVENT //Verify rows are valid after veto WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, A,B,C) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_VETO " L" }" L" IRowset::GetData(A) {} " L" IRowset::GetData(B) {} " L" IRowset::GetData(C) {} " L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, A,B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETLOCATE_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(6) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - DB_E_NOTREENTRANT // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAt::Variation_6() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, A,B,C) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.IRowsetLocate::GetRowsAt(DBBMK_FIRST, A,B,C, DB_E_NOTREENTRANT) {} " L" }" L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, A,B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETLOCATE_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(7) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAt::Variation_7() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(8) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAt::Variation_8() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(9) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - Veto DIDEVENT, Listener 1 // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAt::Variation_9() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, A,B,C) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_VETO " L" }" L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, A,B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETLOCATE_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(10) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAt::Variation_10() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(11) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAt::Variation_11() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(12) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - UNWANTED REASON // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAt::Variation_12() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, A,B,C) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_UNWANTEDREASON " L" }" L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, A,B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETLOCATE_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(13) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - UNWANTED PHASE - DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAt::Variation_13() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, A,B,C) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_UNWANTEDPHASE " L" }" L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, A,B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETLOCATE_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(14) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAt::Variation_14() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(15) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAt::Variation_15() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(16) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - E_FAIL - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAt::Variation_16() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, A,B,C) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_EFAIL " L" }" L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, A,B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETLOCATE_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(17) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - E_OUTOFMEMORY - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAt::Variation_17() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, A,B,C) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_EOUTOFMEMORY " L" }" L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, A,B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETLOCATE_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(18) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - E_INVALIDARG - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAt::Variation_18() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, A,B,C) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_EINVALIDARG " L" }" L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, A,B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETLOCATE_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(19) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAt::Variation_19() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(20) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAt::Variation_20() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(21) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Get same row twice // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAt::Variation_21() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, A,B,C) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_ACCEPT " L" }" L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, A,B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETLOCATE_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(22) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - DB_E_BADSTARTPOSITION // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAt::Variation_22() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, A,B,C, DB_E_BADSTARTPOSITION) " L" {" L" }" L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, A,B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETLOCATE_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(23) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - EmptyRowset // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAt::Variation_23() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, DB_S_ENDOFROWSET) " L" {" L" }" L" }" L" }" L"}"; return Execute(CommandString, EMPTY_ROWSET | ROWSETLOCATE_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(24) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - DB_S_ENDOFROWSET - more rows than are in the rowset // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAt::Variation_24() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, A,B,C,D,E, DB_S_ENDOFROWSET) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_ACCEPT " L" }" L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, A,B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETLOCATE_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(25) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - DB_S_ENDOFROWSET - at end of rowset // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAt::Variation_25() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowsetLocate::GetRowsAt(DBBMK_LAST, A, DB_S_ENDOFROWSET) " L" {" L" }" L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, B,C,D) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETLOCATE_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(26) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - no rows at head of rowset // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAt::Variation_26() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowsetLocate::GetRowsAt(DBBMK_FIRST) " L" {" L" }" L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, A,B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETLOCATE_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(27) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - no rows at end of rowset // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAt::Variation_27() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowsetLocate::GetRowsAt(DBBMK_LAST) " L" {" L" }" L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, A,B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETLOCATE_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(28) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Add/Remove Listeners // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAt::Variation_28() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, A,B,C) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_UNADVISE " L" }" L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, A,B,C) " L" {" L" }" L" }" L" }" L"}"; return Execute(CommandString, ROWSETLOCATE_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(29) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - GetData // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAt::Variation_29() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, A) {} " L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, A,B) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.IRowset::GetData(A) {} " L" }" L" IRowsetLocate::GetRowsAt(DBBMK_FIRST, A) " L" {" L" }" L" }" L" }" L"}"; return Execute(CommandString, ROWSETLOCATE_ROWSET); } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL GetRowsAt::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CExecutionManager::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(GetRowsByBookmark) //*----------------------------------------------------------------------- //| Test Case: GetRowsByBookmark - Tests Notifications for IRowsetLocate::GetRowsbyBookmark //| Created: 09/29/96 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL GetRowsByBookmark::Init() { // {{ TCW_INIT_BASECLASS_CHECK if(CExecutionManager::Init()) // }} { //Verify Rowset can be created... TEST_PROVIDER(CreateRowset(ROWSETLOCATE_ROWSET)==S_OK); return TRUE; } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - SINGLEROW - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsByBookmark::Variation_1() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A) {} " L" IRowset::ReleaseRows(A) {} " L" IRowsetLocate::GetRowsByBookmark(A) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_ACCEPT " L" }" L" IRowsetLocate::GetRowsByBookmark(A) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETLOCATE_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - MULTIPLEROWS - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsByBookmark::Variation_2() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C,D) {} " L" IRowset::ReleaseRows(A,B,C,D) {} " L" IRowsetLocate::GetRowsByBookmark(A,B) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_ACCEPT " L" }" L" IRowsetLocate::GetRowsByBookmark(B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETLOCATE_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsByBookmark::Variation_3() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsByBookmark::Variation_4() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - DB_E_CANCELED // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsByBookmark::Variation_5() { //Need to verify the Veto was successful //Verify rows are not valid after veto WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C,D) {} " L" IRowset::ReleaseRows(A,B,C,D) {} " L" IRowsetLocate::GetRowsByBookmark(A,B) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_VETO " L" }" L" IRowsetLocate::GetRowsByBookmark(B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETLOCATE_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(6) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - DB_E_NOTREENTRANT // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsByBookmark::Variation_6() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C,D) {} " L" IRowset::ReleaseRows(A,B,C,D) {} " L" IRowsetLocate::GetRowsByBookmark(A,B) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.IRowsetLocate::GetRowsByBookmark(A,B,DB_E_NOTREENTRANT) {} " L" }" L" IRowsetLocate::GetRowsByBookmark(B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETLOCATE_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(7) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsByBookmark::Variation_7() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(8) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsByBookmark::Variation_8() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(9) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - Veto DIDEVENT, Listener 1 // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsByBookmark::Variation_9() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C,D) {} " L" IRowset::ReleaseRows(A,B,C,D) {} " L" IRowsetLocate::GetRowsByBookmark(A,B) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_VETO " L" }" L" IRowsetLocate::GetRowsByBookmark(B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETLOCATE_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(10) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsByBookmark::Variation_10() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(11) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsByBookmark::Variation_11() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(12) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - UNWANTED REASON // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsByBookmark::Variation_12() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C,D) {} " L" IRowset::ReleaseRows(A,B,C,D) {} " L" IRowsetLocate::GetRowsByBookmark(A,B) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_UNWANTEDREASON " L" }" L" IRowsetLocate::GetRowsByBookmark(C,D) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETLOCATE_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(13) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - UNWANTED PHASE - DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsByBookmark::Variation_13() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C,D) {} " L" IRowset::ReleaseRows(A,B,C,D) {} " L" IRowsetLocate::GetRowsByBookmark(A,B) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_UNWANTEDPHASE " L" }" L" IRowsetLocate::GetRowsByBookmark(C,D) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETLOCATE_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(14) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsByBookmark::Variation_14() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(15) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsByBookmark::Variation_15() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(16) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - E_FAIL - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsByBookmark::Variation_16() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C,D) {} " L" IRowset::ReleaseRows(A,B,C,D) {} " L" IRowsetLocate::GetRowsByBookmark(A,B) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_EFAIL " L" }" L" IRowsetLocate::GetRowsByBookmark(C,D) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETLOCATE_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(17) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - E_OUTOFMEMORY - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsByBookmark::Variation_17() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C,D) {} " L" IRowset::ReleaseRows(A,B,C,D) {} " L" IRowsetLocate::GetRowsByBookmark(A,B) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_EOUTOFMEMORY " L" }" L" IRowsetLocate::GetRowsByBookmark(C,D) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETLOCATE_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(18) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - E_INVALIDARG - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsByBookmark::Variation_18() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C,D) {} " L" IRowset::ReleaseRows(A,B,C,D) {} " L" IRowsetLocate::GetRowsByBookmark(A,B) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_EINVALIDARG " L" }" L" IRowsetLocate::GetRowsByBookmark(C,D) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETLOCATE_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(19) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsByBookmark::Variation_19() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(20) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsByBookmark::Variation_20() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(21) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Get no rows // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsByBookmark::Variation_21() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C,D) {} " L" IRowset::ReleaseRows(A,B,C,D) {} " L" IRowsetLocate::GetRowsByBookmark() " L" {" L" }" L" IRowsetLocate::GetRowsByBookmark(B,C) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_ACCEPT " L" }" L" }" L" }" L"}"; return Execute(CommandString, ROWSETLOCATE_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(22) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Get same row twice // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsByBookmark::Variation_22() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C,D) {} " L" IRowset::ReleaseRows(A,B,C,D) {} " L" IRowsetLocate::GetRowsByBookmark(B) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_ACCEPT " L" }" L" IRowsetLocate::GetRowsByBookmark(C) " L" {" L" }" L" }" L" }" L"}"; return Execute(CommandString, ROWSETLOCATE_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(23) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - E_INVALIDARG // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsByBookmark::Variation_23() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C,D) {} " L" IRowset::ReleaseRows(A,B,C,D) {} " L" IRowsetLocate::GetRowsByBookmark(B,E_INVALIDARG) " L" {" L" }" L" IRowsetLocate::GetRowsByBookmark(C) " L" {" L" }" L" }" L" }" L"}"; return Execute(CommandString, ROWSETLOCATE_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(24) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - EmptyRowset // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsByBookmark::Variation_24() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowsetLocate::GetRowsByBookmark(B, DB_E_ERRORSOCCURRED) " L" {" L" }" L" IRowsetLocate::GetRowsByBookmark(C, DB_E_ERRORSOCCURRED) " L" {" L" }" L" }" L" }" L"}"; return Execute(CommandString, EMPTY_ROWSET | ROWSETLOCATE_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(25) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Add/Remove Listeners // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsByBookmark::Variation_25() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C,D) {} " L" IRowset::ReleaseRows(A,B,C,D) {} " L" IRowsetLocate::GetRowsByBookmark(B) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_UNADVISE " L" }" L" IRowsetLocate::GetRowsByBookmark(C) " L" {" L" L2.ROW_ACTIVATE.DIDEVENT.RETURN_UNADVISE " L" }" L" }" L" }" L"}"; return Execute(CommandString, ROWSETLOCATE_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(26) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - GetData // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsByBookmark::Variation_26() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C,D) {} " L" IRowset::ReleaseRows(A,B,C,D) {} " L" IRowsetLocate::GetRowsByBookmark(B) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.IRowset::GetData(B) {} " L" }" L" IRowsetLocate::GetRowsByBookmark(C) " L" {" L" L1.ROW_ACTIVATE.DIDEVENT.IRowset::GetData(C) {} " L" }" L" }" L" }" L"}"; return Execute(CommandString, ROWSETLOCATE_ROWSET); } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL GetRowsByBookmark::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CExecutionManager::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(GetRowsAtRatio) //*----------------------------------------------------------------------- //| Test Case: GetRowsAtRatio - Test Nofications for IRowsetScroll::GetRowsAtRatio //| Created: 03/24/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL GetRowsAtRatio::Init() { // {{ TCW_INIT_BASECLASS_CHECK if(CExecutionManager::Init()) // }} { //Verify Rowset can be created... TEST_PROVIDER(CreateRowset(ROWSETSCROLL_ROWSET)==S_OK); return TRUE; } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - SINGLEROW - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAtRatio::Variation_1() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetScroll::GetRowsAtRatio(1,A) " L" { " L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_ACCEPT " L" } " L" IRowsetScroll::GetRowsAtRatio(1,A) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETSCROLL_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - MULTIPLEROWS - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAtRatio::Variation_2() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetScroll::GetRowsAtRatio(1,A,B,C) " L" { " L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_ACCEPT " L" } " L" IRowsetScroll::GetRowsAtRatio(1,A,B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETSCROLL_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAtRatio::Variation_3() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAtRatio::Variation_4() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - DB_E_CANCELED // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAtRatio::Variation_5() { //Veriy the veto was successful //Row should be unaffected by the resynch WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetScroll::GetRowsAtRatio(1,A,B,C) " L" { " L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_VETO " L" } " L" IRowsetScroll::GetRowsAtRatio(1,A,B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETSCROLL_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(6) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - DB_E_NOTREENTRANT // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAtRatio::Variation_6() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetScroll::GetRowsAtRatio(1,A,B,C) " L" { " L" L1.ROW_ACTIVATE.DIDEVENT.IRowsetScroll::GetRowsAtRatio(1,A,B,C,DB_E_NOTREENTRANT) {} " L" } " L" IRowsetScroll::GetRowsAtRatio(1,A,B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETSCROLL_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(7) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAtRatio::Variation_7() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(8) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAtRatio::Variation_8() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(9) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - Veto DIDEVENT, Listener 1 // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAtRatio::Variation_9() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetScroll::GetRowsAtRatio(1,A,B,C) " L" { " L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_VETO " L" } " L" IRowsetScroll::GetRowsAtRatio(1,A,B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETSCROLL_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(10) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAtRatio::Variation_10() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(11) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAtRatio::Variation_11() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(12) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - UNWANTED REASON // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAtRatio::Variation_12() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetScroll::GetRowsAtRatio(1,A,B,C) " L" { " L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_UNWANTEDREASON " L" } " L" IRowsetScroll::GetRowsAtRatio(1,A,B,C,D) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETSCROLL_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(13) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - UNWANTED PHASE - DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAtRatio::Variation_13() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetScroll::GetRowsAtRatio(1,A,B,C) " L" { " L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_UNWANTEDPHASE " L" } " L" IRowsetScroll::GetRowsAtRatio(1,A,B,C,D) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETSCROLL_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(14) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAtRatio::Variation_14() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(15) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAtRatio::Variation_15() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(16) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - E_FAIL - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAtRatio::Variation_16() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetScroll::GetRowsAtRatio(1,A,B,C) " L" { " L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_EFAIL " L" } " L" IRowsetScroll::GetRowsAtRatio(1,A,B,C,D) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETSCROLL_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(17) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - E_OUTOFMEMORY - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAtRatio::Variation_17() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetScroll::GetRowsAtRatio(1,A,B,C) " L" { " L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_EOUTOFMEMORY " L" } " L" IRowsetScroll::GetRowsAtRatio(1,A,B,C,D) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETSCROLL_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(18) //*----------------------------------------------------------------------- // @mfunc ROW_ACTIVATE - E_INVALIDARG - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAtRatio::Variation_18() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetScroll::GetRowsAtRatio(1,A,B,C) " L" { " L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_EINVALIDARG " L" } " L" IRowsetScroll::GetRowsAtRatio(1,A,B,C,D) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETSCROLL_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(19) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAtRatio::Variation_19() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(20) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAtRatio::Variation_20() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(21) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - No rows // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAtRatio::Variation_21() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetScroll::GetRowsAtRatio(1) " L" { " L" } " L" IRowsetScroll::GetRowsAtRatio(1) " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, ROWSETSCROLL_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(22) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - DB_S_ENDOFROWSET 1 more than rowset // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAtRatio::Variation_22() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetScroll::GetRowsAtRatio(1, A,B,C,D, DB_S_ENDOFROWSET) " L" { " L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_ACCEPT " L" } " L" IRowsetScroll::GetRowsAtRatio(1, A,B,C,D) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETSCROLL_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(23) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - DB_S_ENDOFROWSET - at end of rowset // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAtRatio::Variation_23() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetScroll::GetRowsAtRatio(1, A,B,C, DB_S_ENDOFROWSET) " L" { " L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_ACCEPT " L" } " L" IRowsetScroll::GetRowsAtRatio(1, A,B,C, DB_S_ENDOFROWSET) " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, ROWSETSCROLL_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(24) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - EmptyRowset // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAtRatio::Variation_24() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetScroll::GetRowsAtRatio(1, DB_S_ENDOFROWSET) " L" { " L" } " L" IRowsetScroll::GetRowsAtRatio(1, DB_S_ENDOFROWSET) " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, EMPTY_ROWSET | ROWSETSCROLL_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(25) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Add/Remove Listeners // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAtRatio::Variation_25() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetScroll::GetRowsAtRatio(1,A,B,C) " L" { " L" L1.ROW_ACTIVATE.DIDEVENT.RETURN_UNADVISE " L" } " L" IRowsetScroll::GetRowsAtRatio(1,A,B,C,D) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETSCROLL_ROWSET); } // }} // {{ TCW_VAR_PROTOTYPE(26) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - GetData // // @rdesc TEST_PASS or TEST_FAIL // int GetRowsAtRatio::Variation_26() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowset::ReleaseRows(A,B,C) {} " L" IRowsetScroll::GetRowsAtRatio(1,A,B,C) " L" { " L" L1.ROW_ACTIVATE.DIDEVENT.IRowset::GetData(A) {} " L" L2.ROW_ACTIVATE.DIDEVENT.IRowset::GetData(B) {} " L" L3.ROW_ACTIVATE.DIDEVENT.IRowset::GetData(C) {} " L" } " L" IRowsetScroll::GetRowsAtRatio(1,A,B,C,D) {} " L" }" L" }" L"}"; return Execute(CommandString, ROWSETSCROLL_ROWSET); } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL GetRowsAtRatio::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CExecutionManager::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(DeleteRows) //*----------------------------------------------------------------------- //| Test Case: DeleteRows - Tests Notifications for IRowsetChange::DeleteRows //| Created: 09/29/96 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL DeleteRows::Init() { // {{ TCW_INIT_BASECLASS_CHECK if(CExecutionManager::Init()) // }} { //Verify Rowset can be created... TEST_PROVIDER(CreateRowset(CHANGE_IMMEDIATE)==S_OK); return TRUE; } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - SINGLEROW - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_1() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::DeleteRows(A) {} " L" } " L" } " L"}"; TableInsert(ONE_ROW); //Compensate for the deleted row(s) return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - MULTIPLEROWS - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_2() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::DeleteRows(A,B) {} " L" } " L" } " L"}"; TableInsert(TWO_ROWS); //Compensate for the deleted row(s) return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_3() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - MULTIPLEROWS - DB_E_CANCELED // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_4() { //Need to make sure the Veto of ROW_DELETE did not delete the row WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::DeleteRows(A,B) " L" { " L" L1.ROW_DELETE.ABOUTTODO.RETURN_VETO " L" } " L" IRowset::GetData(A) {} " L" } " L" } " L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROW_DELETE, DBEVENTPHASE_ABOUTTODO)); TableInsert(TWO_ROWS); //Compensate for the deleted row(s) TESTC(Execute(CommandString, CHANGE_IMMEDIATE)); CLEANUP: TRETURN } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - SINGLEROW - DB_E_NOTREENTRANT // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_5() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::DeleteRows(A) " L" { " L" L1.ROW_DELETE.OKTODO.IRowsetChange::DeleteRows(B, DB_E_NOTREENTRANT) {} " L" } " L" } " L" } " L"}"; TableInsert(ONE_ROW); //Compensate for the deleted row(s) return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(6) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_6() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(7) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_7() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(8) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - MULTIPLEROWS - Veto OKTODO Listener 1 // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_8() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::DeleteRows(A,B) " L" { " L" L1.ROW_DELETE.OKTODO.RETURN_VETO " L" } " L" } " L" } " L"}"; TableInsert(TWO_ROWS); //Compensate for the deleted row(s) TESTC(Execute(CommandString, CHANGE_IMMEDIATE)); CLEANUP: TRETURN } // }} // {{ TCW_VAR_PROTOTYPE(9) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - MULTIPLEROWS - Veto ABOUTTODO Listener 1 // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_9() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::DeleteRows(A,B) " L" { " L" L1.ROW_DELETE.ABOUTTODO.RETURN_VETO " L" } " L" } " L" } " L"}"; TableInsert(TWO_ROWS); //Compensate for the deleted row(s) TESTC(Execute(CommandString, CHANGE_IMMEDIATE)); CLEANUP: TRETURN } // }} // {{ TCW_VAR_PROTOTYPE(10) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - MULTIPLEROWS - Veto SYNCHAFTER Listener 1 // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_10() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::DeleteRows(A,B) " L" { " L" L2.ROW_DELETE.SYNCHAFTER.RETURN_VETO " L" } " L" } " L" } " L"}"; TableInsert(TWO_ROWS); //Compensate for the deleted row(s) TESTC(Execute(CommandString, CHANGE_IMMEDIATE)); CLEANUP: TRETURN } // }} // {{ TCW_VAR_PROTOTYPE(11) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - MULTIPLEROWS - Veto DIDEVENT Listener 2 // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_11() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::DeleteRows(A,B) " L" { " L" L1.ROW_DELETE.DIDEVENT.RETURN_VETO " L" } " L" } " L" } " L"}"; TableInsert(TWO_ROWS); //Compensate for the deleted row(s) return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(12) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - MULTIPLEROWS - Veto FAILEDTODO Listener 2 // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_12() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::DeleteRows(A,B) " L" { " L" L1.ROW_DELETE.ABOUTTODO.RETURN_VETO " L" L1.ROW_DELETE.FAILEDTODO.RETURN_VETO " L" } " L" } " L" } " L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROW_DELETE, DBEVENTPHASE_ABOUTTODO)); TableInsert(TWO_ROWS); //Compensate for the deleted row(s) TESTC(Execute(CommandString, CHANGE_IMMEDIATE)); CLEANUP: TRETURN } // }} // {{ TCW_VAR_PROTOTYPE(13) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Add/Remove Listeners - SINGLEROW // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_13() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::DeleteRows(A) " L" { " L" L1.ROW_DELETE.ABOUTTODO.RETURN_UNADVISE " L" L3.ROW_DELETE.SYNCHAFTER.RETURN_ADVISE " L" } " L" IRowsetChange::DeleteRows(B) " L" { " L" } " L" } " L" } " L"}"; TableInsert(TWO_ROWS); //Compensate for the deleted row(s) return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(14) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - GetData - SINGLEROW // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_14() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::DeleteRows(A) " L" { " L" L1.ROW_DELETE.OKTODO.IRowset::GetData(A) {} " L" L3.ROW_DELETE.ABOUTTODO.IRowset::GetData(A) {} " L" } " L" IRowsetChange::DeleteRows(B) " L" { " L" L3.ROW_DELETE.OKTODO.IRowset::GetData(B) {} " L" } " L" } " L" } " L"}"; TableInsert(TWO_ROWS); //Compensate for the deleted row(s) return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(15) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - SINGLEROW - UNWANTED REASON // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_15() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::DeleteRows(A) " L" { " L" L1.ROW_DELETE.OKTODO.RETURN_UNWANTEDREASON " L" } " L" IRowsetChange::DeleteRows(B) {} " L" } " L" } " L"}"; TableInsert(TWO_ROWS); //Compensate for the deleted row(s) return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(16) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - SINGLEROW - UNWANTED PHASE OKTODO // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_16() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::DeleteRows(A) " L" { " L" L1.ROW_DELETE.OKTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowsetChange::DeleteRows(B) {} " L" } " L" } " L"}"; TableInsert(TWO_ROWS); //Compensate for the deleted row(s) return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(17) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - SINGLEROW - UNWANTED PHASE ABOUTTODO // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_17() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::DeleteRows(A) " L" { " L" L1.ROW_DELETE.ABOUTTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowsetChange::DeleteRows(B) {} " L" } " L" } " L"}"; TableInsert(TWO_ROWS); //Compensate for the deleted row(s) return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(18) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - SINGLEROW - UNWANTED PHASE SYNCHAFTER // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_18() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::DeleteRows(A) " L" { " L" L1.ROW_DELETE.SYNCHAFTER.RETURN_UNWANTEDPHASE " L" } " L" IRowsetChange::DeleteRows(B) {} " L" } " L" } " L"}"; TableInsert(TWO_ROWS); //Compensate for the deleted row(s) return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(19) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - SINGLEROW - UNWANTED PHASE DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_19() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::DeleteRows(A) " L" { " L" L1.ROW_DELETE.DIDEVENT.RETURN_UNWANTEDPHASE " L" } " L" IRowsetChange::DeleteRows(B) {} " L" } " L" } " L"}"; TableInsert(TWO_ROWS); //Compensate for the deleted row(s) return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(20) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - MULTIPLEROWS - Veto ABOUTTODO Listener 1 - UNWANTED PHASE FAILEDTODO // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_20() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B,C,D) {} " L" IRowsetChange::DeleteRows(A,B) " L" { " L" L1.ROW_DELETE.ABOUTTODO.RETURN_VETO " L" L1.ROW_DELETE.FAILEDTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowsetChange::DeleteRows(C,D) {} " L" } " L" } " L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROW_DELETE, DBEVENTPHASE_ABOUTTODO)); TableInsert(FOUR_ROWS); //Compensate for the deleted row(s) TESTC(Execute(CommandString, CHANGE_IMMEDIATE)); CLEANUP: TRETURN } // }} // {{ TCW_VAR_PROTOTYPE(21) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - DBROWSTATUS_DELETED - SINGLEROW // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_21() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::DeleteRows(A) " L" { " L" L1.ROW_DELETE.ABOUTTODO.RETURN_ACCEPT " L" } " L" IRowsetChange::DeleteRows(A,DB_E_ERRORSOCCURRED) " L" { " L" } " L" } " L" } " L"}"; TableInsert(ONE_ROW); //Compensate for the deleted row(s) return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(22) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - SINGLEROW - Veto ABOUTTODO Listener 1 - E_FAIL - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_22() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::DeleteRows(A) " L" { " L" L1.ROW_DELETE.OKTODO.RETURN_EFAIL " L" L2.ROW_DELETE.ABOUTTODO.RETURN_EFAIL " L" L3.ROW_DELETE.SYNCHAFTER.RETURN_EFAIL " L" L1.ROW_DELETE.DIDEVENT.RETURN_EFAIL " L" } " L" IRowsetChange::DeleteRows(B) " L" { " L" L1.ROW_DELETE.ABOUTTODO.RETURN_VETO " L" } " L" } " L" } " L"}"; TableInsert(TWO_ROWS); //Compensate for the deleted row(s) TESTC(Execute(CommandString, CHANGE_IMMEDIATE)); CLEANUP: TRETURN } // }} // {{ TCW_VAR_PROTOTYPE(23) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - MULTIPLEROWS - Veto ABOUTTODO Listener 1 - E_FAIL - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_23() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B,C,D) {} " L" IRowsetChange::DeleteRows(A,B) " L" { " L" L1.ROW_DELETE.OKTODO.RETURN_EFAIL " L" L2.ROW_DELETE.ABOUTTODO.RETURN_EFAIL " L" L3.ROW_DELETE.SYNCHAFTER.RETURN_EFAIL " L" L1.ROW_DELETE.DIDEVENT.RETURN_EFAIL " L" } " L" IRowsetChange::DeleteRows(C,D) " L" { " L" L1.ROW_DELETE.ABOUTTODO.RETURN_VETO " L" } " L" } " L" } " L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... //TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROW_DELETE, DBEVENTPHASE_ABOUTTODO)); TableInsert(FOUR_ROWS); //Compensate for the deleted row(s) TESTC(Execute(CommandString, CHANGE_IMMEDIATE)); CLEANUP: TRETURN } // }} // {{ TCW_VAR_PROTOTYPE(24) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - MULTIPLEROWS - Veto ABOUTTODO Listener 1 - E_OUTOFMEMORY - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_24() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B,C,D) {} " L" IRowsetChange::DeleteRows(A,B) " L" { " L" L1.ROW_DELETE.OKTODO.RETURN_EOUTOFMEMORY " L" L2.ROW_DELETE.ABOUTTODO.RETURN_EOUTOFMEMORY " L" L3.ROW_DELETE.SYNCHAFTER.RETURN_EOUTOFMEMORY " L" L1.ROW_DELETE.DIDEVENT.RETURN_EOUTOFMEMORY " L" } " L" IRowsetChange::DeleteRows(C,D) " L" { " L" L1.ROW_DELETE.ABOUTTODO.RETURN_VETO " L" } " L" } " L" } " L"}"; TableInsert(FOUR_ROWS); //Compensate for the deleted row(s) TESTC(Execute(CommandString, CHANGE_IMMEDIATE)); CLEANUP: TRETURN } // }} // {{ TCW_VAR_PROTOTYPE(25) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - MULTIPLEROWS - Veto ABOUTTODO Listener 1 - E_INVALIDARG - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_25() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B,C,D) {} " L" IRowsetChange::DeleteRows(A,B) " L" { " L" L1.ROW_DELETE.OKTODO.RETURN_EINVALIDARG " L" L2.ROW_DELETE.ABOUTTODO.RETURN_EINVALIDARG " L" L3.ROW_DELETE.SYNCHAFTER.RETURN_EINVALIDARG " L" L1.ROW_DELETE.DIDEVENT.RETURN_EINVALIDARG " L" } " L" IRowsetChange::DeleteRows(C,D) " L" { " L" L1.ROW_DELETE.ABOUTTODO.RETURN_VETO " L" } " L" } " L" } " L"}"; TableInsert(FOUR_ROWS); //Compensate for the deleted row(s) TESTC(Execute(CommandString, CHANGE_IMMEDIATE)); CLEANUP: TRETURN } // }} // {{ TCW_VAR_PROTOTYPE(26) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - SINGLEROW - E_OUTOFMEMORY - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_26() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::DeleteRows(A) " L" { " L" L1.ROW_DELETE.OKTODO.RETURN_EOUTOFMEMORY " L" L2.ROW_DELETE.ABOUTTODO.RETURN_EOUTOFMEMORY " L" L3.ROW_DELETE.SYNCHAFTER.RETURN_EOUTOFMEMORY " L" L1.ROW_DELETE.DIDEVENT.RETURN_EOUTOFMEMORY " L" } " L" IRowsetChange::DeleteRows(B) " L" { " L" L1.ROW_DELETE.ABOUTTODO.RETURN_ACCEPT " L" } " L" } " L" } " L"}"; TableInsert(TWO_ROWS); //Compensate for the deleted row(s) return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(27) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - SINGLEROW - E_INVALIDARG - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_27() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::DeleteRows(A) " L" { " L" L1.ROW_DELETE.OKTODO.RETURN_EINVALIDARG " L" L2.ROW_DELETE.ABOUTTODO.RETURN_EINVALIDARG " L" L3.ROW_DELETE.SYNCHAFTER.RETURN_EINVALIDARG " L" L1.ROW_DELETE.DIDEVENT.RETURN_EINVALIDARG " L" } " L" IRowsetChange::DeleteRows(B) " L" { " L" L1.ROW_DELETE.ABOUTTODO.RETURN_ACCEPT " L" } " L" } " L" } " L"}"; TableInsert(TWO_ROWS); //Compensate for the deleted row(s) return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(28) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Delete no rows, Delete MULTIPLEROWS // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_28() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B,C,D) {} " L" IRowsetChange::DeleteRows() " L" { " L" } " L" IRowsetChange::DeleteRows(A,B) " L" { " L" L1.ROW_DELETE.ABOUTTODO.RETURN_ACCEPT " L" } " L" } " L" } " L"}"; TableInsert(TWO_ROWS); //Compensate for the deleted row(s) return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(29) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - DBROWSTATUS_DELETED - MULTIPLEROWS // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_29() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B,C,D) {} " L" IRowsetChange::DeleteRows(A,B) " L" { " L" L1.ROW_DELETE.ABOUTTODO.RETURN_ACCEPT " L" } " L" IRowsetChange::DeleteRows(A,B,DB_E_ERRORSOCCURRED) " L" { " L" } " L" } " L" } " L"}"; TableInsert(TWO_ROWS); //Compensate for the deleted row(s) return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(30) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - EmptyRowset // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_30() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowsetChange::DeleteRows() " L" { " L" } " L" IRowsetChange::DeleteRows() " L" { " L" } " L" } " L" } " L"}"; TableInsert(TWO_ROWS); //Compensate for the deleted row(s) return Execute(CommandString, EMPTY_ROWSET | CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(31) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Add/Remove Listeners - MULTIPLEROWS // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_31() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B,C,D) {} " L" IRowsetChange::DeleteRows(A,B) " L" { " L" L1.ROW_DELETE.ABOUTTODO.RETURN_UNADVISE " L" L3.ROW_DELETE.SYNCHAFTER.RETURN_ADVISE " L" } " L" IRowsetChange::DeleteRows(C) " L" { " L" } " L" } " L" } " L"}"; TableInsert(THREE_ROWS); //Compensate for the deleted row(s) return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(32) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - GetData - MULTIPLEROWS // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_32() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B,C,D) {} " L" IRowsetChange::DeleteRows(A,B) " L" { " L" L1.ROW_DELETE.OKTODO.IRowset::GetData(A) {} " L" L3.ROW_DELETE.ABOUTTODO.IRowset::GetData(B) {} " L" } " L" IRowsetChange::DeleteRows(C) " L" { " L" L3.ROW_DELETE.OKTODO.IRowset::GetData(C) {} " L" } " L" } " L" } " L"}"; TableInsert(THREE_ROWS); //Compensate for the deleted row(s) return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL DeleteRows::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CExecutionManager::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(DeleteRows_Bufferred) //*----------------------------------------------------------------------- //| Test Case: DeleteRows_Bufferred - Test Notifications for IRowsetChange::DeleteRows in Buffered Mode //| Created: 09/29/96 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL DeleteRows_Bufferred::Init() { // {{ TCW_INIT_BASECLASS_CHECK if(CExecutionManager::Init()) // }} { //Verify Rowset can be created... TEST_PROVIDER(CreateRowset(CHANGE_BUFFERRED)==S_OK); return TRUE; } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - SINGLEROW - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows_Bufferred::Variation_1() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::DeleteRows(A) {} " L" } " L" } " L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - MULTIPLEROWS - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows_Bufferred::Variation_2() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::DeleteRows(A,B) {} " L" } " L" } " L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows_Bufferred::Variation_3() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - DB_E_CANCELED // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows_Bufferred::Variation_4() { //Need to make sure the Veto of ROW_DELETE did not delete the row //Make sure row is valid after Veto WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::DeleteRows(A,B) " L" { " L" L1.ROW_DELETE.ABOUTTODO.RETURN_VETO " L" } " L" IRowset::GetData(A) {} " L" } " L" } " L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROW_DELETE, DBEVENTPHASE_ABOUTTODO)); TESTC(Execute(CommandString, CHANGE_BUFFERRED)); CLEANUP: TRETURN; } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - DB_E_NOTREENTRANT // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows_Bufferred::Variation_5() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::DeleteRows(A) " L" { " L" L1.ROW_DELETE.OKTODO.IRowsetChange::DeleteRows(B, DB_E_NOTREENTRANT) {} " L" } " L" } " L" } " L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(6) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows_Bufferred::Variation_6() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(7) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows_Bufferred::Variation_7() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(8) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - Veto OKTODO Listener 1 // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows_Bufferred::Variation_8() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::DeleteRows(A,B) " L" { " L" L1.ROW_DELETE.OKTODO.RETURN_VETO " L" } " L" } " L" } " L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(9) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - Veto ABOUTTODO Listener 1 // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows_Bufferred::Variation_9() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::DeleteRows(A,B) " L" { " L" L1.ROW_DELETE.ABOUTTODO.RETURN_VETO " L" } " L" } " L" } " L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(10) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - Veto SYNCHAFTER Listener 1 // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows_Bufferred::Variation_10() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::DeleteRows(A,B) " L" { " L" L2.ROW_DELETE.SYNCHAFTER.RETURN_VETO " L" } " L" } " L" } " L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(11) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - Veto DIDEVENT Listener 2 // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows_Bufferred::Variation_11() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::DeleteRows(A,B) " L" { " L" L1.ROW_DELETE.DIDEVENT.RETURN_VETO " L" } " L" } " L" } " L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(12) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - Veto FAILEDTODO Listener 2 // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows_Bufferred::Variation_12() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::DeleteRows(A,B) " L" { " L" L1.ROW_DELETE.ABOUTTODO.RETURN_VETO " L" L1.ROW_DELETE.FAILEDTODO.RETURN_VETO " L" } " L" } " L" } " L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROW_DELETE, DBEVENTPHASE_ABOUTTODO)); TESTC(Execute(CommandString, CHANGE_BUFFERRED)); CLEANUP: TRETURN; } // }} // {{ TCW_VAR_PROTOTYPE(13) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows_Bufferred::Variation_13() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(14) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows_Bufferred::Variation_14() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(15) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - UNWANTED REASON // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows_Bufferred::Variation_15() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::DeleteRows(A) " L" { " L" L1.ROW_DELETE.OKTODO.RETURN_UNWANTEDREASON " L" } " L" IRowsetChange::DeleteRows(B) {} " L" } " L" } " L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(16) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - UNWANTED PHASE OKTODO // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows_Bufferred::Variation_16() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::DeleteRows(A) " L" { " L" L1.ROW_DELETE.OKTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowsetChange::DeleteRows(B) {} " L" } " L" } " L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(17) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - UNWANTED PHASE ABOUTTODO // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows_Bufferred::Variation_17() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::DeleteRows(A) " L" { " L" L1.ROW_DELETE.ABOUTTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowsetChange::DeleteRows(B) {} " L" } " L" } " L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(18) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - UNWANTED PHASE SYNCHAFTER // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows_Bufferred::Variation_18() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::DeleteRows(A) " L" { " L" L1.ROW_DELETE.SYNCHAFTER.RETURN_UNWANTEDPHASE " L" } " L" IRowsetChange::DeleteRows(B) {} " L" } " L" } " L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(19) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - UNWANTED PHASE DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows_Bufferred::Variation_19() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::DeleteRows(A) " L" { " L" L1.ROW_DELETE.DIDEVENT.RETURN_UNWANTEDPHASE " L" } " L" IRowsetChange::DeleteRows(B) {} " L" } " L" } " L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(20) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - UNWANTED PHASE FAILEDTODO // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows_Bufferred::Variation_20() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B,C,D) {} " L" IRowsetChange::DeleteRows(A,B) " L" { " L" L1.ROW_DELETE.ABOUTTODO.RETURN_VETO " L" L1.ROW_DELETE.FAILEDTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowsetChange::DeleteRows(C,D) {} " L" } " L" } " L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROW_DELETE, DBEVENTPHASE_ABOUTTODO)); TESTC(Execute(CommandString, CHANGE_BUFFERRED)); CLEANUP: TRETURN; } // }} // {{ TCW_VAR_PROTOTYPE(21) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows_Bufferred::Variation_21() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(22) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows_Bufferred::Variation_22() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(23) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - E_FAIL - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows_Bufferred::Variation_23() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B,C,D) {} " L" IRowsetChange::DeleteRows(A,B) " L" { " L" L1.ROW_DELETE.OKTODO.RETURN_EFAIL " L" L2.ROW_DELETE.ABOUTTODO.RETURN_EFAIL " L" L3.ROW_DELETE.SYNCHAFTER.RETURN_EFAIL " L" L1.ROW_DELETE.DIDEVENT.RETURN_EFAIL " L" } " L" IRowsetChange::DeleteRows(C,D) " L" { " L" L1.ROW_DELETE.ABOUTTODO.RETURN_VETO " L" } " L" } " L" } " L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(24) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - E_OUTOFMEMORY - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows_Bufferred::Variation_24() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B,C,D) {} " L" IRowsetChange::DeleteRows(A,B) " L" { " L" L1.ROW_DELETE.OKTODO.RETURN_EOUTOFMEMORY " L" L2.ROW_DELETE.ABOUTTODO.RETURN_EOUTOFMEMORY " L" L3.ROW_DELETE.SYNCHAFTER.RETURN_EOUTOFMEMORY " L" L1.ROW_DELETE.DIDEVENT.RETURN_EOUTOFMEMORY " L" } " L" IRowsetChange::DeleteRows(C,D) " L" { " L" L1.ROW_DELETE.ABOUTTODO.RETURN_VETO " L" } " L" } " L" } " L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(25) //*----------------------------------------------------------------------- // @mfunc ROW_DELETE - E_INVALIDARG - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows_Bufferred::Variation_25() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B,C,D) {} " L" IRowsetChange::DeleteRows(A,B) " L" { " L" L1.ROW_DELETE.OKTODO.RETURN_EINVALIDARG " L" L2.ROW_DELETE.ABOUTTODO.RETURN_EINVALIDARG " L" L3.ROW_DELETE.SYNCHAFTER.RETURN_EINVALIDARG " L" L1.ROW_DELETE.DIDEVENT.RETURN_EINVALIDARG " L" } " L" IRowsetChange::DeleteRows(C,D) " L" { " L" L1.ROW_DELETE.ABOUTTODO.RETURN_VETO " L" } " L" } " L" } " L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(26) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows_Bufferred::Variation_26() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(27) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows_Bufferred::Variation_27() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(28) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Delete no rows // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows_Bufferred::Variation_28() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B,C,D) {} " L" IRowsetChange::DeleteRows() " L" { " L" } " L" IRowsetChange::DeleteRows(C) " L" { " L" L2.ROW_DELETE.OKTODO.RETURN_ACCEPT " L" } " L" } " L" } " L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(29) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - DBROWSTATUS_DELETED // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows_Bufferred::Variation_29() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B,C,D) {} " L" IRowsetChange::DeleteRows(C) " L" { " L" L2.ROW_DELETE.OKTODO.RETURN_ACCEPT " L" } " L" IRowsetChange::DeleteRows(C,DB_E_ERRORSOCCURRED) " L" { " L" } " L" } " L" } " L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(30) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - EmptyRowset // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows_Bufferred::Variation_30() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" { " L" IRowsetChange::DeleteRows() " L" { " L" } " L" IRowsetChange::DeleteRows() " L" { " L" } " L" } " L" } " L"}"; return Execute(CommandString, EMPTY_ROWSET | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(31) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Add/Remove Listeners // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows_Bufferred::Variation_31() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B,C,D) {} " L" IRowsetChange::DeleteRows(C) " L" { " L" L2.ROW_DELETE.OKTODO.RETURN_UNADVISE " L" L3.ROW_DELETE.SYNCHAFTER.RETURN_UNADVISE " L" } " L" IRowsetChange::DeleteRows(D) " L" { " L" L1.ROW_DELETE.DIDEVENT.RETURN_UNADVISE " L" } " L" } " L" } " L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(32) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - GetData // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows_Bufferred::Variation_32() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B,C,D) {} " L" IRowsetChange::DeleteRows(C) " L" { " L" L2.ROW_DELETE.OKTODO.IRowset::GetData(C) {} " L" L3.ROW_DELETE.ABOUTTODO.IRowset::GetData(C) {} " L" } " L" IRowsetChange::DeleteRows(A) " L" { " L" L1.ROW_DELETE.ABOUTTODO.IRowset::GetData(D) {} " L" } " L" } " L" } " L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(33) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - GetOriginalData // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows_Bufferred::Variation_33() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" { " L" IRowset::GetNextRows(A,B,C,D) {} " L" IRowsetChange::DeleteRows(C) " L" { " L" L2.ROW_DELETE.OKTODO.IRowsetUpdate::GetOriginalData(C,DB_E_NOTREENTRANT) {} " L" L3.ROW_DELETE.SYNCHAFTER.IRowsetUpdate::GetOriginalData(C,DB_E_NOTREENTRANT) {} " L" } " L" IRowsetChange::DeleteRows(A) " L" { " L" L1.ROW_DELETE.DIDEVENT.IRowsetUpdate::GetOriginalData(D,DB_E_NOTREENTRANT) {} " L" } " L" } " L" } " L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL DeleteRows_Bufferred::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CExecutionManager::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(InsertRow) //*----------------------------------------------------------------------- //| Test Case: InsertRow - Tests Notifications for IRowsetChange::InsertRow //| Created: 09/29/96 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL InsertRow::Init() { // {{ TCW_INIT_BASECLASS_CHECK if(CExecutionManager::Init()) // }} { //Verify Rowset can be created... TEST_PROVIDER(CreateRowset(CHANGE_IMMEDIATE)==S_OK); return TRUE; } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc ROW_INSERT - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow::Variation_1() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.OKTODO.RETURN_ACCEPT " L" }" L" IRowsetChange::InsertRow(B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow::Variation_2() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow::Variation_3() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc ROW_INSERT - DB_E_NOTREENTRANT // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow::Variation_4() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.OKTODO.IRowsetChange::InsertRow(C, DB_E_NOTREENTRANT) {} " L" }" L" IRowsetChange::InsertRow(B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc ROW_INSERT - DB_E_CANCELED // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow::Variation_5() { //Make sure the Veto of InsertRow actually occrrued. //Row handle should not be valid after delete WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.ABOUTTODO.RETURN_VETO " L" }" L" IRowsetChange::SetData(A,2,DB_E_BADROWHANDLE) {} " L" IRowsetChange::InsertRow(B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(6) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow::Variation_6() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(7) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow::Variation_7() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(8) //*----------------------------------------------------------------------- // @mfunc ROW_INSERT - Veto OKTODO, Listener 1 // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow::Variation_8() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.OKTODO.RETURN_VETO " L" }" L" IRowsetChange::InsertRow(B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(9) //*----------------------------------------------------------------------- // @mfunc ROW_INSERT - Veto ABOUTTODO, Listener 1 // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow::Variation_9() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.ABOUTTODO.RETURN_VETO " L" }" L" IRowsetChange::InsertRow(B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(10) //*----------------------------------------------------------------------- // @mfunc ROW_INSERT - Veto SYNCHAFTER, Listener 2 // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow::Variation_10() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L2.ROW_INSERT.SYNCHAFTER.RETURN_VETO " L" }" L" IRowsetChange::InsertRow(B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(11) //*----------------------------------------------------------------------- // @mfunc ROW_INSERT - Veto DIDEVENT, Listener 3 // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow::Variation_11() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.DIDEVENT.RETURN_VETO " L" }" L" IRowsetChange::InsertRow(B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(12) //*----------------------------------------------------------------------- // @mfunc ROW_INSERT - Veto FAILEDTODO, Listener 3 // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow::Variation_12() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.ABOUTTODO.RETURN_VETO " L" L1.ROW_INSERT.FAILEDTODO.RETURN_VETO " L" }" L" IRowsetChange::InsertRow(B) {} " L" }" L" }" L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROW_INSERT, DBEVENTPHASE_ABOUTTODO)); TESTC(Execute(CommandString, CHANGE_IMMEDIATE)); CLEANUP: TRETURN; } // }} // {{ TCW_VAR_PROTOTYPE(13) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow::Variation_13() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(14) //*----------------------------------------------------------------------- // @mfunc ROW_INSERT - UNWANTED REASON // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow::Variation_14() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.OKTODO.RETURN_UNWANTEDREASON " L" }" L" IRowsetChange::InsertRow(B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(15) //*----------------------------------------------------------------------- // @mfunc ROW_INSERT - UNWANTED PHASE OKTODO // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow::Variation_15() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.OKTODO.RETURN_UNWANTEDPHASE " L" }" L" IRowsetChange::InsertRow(B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(16) //*----------------------------------------------------------------------- // @mfunc ROW_INSERT - UNWANTED PHASE ABOUTTODO // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow::Variation_16() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.ABOUTTODO.RETURN_UNWANTEDPHASE " L" }" L" IRowsetChange::InsertRow(B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(17) //*----------------------------------------------------------------------- // @mfunc ROW_INSERT - UNWANTED PHASE SYNCHAFTER // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow::Variation_17() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.SYNCHAFTER.RETURN_UNWANTEDPHASE " L" }" L" IRowsetChange::InsertRow(B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(18) //*----------------------------------------------------------------------- // @mfunc ROW_INSERT - UNWANTED PHASE DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow::Variation_18() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.DIDEVENT.RETURN_UNWANTEDPHASE " L" }" L" IRowsetChange::InsertRow(B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(19) //*----------------------------------------------------------------------- // @mfunc ROW_INSERT - UNWANTED PHASE FAILEDTODO // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow::Variation_19() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.ABOUTTODO.RETURN_VETO " L" L1.ROW_INSERT.FAILEDTODO.RETURN_UNWANTEDPHASE " L" }" L" IRowsetChange::InsertRow(B) {} " L" }" L" }" L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROW_INSERT, DBEVENTPHASE_ABOUTTODO)); TESTC(Execute(CommandString, CHANGE_IMMEDIATE)); CLEANUP: TRETURN; } // }} // {{ TCW_VAR_PROTOTYPE(20) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow::Variation_20() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(21) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow::Variation_21() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(22) //*----------------------------------------------------------------------- // @mfunc ROW_INSERT - E_FAIL - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow::Variation_22() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.OKTODO.RETURN_EFAIL " L" L1.ROW_INSERT.ABOUTTODO.RETURN_EFAIL " L" L1.ROW_INSERT.SYNCHAFTER.RETURN_EFAIL " L" L1.ROW_INSERT.DIDEVENT.RETURN_EFAIL " L" }" L" IRowsetChange::InsertRow(B) " L" {" L" L1.ROW_INSERT.ABOUTTODO.RETURN_VETO " L" }" L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(23) //*----------------------------------------------------------------------- // @mfunc ROW_INSERT - E_OUTOFMEMORY - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow::Variation_23() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.OKTODO.RETURN_EOUTOFMEMORY " L" L1.ROW_INSERT.ABOUTTODO.RETURN_EOUTOFMEMORY " L" L1.ROW_INSERT.SYNCHAFTER.RETURN_EOUTOFMEMORY " L" L1.ROW_INSERT.DIDEVENT.RETURN_EOUTOFMEMORY " L" }" L" IRowsetChange::InsertRow(B) " L" {" L" L1.ROW_INSERT.ABOUTTODO.RETURN_VETO " L" }" L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(24) //*----------------------------------------------------------------------- // @mfunc ROW_INSERT - E_INVALIDARG - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow::Variation_24() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.OKTODO.RETURN_EINVALIDARG " L" L1.ROW_INSERT.ABOUTTODO.RETURN_EINVALIDARG " L" L1.ROW_INSERT.SYNCHAFTER.RETURN_EINVALIDARG " L" L1.ROW_INSERT.DIDEVENT.RETURN_EINVALIDARG " L" }" L" IRowsetChange::InsertRow(B) " L" {" L" L1.ROW_INSERT.ABOUTTODO.RETURN_VETO " L" }" L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(25) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow::Variation_25() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(26) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow::Variation_26() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(27) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - DB_E_BADACCESSORHANDLE // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow::Variation_27() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A,DB_E_BADACCESSORHANDLE) " L" {" L" }" L" IRowsetChange::InsertRow(B) " L" {" L" L1.ROW_INSERT.OKTODO.RETURN_ACCEPT " L" }" L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(28) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - EmptyRowset // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow::Variation_28() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.OKTODO.RETURN_ACCEPT " L" }" L" IRowsetChange::InsertRow(B) " L" {" L" L1.ROW_INSERT.OKTODO.RETURN_ACCEPT " L" }" L" }" L" }" L"}"; return Execute(CommandString, EMPTY_ROWSET | CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(29) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Add/Remove Listeners // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow::Variation_29() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.OKTODO.RETURN_ADVISE " L" }" L" IRowsetChange::InsertRow(B) " L" {" L" L1.ROW_INSERT.OKTODO.RETURN_UNADVISE " L" }" L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(30) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - GetData // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow::Variation_30() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A) {} " L" IRowsetChange::InsertRow(B) " L" {" L" L1.ROW_INSERT.OKTODO.IRowset::GetData(A) {} " L" }" L" IRowset::GetData(A) {} " L" IRowsetChange::InsertRow(C) " L" {" L" L1.ROW_INSERT.OKTODO.IRowset::GetData(B) {} " L" }" L" IRowset::GetData(B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL InsertRow::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CExecutionManager::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(InsertRow_Bufferred) //*----------------------------------------------------------------------- //| Test Case: InsertRow_Bufferred - Test Notifications for IRowsetChange::InsertRow in Buffered Mode //| Created: 09/29/96 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL InsertRow_Bufferred::Init() { // {{ TCW_INIT_BASECLASS_CHECK if(CExecutionManager::Init()) // }} { //Verify Rowset can be created... TEST_PROVIDER(CreateRowset(CHANGE_BUFFERRED)==S_OK); return TRUE; } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc ROW_INSERT - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow_Bufferred::Variation_1() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.OKTODO.RETURN_ACCEPT " L" }" L" IRowsetChange::InsertRow(B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow_Bufferred::Variation_2() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow_Bufferred::Variation_3() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc ROW_INSERT - DB_E_NOTREENTRANT // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow_Bufferred::Variation_4() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.OKTODO.IRowsetChange::InsertRow(C, DB_E_NOTREENTRANT) {} " L" }" L" IRowsetChange::InsertRow(B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc ROW_INSERT - DB_E_CANCELED // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow_Bufferred::Variation_5() { //Need to make sure the Veto was successful //Row should not be valid after insert WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.ABOUTTODO.RETURN_VETO " L" }" L" IRowsetChange::SetData(A,2,DB_E_BADROWHANDLE) {} " L" IRowsetChange::InsertRow(B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(6) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow_Bufferred::Variation_6() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(7) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow_Bufferred::Variation_7() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(8) //*----------------------------------------------------------------------- // @mfunc ROW_INSERT - Veto OKTODO, Listener 1 // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow_Bufferred::Variation_8() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.OKTODO.RETURN_VETO " L" }" L" IRowsetChange::InsertRow(B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(9) //*----------------------------------------------------------------------- // @mfunc ROW_INSERT - Veto ABOUTTODO, Listener 1 // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow_Bufferred::Variation_9() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.ABOUTTODO.RETURN_VETO " L" }" L" IRowsetChange::InsertRow(B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(10) //*----------------------------------------------------------------------- // @mfunc ROW_INSERT - Veto SYNCHAFTER, Listener 2 // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow_Bufferred::Variation_10() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L2.ROW_INSERT.SYNCHAFTER.RETURN_VETO " L" }" L" IRowsetChange::InsertRow(B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(11) //*----------------------------------------------------------------------- // @mfunc ROW_INSERT - Veto DIDEVENT, Listener 3 // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow_Bufferred::Variation_11() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.DIDEVENT.RETURN_VETO " L" }" L" IRowsetChange::InsertRow(B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(12) //*----------------------------------------------------------------------- // @mfunc ROW_INSERT - Veto FAILEDTODO, Listener 3 // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow_Bufferred::Variation_12() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.ABOUTTODO.RETURN_VETO " L" L1.ROW_INSERT.FAILEDTODO.RETURN_VETO " L" }" L" IRowsetChange::InsertRow(B) {} " L" }" L" }" L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROW_INSERT, DBEVENTPHASE_ABOUTTODO)); TESTC(Execute(CommandString, CHANGE_BUFFERRED)); CLEANUP: TRETURN; } // }} // {{ TCW_VAR_PROTOTYPE(13) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow_Bufferred::Variation_13() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(14) //*----------------------------------------------------------------------- // @mfunc ROW_INSERT - UNWANTED REASON // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow_Bufferred::Variation_14() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.OKTODO.RETURN_UNWANTEDREASON " L" }" L" IRowsetChange::InsertRow(B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(15) //*----------------------------------------------------------------------- // @mfunc ROW_INSERT - UNWANTED PHASE OKTODO // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow_Bufferred::Variation_15() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.OKTODO.RETURN_UNWANTEDPHASE " L" }" L" IRowsetChange::InsertRow(B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(16) //*----------------------------------------------------------------------- // @mfunc ROW_INSERT - UNWANTED PHASE ABOUTTODO // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow_Bufferred::Variation_16() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.ABOUTTODO.RETURN_UNWANTEDPHASE " L" }" L" IRowsetChange::InsertRow(B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(17) //*----------------------------------------------------------------------- // @mfunc ROW_INSERT - UNWANTED PHASE SYNCHAFTER // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow_Bufferred::Variation_17() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.SYNCHAFTER.RETURN_UNWANTEDPHASE " L" }" L" IRowsetChange::InsertRow(B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(18) //*----------------------------------------------------------------------- // @mfunc ROW_INSERT - UNWANTED PHASE DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow_Bufferred::Variation_18() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.DIDEVENT.RETURN_UNWANTEDPHASE " L" }" L" IRowsetChange::InsertRow(B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(19) //*----------------------------------------------------------------------- // @mfunc ROW_INSERT - UNWANTED PHASE FAILEDTODO // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow_Bufferred::Variation_19() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.ABOUTTODO.RETURN_VETO " L" L1.ROW_INSERT.FAILEDTODO.RETURN_UNWANTEDPHASE " L" }" L" IRowsetChange::InsertRow(B) {} " L" }" L" }" L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROW_INSERT, DBEVENTPHASE_ABOUTTODO)); TESTC(Execute(CommandString, CHANGE_BUFFERRED)); CLEANUP: TRETURN; } // }} // {{ TCW_VAR_PROTOTYPE(20) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow_Bufferred::Variation_20() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(21) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow_Bufferred::Variation_21() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(22) //*----------------------------------------------------------------------- // @mfunc ROW_INSERT - E_FAIL - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow_Bufferred::Variation_22() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.OKTODO.RETURN_EFAIL " L" L1.ROW_INSERT.ABOUTTODO.RETURN_EFAIL " L" L1.ROW_INSERT.SYNCHAFTER.RETURN_EFAIL " L" L1.ROW_INSERT.DIDEVENT.RETURN_EFAIL " L" }" L" IRowsetChange::InsertRow(B) " L" {" L" L1.ROW_INSERT.ABOUTTODO.RETURN_VETO " L" }" L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(23) //*----------------------------------------------------------------------- // @mfunc ROW_INSERT - E_OUTOFMEMORY - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow_Bufferred::Variation_23() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.OKTODO.RETURN_EOUTOFMEMORY " L" L1.ROW_INSERT.ABOUTTODO.RETURN_EOUTOFMEMORY " L" L1.ROW_INSERT.SYNCHAFTER.RETURN_EOUTOFMEMORY " L" L1.ROW_INSERT.DIDEVENT.RETURN_EOUTOFMEMORY " L" }" L" IRowsetChange::InsertRow(B) " L" {" L" L1.ROW_INSERT.ABOUTTODO.RETURN_VETO " L" }" L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(24) //*----------------------------------------------------------------------- // @mfunc ROW_INSERT - E_INVALIDARG - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow_Bufferred::Variation_24() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.OKTODO.RETURN_EINVALIDARG " L" L1.ROW_INSERT.ABOUTTODO.RETURN_EINVALIDARG " L" L1.ROW_INSERT.SYNCHAFTER.RETURN_EINVALIDARG " L" L1.ROW_INSERT.DIDEVENT.RETURN_EINVALIDARG " L" }" L" IRowsetChange::InsertRow(B) " L" {" L" L1.ROW_INSERT.ABOUTTODO.RETURN_VETO " L" }" L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(25) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow_Bufferred::Variation_25() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(26) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow_Bufferred::Variation_26() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(27) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - DB_E_BADACCESSORHANDLE // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow_Bufferred::Variation_27() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A,DB_E_BADACCESSORHANDLE) " L" {" L" }" L" IRowsetChange::InsertRow(B) " L" {" L" L1.ROW_INSERT.ABOUTTODO.RETURN_ACCEPT " L" }" L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(28) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - EmptyRowset // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow_Bufferred::Variation_28() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.OKTODO.RETURN_ACCEPT " L" }" L" IRowsetChange::InsertRow(B) " L" {" L" L1.ROW_INSERT.OKTODO.RETURN_ACCEPT " L" }" L" }" L" }" L"}"; return Execute(CommandString, EMPTY_ROWSET | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(29) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Add/Remove Listeners // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow_Bufferred::Variation_29() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) " L" {" L" L1.ROW_INSERT.OKTODO.RETURN_UNADVISE " L" }" L" IRowsetChange::InsertRow(B) " L" {" L" L2.ROW_INSERT.OKTODO.RETURN_ADVISE " L" L3.ROW_INSERT.OKTODO.RETURN_UNADVISE " L" }" L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(30) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - GetData // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow_Bufferred::Variation_30() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) {} " L" IRowsetChange::InsertRow(B) " L" {" L" L1.ROW_INSERT.OKTODO.IRowset::GetData(A) {} " L" }" L" IRowsetChange::InsertRow(C) " L" {" L" L1.ROW_INSERT.OKTODO.IRowset::GetData(A) {} " L" L2.ROW_INSERT.OKTODO.IRowset::GetData(B) {} " L" }" L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(31) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - GetOriginalData // // @rdesc TEST_PASS or TEST_FAIL // int InsertRow_Bufferred::Variation_31() { // From the spec: //GetOriginalData() gets the data most recently fetched from or transmitted to the data store; //does not get values based on pending changes => we can not call GetOriginalData for newly inserted row untill it's transmeted //Commented out this variation /* WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowsetChange::InsertRow(A) {} " L" IRowsetChange::InsertRow(B) " L" {" L" L1.ROW_INSERT.OKTODO.IRowsetUpdate::GetOriginalData(A,DB_E_NOTREENTRANT) {} " L" }" L" IRowsetChange::InsertRow(C) " L" {" L" L1.ROW_INSERT.OKTODO.IRowsetUpdate::GetOriginalData(A,DB_E_NOTREENTRANT) {} " L" L2.ROW_INSERT.OKTODO.IRowsetUpdate::GetOriginalData(B,DB_E_NOTREENTRANT) {} " L" L3.ROW_INSERT.DIDEVENT.IRowsetUpdate::GetOriginalData(C,DB_E_NOTREENTRANT) {} " L" }" L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); */ return TEST_SKIPPED; } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL InsertRow_Bufferred::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CExecutionManager::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(SetData) //*----------------------------------------------------------------------- //| Test Case: SetData - Tests Notifications for IRowsetChange::SetData //| Created: 09/29/96 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL SetData::Init() { // {{ TCW_INIT_BASECLASS_CHECK if(CExecutionManager::Init()) // }} { //Verify Rowset can be created... TEST_PROVIDER(CreateRowset(CHANGE_IMMEDIATE)==S_OK); return TRUE; } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc COLUMN_SET - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_1() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) {} " L" IRowsetChange::SetData(A,2) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_2() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_3() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc COLUMN_SET - DB_E_CANCELED // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_4() { //Need to make sure the Veto was successful //RowData should not have been altered after veto, GetData will ensure this WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.ABOUTTODO.RETURN_VETO " L" } " L" IRowset::GetData(A) {} " L" IRowsetChange::SetData(A,2) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc COLUMN_SET - DB_E_NOTREENTRANT // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_5() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) { L1.COLUMN_SET.OKTODO.IRowsetChange::SetData(A,2,DB_E_NOTREENTRANT) {} } " L" IRowsetChange::SetData(A,2) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(6) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_6() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(7) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_7() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(8) //*----------------------------------------------------------------------- // @mfunc COLUMN_SET - Veto OKTODO // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_8() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) { L1.COLUMN_SET.OKTODO.RETURN_VETO } " L" IRowsetChange::SetData(A,2) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(9) //*----------------------------------------------------------------------- // @mfunc COLUMN_SET - Veto ABOUTTODO // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_9() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) { L1.COLUMN_SET.ABOUTTODO.RETURN_VETO } " L" IRowsetChange::SetData(A,2) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(10) //*----------------------------------------------------------------------- // @mfunc COLUMN_SET - Veto SYNCHAFTER // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_10() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) { L1.COLUMN_SET.SYNCHAFTER.RETURN_VETO } " L" IRowsetChange::SetData(A,2) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(11) //*----------------------------------------------------------------------- // @mfunc COLUMN_SET - Veto DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_11() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) { L1.COLUMN_SET.DIDEVENT.RETURN_VETO } " L" IRowsetChange::SetData(A,2) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(12) //*----------------------------------------------------------------------- // @mfunc COLUMN_SET - Veto FAILEDTODO // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_12() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.ABOUTTODO.RETURN_VETO " L" L1.COLUMN_SET.FAILEDTODO.RETURN_VETO " L" } " L" IRowsetChange::SetData(A,2) {} " L" }" L" }" L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_COLUMN_SET, DBEVENTPHASE_ABOUTTODO)); TESTC(Execute(CommandString, CHANGE_IMMEDIATE)); CLEANUP: TRETURN; } // }} // {{ TCW_VAR_PROTOTYPE(13) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_13() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(14) //*----------------------------------------------------------------------- // @mfunc COLUMN_SET - UNWANTED REASON // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_14() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.OKTODO.RETURN_UNWANTEDREASON " L" } " L" IRowsetChange::SetData(A,2) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(15) //*----------------------------------------------------------------------- // @mfunc COLUMN_SET - UNWANTED PHASE OKTODO // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_15() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.OKTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowsetChange::SetData(A,2) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(16) //*----------------------------------------------------------------------- // @mfunc COLUMN_SET - UNWANTED PHASE ABOUTTO // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_16() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.ABOUTTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowsetChange::SetData(A,2) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(17) //*----------------------------------------------------------------------- // @mfunc COLUMN_SET - UNWANTED PHASE SYNCHAFTER // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_17() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.SYNCHAFTER.RETURN_UNWANTEDPHASE " L" } " L" IRowsetChange::SetData(A,2) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(18) //*----------------------------------------------------------------------- // @mfunc COLUMN_SET- UNWANTED PHASE DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_18() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.DIDEVENT.RETURN_UNWANTEDPHASE " L" } " L" IRowsetChange::SetData(A,2) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(19) //*----------------------------------------------------------------------- // @mfunc COLUMN_SET - UNWANTED PHASE FAILEDTODO // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_19() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.ABOUTTODO.RETURN_VETO " L" L1.COLUMN_SET.FAILEDTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowsetChange::SetData(A,2) {} " L" }" L" }" L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_COLUMN_SET, DBEVENTPHASE_ABOUTTODO)); TESTC(Execute(CommandString, CHANGE_IMMEDIATE)); CLEANUP: TRETURN; } // }} // {{ TCW_VAR_PROTOTYPE(20) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_20() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(21) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_21() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(22) //*----------------------------------------------------------------------- // @mfunc COLUMN_SET - E_FAIL - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_22() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L3.COLUMN_SET.OKTODO.RETURN_EFAIL " L" L2.COLUMN_SET.ABOUTTODO.RETURN_EFAIL " L" L1.COLUMN_SET.SYNCHAFTER.RETURN_EFAIL " L" L3.COLUMN_SET.DIDEVENT.RETURN_EFAIL " L" } " L" IRowsetChange::SetData(A,2) " L" { " L" L2.COLUMN_SET.ABOUTTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(23) //*----------------------------------------------------------------------- // @mfunc COLUMN_SET - E_OUTOFMEMORY - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_23() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L3.COLUMN_SET.OKTODO.RETURN_EOUTOFMEMORY " L" L2.COLUMN_SET.ABOUTTODO.RETURN_EOUTOFMEMORY " L" L1.COLUMN_SET.SYNCHAFTER.RETURN_EOUTOFMEMORY " L" L3.COLUMN_SET.DIDEVENT.RETURN_EOUTOFMEMORY " L" } " L" IRowsetChange::SetData(A,2) " L" { " L" L2.COLUMN_SET.ABOUTTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(24) //*----------------------------------------------------------------------- // @mfunc COLUMN_SET - E_INVALIDARG - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_24() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L3.COLUMN_SET.OKTODO.RETURN_EINVALIDARG " L" L2.COLUMN_SET.ABOUTTODO.RETURN_EINVALIDARG " L" L1.COLUMN_SET.SYNCHAFTER.RETURN_EINVALIDARG " L" L3.COLUMN_SET.DIDEVENT.RETURN_EINVALIDARG " L" } " L" IRowsetChange::SetData(A,2) " L" { " L" L2.COLUMN_SET.ABOUTTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(25) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_25() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(26) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_26() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(27) //*----------------------------------------------------------------------- // @mfunc COLUMN_RECALCULATED - DB_E_ERRORSOCCURRED - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_27() { //Try to change the Data for the computed column. //Should get DB_E_ERRORSOCCURRED with no notifications //We need the only computed column is been modified in SetData to be sure //that modification of the computed column causes an error (and not other columns) //so use special mode COMPUTED_COLUMNS_INCLUDE (only one column will be included to m_rgUpBindings) WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,DB_E_ERRORSOCCURRED) " L" { " L" } " L" IRowsetChange::SetData(A,2,DB_E_ERRORSOCCURRED) " L" { " L" } " L" }" L" }" L"}"; //COMPUTED_COLUMNS - makes the first column the input and //the second column the computed column (col1-col2). return Execute(CommandString, COMPUTED_COLUMNS_INCLUDE | CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(28) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_28() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(29) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_29() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(30) //*----------------------------------------------------------------------- // @mfunc COLUMN_RECALCULATED - DB_E_CANCELED // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_30() { //Need to make sure the Veto was successful //RowData should not have been altered after veto, GetData will ensure this WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_RECALCULATED.DIDEVENT.RETURN_VETO " L" } " L" IRowset::GetData(A) {} " L" IRowsetChange::SetData(A,2) " L" { " L" } " L" }" L" }" L"}"; //COMPUTED_COLUMNS - makes the first column the input and //the second column the computed column (col1-col2). return Execute(CommandString, COMPUTED_COLUMNS | CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(31) //*----------------------------------------------------------------------- // @mfunc COLUMN_RECALCULATED - DB_E_NOTREENTRANT // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_31() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_RECALCULATED.DIDEVENT.IRowsetChange::SetData(A,2,DB_E_NOTREENTRANT) {} " L" } " L" IRowsetChange::SetData(A,2) " L" { " L" } " L" }" L" }" L"}"; //COMPUTED_COLUMNS - makes the first column the input and //the second column the computed column (col1-col2). return Execute(CommandString, COMPUTED_COLUMNS | CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(32) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_32() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(33) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_33() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(34) //*----------------------------------------------------------------------- // @mfunc COLUMN_RECALCULATED - Veto DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_34() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_RECALCULATED.DIDEVENT.RETURN_VETO " L" } " L" IRowsetChange::SetData(A,2) " L" { " L" } " L" }" L" }" L"}"; //COMPUTED_COLUMNS - makes the first column the input and //the second column the computed column (col1-col2). return Execute(CommandString, COMPUTED_COLUMNS | CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(35) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_35() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(36) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_36() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(37) //*----------------------------------------------------------------------- // @mfunc COLUMN_RECALCULATED - UNWANTED REASON // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_37() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_RECALCULATED.DIDEVENT.RETURN_UNWANTEDREASON " L" } " L" IRowsetChange::SetData(A,2) " L" { " L" } " L" }" L" }" L"}"; //COMPUTED_COLUMNS - makes the first column the input and //the second column the computed column (col1-col2). return Execute(CommandString, COMPUTED_COLUMNS | CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(38) //*----------------------------------------------------------------------- // @mfunc COLUMN_RECALCULATED - UNWANTED PHASE DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_38() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_RECALCULATED.DIDEVENT.RETURN_UNWANTEDPHASE " L" } " L" IRowsetChange::SetData(A,2) " L" { " L" } " L" }" L" }" L"}"; //COMPUTED_COLUMNS - makes the first column the input and //the second column the computed column (col1-col2). return Execute(CommandString, COMPUTED_COLUMNS | CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(39) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_39() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(40) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_40() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(41) //*----------------------------------------------------------------------- // @mfunc COLUMN_RECALCULATED - E_FAIL - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_41() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_RECALCULATED.DIDEVENT.RETURN_EFAIL " L" } " L" IRowsetChange::SetData(A,2) " L" { " L" } " L" }" L" }" L"}"; //COMPUTED_COLUMNS - makes the first column the input and //the second column the computed column (col1-col2). return Execute(CommandString, COMPUTED_COLUMNS | CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(42) //*----------------------------------------------------------------------- // @mfunc COLUMN_RECALCULATED - E_OUTOFMEMORY - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_42() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_RECALCULATED.DIDEVENT.RETURN_EOUTOFMEMORY " L" } " L" IRowsetChange::SetData(A,2) " L" { " L" } " L" }" L" }" L"}"; //COMPUTED_COLUMNS - makes the first column the input and //the second column the computed column (col1-col2). return Execute(CommandString, COMPUTED_COLUMNS | CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(43) //*----------------------------------------------------------------------- // @mfunc COLUMN_RECALCULATED - E_INVALIDARG - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_43() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_RECALCULATED.DIDEVENT.RETURN_EINVALIDARG " L" } " L" IRowsetChange::SetData(A,2) " L" { " L" } " L" }" L" }" L"}"; //COMPUTED_COLUMNS - makes the first column the input and //the second column the computed column (col1-col2). return Execute(CommandString, COMPUTED_COLUMNS | CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(44) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_44() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(45) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_45() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(46) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - DB_E_BADACCESSORHANDLE // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_46() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,DB_E_BADACCESSORHANDLE) " L" { " L" } " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.DIDEVENT.RETURN_ACCEPT " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(47) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - EmptyRowset // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_47() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowsetChange::SetData(A,2,DB_E_BADROWHANDLE) " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, EMPTY_ROWSET | CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(48) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Add/Remove Listeners // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_48() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.ABOUTTODO.RETURN_ADVISE " L" } " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.DIDEVENT.RETURN_UNADVISE " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(49) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - GetData // // @rdesc TEST_PASS or TEST_FAIL // int SetData::Variation_49() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.OKTODO.IRowset::GetData(A) {} " L" } " L" IRowsetChange::SetData(B,2) " L" { " L" L1.COLUMN_SET.OKTODO.IRowset::GetData(A) {} " L" L2.COLUMN_SET.ABOUTTODO.IRowset::GetData(B) {} " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_IMMEDIATE); } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL SetData::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CExecutionManager::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(SetData_Bufferred) //*----------------------------------------------------------------------- //| Test Case: SetData_Bufferred - Test Notifications for IRowsetChange::SetData in Buffered Mode //| Created: 03/24/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL SetData_Bufferred::Init() { // {{ TCW_INIT_BASECLASS_CHECK if(CExecutionManager::Init()) // }} { //Verify Rowset can be created... TEST_PROVIDER(CreateRowset(CHANGE_BUFFERRED)==S_OK); return TRUE; } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc ROW_FIRSTCHANGE - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_1() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.ROW_FIRSTCHANGE.OKTODO.RETURN_ACCEPT " L" } " L" IRowsetChange::SetData(A,2) {} " L" IRowsetUpdate::Update(A) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.ROW_FIRSTCHANGE.OKTODO.RETURN_ACCEPT " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc ROW_FIRSTCHANGE - InsertRow(A), SetData(A) - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_2() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_3() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc ROW_FIRSTCHANGE - DB_E_CANCELED // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_4() { //Need to make sure the Veto was successful //FIRSTCHANGE should be fired again WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.ROW_FIRSTCHANGE.ABOUTTODO.RETURN_VETO " L" } " L" IRowset::GetData(A) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.ROW_FIRSTCHANGE.ABOUTTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc ROW_FIRSTCHANGE - DB_E_NOTREENTRANT // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_5() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.ROW_FIRSTCHANGE.OKTODO.IRowsetChange::SetData(A,2,DB_E_NOTREENTRANT) {} " L" } " L" IRowsetChange::SetData(A,2) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(6) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_6() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(7) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_7() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(8) //*----------------------------------------------------------------------- // @mfunc ROW_FIRSTCHANGE - Veto OKTODO // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_8() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.ROW_FIRSTCHANGE.OKTODO.RETURN_VETO " L" } " L" IRowsetChange::SetData(A,2) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(9) //*----------------------------------------------------------------------- // @mfunc ROW_FIRSTCHANGE - Veto ABOUTTODO // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_9() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.ROW_FIRSTCHANGE.ABOUTTODO.RETURN_VETO " L" } " L" IRowsetChange::SetData(A,2) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(10) //*----------------------------------------------------------------------- // @mfunc ROW_FIRSTCHANGE - Veto SYNCHAFTER // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_10() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.ROW_FIRSTCHANGE.SYNCHAFTER.RETURN_VETO " L" } " L" IRowsetChange::SetData(A,2) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(11) //*----------------------------------------------------------------------- // @mfunc ROW_FIRSTCHANGE - Veto DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_11() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.ROW_FIRSTCHANGE.DIDEVENT.RETURN_VETO " L" } " L" IRowsetChange::SetData(A,2) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(12) //*----------------------------------------------------------------------- // @mfunc ROW_FIRSTCHANGE - Veto FAILEDTODO // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_12() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.ROW_FIRSTCHANGE.ABOUTTODO.RETURN_VETO " L" L1.ROW_FIRSTCHANGE.FAILEDTODO.RETURN_VETO " L" } " L" IRowsetChange::SetData(A,2) {} " L" }" L" }" L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROW_FIRSTCHANGE, DBEVENTPHASE_ABOUTTODO)); TESTC(Execute(CommandString, CHANGE_BUFFERRED)); CLEANUP: TRETURN; } // }} // {{ TCW_VAR_PROTOTYPE(13) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_13() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(14) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_14() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(15) //*----------------------------------------------------------------------- // @mfunc ROW_FIRSTCHANGE - UNWANTED REASON // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_15() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.ROW_FIRSTCHANGE.OKTODO.RETURN_UNWANTEDREASON " L" } " L" IRowsetChange::SetData(B,2) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(16) //*----------------------------------------------------------------------- // @mfunc ROW_FIRSTCHANGE - UNWANTED PHASE OKTODO // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_16() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.ROW_FIRSTCHANGE.OKTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowsetChange::SetData(B,2) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(17) //*----------------------------------------------------------------------- // @mfunc ROW_FIRSTCHANGE - UNWANTED PHASE ABOUTTODO // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_17() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.ROW_FIRSTCHANGE.ABOUTTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowsetChange::SetData(B,2) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(18) //*----------------------------------------------------------------------- // @mfunc ROW_FIRSTCHANGE - UNWANTED PHASE SYNCHAFTER // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_18() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.ROW_FIRSTCHANGE.SYNCHAFTER.RETURN_UNWANTEDPHASE " L" } " L" IRowsetChange::SetData(B,2) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(19) //*----------------------------------------------------------------------- // @mfunc ROW_FIRSTCHANGE - UNWANTED PHASE DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_19() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.ROW_FIRSTCHANGE.DIDEVENT.RETURN_UNWANTEDPHASE " L" } " L" IRowsetChange::SetData(B,2) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(20) //*----------------------------------------------------------------------- // @mfunc ROW_FIRSTCHANGE - UNWANTED PHASE FAILEDTODO // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_20() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.ROW_FIRSTCHANGE.ABOUTTODO.RETURN_VETO " L" L1.ROW_FIRSTCHANGE.FAILEDTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowsetChange::SetData(B,2) {} " L" }" L" }" L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROW_FIRSTCHANGE, DBEVENTPHASE_ABOUTTODO)); TESTC(Execute(CommandString, CHANGE_BUFFERRED)); CLEANUP: TRETURN; } // }} // {{ TCW_VAR_PROTOTYPE(21) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_21() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(22) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_22() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(23) //*----------------------------------------------------------------------- // @mfunc ROW_FIRSTCHANGE - E_FAIL - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_23() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.ROW_FIRSTCHANGE.OKTODO.RETURN_EFAIL " L" L2.ROW_FIRSTCHANGE.ABOUTTODO.RETURN_EFAIL " L" L3.ROW_FIRSTCHANGE.SYNCHAFTER.RETURN_EFAIL " L" L1.ROW_FIRSTCHANGE.DIDEVENT.RETURN_EFAIL " L" } " L" IRowsetChange::SetData(B,2) " L" { " L" L1.ROW_FIRSTCHANGE.ABOUTTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(24) //*----------------------------------------------------------------------- // @mfunc ROW_FIRSTCHANGE - E_OUTOFMEMORY - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_24() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.ROW_FIRSTCHANGE.OKTODO.RETURN_EOUTOFMEMORY " L" L2.ROW_FIRSTCHANGE.ABOUTTODO.RETURN_EOUTOFMEMORY " L" L3.ROW_FIRSTCHANGE.SYNCHAFTER.RETURN_EOUTOFMEMORY " L" L1.ROW_FIRSTCHANGE.DIDEVENT.RETURN_EOUTOFMEMORY " L" } " L" IRowsetChange::SetData(B,2) " L" { " L" L1.ROW_FIRSTCHANGE.ABOUTTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(25) //*----------------------------------------------------------------------- // @mfunc ROW_FIRSTCHANGE - E_INVALIDARG - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_25() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.ROW_FIRSTCHANGE.OKTODO.RETURN_EINVALIDARG " L" L2.ROW_FIRSTCHANGE.ABOUTTODO.RETURN_EINVALIDARG " L" L3.ROW_FIRSTCHANGE.SYNCHAFTER.RETURN_EINVALIDARG " L" L1.ROW_FIRSTCHANGE.DIDEVENT.RETURN_EINVALIDARG " L" } " L" IRowsetChange::SetData(B,2) " L" { " L" L1.ROW_FIRSTCHANGE.ABOUTTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(26) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_26() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(27) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_27() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(28) //*----------------------------------------------------------------------- // @mfunc COLUMN_SET - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_28() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.OKTODO.RETURN_ACCEPT " L" } " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.OKTODO.RETURN_ACCEPT " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(29) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_29() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(30) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_30() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(31) //*----------------------------------------------------------------------- // @mfunc COLUMN_SET - DB_E_CANCELED // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_31() { //Need to verify the Veto was successful //SetData should not have modified the row, GetData will verify this WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.ABOUTTODO.RETURN_VETO " L" } " L" IRowset::GetData(A) {} " L" IRowsetChange::SetData(A,2) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(32) //*----------------------------------------------------------------------- // @mfunc COLUMN_SET - DB_E_NOTREENTRANT // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_32() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.OKTODO.IRowsetChange::SetData(A,2,DB_E_NOTREENTRANT) {} " L" } " L" IRowsetChange::SetData(A,2) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(33) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_33() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(34) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_34() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(35) //*----------------------------------------------------------------------- // @mfunc COLUMN_SET - Veto OKTODO // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_35() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.OKTODO.RETURN_VETO " L" } " L" IRowsetChange::SetData(A,2) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(36) //*----------------------------------------------------------------------- // @mfunc COLUMN_SET - Veto ABOUTTODO // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_36() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.ABOUTTODO.RETURN_VETO " L" } " L" IRowsetChange::SetData(A,2) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(37) //*----------------------------------------------------------------------- // @mfunc COLUMN_SET - Veto SYNCHAFTER // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_37() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.SYNCHAFTER.RETURN_VETO " L" } " L" IRowsetChange::SetData(A,2) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(38) //*----------------------------------------------------------------------- // @mfunc COLUMN_SET - Veto DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_38() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.DIDEVENT.RETURN_VETO " L" } " L" IRowsetChange::SetData(A,2) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(39) //*----------------------------------------------------------------------- // @mfunc COLUMN_SET - Veto FAILEDTODO // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_39() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.ABOUTTODO.RETURN_VETO " L" L1.COLUMN_SET.FAILEDTODO.RETURN_VETO " L" } " L" IRowsetChange::SetData(A,2) {} " L" }" L" }" L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROW_FIRSTCHANGE, DBEVENTPHASE_ABOUTTODO)); TESTC(Execute(CommandString, CHANGE_BUFFERRED)); CLEANUP: TRETURN; } // }} // {{ TCW_VAR_PROTOTYPE(40) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_40() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(41) //*----------------------------------------------------------------------- // @mfunc COLUMN_SET - UNWANTED REASON // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_41() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.OKTODO.RETURN_UNWANTEDREASON " L" } " L" IRowsetChange::SetData(A,2) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(42) //*----------------------------------------------------------------------- // @mfunc COLUMN_SET - UNWANTED PHASE OKTODO // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_42() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.OKTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowsetChange::SetData(A,2) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(43) //*----------------------------------------------------------------------- // @mfunc COLUMN_SET - UNWANTED PHASE ABOUTTO // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_43() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.ABOUTTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowsetChange::SetData(A,2) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(44) //*----------------------------------------------------------------------- // @mfunc COLUMN_SET - UNWANTED PHASE SYNCHAFTER // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_44() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.SYNCHAFTER.RETURN_UNWANTEDPHASE " L" } " L" IRowsetChange::SetData(A,2) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(45) //*----------------------------------------------------------------------- // @mfunc COLUMN_SET- UNWANTED PHASE DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_45() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.DIDEVENT.RETURN_UNWANTEDPHASE " L" } " L" IRowsetChange::SetData(A,2) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(46) //*----------------------------------------------------------------------- // @mfunc COLUMN_SET - UNWANTED PHASE FAILEDTODO // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_46() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.ABOUTTODO.RETURN_VETO " L" L1.COLUMN_SET.FAILEDTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowsetChange::SetData(A,2) {} " L" }" L" }" L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROW_FIRSTCHANGE, DBEVENTPHASE_ABOUTTODO)); TESTC(Execute(CommandString, CHANGE_BUFFERRED)); CLEANUP: TRETURN; } // }} // {{ TCW_VAR_PROTOTYPE(47) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_47() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(48) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_48() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(49) //*----------------------------------------------------------------------- // @mfunc COLUMN_SET - E_FAIL - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_49() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.OKTODO.RETURN_EFAIL " L" L2.COLUMN_SET.ABOUTTODO.RETURN_EFAIL " L" L3.COLUMN_SET.SYNCHAFTER.RETURN_EFAIL " L" L1.COLUMN_SET.DIDEVENT.RETURN_EFAIL " L" } " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.ABOUTTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(50) //*----------------------------------------------------------------------- // @mfunc COLUMN_SET - E_OUTOFMEMORY - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_50() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.OKTODO.RETURN_EOUTOFMEMORY " L" L2.COLUMN_SET.ABOUTTODO.RETURN_EOUTOFMEMORY " L" L3.COLUMN_SET.SYNCHAFTER.RETURN_EOUTOFMEMORY " L" L1.COLUMN_SET.DIDEVENT.RETURN_EOUTOFMEMORY " L" } " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.ABOUTTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(51) //*----------------------------------------------------------------------- // @mfunc COLUMN_SET - E_INVALIDARG - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_51() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.OKTODO.RETURN_EINVALIDARG " L" L2.COLUMN_SET.ABOUTTODO.RETURN_EINVALIDARG " L" L3.COLUMN_SET.SYNCHAFTER.RETURN_EINVALIDARG " L" L1.COLUMN_SET.DIDEVENT.RETURN_EINVALIDARG " L" } " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.ABOUTTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(52) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_52() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(53) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_53() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(54) //*----------------------------------------------------------------------- // @mfunc COLUMN_RECALCULATED - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_54() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) {} " L" IRowsetUpdate::Update(A) " L" { " L" L1.COLUMN_RECALCULATED.DIDEVENT.RETURN_ACCEPT " L" } " L" IRowsetChange::SetData(A,2) " L" { " L" } " L" }" L" }" L"}"; //COMPUTED_COLUMNS - makes the first column the input and //the second column the computed column (col1-col2). return Execute(CommandString, COMPUTED_COLUMNS | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(55) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_55() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(56) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_56() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(57) //*----------------------------------------------------------------------- // @mfunc COLUMN_RECALCULATED - DB_E_CANCELED // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_57() { //Need to make sure the Veto was successful //RowData should not have been altered after veto, GetOriginalData will ensure this WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) {} " L" IRowsetUpdate::Update(A) " L" { " L" L1.COLUMN_RECALCULATED.DIDEVENT.RETURN_VETO " L" } " L" IRowsetUpdate::GetOriginalData(A) {} " L" IRowsetChange::SetData(A,2) " L" { " L" } " L" }" L" }" L"}"; //COMPUTED_COLUMNS - makes the first column the input and //the second column the computed column (col1-col2). return Execute(CommandString, COMPUTED_COLUMNS | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(58) //*----------------------------------------------------------------------- // @mfunc COLUMN_RECALCULATED - DB_E_NOTREENTRANT // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_58() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) {} " L" IRowsetUpdate::Update(A) " L" { " L" L1.COLUMN_RECALCULATED.DIDEVENT.IRowsetUpdate::Update(A) {} " L" } " L" IRowsetChange::SetData(A,2) " L" { " L" } " L" }" L" }" L"}"; //COMPUTED_COLUMNS - makes the first column the input and //the second column the computed column (col1-col2). return Execute(CommandString, COMPUTED_COLUMNS | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(59) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_59() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(60) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_60() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(61) //*----------------------------------------------------------------------- // @mfunc COLUMN_RECALCULATED - Veto DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_61() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) {} " L" IRowsetUpdate::Update(A) " L" { " L" L1.COLUMN_RECALCULATED.DIDEVENT.RETURN_VETO " L" } " L" IRowsetChange::SetData(A,2) " L" { " L" } " L" }" L" }" L"}"; //COMPUTED_COLUMNS - makes the first column the input and //the second column the computed column (col1-col2). return Execute(CommandString, COMPUTED_COLUMNS | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(62) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_62() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(63) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_63() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(64) //*----------------------------------------------------------------------- // @mfunc COLUMN_RECALCULATED - UNWANTED REASON // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_64() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) {} " L" IRowsetUpdate::Update(A) " L" { " L" L1.COLUMN_RECALCULATED.DIDEVENT.RETURN_UNWANTEDREASON " L" } " L" IRowsetChange::SetData(A,2) {} " L" IRowsetUpdate::Update(A) {} " L" }" L" }" L"}"; //COMPUTED_COLUMNS - makes the first column the input and //the second column the computed column (col1-col2). return Execute(CommandString, COMPUTED_COLUMNS | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(65) //*----------------------------------------------------------------------- // @mfunc COLUMN_RECALCULATED - UNWANTED PHASE DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_65() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) {} " L" IRowsetUpdate::Update(A) " L" { " L" L1.COLUMN_RECALCULATED.DIDEVENT.RETURN_UNWANTEDPHASE " L" } " L" IRowsetChange::SetData(A,2) {} " L" IRowsetUpdate::Update(A) {} " L" }" L" }" L"}"; //COMPUTED_COLUMNS - makes the first column the input and //the second column the computed column (col1-col2). return Execute(CommandString, COMPUTED_COLUMNS | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(66) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_66() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(67) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_67() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(68) //*----------------------------------------------------------------------- // @mfunc COLUMN_RECALCULATED - E_FAIL - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_68() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) {} " L" IRowsetUpdate::Update(A) " L" { " L" L1.COLUMN_RECALCULATED.DIDEVENT.RETURN_EFAIL " L" } " L" IRowsetChange::SetData(A,2) {} " L" IRowsetUpdate::Update(A) " L" { " L" L1.COLUMN_RECALCULATED.DIDEVENT.RETURN_ACCEPT " L" } " L" }" L" }" L"}"; //COMPUTED_COLUMNS - makes the first column the input and //the second column the computed column (col1-col2). return Execute(CommandString, COMPUTED_COLUMNS | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(69) //*----------------------------------------------------------------------- // @mfunc COLUMN_RECALCULATED - E_OUTOFMEMORY - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_69() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) {} " L" IRowsetUpdate::Update(A) " L" { " L" L1.COLUMN_RECALCULATED.DIDEVENT.RETURN_EOUTOFMEMORY " L" } " L" IRowsetChange::SetData(A,2) {} " L" IRowsetUpdate::Update(A) " L" { " L" L1.COLUMN_RECALCULATED.DIDEVENT.RETURN_ACCEPT " L" } " L" }" L" }" L"}"; //COMPUTED_COLUMNS - makes the first column the input and //the second column the computed column (col1-col2). return Execute(CommandString, COMPUTED_COLUMNS | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(70) //*----------------------------------------------------------------------- // @mfunc COLUMN_RECALCULATED - E_INVALIDARG - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_70() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) {} " L" IRowsetUpdate::Update(A) " L" { " L" L1.COLUMN_RECALCULATED.DIDEVENT.RETURN_EINVALIDARG " L" } " L" IRowsetChange::SetData(A,2) {} " L" IRowsetUpdate::Update(A) " L" { " L" L1.COLUMN_RECALCULATED.DIDEVENT.RETURN_ACCEPT " L" } " L" }" L" }" L"}"; //COMPUTED_COLUMNS - makes the first column the input and //the second column the computed column (col1-col2). return Execute(CommandString, COMPUTED_COLUMNS | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(71) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_71() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(72) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_72() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(73) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - DB_E_BADACCESSORHANDLE // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_73() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,DB_E_BADACCESSORHANDLE) " L" { " L" } " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.OKTODO.RETURN_ACCEPT " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(74) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - EmptyRowset // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_74() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowsetChange::SetData(A,2,DB_E_BADROWHANDLE) " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, EMPTY_ROWSET | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(75) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Add/Remove Listeners // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_75() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.OKTODO.RETURN_UNADVISE " L" } " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.OKTODO.RETURN_ADVISE " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(76) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - GetData // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_76() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.OKTODO.IRowset::GetData(A) {} " L" } " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.OKTODO.IRowset::GetData(A) {} " L" L2.COLUMN_SET.ABOUTTODO.IRowset::GetData(B) {} " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(77) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - GetOriginalData // // @rdesc TEST_PASS or TEST_FAIL // int SetData_Bufferred::Variation_77() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.OKTODO.IRowsetUpdate::GetOriginalData(A,DB_E_NOTREENTRANT) {} " L" } " L" IRowsetChange::SetData(A,2) " L" { " L" L1.COLUMN_SET.OKTODO.IRowsetUpdate::GetOriginalData(A,DB_E_NOTREENTRANT) {} " L" L2.COLUMN_SET.ABOUTTODO.IRowsetUpdate::GetOriginalData(B,DB_E_NOTREENTRANT) {} " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL SetData_Bufferred::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CExecutionManager::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(Resynch) //*----------------------------------------------------------------------- //| Test Case: Resynch - Tests Notifications for IRowsetResynch::ResyncRows //| Created: 09/29/96 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Resynch::Init() { // {{ TCW_INIT_BASECLASS_CHECK if(CExecutionManager::Init()) // }} { //Verify Rowset can be created... TEST_PROVIDER(CreateRowset(RESYNCH_ROWSET | CHANGE_IMMEDIATE)==S_OK); return TRUE; } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc ROW_RESYNCH - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int Resynch::Variation_1() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::SetData(C,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.OKTODO.RETURN_ACCEPT " L" } " L" IRowsetResynch::ResynchRows(A,B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Resynch::Variation_2() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Resynch::Variation_3() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc ROW_RESYNCH - DB_E_CANCELED // // @rdesc TEST_PASS or TEST_FAIL // int Resynch::Variation_4() { //Need to verify the Veto was successful //Verify rows are unchanged by resynch WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.ABOUTTODO.RETURN_VETO " L" } " L" IRowset::GetData(A) {} " L" IRowsetResynch::ResynchRows(A,B) {} " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc ROW_RESYNCH - DB_E_NOTREENTRANT // // @rdesc TEST_PASS or TEST_FAIL // int Resynch::Variation_5() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.OKTODO.IRowsetResynch::ResynchRows(A,B,DB_E_NOTREENTRANT) {} " L" } " L" IRowsetResynch::ResynchRows(A,B) {} " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(6) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Resynch::Variation_6() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(7) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Resynch::Variation_7() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(8) //*----------------------------------------------------------------------- // @mfunc ROW_RESYNCH - Veto OKTODO // // @rdesc TEST_PASS or TEST_FAIL // int Resynch::Variation_8() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.OKTODO.RETURN_VETO " L" } " L" IRowsetResynch::ResynchRows(A,B) {} " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(9) //*----------------------------------------------------------------------- // @mfunc ROW_RESYNCH - Veto ABOUTTODO // // @rdesc TEST_PASS or TEST_FAIL // int Resynch::Variation_9() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.ABOUTTODO.RETURN_VETO " L" } " L" IRowsetResynch::ResynchRows(A,B) {} " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(10) //*----------------------------------------------------------------------- // @mfunc ROW_RESYNCH - Veto SYNCHAFTER // // @rdesc TEST_PASS or TEST_FAIL // int Resynch::Variation_10() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.SYNCHAFTER.RETURN_VETO " L" } " L" IRowsetResynch::ResynchRows(A,B) {} " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(11) //*----------------------------------------------------------------------- // @mfunc ROW_RESYNCH - Veto DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int Resynch::Variation_11() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.DIDEVENT.RETURN_VETO " L" } " L" IRowsetResynch::ResynchRows(A,B) {} " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(12) //*----------------------------------------------------------------------- // @mfunc ROW_RESYNCH - Veto FAILEDTODO // // @rdesc TEST_PASS or TEST_FAIL // int Resynch::Variation_12() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.ABOUTTODO.RETURN_VETO " L" L1.ROW_RESYNCH.FAILEDTODO.RETURN_VETO " L" } " L" IRowsetResynch::ResynchRows(A,B) {} " L" }" L" }" L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROW_RESYNCH, DBEVENTPHASE_ABOUTTODO)); TESTC(Execute(CommandString, RESYNCH_ROWSET | CHANGE_IMMEDIATE)); CLEANUP: TRETURN; } // }} // {{ TCW_VAR_PROTOTYPE(13) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Resynch::Variation_13() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(14) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Resynch::Variation_14() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(15) //*----------------------------------------------------------------------- // @mfunc ROW_RESYNCH - UNWANTED REASON // // @rdesc TEST_PASS or TEST_FAIL // int Resynch::Variation_15() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.OKTODO.RETURN_UNWANTEDREASON " L" } " L" IRowsetResynch::ResynchRows(A,B) {} " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(16) //*----------------------------------------------------------------------- // @mfunc ROW_RESYNCH - UNWANTED PHASE - OKTODO // // @rdesc TEST_PASS or TEST_FAIL // int Resynch::Variation_16() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.OKTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowsetResynch::ResynchRows(A,B) {} " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(17) //*----------------------------------------------------------------------- // @mfunc ROW_RESYNCH - UNWANTED PHASE - ABOUTTODO // // @rdesc TEST_PASS or TEST_FAIL // int Resynch::Variation_17() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.ABOUTTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowsetResynch::ResynchRows(A,B) {} " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(18) //*----------------------------------------------------------------------- // @mfunc ROW_RESYNCH - UNWANTED PHASE - SYNCHAFTER // // @rdesc TEST_PASS or TEST_FAIL // int Resynch::Variation_18() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.SYNCHAFTER.RETURN_UNWANTEDPHASE " L" } " L" IRowsetResynch::ResynchRows(A,B) {} " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(19) //*----------------------------------------------------------------------- // @mfunc ROW_RESYNCH - UNWANTED PHASE - DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int Resynch::Variation_19() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.DIDEVENT.RETURN_UNWANTEDPHASE " L" } " L" IRowsetResynch::ResynchRows(A,B) {} " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(20) //*----------------------------------------------------------------------- // @mfunc ROW_RESYNCH - UNWANTED PHASE - FAILEDTODO // // @rdesc TEST_PASS or TEST_FAIL // int Resynch::Variation_20() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.ABOUTTODO.RETURN_VETO " L" L1.ROW_RESYNCH.FAILEDTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowsetResynch::ResynchRows(A,B) {} " L" }" L" }" L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROW_RESYNCH, DBEVENTPHASE_ABOUTTODO)); TESTC(Execute(CommandString, RESYNCH_ROWSET | CHANGE_IMMEDIATE)); CLEANUP: TRETURN; } // }} // {{ TCW_VAR_PROTOTYPE(21) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Resynch::Variation_21() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(22) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Resynch::Variation_22() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(23) //*----------------------------------------------------------------------- // @mfunc ROW_RESYNCH - E_FAIL - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int Resynch::Variation_23() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.OKTODO.RETURN_EFAIL " L" L1.ROW_RESYNCH.ABOUTTODO.RETURN_EFAIL " L" L1.ROW_RESYNCH.SYNCHAFTER.RETURN_EFAIL " L" L1.ROW_RESYNCH.DIDEVENT.RETURN_EFAIL " L" } " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.ABOUTTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(24) //*----------------------------------------------------------------------- // @mfunc ROW_RESYNCH - E_OUTOFMEMORY - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int Resynch::Variation_24() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.OKTODO.RETURN_EOUTOFMEMORY " L" L1.ROW_RESYNCH.ABOUTTODO.RETURN_EOUTOFMEMORY " L" L1.ROW_RESYNCH.SYNCHAFTER.RETURN_EOUTOFMEMORY " L" L1.ROW_RESYNCH.DIDEVENT.RETURN_EOUTOFMEMORY " L" } " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.ABOUTTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(25) //*----------------------------------------------------------------------- // @mfunc ROW_RESYNCH - E_INVALIDARG - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int Resynch::Variation_25() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.OKTODO.RETURN_EINVALIDARG " L" L1.ROW_RESYNCH.ABOUTTODO.RETURN_EINVALIDARG " L" L1.ROW_RESYNCH.SYNCHAFTER.RETURN_EINVALIDARG " L" L1.ROW_RESYNCH.DIDEVENT.RETURN_EINVALIDARG " L" } " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.ABOUTTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(26) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Resynch::Variation_26() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(27) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Resynch::Variation_27() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(28) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Resynch all rows // // @rdesc TEST_PASS or TEST_FAIL // int Resynch::Variation_28() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetResynch::ResynchRows() " L" { " L" L1.ROW_RESYNCH.OKTODO.RETURN_ACCEPT " L" } " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.OKTODO.RETURN_ACCEPT " L" } " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(29) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Resynch 2 rows, 1 changed 1 not changed // // @rdesc TEST_PASS or TEST_FAIL // int Resynch::Variation_29() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.OKTODO.RETURN_ACCEPT " L" } " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.OKTODO.RETURN_ACCEPT " L" } " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(30) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - 1 valid, 1 not valid // // @rdesc TEST_PASS or TEST_FAIL // int Resynch::Variation_30() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetResynch::ResynchRows(A,C,DB_S_ERRORSOCCURRED) " L" { " L" L1.ROW_RESYNCH.OKTODO.RETURN_ACCEPT " L" } " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.OKTODO.RETURN_ACCEPT " L" } " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(31) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - EmptyRowset // // @rdesc TEST_PASS or TEST_FAIL // int Resynch::Variation_31() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetResynch::ResynchRows() " L" { " L" } " L" IRowsetResynch::ResynchRows() " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, EMPTY_ROWSET | RESYNCH_ROWSET | CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(32) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Add/Remove Listeners // // @rdesc TEST_PASS or TEST_FAIL // int Resynch::Variation_32() { WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.OKTODO.RETURN_UNADVISE " L" } " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L2.ROW_RESYNCH.OKTODO.RETURN_UNADVISE " L" L3.ROW_RESYNCH.OKTODO.RETURN_UNADVISE " L" } " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(33) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - GetData // // @rdesc TEST_PASS or TEST_FAIL // int Resynch::Variation_33() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.OKTODO.IRowset::GetData(A) {} " L" } " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.OKTODO.IRowset::GetData(B) {} " L" } " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_IMMEDIATE); } // }} // {{ TCW_VAR_PROTOTYPE(34) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - GetVisibleData // // @rdesc TEST_PASS or TEST_FAIL // int Resynch::Variation_34() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.OKTODO.IRowsetResynch::GetVisibleData(A, DB_E_NOTREENTRANT) {} " L" } " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.OKTODO.IRowsetResynch::GetVisibleData(B, DB_E_NOTREENTRANT) {} " L" } " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_IMMEDIATE); } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Resynch::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CExecutionManager::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(Resynch_Bufferred) //*----------------------------------------------------------------------- //| Test Case: Resynch_Bufferred - Tests Notifications for IRowsetResynch_Bufferred::ResyncRows //| Created: 09/29/96 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Resynch_Bufferred::Init() { // {{ TCW_INIT_BASECLASS_CHECK if(CExecutionManager::Init()) // }} { //Verify Rowset can be created... TEST_PROVIDER(CreateRowset(RESYNCH_ROWSET | CHANGE_BUFFERRED)==S_OK); return TRUE; } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc ROW_RESYNCH - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int Resynch_Bufferred::Variation_1() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::SetData(C,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.OKTODO.RETURN_ACCEPT " L" } " L" IRowsetResynch::ResynchRows(A,B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Resynch_Bufferred::Variation_2() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Resynch_Bufferred::Variation_3() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc ROW_RESYNCH - DB_E_CANCELED // // @rdesc TEST_PASS or TEST_FAIL // int Resynch_Bufferred::Variation_4() { //Veriy the veto was successful //Row should be unaffected by the resynch WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.ABOUTTODO.RETURN_VETO " L" } " L" IRowset::GetData(A) {} " L" IRowsetResynch::ResynchRows(A,B) {} " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc ROW_RESYNCH - DB_E_NOTREENTRANT // // @rdesc TEST_PASS or TEST_FAIL // int Resynch_Bufferred::Variation_5() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.OKTODO.IRowsetResynch::ResynchRows(A,B,DB_E_NOTREENTRANT) {} " L" } " L" IRowsetResynch::ResynchRows(A,B) {} " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(6) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Resynch_Bufferred::Variation_6() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(7) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Resynch_Bufferred::Variation_7() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(8) //*----------------------------------------------------------------------- // @mfunc ROW_RESYNCH - Veto OKTODO // // @rdesc TEST_PASS or TEST_FAIL // int Resynch_Bufferred::Variation_8() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.OKTODO.RETURN_VETO " L" } " L" IRowsetResynch::ResynchRows(A,B) {} " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(9) //*----------------------------------------------------------------------- // @mfunc ROW_RESYNCH - Veto ABOUTTODO // // @rdesc TEST_PASS or TEST_FAIL // int Resynch_Bufferred::Variation_9() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.ABOUTTODO.RETURN_VETO " L" } " L" IRowsetResynch::ResynchRows(A,B) {} " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(10) //*----------------------------------------------------------------------- // @mfunc ROW_RESYNCH - Veto SYNCHAFTER // // @rdesc TEST_PASS or TEST_FAIL // int Resynch_Bufferred::Variation_10() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.SYNCHAFTER.RETURN_VETO " L" } " L" IRowsetResynch::ResynchRows(A,B) {} " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(11) //*----------------------------------------------------------------------- // @mfunc ROW_RESYNCH - Veto DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int Resynch_Bufferred::Variation_11() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.DIDEVENT.RETURN_VETO " L" } " L" IRowsetResynch::ResynchRows(A,B) {} " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(12) //*----------------------------------------------------------------------- // @mfunc ROW_RESYNCH - Veto FAILEDTODO // // @rdesc TEST_PASS or TEST_FAIL // int Resynch_Bufferred::Variation_12() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.ABOUTTODO.RETURN_VETO " L" L1.ROW_RESYNCH.FAILEDTODO.RETURN_VETO " L" } " L" IRowsetResynch::ResynchRows(A,B) {} " L" }" L" }" L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROW_RESYNCH, DBEVENTPHASE_ABOUTTODO)); TESTC(Execute(CommandString, RESYNCH_ROWSET | CHANGE_BUFFERRED)); CLEANUP: TRETURN; } // }} // {{ TCW_VAR_PROTOTYPE(13) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Resynch_Bufferred::Variation_13() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(14) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Resynch_Bufferred::Variation_14() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(15) //*----------------------------------------------------------------------- // @mfunc ROW_RESYNCH - UNWANTED REASON // // @rdesc TEST_PASS or TEST_FAIL // int Resynch_Bufferred::Variation_15() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.OKTODO.RETURN_UNWANTEDREASON " L" } " L" IRowsetResynch::ResynchRows(A,B) {} " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(16) //*----------------------------------------------------------------------- // @mfunc ROW_RESYNCH - UNWANTED PHASE - OKTODO // // @rdesc TEST_PASS or TEST_FAIL // int Resynch_Bufferred::Variation_16() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.OKTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowsetResynch::ResynchRows(A,B) {} " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(17) //*----------------------------------------------------------------------- // @mfunc ROW_RESYNCH - UNWANTED PHASE - ABOUTTODO // // @rdesc TEST_PASS or TEST_FAIL // int Resynch_Bufferred::Variation_17() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.ABOUTTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowsetResynch::ResynchRows(A,B) {} " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(18) //*----------------------------------------------------------------------- // @mfunc ROW_RESYNCH - UNWANTED PHASE - SYNCHAFTER // // @rdesc TEST_PASS or TEST_FAIL // int Resynch_Bufferred::Variation_18() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.SYNCHAFTER.RETURN_UNWANTEDPHASE " L" } " L" IRowsetResynch::ResynchRows(A,B) {} " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(19) //*----------------------------------------------------------------------- // @mfunc ROW_RESYNCH - UNWANTED PHASE - DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int Resynch_Bufferred::Variation_19() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.DIDEVENT.RETURN_UNWANTEDPHASE " L" } " L" IRowsetResynch::ResynchRows(A,B) {} " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(20) //*----------------------------------------------------------------------- // @mfunc ROW_RESYNCH - UNWANTED PHASE - FAILEDTODO // // @rdesc TEST_PASS or TEST_FAIL // int Resynch_Bufferred::Variation_20() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.ABOUTTODO.RETURN_VETO " L" L1.ROW_RESYNCH.FAILEDTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowsetResynch::ResynchRows(A,B) {} " L" }" L" }" L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROW_RESYNCH, DBEVENTPHASE_ABOUTTODO)); TESTC(Execute(CommandString, RESYNCH_ROWSET | CHANGE_BUFFERRED)); CLEANUP: TRETURN; } // }} // {{ TCW_VAR_PROTOTYPE(21) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Resynch_Bufferred::Variation_21() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(22) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Resynch_Bufferred::Variation_22() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(23) //*----------------------------------------------------------------------- // @mfunc ROW_RESYNCH - E_FAIL - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int Resynch_Bufferred::Variation_23() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.OKTODO.RETURN_EFAIL " L" L1.ROW_RESYNCH.ABOUTTODO.RETURN_EFAIL " L" L1.ROW_RESYNCH.SYNCHAFTER.RETURN_EFAIL " L" L1.ROW_RESYNCH.DIDEVENT.RETURN_EFAIL " L" } " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.ABOUTTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(24) //*----------------------------------------------------------------------- // @mfunc ROW_RESYNCH - E_OUTOFMEMORY - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int Resynch_Bufferred::Variation_24() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.OKTODO.RETURN_EOUTOFMEMORY " L" L1.ROW_RESYNCH.ABOUTTODO.RETURN_EOUTOFMEMORY " L" L1.ROW_RESYNCH.SYNCHAFTER.RETURN_EOUTOFMEMORY " L" L1.ROW_RESYNCH.DIDEVENT.RETURN_EOUTOFMEMORY " L" } " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.ABOUTTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(25) //*----------------------------------------------------------------------- // @mfunc ROW_RESYNCH - E_INVALIDARG - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int Resynch_Bufferred::Variation_25() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.OKTODO.RETURN_EINVALIDARG " L" L1.ROW_RESYNCH.ABOUTTODO.RETURN_EINVALIDARG " L" L1.ROW_RESYNCH.SYNCHAFTER.RETURN_EINVALIDARG " L" L1.ROW_RESYNCH.DIDEVENT.RETURN_EINVALIDARG " L" } " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.ABOUTTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(26) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Resynch_Bufferred::Variation_26() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(27) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Resynch_Bufferred::Variation_27() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(28) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Resynch_Bufferred all rows // // @rdesc TEST_PASS or TEST_FAIL // int Resynch_Bufferred::Variation_28() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetResynch::ResynchRows() " L" { " L" L1.ROW_RESYNCH.OKTODO.RETURN_ACCEPT " L" } " L" IRowsetResynch::ResynchRows() " L" { " L" L1.ROW_RESYNCH.OKTODO.RETURN_ACCEPT " L" } " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(29) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Resynch_Bufferred 2 rows, 1 changed 1 not changed // // @rdesc TEST_PASS or TEST_FAIL // int Resynch_Bufferred::Variation_29() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.OKTODO.RETURN_ACCEPT " L" } " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.OKTODO.RETURN_ACCEPT " L" } " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(30) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - 1 valid, 1 not valid // // @rdesc TEST_PASS or TEST_FAIL // int Resynch_Bufferred::Variation_30() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetResynch::ResynchRows(A,C,DB_S_ERRORSOCCURRED) " L" { " L" L1.ROW_RESYNCH.OKTODO.RETURN_ACCEPT " L" } " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.OKTODO.RETURN_ACCEPT " L" } " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(31) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - EmptyRowset // // @rdesc TEST_PASS or TEST_FAIL // int Resynch_Bufferred::Variation_31() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetResynch::ResynchRows() " L" { " L" } " L" IRowsetResynch::ResynchRows() " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, EMPTY_ROWSET | RESYNCH_ROWSET | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(32) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Add/Remove Listeners // // @rdesc TEST_PASS or TEST_FAIL // int Resynch_Bufferred::Variation_32() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.OKTODO.RETURN_ADVISE " L" } " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.OKTODO.RETURN_UNADVISE " L" } " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(33) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - GetData // // @rdesc TEST_PASS or TEST_FAIL // int Resynch_Bufferred::Variation_33() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.OKTODO.IRowset::GetData(A) {} " L" } " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.OKTODO.IRowset::GetData(B) {} " L" } " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(34) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - GetVisibleData // // @rdesc TEST_PASS or TEST_FAIL // int Resynch_Bufferred::Variation_34() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.OKTODO.IRowsetResynch::GetVisibleData(A, DB_E_NOTREENTRANT) {} " L" } " L" IRowsetResynch::ResynchRows(A,B) " L" { " L" L1.ROW_RESYNCH.OKTODO.IRowsetResynch::GetVisibleData(B, DB_E_NOTREENTRANT) {} " L" } " L" }" L" }" L"}"; return Execute(CommandString, RESYNCH_ROWSET | CHANGE_BUFFERRED); } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Resynch_Bufferred::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CExecutionManager::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(Undo) //*----------------------------------------------------------------------- //| Test Case: Undo - Tests Notifications for IRowsetUpdate::Undo //| Created: 09/29/96 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Undo::Init() { // {{ TCW_INIT_BASECLASS_CHECK if(CExecutionManager::Init()) // }} { //Verify Rowset can be created... TEST_PROVIDER(CreateRowset(CHANGE_BUFFERRED)==S_OK); return TRUE; } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc ROW_UNDOCHANGE - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_1() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::DeleteRows(A) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::SetData(C,2,5) {} " L" IRowsetUpdate::Undo(B) " L" { " L" L1.ROW_UNDOCHANGE.OKTODO.RETURN_ACCEPT " L" } " L" IRowsetUpdate::Undo(B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_2() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_3() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc ROW_UNDOCHANGE - DB_E_CANCELED // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_4() { //Veriy the veto was successful //Row should be unaffected by the Undo WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::DeleteRows(A) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::SetData(C,2,5) {} " L" IRowsetUpdate::Undo(B) " L" { " L" L1.ROW_UNDOCHANGE.ABOUTTODO.RETURN_VETO " L" } " L" IRowset::GetData(B) {} " L" IRowsetUpdate::Undo(B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc ROW_UNDOCHANGE - DB_E_NOTREENTRANT // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_5() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::DeleteRows(A) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::SetData(C,2,5) {} " L" IRowsetUpdate::Undo(B) " L" { " L" L1.ROW_UNDOCHANGE.OKTODO.IRowsetUpdate::Undo(B,DB_E_NOTREENTRANT) {} " L" } " L" IRowsetUpdate::Undo(B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(6) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_6() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(7) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_7() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(8) //*----------------------------------------------------------------------- // @mfunc ROW_UNDOCHANGE - Veto OKTODO // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_8() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::DeleteRows(A) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::SetData(C,2,5) {} " L" IRowsetUpdate::Undo(B) " L" { " L" L1.ROW_UNDOCHANGE.OKTODO.RETURN_VETO " L" } " L" IRowsetUpdate::Undo(B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(9) //*----------------------------------------------------------------------- // @mfunc ROW_UNDOCHANGE - Veto ABOUTTODO // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_9() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::DeleteRows(A) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::SetData(C,2,5) {} " L" IRowsetUpdate::Undo(B) " L" { " L" L1.ROW_UNDOCHANGE.ABOUTTODO.RETURN_VETO " L" } " L" IRowsetUpdate::Undo(B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(10) //*----------------------------------------------------------------------- // @mfunc ROW_UNDOCHANGE - Veto SYNCHAFTER // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_10() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::DeleteRows(A) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::SetData(C,2,5) {} " L" IRowsetUpdate::Undo(B) " L" { " L" L1.ROW_UNDOCHANGE.SYNCHAFTER.RETURN_VETO " L" } " L" IRowsetUpdate::Undo(B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(11) //*----------------------------------------------------------------------- // @mfunc ROW_UNDOCHANGE - Veto DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_11() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::DeleteRows(A) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::SetData(C,2,5) {} " L" IRowsetUpdate::Undo(B) " L" { " L" L1.ROW_UNDOCHANGE.DIDEVENT.RETURN_VETO " L" } " L" IRowsetUpdate::Undo(B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(12) //*----------------------------------------------------------------------- // @mfunc ROW_UNDOCHANGE - Veto FAILEDTODO // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_12() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::DeleteRows(A) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::SetData(C,2,5) {} " L" IRowsetUpdate::Undo(B) " L" { " L" L1.ROW_UNDOCHANGE.ABOUTTODO.RETURN_VETO " L" L1.ROW_UNDOCHANGE.FAILEDTODO.RETURN_VETO " L" } " L" IRowsetUpdate::Undo(B,C) {} " L" }" L" }" L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROW_UNDOCHANGE, DBEVENTPHASE_ABOUTTODO)); TESTC(Execute(CommandString, CHANGE_BUFFERRED)); CLEANUP: TRETURN; } // }} // {{ TCW_VAR_PROTOTYPE(13) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_13() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(14) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_14() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(15) //*----------------------------------------------------------------------- // @mfunc ROW_UNDOCHANGE - UNWANTED REASON // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_15() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::DeleteRows(A) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::SetData(C,2,5) {} " L" IRowsetUpdate::Undo(B) " L" { " L" L1.ROW_UNDOCHANGE.DIDEVENT.RETURN_UNWANTEDREASON " L" } " L" IRowsetUpdate::Undo(B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(16) //*----------------------------------------------------------------------- // @mfunc ROW_UNDOCHANGE - UNWANTED PHASE OKTODO // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_16() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::DeleteRows(A) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::SetData(C,2,5) {} " L" IRowsetUpdate::Undo(B) " L" { " L" L1.ROW_UNDOCHANGE.OKTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowsetUpdate::Undo(B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(17) //*----------------------------------------------------------------------- // @mfunc ROW_UNDOCHANGE - UNWANTED PHASE ABOUTTODO // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_17() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::DeleteRows(A) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::SetData(C,2,5) {} " L" IRowsetUpdate::Undo(B) " L" { " L" L1.ROW_UNDOCHANGE.ABOUTTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowsetUpdate::Undo(B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(18) //*----------------------------------------------------------------------- // @mfunc ROW_UNDOCHANGE - UNWANTED PHASE SYNCHAFTER // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_18() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::DeleteRows(A) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::SetData(C,2,5) {} " L" IRowsetUpdate::Undo(B) " L" { " L" L1.ROW_UNDOCHANGE.SYNCHAFTER.RETURN_UNWANTEDPHASE " L" } " L" IRowsetUpdate::Undo(B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(19) //*----------------------------------------------------------------------- // @mfunc ROW_UNDOCHANGE - UNWANTED PHASE DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_19() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::DeleteRows(A) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::SetData(C,2,5) {} " L" IRowsetUpdate::Undo(B) " L" { " L" L1.ROW_UNDOCHANGE.DIDEVENT.RETURN_UNWANTEDPHASE " L" } " L" IRowsetUpdate::Undo(B,C) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(20) //*----------------------------------------------------------------------- // @mfunc ROW_UNDOCHANGE - UNWANTED PHASE FAILEDTODO // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_20() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::DeleteRows(A) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::SetData(C,2,5) {} " L" IRowsetUpdate::Undo(B) " L" { " L" L1.ROW_UNDOCHANGE.ABOUTTODO.RETURN_VETO " L" L1.ROW_UNDOCHANGE.FAILEDTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowsetUpdate::Undo(B,C) {} " L" }" L" }" L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROW_UNDOCHANGE, DBEVENTPHASE_ABOUTTODO)); TESTC(Execute(CommandString, CHANGE_BUFFERRED)); CLEANUP: TRETURN; } // }} // {{ TCW_VAR_PROTOTYPE(21) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_21() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(22) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_22() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(23) //*----------------------------------------------------------------------- // @mfunc ROW_UNDOCHANGE - E_FAIL - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_23() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::DeleteRows(A) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::SetData(C,2,5) {} " L" IRowsetUpdate::Undo(B) " L" { " L" L1.ROW_UNDOCHANGE.OKTODO.RETURN_EFAIL " L" L1.ROW_UNDOCHANGE.ABOUTTODO.RETURN_EFAIL " L" L1.ROW_UNDOCHANGE.SYNCHAFTER.RETURN_EFAIL " L" L1.ROW_UNDOCHANGE.DIDEVENT.RETURN_EFAIL " L" } " L" IRowsetUpdate::Undo(C) " L" { " L" L1.ROW_UNDOCHANGE.ABOUTTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(24) //*----------------------------------------------------------------------- // @mfunc ROW_UNDOCHANGE - E_OUTOFMEMORY - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_24() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::DeleteRows(A) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::SetData(C,2,5) {} " L" IRowsetUpdate::Undo(B) " L" { " L" L1.ROW_UNDOCHANGE.OKTODO.RETURN_EOUTOFMEMORY " L" L1.ROW_UNDOCHANGE.ABOUTTODO.RETURN_EOUTOFMEMORY " L" L1.ROW_UNDOCHANGE.SYNCHAFTER.RETURN_EOUTOFMEMORY " L" L1.ROW_UNDOCHANGE.DIDEVENT.RETURN_EOUTOFMEMORY " L" } " L" IRowsetUpdate::Undo(C) " L" { " L" L1.ROW_UNDOCHANGE.ABOUTTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(25) //*----------------------------------------------------------------------- // @mfunc ROW_UNDOCHANGE - E_INVALIDARG - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_25() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::DeleteRows(A) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::SetData(C,2,5) {} " L" IRowsetUpdate::Undo(B) " L" { " L" L1.ROW_UNDOCHANGE.OKTODO.RETURN_EINVALIDARG " L" L1.ROW_UNDOCHANGE.ABOUTTODO.RETURN_EINVALIDARG " L" L1.ROW_UNDOCHANGE.SYNCHAFTER.RETURN_EINVALIDARG " L" L1.ROW_UNDOCHANGE.DIDEVENT.RETURN_EINVALIDARG " L" } " L" IRowsetUpdate::Undo(C) " L" { " L" L1.ROW_UNDOCHANGE.ABOUTTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(26) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_26() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(27) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_27() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(28) //*----------------------------------------------------------------------- // @mfunc ROW_UNDOINSERT - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_28() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::InsertRow(C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::DeleteRows(A) {} " L" IRowsetChange::SetData(D,2,5) {} " L" IRowsetUpdate::Undo(C) " L" { " L" L1.ROW_UNDOINSERT.OKTODO.RETURN_ACCEPT " L" } " L" IRowsetUpdate::Undo(D) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(29) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_29() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(30) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_30() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(31) //*----------------------------------------------------------------------- // @mfunc ROW_UNDOINSERT - DB_E_CANCELED // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_31() { //Veriy the veto was successful //Row should be unaffected by the Undo WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::InsertRow(C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::DeleteRows(A) {} " L" IRowsetChange::SetData(D,2,5) {} " L" IRowsetUpdate::Undo(C) " L" { " L" L1.ROW_UNDOINSERT.ABOUTTODO.RETURN_VETO " L" } " L" IRowset::GetData(C) {} " L" IRowsetUpdate::Undo(D) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(32) //*----------------------------------------------------------------------- // @mfunc ROW_UNDOINSERT - DB_E_NOTREENTRANT // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_32() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::InsertRow(C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::DeleteRows(A) {} " L" IRowsetChange::SetData(D,2,5) {} " L" IRowsetUpdate::Undo(C) " L" { " L" L1.ROW_UNDOINSERT.OKTODO.IRowsetUpdate::Undo(C,DB_E_NOTREENTRANT) {} " L" } " L" IRowsetUpdate::Undo(D) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(33) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_33() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(34) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_34() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(35) //*----------------------------------------------------------------------- // @mfunc ROW_UNDOINSERT - Veto OKTODO // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_35() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::InsertRow(C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::DeleteRows(A) {} " L" IRowsetChange::SetData(D,2,5) {} " L" IRowsetUpdate::Undo(C) " L" { " L" L1.ROW_UNDOINSERT.OKTODO.RETURN_VETO " L" } " L" IRowsetUpdate::Undo(D) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(36) //*----------------------------------------------------------------------- // @mfunc ROW_UNDOINSERT - Veto ABOUTTODO // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_36() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::InsertRow(C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::DeleteRows(A) {} " L" IRowsetChange::SetData(D,2,5) {} " L" IRowsetUpdate::Undo(C) " L" { " L" L1.ROW_UNDOINSERT.ABOUTTODO.RETURN_VETO " L" } " L" IRowsetUpdate::Undo(D) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(37) //*----------------------------------------------------------------------- // @mfunc ROW_UNDOINSERT - Veto SYNCHAFTER // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_37() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::InsertRow(C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::DeleteRows(A) {} " L" IRowsetChange::SetData(D,2,5) {} " L" IRowsetUpdate::Undo(C) " L" { " L" L1.ROW_UNDOINSERT.SYNCHAFTER.RETURN_VETO " L" } " L" IRowsetUpdate::Undo(D) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(38) //*----------------------------------------------------------------------- // @mfunc ROW_UNDOINSERT - Veto DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_38() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::InsertRow(C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::DeleteRows(A) {} " L" IRowsetChange::SetData(D,2,5) {} " L" IRowsetUpdate::Undo(C) " L" { " L" L1.ROW_UNDOINSERT.DIDEVENT.RETURN_VETO " L" } " L" IRowsetUpdate::Undo(D) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(39) //*----------------------------------------------------------------------- // @mfunc ROW_UNDOINSERT - Veto FAILEDTODO // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_39() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::InsertRow(C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::DeleteRows(A) {} " L" IRowsetChange::SetData(D,2,5) {} " L" IRowsetUpdate::Undo(C) " L" { " L" L1.ROW_UNDOINSERT.ABOUTTODO.RETURN_VETO " L" L1.ROW_UNDOINSERT.FAILEDTODO.RETURN_VETO " L" } " L" IRowsetUpdate::Undo(D) {} " L" }" L" }" L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROW_UNDOINSERT, DBEVENTPHASE_ABOUTTODO)); TESTC(Execute(CommandString, CHANGE_BUFFERRED)); CLEANUP: TRETURN; } // }} // {{ TCW_VAR_PROTOTYPE(40) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_40() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(41) //*----------------------------------------------------------------------- // @mfunc ROW_UNDOINSERT - UNWANTED REASON // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_41() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::InsertRow(C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::DeleteRows(A) {} " L" IRowsetChange::SetData(D,2,5) {} " L" IRowsetUpdate::Undo(C) " L" { " L" L1.ROW_UNDOINSERT.OKTODO.RETURN_UNWANTEDREASON " L" } " L" IRowsetUpdate::Undo(D) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(42) //*----------------------------------------------------------------------- // @mfunc ROW_UNDOINSERT - UNWANTED PHASE OKTODO // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_42() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::InsertRow(C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::DeleteRows(A) {} " L" IRowsetChange::SetData(D,2,5) {} " L" IRowsetUpdate::Undo(C) " L" { " L" L1.ROW_UNDOINSERT.OKTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowsetUpdate::Undo(D) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(43) //*----------------------------------------------------------------------- // @mfunc ROW_UNDOINSERT - UNWANTED PHASE ABOUTTO // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_43() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::InsertRow(C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::DeleteRows(A) {} " L" IRowsetChange::SetData(D,2,5) {} " L" IRowsetUpdate::Undo(C) " L" { " L" L1.ROW_UNDOINSERT.ABOUTTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowsetUpdate::Undo(D) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(44) //*----------------------------------------------------------------------- // @mfunc ROW_UNDOINSERT - UNWANTED PHASE SYNCHAFTER // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_44() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::InsertRow(C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::DeleteRows(A) {} " L" IRowsetChange::SetData(D,2,5) {} " L" IRowsetUpdate::Undo(C) " L" { " L" L1.ROW_UNDOINSERT.SYNCHAFTER.RETURN_UNWANTEDPHASE " L" } " L" IRowsetUpdate::Undo(D) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(45) //*----------------------------------------------------------------------- // @mfunc ROW_UNDOINSERT- UNWANTED PHASE DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_45() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::InsertRow(C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::DeleteRows(A) {} " L" IRowsetChange::SetData(D,2,5) {} " L" IRowsetUpdate::Undo(C) " L" { " L" L1.ROW_UNDOINSERT.DIDEVENT.RETURN_UNWANTEDPHASE " L" } " L" IRowsetUpdate::Undo(D) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(46) //*----------------------------------------------------------------------- // @mfunc ROW_UNDOINSERT - UNWANTED PHASE FAILEDTODO // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_46() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::InsertRow(C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::DeleteRows(A) {} " L" IRowsetChange::SetData(D,2,5) {} " L" IRowsetUpdate::Undo(C) " L" { " L" L1.ROW_UNDOINSERT.ABOUTTODO.RETURN_VETO " L" L1.ROW_UNDOINSERT.FAILEDTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowsetUpdate::Undo(D) {} " L" }" L" }" L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROW_UNDOINSERT, DBEVENTPHASE_ABOUTTODO)); TESTC(Execute(CommandString, CHANGE_BUFFERRED)); CLEANUP: TRETURN; } // }} // {{ TCW_VAR_PROTOTYPE(47) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_47() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(48) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_48() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(49) //*----------------------------------------------------------------------- // @mfunc ROW_UNDOINSERT - E_FAIL - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_49() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::InsertRow(C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::DeleteRows(A) {} " L" IRowsetChange::SetData(D,2,5) {} " L" IRowsetUpdate::Undo(C) " L" { " L" L1.ROW_UNDOINSERT.OKTODO.RETURN_EFAIL " L" L1.ROW_UNDOINSERT.ABOUTTODO.RETURN_EFAIL " L" L1.ROW_UNDOINSERT.SYNCHAFTER.RETURN_EFAIL " L" L1.ROW_UNDOINSERT.DIDEVENT.RETURN_EFAIL " L" } " L" IRowsetUpdate::Undo(D) " L" { " L" L1.ROW_UNDOINSERT.ABOUTTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(50) //*----------------------------------------------------------------------- // @mfunc ROW_UNDOINSERT - E_OUTOFMEMORY - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_50() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::InsertRow(C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::DeleteRows(A) {} " L" IRowsetChange::SetData(D,2,5) {} " L" IRowsetUpdate::Undo(C) " L" { " L" L1.ROW_UNDOINSERT.OKTODO.RETURN_EOUTOFMEMORY " L" L1.ROW_UNDOINSERT.ABOUTTODO.RETURN_EOUTOFMEMORY " L" L1.ROW_UNDOINSERT.SYNCHAFTER.RETURN_EOUTOFMEMORY " L" L1.ROW_UNDOINSERT.DIDEVENT.RETURN_EOUTOFMEMORY " L" } " L" IRowsetUpdate::Undo(D) " L" { " L" L1.ROW_UNDOINSERT.ABOUTTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(51) //*----------------------------------------------------------------------- // @mfunc ROW_UNDOINSERT - E_INVALIDARG - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_51() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::InsertRow(C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::DeleteRows(A) {} " L" IRowsetChange::SetData(D,2,5) {} " L" IRowsetUpdate::Undo(C) " L" { " L" L1.ROW_UNDOINSERT.OKTODO.RETURN_EINVALIDARG " L" L1.ROW_UNDOINSERT.ABOUTTODO.RETURN_EINVALIDARG " L" L1.ROW_UNDOINSERT.SYNCHAFTER.RETURN_EINVALIDARG " L" L1.ROW_UNDOINSERT.DIDEVENT.RETURN_EINVALIDARG " L" } " L" IRowsetUpdate::Undo(D) " L" { " L" L1.ROW_UNDOINSERT.ABOUTTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(52) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_52() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(53) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_53() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(54) //*----------------------------------------------------------------------- // @mfunc ROW_UNDODELETE - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_54() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::InsertRow(C) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(A,B) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Undo(A) " L" { " L" L1.ROW_UNDODELETE.OKTODO.RETURN_ACCEPT " L" } " L" IRowsetUpdate::Undo(A,B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(55) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_55() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(56) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_56() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(57) //*----------------------------------------------------------------------- // @mfunc ROW_UNDODELETE - DB_E_CANCELED // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_57() { //Veriy the veto was successful //Row should be unaffected by the Undo WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::InsertRow(C) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(A,B) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Undo(A) " L" { " L" L1.ROW_UNDODELETE.ABOUTTODO.RETURN_VETO " L" } " L" IRowsetChange::DeleteRows(A,DB_E_ERRORSOCCURRED) {} " L" IRowsetUpdate::Undo(A,B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(58) //*----------------------------------------------------------------------- // @mfunc ROW_UNDODELETE - DB_E_NOTREENTRANT // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_58() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::InsertRow(C) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(A,B) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Undo(A) " L" { " L" L1.ROW_UNDODELETE.OKTODO.IRowsetUpdate::Undo(A,B,DB_E_NOTREENTRANT) {} " L" } " L" IRowsetUpdate::Undo(A,B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(59) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_59() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(60) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_60() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(61) //*----------------------------------------------------------------------- // @mfunc ROW_UNDODELETE - Veto OKTODO // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_61() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::InsertRow(C) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(A,B) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Undo(A) " L" { " L" L1.ROW_UNDODELETE.OKTODO.RETURN_VETO " L" } " L" IRowsetUpdate::Undo(A,B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(62) //*----------------------------------------------------------------------- // @mfunc ROW_UNDODELETE - Veto ABOUTTODO // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_62() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::InsertRow(C) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(A,B) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Undo(A) " L" { " L" L1.ROW_UNDODELETE.ABOUTTODO.RETURN_VETO " L" } " L" IRowsetUpdate::Undo(A,B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(63) //*----------------------------------------------------------------------- // @mfunc ROW_UNDODELETE - Veto SYNCHAFTER // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_63() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::InsertRow(C) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(A,B) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Undo(A) " L" { " L" L1.ROW_UNDODELETE.SYNCHAFTER.RETURN_VETO " L" } " L" IRowsetUpdate::Undo(A,B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(64) //*----------------------------------------------------------------------- // @mfunc ROW_UNDODELETE - Veto DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_64() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::InsertRow(C) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(A,B) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Undo(A) " L" { " L" L1.ROW_UNDODELETE.DIDEVENT.RETURN_VETO " L" } " L" IRowsetUpdate::Undo(A,B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(65) //*----------------------------------------------------------------------- // @mfunc ROW_UNDODELETE - Veto FAILEDTODO // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_65() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::InsertRow(C) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(A,B) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Undo(A) " L" { " L" L1.ROW_UNDODELETE.ABOUTTODO.RETURN_VETO " L" L1.ROW_UNDODELETE.FAILEDTODO.RETURN_VETO " L" } " L" IRowsetUpdate::Undo(A,B) {} " L" }" L" }" L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROW_UNDODELETE, DBEVENTPHASE_ABOUTTODO)); TESTC(Execute(CommandString, CHANGE_BUFFERRED)); CLEANUP: TRETURN; } // }} // {{ TCW_VAR_PROTOTYPE(66) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_66() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(67) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_67() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(68) //*----------------------------------------------------------------------- // @mfunc ROW_UNDODELETE - UNWANTED REASON // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_68() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::InsertRow(C) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(A,B) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Undo(A) " L" { " L" L1.ROW_UNDODELETE.OKTODO.RETURN_UNWANTEDREASON " L" } " L" IRowsetUpdate::Undo(A,B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(69) //*----------------------------------------------------------------------- // @mfunc ROW_UNDODELETE - UNWANTED PHASE OKTODO // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_69() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::InsertRow(C) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(A,B) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Undo(A) " L" { " L" L1.ROW_UNDODELETE.OKTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowsetUpdate::Undo(A,B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(70) //*----------------------------------------------------------------------- // @mfunc ROW_UNDODELETE - UNWANTED PHASE ABOUTTODO // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_70() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::InsertRow(C) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(A,B) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Undo(A) " L" { " L" L1.ROW_UNDODELETE.ABOUTTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowsetUpdate::Undo(A,B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(71) //*----------------------------------------------------------------------- // @mfunc ROW_UNDODELETE - UNWANTED PHASE SYNCHAFTER // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_71() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::InsertRow(C) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(A,B) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Undo(A) " L" { " L" L1.ROW_UNDODELETE.SYNCHAFTER.RETURN_UNWANTEDPHASE " L" } " L" IRowsetUpdate::Undo(A,B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(72) //*----------------------------------------------------------------------- // @mfunc ROW_UNDODELETE - UNWANTED PHASE DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_72() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::InsertRow(C) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(A,B) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Undo(A) " L" { " L" L1.ROW_UNDODELETE.DIDEVENT.RETURN_UNWANTEDPHASE " L" } " L" IRowsetUpdate::Undo(A,B) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(73) //*----------------------------------------------------------------------- // @mfunc ROW_UNDODELETE - UNWANTED PHASE FAILEDTODO // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_73() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::InsertRow(C) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(A,B) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Undo(A) " L" { " L" L1.ROW_UNDODELETE.ABOUTTODO.RETURN_VETO " L" L1.ROW_UNDODELETE.FAILEDTODO.RETURN_UNWANTEDPHASE " L" } " L" IRowsetUpdate::Undo(A,B) {} " L" }" L" }" L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROW_UNDODELETE, DBEVENTPHASE_ABOUTTODO)); TESTC(Execute(CommandString, CHANGE_BUFFERRED)); CLEANUP: TRETURN; } // }} // {{ TCW_VAR_PROTOTYPE(74) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_74() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(75) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_75() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(76) //*----------------------------------------------------------------------- // @mfunc ROW_UNDODELETE - E_FAIL - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_76() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::InsertRow(C) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(A,B) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Undo(A) " L" { " L" L1.ROW_UNDODELETE.OKTODO.RETURN_EFAIL " L" L1.ROW_UNDODELETE.ABOUTTODO.RETURN_EFAIL " L" L1.ROW_UNDODELETE.SYNCHAFTER.RETURN_EFAIL " L" L1.ROW_UNDODELETE.DIDEVENT.RETURN_EFAIL " L" } " L" IRowsetUpdate::Undo(B) " L" { " L" L1.ROW_UNDODELETE.ABOUTTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(77) //*----------------------------------------------------------------------- // @mfunc ROW_UNDODELETE - E_OUTOFMEMORY - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_77() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::InsertRow(C) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(A,B) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Undo(A) " L" { " L" L1.ROW_UNDODELETE.OKTODO.RETURN_EOUTOFMEMORY " L" L1.ROW_UNDODELETE.ABOUTTODO.RETURN_EOUTOFMEMORY " L" L1.ROW_UNDODELETE.SYNCHAFTER.RETURN_EOUTOFMEMORY " L" L1.ROW_UNDODELETE.DIDEVENT.RETURN_EOUTOFMEMORY " L" } " L" IRowsetUpdate::Undo(B) " L" { " L" L1.ROW_UNDODELETE.ABOUTTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(78) //*----------------------------------------------------------------------- // @mfunc ROW_UNDODELETE - E_INVALIDARG - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_78() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B) {} " L" IRowsetChange::InsertRow(C) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(A,B) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Undo(A) " L" { " L" L1.ROW_UNDODELETE.OKTODO.RETURN_EINVALIDARG " L" L1.ROW_UNDODELETE.ABOUTTODO.RETURN_EINVALIDARG " L" L1.ROW_UNDODELETE.SYNCHAFTER.RETURN_EINVALIDARG " L" L1.ROW_UNDODELETE.DIDEVENT.RETURN_EINVALIDARG " L" } " L" IRowsetUpdate::Undo(B) " L" { " L" L1.ROW_UNDODELETE.ABOUTTODO.RETURN_VETO " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(79) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_79() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(80) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_80() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(81) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Undo unchanged row // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_81() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::DeleteRows(B) {} " L" IRowsetUpdate::Undo(C) " L" { " L" } " L" IRowsetUpdate::Undo(A) " L" { " L" L1.ROW_UNDOCHANGE.ABOUTTODO.RETURN_ACCEPT " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(82) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Undo all rows // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_82() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::DeleteRows(B) {} " L" IRowsetUpdate::Undo() " L" { " L" L1.ROW_UNDOCHANGE.ABOUTTODO.RETURN_ACCEPT " L" L1.ROW_UNDODELETE.ABOUTTODO.RETURN_ACCEPT " L" L1.ROW_UNDOINSERT.ABOUTTODO.RETURN_ACCEPT " L" } " L" IRowsetUpdate::Undo() " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(83) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Undo changed and unchanged // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_83() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::DeleteRows(B) {} " L" IRowsetUpdate::Undo(A,B,C,D) " L" { " L" L1.ROW_UNDOCHANGE.ABOUTTODO.RETURN_ACCEPT " L" L1.ROW_UNDODELETE.ABOUTTODO.RETURN_ACCEPT " L" L1.ROW_UNDOINSERT.ABOUTTODO.RETURN_ACCEPT " L" } " L" IRowsetUpdate::Undo() " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(84) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_84() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(85) //-------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Verify Undo clears the FIRSTCHANGE status // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_85() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::SetData(A,2) " L" {" L" L1.ROW_FIRSTCHANGE.OKTODO.RETURN_ACCEPT " L" }" L" IRowsetUpdate::Undo(A) " L" { " L" L1.ROW_UNDOCHANGE.ABOUTTODO.RETURN_ACCEPT " L" } " L" IRowsetChange::SetData(A,2) " L" {" L" L1.ROW_FIRSTCHANGE.OKTODO.RETURN_ACCEPT " L" }" L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(86) //-------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_86() { // TO DO: Add your own code here return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(87) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - DBROWSTATUS_E_INVALID // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_87() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::DeleteRows(B) {} " L" IRowsetUpdate::Undo(E,DB_E_ERRORSOCCURRED) " L" { " L" } " L" IRowsetUpdate::Undo() " L" { " L" L1.ROW_UNDOCHANGE.ABOUTTODO.RETURN_ACCEPT " L" L1.ROW_UNDODELETE.ABOUTTODO.RETURN_ACCEPT " L" L1.ROW_UNDOINSERT.ABOUTTODO.RETURN_ACCEPT " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(88) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - EmptyRowset // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_88() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetUpdate::Undo() " L" { " L" } " L" IRowsetUpdate::Undo() " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, EMPTY_ROWSET | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(89) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Add/Remove Listeners // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_89() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::DeleteRows(B) {} " L" IRowsetUpdate::Undo(A,B,C,D) " L" { " L" L1.ROW_UNDODELETE.ABOUTTODO.RETURN_ADVISE " L" } " L" IRowsetUpdate::Undo() " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(90) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - GetData // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_90() { //From the spec: in delayed update mode rows with pending deletes cannot be used in GetData //Povider may return DB_E_DELETEDROW from GetData if hRow referred to a pending delete row, but //providers are not required to check for this condition and result of passing an invalid row handle in hRow is undefined //=>Commented out L1.ROW_UNDODELETE.ABOUTTODO.IRowset::GetData(B) WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::DeleteRows(B) {} " L" IRowsetUpdate::Undo(A,B,C,D) " L" { " L" L1.ROW_UNDOCHANGE.OKTODO.IRowset::GetData(A) {} " // L" L1.ROW_UNDODELETE.ABOUTTODO.IRowset::GetData(B) {} " L" L1.ROW_UNDODELETE.SYNCHAFTER.IRowset::GetData(B) {} " L" L3.ROW_UNDOINSERT.ABOUTTODO.IRowset::GetData(D) {} " L" } " L" IRowsetUpdate::Undo() " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(91) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - GetOriginalData // // @rdesc TEST_PASS or TEST_FAIL // int Undo::Variation_91() { //Form the spec: //GetOriginalData gets the data most recently fetched from or transmitted to the data store //=> for newly inserted row in delayed update mode we can not call GetOriginalData untill it's transmitted //=> commented out L3.ROW_UNDOINSERT.ABOUTTODO.IRowsetUpdate::GetOriginalData(D,DB_E_NOTREENTRANT) WCHAR CommandString[] = L"{Listener L1; Listener L2; Listener L3; " L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::DeleteRows(B) {} " L" IRowsetUpdate::Undo(A,B,C,D) " L" { " L" L1.ROW_UNDOCHANGE.OKTODO.IRowsetUpdate::GetOriginalData(A,DB_E_NOTREENTRANT) {} " L" L1.ROW_UNDODELETE.ABOUTTODO.IRowsetUpdate::GetOriginalData(B,DB_E_NOTREENTRANT) {} " // L" L3.ROW_UNDOINSERT.ABOUTTODO.IRowsetUpdate::GetOriginalData(D,DB_E_NOTREENTRANT) {} " L" } " L" IRowsetUpdate::Undo() " L" { " L" } " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Undo::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CExecutionManager::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(Update) //*----------------------------------------------------------------------- //| Test Case: Update - Tests Notifications for IRowsetUpdate::Update //| Created: 09/29/96 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Update::Init() { // {{ TCW_INIT_BASECLASS_CHECK if(CExecutionManager::Init()) // }} { //Verify Rowset can be created... TEST_PROVIDER(CreateRowset(CHANGE_BUFFERRED)==S_OK); return TRUE; } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc ROW_UPDATE - Accept all phases // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_1() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Update(A,B,C) " L" {" L" L1.ROW_UPDATE.OKTODO.RETURN_ACCEPT " L" }" L" IRowsetUpdate::Update(A,D) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_2() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_3() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc ROW_UPDATE - DB_E_CANCELED // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_4() { //Veriy the veto was successful //Row should be unaffected by the Update //Make sure Veto of the first setdata, doesn't affect the Update //of the second setdata WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Update(A,B,C) " L" {" L" L1.ROW_UPDATE.ABOUTTODO.RETURN_VETO " L" }" L" IRowsetUpdate::GetOriginalData(A) {} " L" IRowsetUpdate::Update(D) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc ROW_UPDATE - DB_E_NOTREENTRANT // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_5() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Update(A,B,C) " L" {" L" L1.ROW_UPDATE.OKTODO.IRowsetUpdate::Update(A,B,C,DB_E_NOTREENTRANT) {} " L" }" L" IRowsetUpdate::Update(D) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(6) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_6() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(7) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_7() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(8) //*----------------------------------------------------------------------- // @mfunc ROW_UPDATE - Veto OKTODO // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_8() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Update(A,B,C) " L" {" L" L1.ROW_UPDATE.OKTODO.RETURN_VETO " L" }" L" IRowsetUpdate::Update(D) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(9) //*----------------------------------------------------------------------- // @mfunc ROW_UPDATE - Veto ABOUTTODO // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_9() { //Make sure Veto of the first insert, doesn't affect the Update //of the second insert WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::InsertRow(E) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Update(D,E,A) " L" {" L" L1.ROW_UPDATE.ABOUTTODO.RETURN_VETO " L" }" L" IRowsetUpdate::Update(C) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(10) //*----------------------------------------------------------------------- // @mfunc ROW_UPDATE - Veto SYNCHAFTER // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_10() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Update(A,B,C) " L" {" L" L1.ROW_UPDATE.SYNCHAFTER.RETURN_VETO " L" }" L" IRowsetUpdate::Update(D) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(11) //*----------------------------------------------------------------------- // @mfunc ROW_UPDATE - Veto DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_11() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Update(A,B,C) " L" {" L" L1.ROW_UPDATE.DIDEVENT.RETURN_VETO " L" }" L" IRowsetUpdate::Update(D) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(12) //*----------------------------------------------------------------------- // @mfunc ROW_UPDATE - Veto FAILEDTODO // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_12() { //Make sure Veto of the first delete, doesn't affect the Update //of the second delete WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::DeleteRows(B) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Update(B,C,A) " L" {" L" L1.ROW_UPDATE.ABOUTTODO.RETURN_VETO " L" L1.ROW_UPDATE.FAILEDTODO.RETURN_VETO " L" }" L" IRowsetUpdate::Update(D) {} " L" }" L" }" L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROW_UPDATE, DBEVENTPHASE_ABOUTTODO)); TESTC(Execute(CommandString, CHANGE_BUFFERRED)); CLEANUP: TRETURN; } // }} // {{ TCW_VAR_PROTOTYPE(13) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_13() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(14) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_14() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(15) //*----------------------------------------------------------------------- // @mfunc ROW_UPDATE - UNWANTED REASON // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_15() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Update(A,B,C) " L" {" L" L1.ROW_UPDATE.OKTODO.RETURN_UNWANTEDREASON " L" }" L" IRowsetUpdate::Update(D) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(16) //*----------------------------------------------------------------------- // @mfunc ROW_UPDATE - UNWANTED PHASE - OKTODO // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_16() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Update(A,B,C) " L" {" L" L1.ROW_UPDATE.OKTODO.RETURN_UNWANTEDPHASE " L" }" L" IRowsetUpdate::Update(D) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(17) //*----------------------------------------------------------------------- // @mfunc ROW_UPDATE - UNWANTED PHASE - ABOUTTODO // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_17() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Update(A,B,C) " L" {" L" L1.ROW_UPDATE.ABOUTTODO.RETURN_UNWANTEDPHASE " L" }" L" IRowsetUpdate::Update(D) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(18) //*----------------------------------------------------------------------- // @mfunc ROW_UPDATE - UNWANTED PHASE - SYNCHAFTER // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_18() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Update(A,B,C) " L" {" L" L1.ROW_UPDATE.SYNCHAFTER.RETURN_UNWANTEDPHASE " L" }" L" IRowsetUpdate::Update(D) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(19) //*----------------------------------------------------------------------- // @mfunc ROW_UPDATE - UNWANTED PHASE - DIDEVENT // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_19() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Update(A,B,C) " L" {" L" L1.ROW_UPDATE.DIDEVENT.RETURN_UNWANTEDPHASE " L" }" L" IRowsetUpdate::Update(D) {} " L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(20) //*----------------------------------------------------------------------- // @mfunc ROW_UPDATE - UNWANTED PHASE - FAILEDTODO // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_20() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Update(A,B,C) " L" {" L" L1.ROW_UPDATE.ABOUTTODO.RETURN_VETO " L" L1.ROW_UPDATE.FAILEDTODO.RETURN_UNWANTEDPHASE " L" }" L" IRowsetUpdate::Update(D) {} " L" }" L" }" L"}"; //To produce FAILEDTODO, this reason/phase must be vetoable... TESTC_PROVIDER(IsCancelableEvent(DBREASON_ROW_UPDATE, DBEVENTPHASE_ABOUTTODO)); TESTC(Execute(CommandString, CHANGE_BUFFERRED)); CLEANUP: TRETURN; } // }} // {{ TCW_VAR_PROTOTYPE(21) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_21() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(22) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_22() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(23) //*----------------------------------------------------------------------- // @mfunc ROW_UPDATE - E_FAIL - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_23() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Update(A,B) " L" {" L" L1.ROW_UPDATE.OKTODO.RETURN_EFAIL " L" L1.ROW_UPDATE.ABOUTTODO.RETURN_EFAIL " L" L1.ROW_UPDATE.SYNCHAFTER.RETURN_EFAIL " L" L1.ROW_UPDATE.DIDEVENT.RETURN_EFAIL " L" }" L" IRowsetUpdate::Update(C,D) " L" {" L" L1.ROW_UPDATE.ABOUTTODO.RETURN_VETO " L" }" L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(24) //*----------------------------------------------------------------------- // @mfunc ROW_UPDATE - E_OUTOFMEMORY - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_24() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Update(A,B) " L" {" L" L1.ROW_UPDATE.OKTODO.RETURN_EOUTOFMEMORY " L" L1.ROW_UPDATE.ABOUTTODO.RETURN_EOUTOFMEMORY " L" L1.ROW_UPDATE.SYNCHAFTER.RETURN_EOUTOFMEMORY " L" L1.ROW_UPDATE.DIDEVENT.RETURN_EOUTOFMEMORY " L" }" L" IRowsetUpdate::Update(C,D) " L" {" L" L1.ROW_UPDATE.ABOUTTODO.RETURN_VETO " L" }" L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(25) //*----------------------------------------------------------------------- // @mfunc ROW_UPDATE - E_INVALIDARG - All Phases // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_25() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Update(A,B) " L" {" L" L1.ROW_UPDATE.OKTODO.RETURN_EINVALIDARG " L" L1.ROW_UPDATE.ABOUTTODO.RETURN_EINVALIDARG " L" L1.ROW_UPDATE.SYNCHAFTER.RETURN_EINVALIDARG " L" L1.ROW_UPDATE.DIDEVENT.RETURN_EINVALIDARG " L" }" L" IRowsetUpdate::Update(C,D) " L" {" L" L1.ROW_UPDATE.ABOUTTODO.RETURN_VETO " L" }" L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(26) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_26() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(27) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_27() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(28) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Update all [no changes] // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_28() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetUpdate::Update() " L" {" L" }" L" IRowsetUpdate::Update(A,B,C) " L" {" L" }" L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(29) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Update all [changes] // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_29() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Update(D) " L" {" L" L1.ROW_UPDATE.OKTODO.RETURN_ACCEPT " L" }" L" IRowsetUpdate::Update(D) " L" {" L" }" L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(30) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Update changed and unchanged // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_30() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Update(A,B,C) " L" {" L" L1.ROW_UPDATE.OKTODO.RETURN_ACCEPT " L" }" L" IRowsetUpdate::Update(A,B,D) " L" {" L" L1.ROW_UPDATE.OKTODO.RETURN_ACCEPT " L" }" L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(31) //*----------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_31() { return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(32) //-------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Verify Update clears FIRSTCHANGE status // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_32() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::SetData(A,2) " L" {" L" L1.ROW_FIRSTCHANGE.OKTODO.RETURN_ACCEPT " L" }" L" IRowsetUpdate::Update(A) " L" {" L" L1.ROW_UPDATE.OKTODO.RETURN_ACCEPT " L" }" L" IRowsetChange::SetData(A,2) " L" {" L" L1.ROW_FIRSTCHANGE.OKTODO.RETURN_ACCEPT " L" }" L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(33) //-------------------------------------------------------------------- // @mfunc Empty // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_33() { // TO DO: Add your own code here return TEST_SKIPPED; } // }} // {{ TCW_VAR_PROTOTYPE(34) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - DBROWSTATUS_E_INVALID // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_34() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Update(E,DB_E_ERRORSOCCURRED) " L" {" L" }" L" IRowsetUpdate::Update(C,D) " L" {" L" L1.ROW_UPDATE.OKTODO.RETURN_ACCEPT " L" }" L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(35) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - EmptyRowset // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_35() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowsetUpdate::Update() " L" {" L" }" L" IRowsetUpdate::Update() " L" {" L" }" L" }" L" }" L"}"; return Execute(CommandString, EMPTY_ROWSET | CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(36) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - Add/Remove Listeners // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_36() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Update(A,B) " L" {" L" L1.ROW_UPDATE.OKTODO.RETURN_ADVISE " L" }" L" IRowsetUpdate::Update(C,D) " L" {" L" L1.ROW_UPDATE.OKTODO.RETURN_UNADVISE " L" }" L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(37) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - GetData // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_37() { WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Update(A,B,C) " L" {" L" L1.ROW_UPDATE.OKTODO.IRowset::GetData(A) {} " L" L1.ROW_UPDATE.OKTODO.IRowset::GetData(B) {} " L" }" L" IRowsetUpdate::Update(D) " L" {" L" L1.ROW_UPDATE.OKTODO.IRowset::GetData(D) {} " L" }" L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_VAR_PROTOTYPE(38) //*----------------------------------------------------------------------- // @mfunc OTHER SCENARIOS - GetOriginalData // // @rdesc TEST_PASS or TEST_FAIL // int Update::Variation_38() { //Form the spec: //GetOriginalData "gets the data most recently fetched from or transmitted to the data store; //does not get values based on pending changes" //=> for newly inserted row in delayed update mode we can not call GetOriginalData until it's transmitted //=> commented out L1.ROW_UPDATE.OKTODO.IRowsetUpdate::GetOriginalData(D,DB_E_NOTREENTRANT) WCHAR CommandString[] = L"{Listener L1; Listener L2;" L" {Control Control1;" L" {" L" IRowset::GetNextRows(A,B,C) {} " L" IRowsetChange::InsertRow(D) {} " L" IRowsetChange::SetData(A,2,5) {} " L" IRowsetChange::SetData(B,2,5) {} " L" IRowsetChange::DeleteRows(C) {} " L" IRowsetUpdate::Update(A,B) " L" {" L" L1.ROW_UPDATE.OKTODO.IRowsetUpdate::GetOriginalData(A,DB_E_NOTREENTRANT) {} " L" L1.ROW_UPDATE.OKTODO.IRowsetUpdate::GetOriginalData(B,DB_E_NOTREENTRANT) {} " L" }" L" IRowsetUpdate::Update(D) " L" {" // L" L1.ROW_UPDATE.OKTODO.IRowsetUpdate::GetOriginalData(D,DB_E_NOTREENTRANT) {} " L" }" L" }" L" }" L"}"; return Execute(CommandString, CHANGE_BUFFERRED); } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Update::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CExecutionManager::Terminate()); } // }} // }} // }}