//-------------------------------------------------------------------- // Microsoft OLE DB Test // // Copyright 1995-2000 Microsoft Corporation. // // @doc // // @module IRSCROLL.CPP | IRSCROLL source file for all test modules. // #include "modstandard.hpp" #define DBINITCONSTANTS // Must be defined to initialize constants in OLEDB.H #define INITGUID #include "IROWSCRL.h" // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Module Values // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // {{ TCW_MODULE_GLOBALS DECLARE_MODULE_CLSID = { 0xd010f3e1, 0x2017, 0x11d1, { 0xa8, 0x83, 0x00, 0xc0, 0x4f, 0xd7, 0xa0, 0xf5 }}; DECLARE_MODULE_NAME("IRowsetScroll"); DECLARE_MODULE_OWNER("Microsoft"); DECLARE_MODULE_DESCRIP("Test Module for IRowsetScroll Interface"); DECLARE_MODULE_VERSION(795921705); // }} // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Globals // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CTable *g_pCTable=NULL; // Pointer to the global table DBROWCOUNT g_lRowLast = 0; // Keep track of rows in g_pCTable CTable *g_p1RowTable=NULL; // one row table; CTable *g_pEmptyTable=NULL; // empty table BOOL g_fIsDBCreateCommandSupported = TRUE; BOOL g_fIsDBSchemaRowsetSupported = TRUE; DBROWCOUNT g_cMaxOpenRowsCount=0; // Record the number of max open rows in the rowset DBCOUNTITEM g_cVerifyRows=0, g_cVerifyApproxPos=0, g_ulWeightedError=0, g_ulWeightedPosError=0; enum ePrptIdx {IDX_Bookmarks=0, IDX_CanFetchBackwards, IDX_ScrollBackwards, IDX_CanHoldRows, IDX_MaxOpenRows,IDX_RemoveDeleted, IDX_BookmarkSkipped, IDX_OtherUpdateDelete, IDX_OtherInsert, IDX_IRowsetChange}; enum eRowsetType { USECOMMAND=0, USEOPENROWSET, USESCHEMAR }; #undef TESTC_PROVIDER #define TESTC_PROVIDER(fPass) {if(!fPass) { odtLog << L"NotSupported by Provider, skipping Variation" << ENDL; fTestPass = TEST_SKIPPED; goto END; } } #define PROPERTY_COUNT (IDX_IRowsetChange+1) #define EXACT TRUE #define INEXACT FALSE #define VerifyApproximatePosition(cPos, cRows, cExpectedPos) _VerifyApproximatePosition((cPos),(cRows),(cExpectedPos), LONGSTRING(__FILE__), __LINE__) #define VerifyRowPosition(hRow, cRow, pCTable, fExact) _VerifyRowPosition((hRow), (cRow), (pCTable), (fExact),LONGSTRING(__FILE__), __LINE__) // Record the properties default values struct DBPrptRecord { BOOL fSupported; BOOL fDefault; BOOL fSettable; } g_rgDBPrpt[PROPERTY_COUNT]; //-------------------------------------------------------------------- // @func Print out message on the screen that a particular property // is not supported. //-------------------------------------------------------------------- BOOL PrintNotSupported(ULONG cProperties) { BOOL fPass=TRUE; switch(cProperties) { case IDX_Bookmarks: odtLog<GetPropertyInfo(1,&rgPropertyIDSets, &cPropertyInfoSets,&pPropertyInfoSets,&pDescBuffer))) goto END; for(i=0; irgPropertyInfos[i].dwFlags & DBPROPFLAGS_WRITE) g_rgDBPrpt[i].fSettable=TRUE; else g_rgDBPrpt[i].fSettable=FALSE; } END: SAFE_RELEASE(pIDBProperties); COMPARE(FreeProperties(&cPropertyInfoSets,&pPropertyInfoSets,&pDescBuffer),TRUE); } //-------------------------------------------------------------------- // @func Module level initialization routine // // @rdesc Success or Failure // @flag TRUE | Successful initialization // @flag FALSE | Initialization problems // BOOL ModuleInit(CThisTestModule * pThisTestModule) { HRESULT hr; ULONG cProperties; ULONG cCnt; DBPROPID rgDBPrpt[PROPERTY_COUNT]; DBPROPIDSET rgPropertyIDSets; BOOL fInit=FALSE; IUnknown *pIRowset=NULL; DBPROPSET *prgProperties=NULL; IRowsetInfo *pIRowsetInfo=NULL; IDBCreateCommand *pIDBCreateCommand=NULL; IDBSchemaRowset *pIDBSchemaRowset=NULL; // Store a IDBCreateCommand pointer to pThisTestModule->m_pIUnknown if(!ModuleCreateDBSession(pThisTestModule)) return FALSE; // Reset global counters of Scroll accuracy g_cVerifyRows=g_ulWeightedError=g_cVerifyApproxPos=g_ulWeightedPosError=0; // Create the tables g_pCTable = new CTable(pThisTestModule->m_pIUnknown2, (WCHAR *)gwszModuleName, USENULLS); g_p1RowTable = new CTable(pThisTestModule->m_pIUnknown2, (WCHAR *)gwszModuleName, USENULLS); g_pEmptyTable = new CTable(pThisTestModule->m_pIUnknown2, (WCHAR *)gwszModuleName, USENULLS); if(!g_pCTable || !SUCCEEDED(g_pCTable->CreateTable(TABLE_ROW_COUNT)) ) { if(g_pCTable) delete g_pCTable; g_pCTable=NULL; odtLog<GetRowsOnCTable(); if ( g_lRowLast < 8 ) { odtLog<CreateTable(1,1,NULL,PRIMARY,TRUE)) ) { if(g_p1RowTable) delete g_p1RowTable; g_p1RowTable = NULL; } if ( g_p1RowTable->GetRowsOnCTable() != 1 ) { delete g_p1RowTable; g_p1RowTable = NULL; } if(!g_pEmptyTable || !SUCCEEDED(g_pEmptyTable->CreateTable(0,1,NULL,PRIMARY,TRUE)) ) { if(g_pEmptyTable) delete g_pEmptyTable; g_pEmptyTable = NULL; } if ( g_pEmptyTable->GetRowsOnCTable() != 0 ) { delete g_pEmptyTable; g_pEmptyTable = NULL; } // Make sure IRowsetScroll interface is supported by opening a rowset hr = g_pCTable->CreateRowset(USE_OPENROWSET,IID_IRowsetScroll,0,NULL,&pIRowset, NULL, NULL); // If E_NOINTERFACE is returned, IRowsetScroll is not supported by the provider if(hr==E_NOINTERFACE) { odtLog<GetProperties(1,&rgPropertyIDSets, &cProperties, &prgProperties))) goto END; // cProperties has to be PROPERTY_COUNT if(prgProperties->cProperties!=PROPERTY_COUNT) goto END; // Mark the properties for(cCnt=0;cCntcProperties;cCnt++) { // Mark the properties not supported. if(prgProperties->rgProperties[cCnt].dwStatus==DBPROPSTATUS_NOTSUPPORTED) { g_rgDBPrpt[cCnt].fSupported=FALSE; PrintNotSupported(cCnt); } else { g_rgDBPrpt[cCnt].fSupported=TRUE; if(cCnt!=IDX_MaxOpenRows) g_rgDBPrpt[cCnt].fDefault=V_BOOL(&prgProperties->rgProperties[cCnt].vValue); else g_cMaxOpenRowsCount=prgProperties->rgProperties[IDX_MaxOpenRows].vValue.lVal; } } InitProp((IUnknown *)pThisTestModule->m_pIUnknown); fInit=TRUE; //IDBCreateCommand if(!VerifyInterface(pThisTestModule->m_pIUnknown2, IID_IDBCreateCommand, SESSION_INTERFACE, (IUnknown**)&pIDBCreateCommand)) { // Note the limitation and continue. g_fIsDBCreateCommandSupported = FALSE; odtLog << L"IDBCreateCommand is not supported by Provider." << ENDL; } else { g_fIsDBCreateCommandSupported = TRUE; } //IDBSchemaRowset if(!VerifyInterface(pThisTestModule->m_pIUnknown2, IID_IDBSchemaRowset, SESSION_INTERFACE, (IUnknown**)&pIDBSchemaRowset)) { // Note the limitation and continue. g_fIsDBSchemaRowsetSupported = FALSE; odtLog << L"IDBSchemaRowset is not supported by Provider." << ENDL; } else { g_fIsDBSchemaRowsetSupported = TRUE; } END: // Release interfaces SAFE_RELEASE(pIRowsetInfo); SAFE_RELEASE(pIRowset); SAFE_RELEASE(pIDBCreateCommand); SAFE_RELEASE(pIDBSchemaRowset); // Free the memory if(prgProperties) { for(cCnt=0; cCntDropTable(); SAFE_DELETE(g_pCTable); } if(g_p1RowTable) { g_p1RowTable->DropTable(); SAFE_DELETE(g_p1RowTable); } if(g_pEmptyTable) { g_pEmptyTable->DropTable(); SAFE_DELETE(g_pEmptyTable); } odtLog << "The number row verifications: "<GetNextRows(DB_NULL_HCHAPTER, 0, m_ulRowCount, &cRowsObtained, &m_pHRows), S_OK) ) goto END; if (!COMPARE(cRowsObtained, m_ulRowCount)) goto END; if ( !CHECK(m_pIRowset->RestartPosition(DB_NULL_HCHAPTER), S_OK) ) goto END; } //If dwAccessorFlags=DBACCESSOR_PASSBYREF, no need to create an accessor if(dwAccessorFlags==DBACCESSOR_PASSBYREF) { fSucceed = TRUE; goto END; } //Create an accessor on the rowset if(!CHECK(GetAccessorAndBindings(m_pIRowset,dwAccessorFlags,&m_hAccessor, &m_rgBinding,&m_cBinding,&m_cRowSize,dwPart,eColsToBind,eBindingOrder, eColsByRef,NULL,NULL,NULL,dbTypeModifier),S_OK)) goto END; //Allocate memory for the row m_pData=PROVIDER_ALLOC(m_cRowSize); if(!m_pData) goto END; fSucceed = TRUE; END: //Free memory if(DBPropSet.rgProperties) PROVIDER_FREE(DBPropSet.rgProperties); SAFE_RELEASE(pIRowsetInfo); return fSucceed; } //-------------------------------------------------------------------- //@mfun: Get the bookmark for the row. The function has to be called // after the GetRowsetAndAccessor that creates an accessor on the // rowset. // //-------------------------------------------------------------------- BOOL TCIRowsetScroll::GetBookmark ( DBCOUNTITEM ulRow, ULONG_PTR *pcbBookmark, BYTE **ppBookmark ) { BOOL fPass=FALSE; HROW * pHRow=NULL; DBCOUNTITEM cCount; // ulRow has to start with 1 ASSERT(m_pIRowset && pcbBookmark && ppBookmark && ulRow); // Restart the cursor position if(!CHECK(m_pIRowset->RestartPosition(NULL),S_OK)) return FALSE; // Fetch the row if(!CHECK(m_pIRowset->GetNextRows(NULL, // Chapter handle. (ulRow-1), // Count of rows to skip before reading. 1, // The number of rows to fetch. &cCount, // Actual number of fetched rows. &pHRow), // Array of handles of retrieved rows. S_OK)) goto END; // Only one row handle is retrieved COMPARE(cCount, 1); // Get the data if(!CHECK(m_pIRowset->GetData(*pHRow, m_hAccessor, m_pData),S_OK)) goto END; // Make sure the 0 column is for bookmark if(!COMPARE(m_rgBinding[0].iOrdinal, 0)) { FreeMemory(); goto END; } // Get the length of the bookmark *pcbBookmark= *((ULONG *)((BYTE *)m_pData+m_rgBinding[0].obLength)); // Allocate memory for bookmark *ppBookmark=(BYTE *)PROVIDER_ALLOC(*pcbBookmark); if(!(*ppBookmark)) goto END; // Copy the value of the bookmark into the consumer's buffer memcpy(*ppBookmark, (void *)((BYTE *)m_pData+m_rgBinding[0].obValue), *pcbBookmark); // Free the memory referenced by the consumer's buffer FreeMemory(); fPass=TRUE; END: if(pHRow) { CHECK(m_pIRowset->ReleaseRows(1,pHRow,NULL,NULL,NULL),S_OK); PROVIDER_FREE(pHRow); } //restart the cursor position if(!CHECK(m_pIRowset->RestartPosition(NULL),S_OK)) return FALSE; return fPass; } //-------------------------------------------------------------------- //@mfunc: Free the memory referenced by the consumer's buffer // The function has to be called after IRowset::GetData() // //-------------------------------------------------------------------- void TCIRowsetScroll::FreeMemory(CTable *pCTable,ECOMPARE_FREE eReadColumnsByRef) { // Make sure m_pData is not NULL if(!COMPARE(!m_pData, NULL)) return; //make sure the columns are bound if(!m_rgTableColOrds) return; // Call CompareData with the option to free the memory referenced by the consumer's // buffer without comparing data //CompareData(m_cColumns,m_rgColumns,1,m_pData,m_cBinding,m_rgBinding,pCTable, CompareData(m_cRowsetCols, m_rgTableColOrds,1,m_pData,m_cBinding,m_rgBinding,pCTable, NULL,PRIMARY,FREE_ONLY); return; } //-------------------------------------------------------------------- //@mfunc: Release a rowset object and accessor created on it // //-------------------------------------------------------------------- BOOL TCIRowsetScroll::ReleaseRowsetAndAccessor() { BOOL fPass=TRUE; m_ulRowCount=0; // Free the consumer's buffer PROVIDER_FREE(m_pData); // Free binding structure PROVIDER_FREE(m_rgBinding); // Free accessor handle if(m_hAccessor) { if(!m_pIAccessor) // Get an IAccessor pointer if it was not yet a valid pointer if(VerifyInterface(m_pIRowset,IID_IAccessor, ROWSET_INTERFACE,(IUnknown **)&m_pIAccessor)) fPass=FALSE; if(m_pIAccessor) { if(!CHECK(m_pIAccessor->ReleaseAccessor(m_hAccessor,NULL), S_OK)) fPass=FALSE; } m_hAccessor=NULL; } if ( m_fCanHoldRows && m_pIRowset && m_pHRows ) { if (!CHECK(m_pIRowset->ReleaseRows(m_ulRowCount, m_pHRows, NULL, NULL, NULL), S_OK)) fPass=FALSE; PROVIDER_FREE(m_pHRows); } SAFE_RELEASE(m_pIRowset); SAFE_RELEASE(m_pIRowsetScroll); SAFE_RELEASE(m_pIRowsetIdentity); ReleaseRowsetObject(); //releases m_pIAccessor ReleaseCommandObject(); //releases m_pICommand ReleaseDBSession(); ReleaseDataSourceObject(); return fPass; } //-------------------------------------------------------------------- // //@mfunc: Verify the position of the row handle in the row set // // Precondition: The function has to be called after GetRowsetAndAccessor that // creates a rowset and an accessor // //-------------------------------------------------------------------- BOOL TCIRowsetScroll::_VerifyRowPosition ( HROW hRow, // Row handle DBCOUNTITEM cRow, // Position expected CTable * pCTable, // Pointer to the CTable BOOL fExact, // Enforce exactness WCHAR * wszFile, UDWORD udwLine ) { // Input validation if(!pCTable) return FALSE; // m_pIRowset has to be valid if(!m_pIRowset || !m_pData || !m_pIRowsetIdentity) return FALSE; g_cVerifyRows++; if ( m_fCanHoldRows ) { if ( FAILED(m_hr = m_pIRowsetIdentity->IsSameRow(hRow, m_pHRows[cRow-1])) ) return FALSE; if ( m_hr == S_OK ) return TRUE; if ( m_hr == S_FALSE ) { // sequentially search until a match. for ( ULONG i = 1; i<=m_ulRowCount; i++ ) { if ( FAILED(m_hr = m_pIRowsetIdentity->IsSameRow(hRow, m_pHRows[i-1])) ) { if( m_hr == DB_E_DELETEDROW ) continue; else return FALSE; } if ( m_hr == S_OK ) { odtLog<<" Inexact Position occurred. Recieved: "<GetData(hRow,m_hAccessor,m_pData),S_OK)) return FALSE; // Compare the data with the row expected in the rowset //if(!CompareData(m_cColumns,m_rgColumns,cRow,m_pData,m_cBinding,m_rgBinding,pCTable, if(!CompareData(m_cRowsetCols, m_rgTableColOrds,cRow,m_pData,m_cBinding,m_rgBinding,pCTable, NULL,PRIMARY,FREE_ONLY,COMPARE_UNTIL_ERROR)) return FALSE; return TRUE; } //-------------------------------------------------------------------- // //@mfunc: Verify the position of the cursor in the row set // // Precondition: The function has to be called after GetRowsetAndAccessor that // creates a rowset and an accessor. // //-------------------------------------------------------------------- BOOL TCIRowsetScroll::VerifyCursorPosition ( DBCOUNTITEM cRow, // The cursor position expected CTable *pCTable, // Pointer to the CTable BOOL fMoveBack, // Whether to move the cursor back to its original postion // If fMoveBack==FALSE; the cursor will be positioned one row // after the original position. If fMoveBack==TRUE, // DBPROP_CANSCROLLBACKWARDS needs to be set. EVALUE eValue, // eValue for MakeData ECOMPARE_FREE eReadColumnsByRef // If the accessor is ReadColumnsByRef ) { HROW hRow[1]; HROW * pHRow=hRow; DBCOUNTITEM cRows; BOOL fTestPass=TRUE; // Input validation if(COMPARE(pCTable, NULL)) return FALSE; // m_pIRowset has to be valid if(COMPARE(m_pIRowset, NULL) || COMPARE(m_pData,NULL)) return FALSE; // Get a row handle if(!CHECK(m_pIRowset->GetNextRows(NULL,0,1,&cRows,&pHRow),S_OK)) return FALSE; if(!VerifyRowPosition(hRow[0],cRow,pCTable,EXACT)) fTestPass=FALSE; // Release the row handle CHECK(m_pIRowset->ReleaseRows(1,hRow,NULL,NULL,NULL),S_OK); // Reposition the cursor to its original position if(fMoveBack) { if(!CHECK(m_pIRowset->GetNextRows(NULL,-1,0,&cRows,&pHRow),S_OK)) fTestPass=FALSE; } return (fTestPass); } BOOL TCIRowsetScroll::_VerifyApproximatePosition ( DBCOUNTITEM ulPosition, DBCOUNTITEM cRows, DBCOUNTITEM ulExpectedPosition, WCHAR * wszFile, UDWORD udwLine ) { BOOL fWarning = FALSE, fPass = TRUE; g_cVerifyApproxPos++; if (!COMPARE((cRows >= ulPosition), TRUE)) { fPass = FALSE; fWarning = TRUE; goto END; } if ( ulPosition != ulExpectedPosition ) { odtLog << wszInexactPositionWarning; odtLog << "Expected *pulPosition: "<DeleteRows(ALLROWS),S_OK)) return FALSE; // Regenerate the rowset if(!CHECK(g_pCTable->Insert(PRIMARY, 1, g_lRowLast),S_OK)) return FALSE; return TRUE; } //-------------------------------------------------------------------- // //@mfunc: verify that updating / deleting rows is OK against this provider. // // The result of this particular function is independant of whether the provider // allows updates/deletes. The focus is rather whether deleting a row will // cause the table to fall into an "unknown" state. // //-------------------------------------------------------------------- BOOL TCIRowsetScroll::AlteringRowsIsOK() { // If a specific table was set on the backend, assume we cannot alter it. if ( GetModInfo()->GetTableName() && !GetModInfo()->GetFileName() ) return FALSE; else return TRUE; } //-------------------------------------------------------------------- //@mfunc: Check if a property is supported on a rowset //-------------------------------------------------------------------- BOOL TCIRowsetScroll::IsPropertyActive(DBPROPID DBPropID) { IRowsetInfo *pIRowsetInfo=NULL; ULONG cProperty; DBPROPIDSET DBPropIDSet; DBPROPSET *pDBPropSet=NULL; BOOL fSupported=FALSE; //initialize DBPropIDSet.guidPropertySet=DBPROPSET_ROWSET; DBPropIDSet.cPropertyIDs=1; DBPropIDSet.rgPropertyIDs=&DBPropID; //QI for IRowsetInfo interface if(!CHECK(m_pIRowset->QueryInterface(IID_IRowsetInfo,(LPVOID *)&pIRowsetInfo),S_OK)) goto CLEANUP; //ask for DBPROP_BOOKMARKSKIPPED if(!CHECK(pIRowsetInfo->GetProperties(1,&DBPropIDSet,&cProperty, &pDBPropSet),S_OK)) goto CLEANUP; if(V_BOOL(&pDBPropSet->rgProperties->vValue)==VARIANT_TRUE) fSupported=TRUE; CLEANUP: if(pDBPropSet) { if(pDBPropSet->rgProperties) PROVIDER_FREE(pDBPropSet->rgProperties); PROVIDER_FREE(pDBPropSet); } SAFE_RELEASE(pIRowsetInfo); return fSupported; } BOOL TCIRowsetScroll::SetRowsetType(eRowsetType RType) { m_eRowsetType = RType; switch ( RType ) { case USECOMMAND: return g_fIsDBCreateCommandSupported; case USESCHEMAR: return g_fIsDBSchemaRowsetSupported; default: return TRUE; } } DBCOUNTITEM TCIRowsetScroll::GetRatio ( DBCOUNTITEM cRows, DBCOUNTITEM ulNumerator, DBCOUNTITEM ulDenominator ) { return (DBCOUNTITEM)(((double) ulNumerator * cRows) / ulDenominator); } //-------------------------------------------------------------------- //@mfunc: Init creates a Data Source object, a DB Session object, // a command object and initialize corresponding interface pointers. // //-------------------------------------------------------------------- BOOL TCIRowsetScroll::Init() { return (CRowsetObject::Init()); } //-------------------------------------------------------------------- //@mfunc: Terminate release the data source object, DB Session object, Command object // //-------------------------------------------------------------------- BOOL TCIRowsetScroll::Terminate() { return (CRowsetObject::Terminate()); } //-------------------------------------------------------------------- // @class test DBPROP_BOOKMARKS // class Bookmarks : public TCIRowsetScroll { private: public: ~Bookmarks (void) {}; Bookmarks ( wchar_t* pwszTestCaseName) : TCIRowsetScroll(pwszTestCaseName) { }; // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // @cmember *pBookmark=DBBMK_FIRST, S_OK int Variation_1(); // @cmember *pBookmark=DBBMK_LAST. S_OK is returned int Variation_2(); // @cmember *pBookmark=DBBMK_INVALID, DB_E_BADBOOKMARK int Variation_3(); // @cmember Get one row handle at a time int Variation_4(); }; // {{ TCW_TEST_CASE_MAP(Bookmarks_cmd) //-------------------------------------------------------------------- // @class test DBPROP_BOOKMARKS // class Bookmarks_cmd : public Bookmarks { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(Bookmarks_cmd,Bookmarks); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(Bookmarks_cmd) #define THE_CLASS Bookmarks_cmd BEG_TEST_CASE(Bookmarks_cmd, Bookmarks, L"test DBPROP_BOOKMARKS") TEST_VARIATION(1, L"*pBookmark=DBBMK_FIRST, S_OK") TEST_VARIATION(2, L"*pBookmark=DBBMK_LAST. S_OK is returned") TEST_VARIATION(3, L"*pBookmark=DBBMK_INVALID, DB_E_BADBOOKMARK") TEST_VARIATION(4, L"Get one row handle at a time") END_TEST_CASE() #undef THE_CLASS // }} // }} // {{ TCW_TEST_CASE_MAP(Bookmarks_SchemaR) //-------------------------------------------------------------------- // @class Using Schema Rowsets // class Bookmarks_SchemaR : public Bookmarks { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(Bookmarks_SchemaR,Bookmarks); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(Bookmarks_SchemaR) #define THE_CLASS Bookmarks_SchemaR BEG_TEST_CASE(Bookmarks_SchemaR, Bookmarks, L"Using Schema Rowsets") TEST_VARIATION(1, L"*pBookmark=DBBMK_FIRST, S_OK") TEST_VARIATION(2, L"*pBookmark=DBBMK_LAST. S_OK is returned") TEST_VARIATION(3, L"*pBookmark=DBBMK_INVALID, DB_E_BADBOOKMARK") TEST_VARIATION(4, L"Get one row handle at a time") END_TEST_CASE() #undef THE_CLASS // }} // }} // {{ TCW_TEST_CASE_MAP(Bookmarks_OpenRowset) //-------------------------------------------------------------------- // @class In Context of IOpenRowset // class Bookmarks_OpenRowset : public Bookmarks { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(Bookmarks_OpenRowset,Bookmarks); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(Bookmarks_OpenRowset) #define THE_CLASS Bookmarks_OpenRowset BEG_TEST_CASE(Bookmarks_OpenRowset, Bookmarks, L"In Context of IOpenRowset") TEST_VARIATION(1, L"*pBookmark=DBBMK_FIRST, S_OK") TEST_VARIATION(2, L"*pBookmark=DBBMK_LAST. S_OK is returned") TEST_VARIATION(3, L"*pBookmark=DBBMK_INVALID, DB_E_BADBOOKMARK") TEST_VARIATION(4, L"Get one row handle at a time") END_TEST_CASE() #undef THE_CLASS // }} // }} //-------------------------------------------------------------------- // @class Test DBPROP_CANHOLDROWS property // class CanHoldRows : public TCIRowsetScroll { private: public: ~CanHoldRows (void) {}; CanHoldRows ( wchar_t* pwszTestCaseName) : TCIRowsetScroll(pwszTestCaseName) { }; // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // @cmember Get first two rows, get next three rows, pass bookmark of second row. S_OK returned. int Variation_1(); // @cmember Get first two rows, *pBookmark=second row bookmark. S_OK returned. int Variation_2(); // @cmember Get first 5 rows, get last 5 rows, ulNumerator=1, ulDenominator=2, S_OK and 10th row returned. int Variation_3(); }; // {{ TCW_TEST_CASE_MAP(CanHoldRows_cmd) //-------------------------------------------------------------------- // @class In context of commands // class CanHoldRows_cmd : public CanHoldRows { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(CanHoldRows_cmd,CanHoldRows); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(CanHoldRows_cmd) #define THE_CLASS CanHoldRows_cmd BEG_TEST_CASE(CanHoldRows_cmd, CanHoldRows, L"In context of commands") TEST_VARIATION(1, L"Get first two rows, get next three rows, pass bookmark of second row. S_OK returned.") TEST_VARIATION(2, L"Get first two rows, *pBookmark=second row bookmark. S_OK returned.") TEST_VARIATION(3, L"Get first 5 rows, get last 5 rows, ulNumerator=1, ulDenominator=2, S_OK and middle row returned.") END_TEST_CASE() #undef THE_CLASS // }} // }} // {{ TCW_TEST_CASE_MAP(CanHoldRows_SchemaR) //-------------------------------------------------------------------- // @class In context of Schema rowsets // class CanHoldRows_SchemaR : public CanHoldRows { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(CanHoldRows_SchemaR,CanHoldRows); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(CanHoldRows_SchemaR) #define THE_CLASS CanHoldRows_SchemaR BEG_TEST_CASE(CanHoldRows_SchemaR, CanHoldRows, L"In context of Schema rowsets") TEST_VARIATION(1, L"Get first two rows, get next three rows, pass bookmark of second row. S_OK returned.") TEST_VARIATION(2, L"Get first two rows, *pBookmark=second row bookmark. S_OK returned.") TEST_VARIATION(3, L"Get first 5 rows, get last 5 rows, ulNumerator=1, ulDenominator=2, S_OK and middle row returned.") END_TEST_CASE() #undef THE_CLASS // }} // }} // {{ TCW_TEST_CASE_MAP(CanHoldRows_OpenRowset) //-------------------------------------------------------------------- // @class In context of IOpenRowset // class CanHoldRows_OpenRowset : public CanHoldRows { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(CanHoldRows_OpenRowset,CanHoldRows); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(CanHoldRows_OpenRowset) #define THE_CLASS CanHoldRows_OpenRowset BEG_TEST_CASE(CanHoldRows_OpenRowset, CanHoldRows, L"In context of IOpenRowset") TEST_VARIATION(1, L"Get first two rows, get next three rows, pass bookmark of second row. S_OK returned.") TEST_VARIATION(2, L"Get first two rows, *pBookmark=second row bookmark. S_OK returned.") TEST_VARIATION(3, L"Get first 5 rows, get last 5 rows, ulNumerator=1, ulDenominator=2, S_OK and middle row returned.") END_TEST_CASE() #undef THE_CLASS // }} // }} //-------------------------------------------------------------------- // @class Test DBPROP_CANFETCHBACKWARDS // class CanFetchBackwards : public TCIRowsetScroll { private: public: ~CanFetchBackwards (void) {}; CanFetchBackwards ( wchar_t* pwszTestCaseName) : TCIRowsetScroll(pwszTestCaseName) { }; // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // @cmember ulNumerator=1, ulDenominator=20, cRows=-2 int Variation_1(); // @cmember ulNumerator=1, ulDenominator=4, cRows=-6 int Variation_2(); // @cmember ulNumerator=3, ulDenominator=5, cRows=-2 int Variation_3(); // @cmember ulNumerator=lastrow-1, ulDenominator=lastrow, cRows=2. DB_S_ENDOFROWSET. int Variation_4(); }; // {{ TCW_TEST_CASE_MAP(CanFetchBackwards_Cmd) //-------------------------------------------------------------------- // @class In context of commands // class CanFetchBackwards_Cmd : public CanFetchBackwards { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(CanFetchBackwards_Cmd,CanFetchBackwards); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(CanFetchBackwards_Cmd) #define THE_CLASS CanFetchBackwards_Cmd BEG_TEST_CASE(CanFetchBackwards_Cmd, CanFetchBackwards, L"In context of commands") TEST_VARIATION(1, L"ulNumerator=1, ulDenominator=RowCount, cRows=-2") TEST_VARIATION(2, L"ulNumerator=1, ulDenominator=4, cRows=-6") TEST_VARIATION(3, L"ulNumerator=3, ulDenominator=5, cRows=-2") TEST_VARIATION(4, L"ulNumerator=lastrow-1, ulDenominator=lastrow, cRows=2. DB_S_ENDOFROWSET.") END_TEST_CASE() #undef THE_CLASS // }} // }} // {{ TCW_TEST_CASE_MAP(CanFetchBackwards_SchemaR) //-------------------------------------------------------------------- // @class In context of a Schema Rowset // class CanFetchBackwards_SchemaR : public CanFetchBackwards { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(CanFetchBackwards_SchemaR,CanFetchBackwards); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(CanFetchBackwards_SchemaR) #define THE_CLASS CanFetchBackwards_SchemaR BEG_TEST_CASE(CanFetchBackwards_SchemaR, CanFetchBackwards, L"In context of a Schema Rowset") TEST_VARIATION(1, L"ulNumerator=1, ulDenominator=RowCount, cRows=-2") TEST_VARIATION(2, L"ulNumerator=1, ulDenominator=4, cRows=-6") TEST_VARIATION(3, L"ulNumerator=3, ulDenominator=5, cRows=-2") TEST_VARIATION(4, L"ulNumerator=lastrow-1, ulDenominator=lastrow, cRows=2. DB_S_ENDOFROWSET.") END_TEST_CASE() #undef THE_CLASS // }} // }} // {{ TCW_TEST_CASE_MAP(CanFetchBackwards_OpenRowset) //-------------------------------------------------------------------- // @class In context of IOpenRowset // class CanFetchBackwards_OpenRowset : public CanFetchBackwards { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(CanFetchBackwards_OpenRowset,CanFetchBackwards); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(CanFetchBackwards_OpenRowset) #define THE_CLASS CanFetchBackwards_OpenRowset BEG_TEST_CASE(CanFetchBackwards_OpenRowset, CanFetchBackwards, L"In context of IOpenRowset") TEST_VARIATION(1, L"ulNumerator=1, ulDenominator=RowCount, cRows=-2") TEST_VARIATION(2, L"ulNumerator=1, ulDenominator=4, cRows=-6") TEST_VARIATION(3, L"ulNumerator=3, ulDenominator=5, cRows=-2") TEST_VARIATION(4, L"ulNumerator=lastrow-1, ulDenominator=lastrow, cRows=2. DB_S_ENDOFROWSET.") END_TEST_CASE() #undef THE_CLASS // }} // }} //-------------------------------------------------------------------- // @class Test DBPROP_CANFETCHBACKWARDS + DBPROP_CANHOLDROWS // class CanFetchBackwards_CanHoldRows : public TCIRowsetScroll { private: public: ~CanFetchBackwards_CanHoldRows (void) {}; CanFetchBackwards_CanHoldRows ( wchar_t* pwszTestCaseName) : TCIRowsetScroll(pwszTestCaseName) { }; // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // @cmember ulNumerator=1, ulDenominator=20, cRows=-1 int Variation_1(); // @cmember ulNumerator=3, ulDenominator=20, cRows=-3 int Variation_2(); }; // {{ TCW_TEST_CASE_MAP(CanFetchBackwards_CanHoldRows_Cmd) //-------------------------------------------------------------------- // @class In context of Commands // class CanFetchBackwards_CanHoldRows_Cmd : public CanFetchBackwards_CanHoldRows { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(CanFetchBackwards_CanHoldRows_Cmd,CanFetchBackwards_CanHoldRows); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(CanFetchBackwards_CanHoldRows_Cmd) #define THE_CLASS CanFetchBackwards_CanHoldRows_Cmd BEG_TEST_CASE(CanFetchBackwards_CanHoldRows_Cmd, CanFetchBackwards_CanHoldRows, L"In context of Commands") TEST_VARIATION(1, L"ulNumerator=1, ulDenominator=RowCount, cRows=-1") TEST_VARIATION(2, L"ulNumerator=3, ulDenominator=RowCount, cRows=-3") END_TEST_CASE() #undef THE_CLASS // }} // }} // {{ TCW_TEST_CASE_MAP(CanFetchBackwards_CanHoldRows_SchemaR) //-------------------------------------------------------------------- // @class In context of a Schema Rowset // class CanFetchBackwards_CanHoldRows_SchemaR : public CanFetchBackwards_CanHoldRows { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(CanFetchBackwards_CanHoldRows_SchemaR,CanFetchBackwards_CanHoldRows); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(CanFetchBackwards_CanHoldRows_SchemaR) #define THE_CLASS CanFetchBackwards_CanHoldRows_SchemaR BEG_TEST_CASE(CanFetchBackwards_CanHoldRows_SchemaR, CanFetchBackwards_CanHoldRows, L"In context of a Schema Rowset") TEST_VARIATION(1, L"ulNumerator=1, ulDenominator=RowCount, cRows=-1") TEST_VARIATION(2, L"ulNumerator=3, ulDenominator=RowCount, cRows=-3") END_TEST_CASE() #undef THE_CLASS // }} // }} // {{ TCW_TEST_CASE_MAP(CanFetchBackwards_CanHoldRows_OpenRowset) //-------------------------------------------------------------------- // @class In context of IOpenRowset // class CanFetchBackwards_CanHoldRows_OpenRowset : public CanFetchBackwards_CanHoldRows { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(CanFetchBackwards_CanHoldRows_OpenRowset,CanFetchBackwards_CanHoldRows); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(CanFetchBackwards_CanHoldRows_OpenRowset) #define THE_CLASS CanFetchBackwards_CanHoldRows_OpenRowset BEG_TEST_CASE(CanFetchBackwards_CanHoldRows_OpenRowset, CanFetchBackwards_CanHoldRows, L"In context of IOpenRowset") TEST_VARIATION(1, L"ulNumerator=1, ulDenominator=RowCount, cRows=-1") TEST_VARIATION(2, L"ulNumerator=3, ulDenominator=RowCount, cRows=-3") END_TEST_CASE() #undef THE_CLASS // }} // }} //-------------------------------------------------------------------- // @class Test DBPROP_MAXOPENROWS // class MaxOpenRows : public TCIRowsetScroll { private: public: ~MaxOpenRows (void) {}; MaxOpenRows ( wchar_t* pwszTestCaseName) : TCIRowsetScroll(pwszTestCaseName) { }; // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // @cmember MAXOPENROWS=3, ratio=9/10, and cRows=4. DB_S_ENDOFROWSET is returned. int Variation_1(); // @cmember MAXOPENROWS=2, ulNumerator=1, ulDenominator=3, and cRows=3. DB_S_ROWLIMITEXCEEDED is returned. int Variation_2(); // @cmember MAXOPENROWS=2, ulNumerator=1, ulDenominator=3, and cRows=3. DB_S_ROWLIMITEXCEEDED is returned. int Variation_3(); }; // {{ TCW_TEST_CASE_MAP(MaxOpenRows_Cmd) //-------------------------------------------------------------------- // @class In context of commands // class MaxOpenRows_Cmd : public MaxOpenRows { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(MaxOpenRows_Cmd,MaxOpenRows); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(MaxOpenRows_Cmd) #define THE_CLASS MaxOpenRows_Cmd BEG_TEST_CASE(MaxOpenRows_Cmd, MaxOpenRows, L"In context of commands") TEST_VARIATION(1, L"MAXOPENROWS=3, ratio=9/10, and cRows=4. DB_S_ENDOFROWSET is returned.") TEST_VARIATION(2, L"MAXOPENROWS=2, ulNumerator=1, ulDenominator=3, and cRows=3. DB_S_ROWLIMITEXCEEDED is returned.") TEST_VARIATION(3, L"MAXOPENROWS=2, ulNumerator=1, ulDenominator=3, and cRows=3. DB_S_ROWLIMITEXCEEDED is returned.") END_TEST_CASE() #undef THE_CLASS // }} // }} // {{ TCW_TEST_CASE_MAP(MaxOpenRows_SchemaR) //-------------------------------------------------------------------- // @class In context of a Schema Rowset // class MaxOpenRows_SchemaR : public MaxOpenRows { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(MaxOpenRows_SchemaR,MaxOpenRows); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(MaxOpenRows_SchemaR) #define THE_CLASS MaxOpenRows_SchemaR BEG_TEST_CASE(MaxOpenRows_SchemaR, MaxOpenRows, L"In context of a Schema Rowset") TEST_VARIATION(1, L"MAXOPENROWS=3, ratio=9/10, and cRows=4. DB_S_ENDOFROWSET is returned.") TEST_VARIATION(2, L"MAXOPENROWS=2, ulNumerator=1, ulDenominator=3, and cRows=3. DB_S_ROWLIMITEXCEEDED is returned.") TEST_VARIATION(3, L"MAXOPENROWS=2, ulNumerator=1, ulDenominator=3, and cRows=3. DB_S_ROWLIMITEXCEEDED is returned.") END_TEST_CASE() #undef THE_CLASS // }} // }} // {{ TCW_TEST_CASE_MAP(MaxOpenRows_OpenRowset) //-------------------------------------------------------------------- // @class In context of IOpenRowset // class MaxOpenRows_OpenRowset : public MaxOpenRows { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(MaxOpenRows_OpenRowset,MaxOpenRows); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(MaxOpenRows_OpenRowset) #define THE_CLASS MaxOpenRows_OpenRowset BEG_TEST_CASE(MaxOpenRows_OpenRowset, MaxOpenRows, L"In context of IOpenRowset") TEST_VARIATION(1, L"MAXOPENROWS=3, ratio=9/10, and cRows=4. DB_S_ENDOFROWSET is returned.") TEST_VARIATION(2, L"MAXOPENROWS=2, ulNumerator=1, ulDenominator=3, and cRows=3. DB_S_ROWLIMITEXCEEDED is returned.") TEST_VARIATION(3, L"MAXOPENROWS=2, ulNumerator=1, ulDenominator=3, and cRows=3. DB_S_ROWLIMITEXCEEDED is returned.") END_TEST_CASE() #undef THE_CLASS // }} // }} //-------------------------------------------------------------------- // @class Delete rows from the rowset // class DeleteRows : public TCIRowsetScroll { private: public: ~DeleteRows (void) {}; DeleteRows ( wchar_t* pwszTestCaseName) : TCIRowsetScroll(pwszTestCaseName) { }; // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // @cmember *pBookmark=second row bookmark, delete second row. DB_E_DELETEDROW is returned. int Variation_1(); // @cmember *pBookmark=DBBMK_LAST, delete last row. S_OK is returned. int Variation_2(); // @cmember Ratio points to deleted row. DB_E_DELETEDROW and no row handles returned. int Variation_3(); // @cmember Delete 10th row. ulNumerator=1, ulDenominator=2, and cRows=1. S_OK and middle handle returned. int Variation_4(); // @cmember Delete last row. ulNumerator=RowCount, ulDenominator=RowCount, S_OK and 20th row handle returned. int Variation_5(); }; // {{ TCW_TEST_CASE_MAP(DeleteRows_cmd) //-------------------------------------------------------------------- // @class In context of commands // class DeleteRows_cmd : public DeleteRows { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(DeleteRows_cmd,DeleteRows); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(DeleteRows_cmd) #define THE_CLASS DeleteRows_cmd BEG_TEST_CASE(DeleteRows_cmd, DeleteRows, L"In context of commands") TEST_VARIATION(1, L"*pBookmark=second row bookmark, delete second row. DB_E_DELETEDROW is returned.") TEST_VARIATION(2, L"*pBookmark=DBBMK_LAST, delete last row. S_OK is returned.") TEST_VARIATION(3, L"Ratio points to deleted row. DB_E_DELETEDROW and no row handles returned.") TEST_VARIATION(4, L"Delete 10th row. ulNumerator=1, ulDenominator=2, and cRows=1. S_OK and middle handle returned.") TEST_VARIATION(5, L"Delete last row. ulNumerator=RowCount, ulDenominator=RowCount, S_OK and 20th row handle returned.") END_TEST_CASE() #undef THE_CLASS // }} // }} // {{ TCW_TEST_CASE_MAP(DeleteRows_OpenRowset) //-------------------------------------------------------------------- // @class In context of IOpenRowset // class DeleteRows_OpenRowset : public DeleteRows { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(DeleteRows_OpenRowset,DeleteRows); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(DeleteRows_OpenRowset) #define THE_CLASS DeleteRows_OpenRowset BEG_TEST_CASE(DeleteRows_OpenRowset, DeleteRows, L"In context of IOpenRowset") TEST_VARIATION(1, L"*pBookmark=second row bookmark, delete second row. DB_E_DELETEDROW is returned.") TEST_VARIATION(2, L"*pBookmark=DBBMK_LAST, delete last row. S_OK is returned.") TEST_VARIATION(3, L"Ratio points to deleted row. DB_E_DELETEDROW and no row handles returned.") TEST_VARIATION(4, L"Delete 10th row. ulNumerator=1, ulDenominator=2, and cRows=1. S_OK and middle handle returned.") TEST_VARIATION(5, L"Delete last row. ulNumerator=RowCount, ulDenominator=RowCount, S_OK and 20th row handle returned.") END_TEST_CASE() #undef THE_CLASS // }} // }} //-------------------------------------------------------------------- // @class test DBPROP_REMOVEDELETED // class RemoveDeleted : public TCIRowsetScroll { private: public: ~RemoveDeleted (void) {}; RemoveDeleted ( wchar_t* pwszTestCaseName) : TCIRowsetScroll(pwszTestCaseName) { }; // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // @cmember *pBookmark points to a deleted row. DB_E_BADBOOKMARD is returned. int Variation_1(); // @cmember Delete the 3rd row. *pBookmark points to the second row. S_OK is returned. int Variation_2(); // @cmember Ratio points to deleted row. DB_E_DELETEDROW and no row handles returned. int Variation_3(); // @cmember Delete 18th row. ulNumerator=9, ulDenominator=10, and cRows=3. DB_S_ENDOFROWSET is returned. int Variation_4(); // @cmember Delete 19th row. ulNumerator=19, ulDenominator=RowCount, and cRows=1. S_OK and 20th row handle returned. int Variation_5(); // @cmember Delete Half the row. Use ratio of 3/4 int Variation_6(); }; // {{ TCW_TEST_CASE_MAP(RemoveDeleted_Cmd) //-------------------------------------------------------------------- // @class In context of Commands // class RemoveDeleted_Cmd : public RemoveDeleted { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(RemoveDeleted_Cmd,RemoveDeleted); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(RemoveDeleted_Cmd) #define THE_CLASS RemoveDeleted_Cmd BEG_TEST_CASE(RemoveDeleted_Cmd, RemoveDeleted, L"In context of Commands") TEST_VARIATION(1, L"*pBookmark points to a deleted row. DB_E_BADBOOKMARD is returned.") TEST_VARIATION(2, L"Delete the 3rd row. *pBookmark points to the second row. S_OK is returned. ") TEST_VARIATION(3, L"Ratio points to deleted row. DB_E_DELETEDROW and no row handles returned.") TEST_VARIATION(4, L"Delete 18th row. ulNumerator=9, ulDenominator=10, and cRows=3. DB_S_ENDOFROWSET is returned.") TEST_VARIATION(5, L"Delete 19th row. ulNumerator=19, ulDenominator=RowCount, and cRows=1. S_OK and 20th row handle returned.") TEST_VARIATION(6, L"Delete half the row. Use ratio of 3/4. Verify ratio applies to undeleted rows.") END_TEST_CASE() #undef THE_CLASS // }} // }} // {{ TCW_TEST_CASE_MAP(RemoveDeleted_OpenRowset) //-------------------------------------------------------------------- // @class In context of IOpenRowset // class RemoveDeleted_OpenRowset : public RemoveDeleted { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(RemoveDeleted_OpenRowset,RemoveDeleted); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(RemoveDeleted_OpenRowset) #define THE_CLASS RemoveDeleted_OpenRowset BEG_TEST_CASE(RemoveDeleted_OpenRowset, RemoveDeleted, L"In context of IOpenRowset") TEST_VARIATION(1, L"*pBookmark points to a deleted row. DB_E_BADBOOKMARD is returned.") TEST_VARIATION(2, L"Delete the 3rd row. *pBookmark points to the second row. S_OK is returned. ") TEST_VARIATION(3, L"Ratio points to deleted row. DB_E_DELETEDROW and no row handles returned.") TEST_VARIATION(4, L"Delete 18th row. ulNumerator=9, ulDenominator=10, and cRows=3. DB_S_ENDOFROWSET is returned.") TEST_VARIATION(5, L"Delete 19th row. ulNumerator=19, ulDenominator=RowCount, and cRows=1. S_OK and 20th row handle returned.") TEST_VARIATION(6, L"Delete half the row. Use ratio of 3/4. Verify ratio applies to undeleted rows.") END_TEST_CASE() #undef THE_CLASS // }} // }} //-------------------------------------------------------------------- // @class Test single row rowset // class Rowset_SingleRow : public TCIRowsetScroll { private: public: ~Rowset_SingleRow (void) {}; Rowset_SingleRow ( wchar_t* pwszTestCaseName) : TCIRowsetScroll(pwszTestCaseName) { }; // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // @cmember *pBookmark=first row bookmark. S_OK is returned. int Variation_1(); // @cmember ulNumerator=1, ulDenominator=1, cRows=-1. S_OK returned. int Variation_2(); // @cmember ulNumerator=0, ulDenominator=1, cRows=1. S_OK returned. int Variation_3(); // @cmember *pBookmark=DBBMK_LAST. S_OK is returned. int Variation_4(); // @cmember *pBookmark=DBBMK_FIRST S_OK is returned. int Variation_5(); // @cmember ulNumerator=1, ulDenominator=3, cRows=1. S_OK returned. int Variation_6(); }; // {{ TCW_TEST_CASE_MAP(Rowset_SingleRow_Cmd) //-------------------------------------------------------------------- // @class In context of commands // class Rowset_SingleRow_Cmd : public Rowset_SingleRow { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(Rowset_SingleRow_Cmd,Rowset_SingleRow); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(Rowset_SingleRow_Cmd) #define THE_CLASS Rowset_SingleRow_Cmd BEG_TEST_CASE(Rowset_SingleRow_Cmd, Rowset_SingleRow, L"In context of commands") TEST_VARIATION(1, L"*pBookmark=first row bookmark. S_OK is returned.") TEST_VARIATION(2, L"ulNumerator=1, ulDenominator=1, cRows=-1. S_OK returned.") TEST_VARIATION(3, L"ulNumerator=0, ulDenominator=1, cRows=1. S_OK returned.") TEST_VARIATION(4, L"*pBookmark=DBBMK_LAST. S_OK is returned.") TEST_VARIATION(5, L"*pBookmark=DBBMK_FIRST S_OK is returned.") TEST_VARIATION(6, L"ulNumerator=1, ulDenominator=3, cRows=1. S_OK returned.") END_TEST_CASE() #undef THE_CLASS // }} // }} // {{ TCW_TEST_CASE_MAP(Rowset_SingleRow_OpenRowset) //-------------------------------------------------------------------- // @class In context of IOpenRowset // class Rowset_SingleRow_OpenRowset : public Rowset_SingleRow { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(Rowset_SingleRow_OpenRowset,Rowset_SingleRow); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(Rowset_SingleRow_OpenRowset) #define THE_CLASS Rowset_SingleRow_OpenRowset BEG_TEST_CASE(Rowset_SingleRow_OpenRowset, Rowset_SingleRow, L"In context of IOpenRowset") TEST_VARIATION(1, L"*pBookmark=first row bookmark. S_OK is returned.") TEST_VARIATION(2, L"ulNumerator=1, ulDenominator=1, cRows=-1. S_OK returned.") TEST_VARIATION(3, L"ulNumerator=0, ulDenominator=1, cRows=1. S_OK returned.") TEST_VARIATION(4, L"*pBookmark=DBBMK_LAST. S_OK is returned.") TEST_VARIATION(5, L"*pBookmark=DBBMK_FIRST S_OK is returned.") TEST_VARIATION(6, L"ulNumerator=1, ulDenominator=3, cRows=1. S_OK returned.") END_TEST_CASE() #undef THE_CLASS // }} // }} //-------------------------------------------------------------------- // @class Test empty rowset // class Rowset_Empty : public TCIRowsetScroll { private: public: ~Rowset_Empty (void) {}; Rowset_Empty ( wchar_t* pwszTestCaseName) : TCIRowsetScroll(pwszTestCaseName) { }; // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // @cmember *pBookmark=DBBMK_FIRST. S_OK is returned. int Variation_1(); // @cmember ulNumerator=1, ulDenominator=1, cRows=1. DB_S_ENDOFROWSET and no row handle returned. int Variation_2(); // @cmember ulNumerator=1, ulDenominator=1, cRows=0. S_OK and no row handle returned. int Variation_3(); // @cmember ulNumerator=0, ulDenominator=1, cRows=1. DB_S_ENDOFROWSET int Variation_4(); // @cmember *pBookmark=DBBMK_LAST. S_OK is returned. int Variation_5(); }; // {{ TCW_TEST_CASE_MAP(Rowset_Empty_Cmd) //-------------------------------------------------------------------- // @class In context of commands // class Rowset_Empty_Cmd : public Rowset_Empty { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(Rowset_Empty_Cmd,Rowset_Empty); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(Rowset_Empty_Cmd) #define THE_CLASS Rowset_Empty_Cmd BEG_TEST_CASE(Rowset_Empty_Cmd, Rowset_Empty, L"In context of commands") TEST_VARIATION(1, L"*pBookmark=DBBMK_FIRST. S_OK is returned.") TEST_VARIATION(2, L"ulNumerator=1, ulDenominator=1, cRows=1. DB_S_ENDOFROWSET and no row handle returned.") TEST_VARIATION(3, L"ulNumerator=1, ulDenominator=1, cRows=0. S_OK and no row handle returned.") TEST_VARIATION(4, L"ulNumerator=0, ulDenominator=1, cRows=1. DB_S_ENDOFROWSET") TEST_VARIATION(5, L"*pBookmark=DBBMK_LAST. S_OK is returned.") END_TEST_CASE() #undef THE_CLASS // }} // }} // {{ TCW_TEST_CASE_MAP(Rowset_Empty_OpenRowset) //-------------------------------------------------------------------- // @class In context of IOpenRowset // class Rowset_Empty_OpenRowset : public Rowset_Empty { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(Rowset_Empty_OpenRowset,Rowset_Empty); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(Rowset_Empty_OpenRowset) #define THE_CLASS Rowset_Empty_OpenRowset BEG_TEST_CASE(Rowset_Empty_OpenRowset, Rowset_Empty, L"In context of IOpenRowset") TEST_VARIATION(1, L"*pBookmark=DBBMK_FIRST. S_OK is returned.") TEST_VARIATION(2, L"ulNumerator=1, ulDenominator=1, cRows=1. DB_S_ENDOFROWSET and no row handle returned.") TEST_VARIATION(3, L"ulNumerator=1, ulDenominator=1, cRows=0. S_OK and no row handle returned.") TEST_VARIATION(4, L"ulNumerator=0, ulDenominator=1, cRows=1. DB_S_ENDOFROWSET") TEST_VARIATION(5, L"*pBookmark=DBBMK_LAST. S_OK is returned.") END_TEST_CASE() #undef THE_CLASS // }} // }} //-------------------------------------------------------------------- // @class Boundary conditions for GetApproximatePosition // class Boundary_GetApproximatePosition : public TCIRowsetScroll { private: ULONG_PTR m_cbBookmark; BYTE *m_pBookmark; DBBOOKMARK m_DBBookmark; DBCOUNTITEM m_pulPosition; DBCOUNTITEM m_pcRows; public: ~Boundary_GetApproximatePosition(void) {}; Boundary_GetApproximatePosition ( wchar_t* pwszTestCaseName) : TCIRowsetScroll(pwszTestCaseName) { }; // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // @cmember pBookmark==Null pointer. E_INVALIDARG is returned. int Variation_1(); // @cmember pBookmark==NULL. DB_E_BADBOOKMARK is returned. int Variation_2(); // @cmember pBookmark points to a invalid bookmark. DB_E_BADBOOKMARK is returned. int Variation_3(); // @cmember pcRows==Null pointer. S_OK and no count of rows returned. int Variation_4(); // @cmember pulPosition is NULL, S_OK int Variation_5(); // @cmember cbBookmark = 0, pBookmark = NULL int Variation_6(); }; // {{ TCW_TEST_CASE_MAP(Boundary_GetApproximatePosition_Cmd) //-------------------------------------------------------------------- // @class In context of commands // class Boundary_GetApproximatePosition_Cmd : public Boundary_GetApproximatePosition { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(Boundary_GetApproximatePosition_Cmd,Boundary_GetApproximatePosition); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(Boundary_GetApproximatePosition_Cmd) #define THE_CLASS Boundary_GetApproximatePosition_Cmd BEG_TEST_CASE(Boundary_GetApproximatePosition_Cmd, Boundary_GetApproximatePosition, L"In context of commands") TEST_VARIATION(1, L"pBookmark==Null pointer. E_INVALIDARG is returned.") TEST_VARIATION(2, L"pBookmark==NULL. DB_E_BADBOOKMARK is returned.") TEST_VARIATION(3, L"pBookmark points to a invalid bookmark. DB_E_BADBOOKMARK is returned.") TEST_VARIATION(4, L"pcRows==Null pointer. S_OK and no count of rows returned.") TEST_VARIATION(5, L"pulPosition is NULL, S_OK") TEST_VARIATION(6, L"cbBookmark = 0, pBookmark = NULL") END_TEST_CASE() #undef THE_CLASS // }} // }} // {{ TCW_TEST_CASE_MAP(Boundary_GetApproximatePosition_OpenRowset) //-------------------------------------------------------------------- // @class In context of IOpenRowset // class Boundary_GetApproximatePosition_OpenRowset : public Boundary_GetApproximatePosition { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(Boundary_GetApproximatePosition_OpenRowset,Boundary_GetApproximatePosition); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(Boundary_GetApproximatePosition_OpenRowset) #define THE_CLASS Boundary_GetApproximatePosition_OpenRowset BEG_TEST_CASE(Boundary_GetApproximatePosition_OpenRowset, Boundary_GetApproximatePosition, L"In context of IOpenRowset") TEST_VARIATION(1, L"pBookmark==Null pointer. E_INVALIDARG is returned.") TEST_VARIATION(2, L"pBookmark==NULL. DB_E_BADBOOKMARK is returned.") TEST_VARIATION(3, L"pBookmark points to a invalid bookmark. DB_E_BADBOOKMARK is returned.") TEST_VARIATION(4, L"pcRows==Null pointer. S_OK and no count of rows returned.") TEST_VARIATION(5, L"pulPosition is NULL, S_OK") TEST_VARIATION(6, L"cbBookmark = 0, pBookmark = NULL") END_TEST_CASE() #undef THE_CLASS // }} // }} // {{ TCW_TEST_CASE_MAP(Boundary_GetApproximatePosition_SchemaR) //-------------------------------------------------------------------- // @class In context of a Schema Rowset // class Boundary_GetApproximatePosition_SchemaR : public Boundary_GetApproximatePosition { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(Boundary_GetApproximatePosition_SchemaR,Boundary_GetApproximatePosition); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(Boundary_GetApproximatePosition_SchemaR) #define THE_CLASS Boundary_GetApproximatePosition_SchemaR BEG_TEST_CASE(Boundary_GetApproximatePosition_SchemaR, Boundary_GetApproximatePosition, L"In context of a Schema Rowset") TEST_VARIATION(1, L"pBookmark==Null pointer. E_INVALIDARG is returned.") TEST_VARIATION(2, L"pBookmark==NULL. DB_E_BADBOOKMARK is returned.") TEST_VARIATION(3, L"pBookmark points to a invalid bookmark. DB_E_BADBOOKMARK is returned.") TEST_VARIATION(4, L"pcRows==Null pointer. S_OK and no count of rows returned.") TEST_VARIATION(5, L"pulPosition is NULL, S_OK") TEST_VARIATION(6, L"cbBookmark = 0, pBookmark = NULL") END_TEST_CASE() #undef THE_CLASS // }} // }} //-------------------------------------------------------------------- // @class Boundary conditions for GetRowsAtRatio // class Boundary_GetRowsAtRatio : public TCIRowsetScroll { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); DBCOUNTITEM m_cRowsObtained; HROW m_hRows; HROW *m_prghRows; public: ~Boundary_GetRowsAtRatio(void) {}; Boundary_GetRowsAtRatio ( wchar_t* pwszTestCaseName) : TCIRowsetScroll(pwszTestCaseName) { }; // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // @cmember pcRowsObtained=Null pointer. E_INVALIDARG is returned. int Variation_1(); // @cmember prghRows=NULL pointer. E_INVALIDARG is returned. int Variation_2(); }; // {{ TCW_TEST_CASE_MAP(Boundary_GetRowsAtRatio_Cmd) //-------------------------------------------------------------------- // @class In context of commands // class Boundary_GetRowsAtRatio_Cmd : public Boundary_GetRowsAtRatio { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(Boundary_GetRowsAtRatio_Cmd,Boundary_GetRowsAtRatio); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(Boundary_GetRowsAtRatio_Cmd) #define THE_CLASS Boundary_GetRowsAtRatio_Cmd BEG_TEST_CASE(Boundary_GetRowsAtRatio_Cmd, Boundary_GetRowsAtRatio, L"In context of commands") TEST_VARIATION(1, L"pcRowsObtained=Null pointer. E_INVALIDARG is returned.") TEST_VARIATION(2, L"prghRows=NULL pointer. E_INVALIDARG is returned.") END_TEST_CASE() #undef THE_CLASS // }} // }} // {{ TCW_TEST_CASE_MAP(Boundary_GetRowsAtRatio_OpenRowset) //-------------------------------------------------------------------- // @class In context of IOpenRowset // class Boundary_GetRowsAtRatio_OpenRowset : public Boundary_GetRowsAtRatio { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(Boundary_GetRowsAtRatio_OpenRowset,Boundary_GetRowsAtRatio); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(Boundary_GetRowsAtRatio_OpenRowset) #define THE_CLASS Boundary_GetRowsAtRatio_OpenRowset BEG_TEST_CASE(Boundary_GetRowsAtRatio_OpenRowset, Boundary_GetRowsAtRatio, L"In context of IOpenRowset") TEST_VARIATION(1, L"pcRowsObtained=Null pointer. E_INVALIDARG is returned.") TEST_VARIATION(2, L"prghRows=NULL pointer. E_INVALIDARG is returned.") END_TEST_CASE() #undef THE_CLASS // }} // }} // {{ TCW_TEST_CASE_MAP(Boundary_GetRowsAtRatio_SchemaR) //-------------------------------------------------------------------- // @class In context of a Schema Rowset // class Boundary_GetRowsAtRatio_SchemaR : public Boundary_GetRowsAtRatio { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(Boundary_GetRowsAtRatio_SchemaR,Boundary_GetRowsAtRatio); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(Boundary_GetRowsAtRatio_SchemaR) #define THE_CLASS Boundary_GetRowsAtRatio_SchemaR BEG_TEST_CASE(Boundary_GetRowsAtRatio_SchemaR, Boundary_GetRowsAtRatio, L"In context of a Schema Rowset") TEST_VARIATION(1, L"pcRowsObtained=Null pointer. E_INVALIDARG is returned.") TEST_VARIATION(2, L"prghRows=NULL pointer. E_INVALIDARG is returned.") END_TEST_CASE() #undef THE_CLASS // }} // }} //-------------------------------------------------------------------- // @class Valid and invalid parameters passed into methods // class Parameters : public TCIRowsetScroll { private: public: ~Parameters(void) {}; Parameters ( wchar_t* pwszTestCaseName) : TCIRowsetScroll(pwszTestCaseName) { }; // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // @cmember GetApproximatePosition: cbBookmark=0, pBookmark=null pointer, S_OK is returned. int Variation_1(); // @cmember GetApproximatePosition: cbBookmark=0, pulPosition=null pointer, S_OK is returned. int Variation_2(); // @cmember GetRowsAtRatio: cRows=0, *prghRows not NULL on input. *prghRows not null on output. S_OK is returned. int Variation_3(); // @cmember GetRowsAtRatio: cRows=0, *prghRows=NULL on input, *prghRows null on output. S_OK is returned. int Variation_4(); // @cmember GetRowsAtRatio: ulNumerator=0, ulDenominator=4, cRows=5. S_OK and first 5 rows returned. int Variation_5(); // @cmember GetRowsAtRatio: ulNumerator=5, ulDenominator=0, cRows=5. DB_E_BADRATIO is returned. int Variation_6(); // @cmember GetRowsAtRatio: ulNumerator=0, ulDenominator=0, cRows=5. DB_E_BADRATIO is returned. int Variation_7(); // @cmember GetRowsAtRatio: ulNumerator=ULONG_MAX, ulDenominator=1, cRows=1. DB_E_BADRATIO is returned. int Variation_8(); // @cmember GetRowsAtRatio: ulNumerator=ULONG_MAX, ulDenominator=ULONG_MAX, cRows=1. S_OK and last row returned. int Variation_9(); // @cmember GetRowsAtRatio: ulNumerator=ULONG_MAX-1, ulDenominator=ULONG_MAX, cRows=1. S_OK and last row returned. int Variation_10(); // @cmember GetRowsAtRatio: ulNumerator=1, ulDenominator=1, cRows=1. DB_S_ENDOFROWSET int Variation_11(); // @cmember GetRowsAtRatio: ulNumerator=LONG_MAX/2, ulDenominator=LONG_MAX+1, cRows=1. middle row. int Variation_12(); }; // {{ TCW_TEST_CASE_MAP(Parameters_Cmd) //-------------------------------------------------------------------- // @class In context of commands // class Parameters_Cmd : public Parameters { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(Parameters_Cmd,Parameters); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(Parameters_Cmd) #define THE_CLASS Parameters_Cmd BEG_TEST_CASE(Parameters_Cmd, Parameters, L"In context of commands") TEST_VARIATION(1, L"GetApproximatePosition: cbBookmark=0, pBookmark=null pointer, S_OK is returned.") TEST_VARIATION(2, L"GetApproximatePosition: cbBookmark=0, pulPosition=null pointer, S_OK is returned.") TEST_VARIATION(3, L"GetRowsAtRatio: cRows=0, *prghRows not NULL on input. *prghRows not null on output. S_OK is returned.") TEST_VARIATION(4, L"GetRowsAtRatio: cRows=0, *prghRows=NULL on input, *prghRows null on output. S_OK is returned.") TEST_VARIATION(5, L"GetRowsAtRatio: ulNumerator=0, ulDenominator=4, cRows=5. S_OK and first 5 rows returned.") TEST_VARIATION(6, L"GetRowsAtRatio: ulNumerator=5, ulDenominator=0, cRows=5. DB_E_BADRATIO is returned.") TEST_VARIATION(7, L"GetRowsAtRatio: ulNumerator=0, ulDenominator=0, cRows=5. DB_E_BADRATIO is returned.") TEST_VARIATION(8, L"GetRowsAtRatio: ulNumerator=ULONG_MAX, ulDenominator=1, cRows=1. DB_E_BADRATIO is returned.") TEST_VARIATION(9, L"GetRowsAtRatio: ulNumerator=ULONG_MAX, ulDenominator=ULONG_MAX, cRows=1. S_OK and last row returned.") TEST_VARIATION(10, L"GetRowsAtRatio: ulNumerator=ULONG_MAX-1, ulDenominator=ULONG_MAX, cRows=1. S_OK and last row returned.") TEST_VARIATION(11, L"GetRowsAtRatio: ulNumerator=1, ulDenominator=1, cRows=1. DB_S_ENDOFROWSET.") TEST_VARIATION(12, L"GetRowsAtRatio: ulNumerator=LONG_MAX/2, ulDenominator=LONG_MAX+1, cRows=1. middle row.") END_TEST_CASE() #undef THE_CLASS // }} // }} // {{ TCW_TEST_CASE_MAP(Parameters_OpenRowset) //-------------------------------------------------------------------- // @class In context of IOpenRowset // class Parameters_OpenRowset : public Parameters { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(Parameters_OpenRowset,Parameters); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(Parameters_OpenRowset) #define THE_CLASS Parameters_OpenRowset BEG_TEST_CASE(Parameters_OpenRowset, Parameters, L"In context of IOpenRowset") TEST_VARIATION(1, L"GetApproximatePosition: cbBookmark=0, pBookmark=null pointer, S_OK is returned.") TEST_VARIATION(2, L"GetApproximatePosition: cbBookmark=0, pulPosition=null pointer, S_OK is returned.") TEST_VARIATION(3, L"GetRowsAtRatio: cRows=0, *prghRows not NULL on input. *prghRows not null on output. S_OK is returned.") TEST_VARIATION(4, L"GetRowsAtRatio: cRows=0, *prghRows=NULL on input, *prghRows null on output. S_OK is returned.") TEST_VARIATION(5, L"GetRowsAtRatio: ulNumerator=0, ulDenominator=4, cRows=5. S_OK and first 5 rows returned.") TEST_VARIATION(6, L"GetRowsAtRatio: ulNumerator=5, ulDenominator=0, cRows=5. DB_E_BADRATIO is returned.") TEST_VARIATION(7, L"GetRowsAtRatio: ulNumerator=0, ulDenominator=0, cRows=5. DB_E_BADRATIO is returned.") TEST_VARIATION(8, L"GetRowsAtRatio: ulNumerator=ULONG_MAX, ulDenominator=1, cRows=1. DB_E_BADRATIO is returned.") TEST_VARIATION(9, L"GetRowsAtRatio: ulNumerator=ULONG_MAX, ulDenominator=ULONG_MAX, cRows=1. S_OK and last row returned.") TEST_VARIATION(10, L"GetRowsAtRatio: ulNumerator=ULONG_MAX-1, ulDenominator=ULONG_MAX, cRows=1. S_OK and last row returned.") TEST_VARIATION(11, L"GetRowsAtRatio: ulNumerator=1, ulDenominator=1, cRows=1. DB_S_ENDOFROWSET.") TEST_VARIATION(12, L"GetRowsAtRatio: ulNumerator=LONG_MAX/2, ulDenominator=LONG_MAX+1, cRows=1. middle row.") END_TEST_CASE() #undef THE_CLASS // }} // }} // {{ TCW_TEST_CASE_MAP(Parameters_SchemaR) //-------------------------------------------------------------------- // @class In context of a Schema Rowset // class Parameters_SchemaR : public Parameters { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(Parameters_SchemaR,Parameters); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(Parameters_SchemaR) #define THE_CLASS Parameters_SchemaR BEG_TEST_CASE(Parameters_SchemaR, Parameters, L"In context of a Schema Rowset") TEST_VARIATION(1, L"GetApproximatePosition: cbBookmark=0, pBookmark=null pointer, S_OK is returned.") TEST_VARIATION(2, L"GetApproximatePosition: cbBookmark=0, pulPosition=null pointer, S_OK is returned.") TEST_VARIATION(3, L"GetRowsAtRatio: cRows=0, *prghRows not NULL on input. *prghRows not null on output. S_OK is returned.") TEST_VARIATION(4, L"GetRowsAtRatio: cRows=0, *prghRows=NULL on input, *prghRows null on output. S_OK is returned.") TEST_VARIATION(5, L"GetRowsAtRatio: ulNumerator=0, ulDenominator=4, cRows=5. S_OK and first 5 rows returned.") TEST_VARIATION(6, L"GetRowsAtRatio: ulNumerator=5, ulDenominator=0, cRows=5. DB_E_BADRATIO is returned.") TEST_VARIATION(7, L"GetRowsAtRatio: ulNumerator=0, ulDenominator=0, cRows=5. DB_E_BADRATIO is returned.") TEST_VARIATION(8, L"GetRowsAtRatio: ulNumerator=ULONG_MAX, ulDenominator=1, cRows=1. DB_E_BADRATIO is returned.") TEST_VARIATION(9, L"GetRowsAtRatio: ulNumerator=ULONG_MAX, ulDenominator=ULONG_MAX, cRows=1. S_OK and last row returned.") TEST_VARIATION(10, L"GetRowsAtRatio: ulNumerator=ULONG_MAX-1, ulDenominator=ULONG_MAX, cRows=1. S_OK and last row returned.") TEST_VARIATION(11, L"GetRowsAtRatio: ulNumerator=1, ulDenominator=1, cRows=1. DB_S_ENDOFROWSET.") TEST_VARIATION(12, L"GetRowsAtRatio: ulNumerator=LONG_MAX/2, ulDenominator=LONG_MAX+1, cRows=1. middle row.") END_TEST_CASE() #undef THE_CLASS // }} // }} //-------------------------------------------------------------------- // @class Specific sequences of API calls where order is interesting. // class Sequence : public TCIRowsetScroll { private: public: ~Sequence(void) {}; Sequence ( wchar_t* pwszTestCaseName) : TCIRowsetScroll(pwszTestCaseName) { }; // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // @cmember Open rowset, fetch all of the rows, *pBookmark=DBBMK_FIRST. S_OK is returned. int Variation_1(); // @cmember ulNumerator=4, ulDenominator=5, and cRows=-3 int Variation_2(); }; // {{ TCW_TEST_CASE_MAP(Sequence_Cmd) //-------------------------------------------------------------------- // @class In context of commands // class Sequence_Cmd : public Sequence { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(Sequence_Cmd,Sequence); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(Sequence_Cmd) #define THE_CLASS Sequence_Cmd BEG_TEST_CASE(Sequence_Cmd, Sequence, L"In context of commands") TEST_VARIATION(1, L"Open rowset, fetch all of the rows, *pBookmark=DBBMK_FIRST. S_OK is returned.") TEST_VARIATION(2, L"ulNumerator=4, ulDenominator=5, and cRows=-3") END_TEST_CASE() #undef THE_CLASS // }} // }} // {{ TCW_TEST_CASE_MAP(Sequence_OpenRowset) //-------------------------------------------------------------------- // @class In context of IOpenRowset // class Sequence_OpenRowset : public Sequence { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(Sequence_OpenRowset,Sequence); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(Sequence_OpenRowset) #define THE_CLASS Sequence_OpenRowset BEG_TEST_CASE(Sequence_OpenRowset, Sequence, L"In context of IOpenRowset") TEST_VARIATION(1, L"Open rowset, fetch all of the rows, *pBookmark=DBBMK_FIRST. S_OK is returned.") TEST_VARIATION(2, L"ulNumerator=4, ulDenominator=5, and cRows=-3") END_TEST_CASE() #undef THE_CLASS // }} // }} // {{ TCW_TEST_CASE_MAP(Sequence_SchemaR) //-------------------------------------------------------------------- // @class In context of Schema Rowset // class Sequence_SchemaR : public Sequence { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(Sequence_SchemaR,Sequence); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(Sequence_SchemaR) #define THE_CLASS Sequence_SchemaR BEG_TEST_CASE(Sequence_SchemaR, Sequence, L"In context of Schema Rowset") TEST_VARIATION(1, L"Open rowset, fetch all of the rows, *pBookmark=DBBMK_FIRST. S_OK is returned.") TEST_VARIATION(2, L"ulNumerator=4, ulDenominator=5, and cRows=-3") END_TEST_CASE() #undef THE_CLASS // }} // }} //-------------------------------------------------------------------- // @class Make sure multiple methods can hold the same rows at the same time. // class Consistency : public TCIRowsetScroll { private: public: ~Consistency(void) {}; Consistency ( wchar_t* pwszTestCaseName) : TCIRowsetScroll(pwszTestCaseName) { }; // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // @cmember Retrieve three row handles from GetRowsAt,GetRowsByBookmark, and GetRowsAtRatio. int Variation_1(); // @cmember Verify IRowsetScroll inherits from IRowsetLocate int Variation_2(); }; // {{ TCW_TEST_CASE_MAP(Consistency_Cmd) //-------------------------------------------------------------------- // @class In context of commands // class Consistency_Cmd : public Consistency { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(Consistency_Cmd,Consistency); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(Consistency_Cmd) #define THE_CLASS Consistency_Cmd BEG_TEST_CASE(Consistency_Cmd, Consistency, L"In context of commands") TEST_VARIATION(1, L"Retrieve three row handles from GetRowsAt,GetRowsByBookmark, and GetRowsAtRatio.") TEST_VARIATION(2, L"Verify IRowsetScroll inherits from IRowsetLocate") END_TEST_CASE() #undef THE_CLASS // }} // }} // {{ TCW_TEST_CASE_MAP(Consistency_OpenRowset) //-------------------------------------------------------------------- // @class In context of IOpenRowset // class Consistency_OpenRowset : public Consistency { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(Consistency_OpenRowset,Consistency); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(Consistency_OpenRowset) #define THE_CLASS Consistency_OpenRowset BEG_TEST_CASE(Consistency_OpenRowset, Consistency, L"In context of IOpenRowset") TEST_VARIATION(1, L"Retrieve three row handles from GetRowsAt,GetRowsByBookmark, and GetRowsAtRatio.") TEST_VARIATION(2, L"Verify IRowsetScroll inherits from IRowsetLocate") END_TEST_CASE() #undef THE_CLASS // }} // }} // {{ TCW_TEST_CASE_MAP(Consistency_SchemaR) //-------------------------------------------------------------------- // @class In context of a schema rowset // class Consistency_SchemaR : public Consistency { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(Consistency_SchemaR,Consistency); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(Consistency_SchemaR) #define THE_CLASS Consistency_SchemaR BEG_TEST_CASE(Consistency_SchemaR, Consistency, L"In context of a schema rowset") TEST_VARIATION(1, L"Retrieve three row handles from GetRowsAt,GetRowsByBookmark, and GetRowsAtRatio.") TEST_VARIATION(2, L"Verify IRowsetScroll inherits from IRowsetLocate") END_TEST_CASE() #undef THE_CLASS // }} // }} //-------------------------------------------------------------------- // @class Test related interface IRowset. // class Related_IRowset : public TCIRowsetScroll { private: public: ~Related_IRowset(void) {}; Related_IRowset ( wchar_t* pwszTestCaseName) : TCIRowsetScroll(pwszTestCaseName) { }; // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // @cmember GetRowsAtRatio does not change the cursor location of the rowset. DB_E_ROWSNOTRELEASED is returned. int Variation_1(); // @cmember Retrieve rows with GetNextRows and get same rows with GetRowsAtRatio. DB_E_ROWSNOTRELEASED is returned. int Variation_2(); }; // {{ TCW_TEST_CASE_MAP(Related_IRowset_Cmd) //-------------------------------------------------------------------- // @class In context of commands // class Related_IRowset_Cmd : public Related_IRowset { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(Related_IRowset_Cmd,Related_IRowset); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(Related_IRowset_Cmd) #define THE_CLASS Related_IRowset_Cmd BEG_TEST_CASE(Related_IRowset_Cmd, Related_IRowset, L"In context of commands") TEST_VARIATION(1, L"GetRowsAtRatio does not change the cursor location of the rowset. DB_E_ROWSNOTRELEASED is returned.") TEST_VARIATION(2, L"Retrieve rows with GetNextRows and get same rows with GetRowsAtRatio. DB_E_ROWSNOTRELEASED is returned.") END_TEST_CASE() #undef THE_CLASS // }} // }} // {{ TCW_TEST_CASE_MAP(Related_IRowset_OpenRowset) //-------------------------------------------------------------------- // @class In context of IOpenRowset // class Related_IRowset_OpenRowset : public Related_IRowset { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(Related_IRowset_OpenRowset,Related_IRowset); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(Related_IRowset_OpenRowset) #define THE_CLASS Related_IRowset_OpenRowset BEG_TEST_CASE(Related_IRowset_OpenRowset, Related_IRowset, L"In context of IOpenRowset") TEST_VARIATION(1, L"GetRowsAtRatio does not change the cursor location of the rowset. DB_E_ROWSNOTRELEASED is returned.") TEST_VARIATION(2, L"Retrieve rows with GetNextRows and get same rows with GetRowsAtRatio. DB_E_ROWSNOTRELEASED is returned.") END_TEST_CASE() #undef THE_CLASS // }} // }} // {{ TCW_TEST_CASE_MAP(Related_IRowset_SchemaR) //-------------------------------------------------------------------- // @class In context of a schema Rowset // class Related_IRowset_SchemaR : public Related_IRowset { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(Related_IRowset_SchemaR,Related_IRowset); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(Related_IRowset_SchemaR) #define THE_CLASS Related_IRowset_SchemaR BEG_TEST_CASE(Related_IRowset_SchemaR, Related_IRowset, L"In context of a schema Rowset") TEST_VARIATION(1, L"GetRowsAtRatio does not change the cursor location of the rowset. DB_E_ROWSNOTRELEASED is returned.") TEST_VARIATION(2, L"Retrieve rows with GetNextRows and get same rows with GetRowsAtRatio. DB_E_ROWSNOTRELEASED is returned.") END_TEST_CASE() #undef THE_CLASS // }} // }} //-------------------------------------------------------------------- // @class Test GetRowsAtRatio via a Keyset Driven cursor. // class KeysetCursor : public TCIRowsetScroll { private: public: ~KeysetCursor(void) {}; KeysetCursor ( wchar_t* pwszTestCaseName) : TCIRowsetScroll(pwszTestCaseName) { }; // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // @cmember ulNumerator=1, ulDenominator=20, cRows=-1 int Variation_1(); // @cmember ulNumerator=2, ulDenominator=20, cRows=-3 int Variation_2(); // @cmember ulNumerator=3, ulDenominator=20, cRows=(-3 int Variation_3(); // @cmember Get one row handle at a time. int Variation_4(); }; // {{ TCW_TEST_CASE_MAP(KeysetCursor_Cmd) //-------------------------------------------------------------------- // @class In context of commands // class KeysetCursor_Cmd : public KeysetCursor { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(KeysetCursor_Cmd,KeysetCursor); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(KeysetCursor_Cmd) #define THE_CLASS KeysetCursor_Cmd BEG_TEST_CASE(KeysetCursor_Cmd, KeysetCursor, L"In context of commands") TEST_VARIATION(1, L"ulNumerator=1, ulDenominator=20, cRows=-1") TEST_VARIATION(2, L"ulNumerator=2, ulDenominator=20, cRows=-3") TEST_VARIATION(3, L"ulNumerator=3, ulDenominator=20, cRows=(-3") TEST_VARIATION(4, L"Get one row handle at a time.") END_TEST_CASE() #undef THE_CLASS // }} // }} // {{ TCW_TEST_CASE_MAP(KeysetCursor_OpenRowset) //-------------------------------------------------------------------- // @class In context of IOpenRowset // class KeysetCursor_OpenRowset : public KeysetCursor { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(KeysetCursor_OpenRowset,KeysetCursor); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(KeysetCursor_OpenRowset) #define THE_CLASS KeysetCursor_OpenRowset BEG_TEST_CASE(KeysetCursor_OpenRowset, KeysetCursor, L"In context of IOpenRowset") TEST_VARIATION(1, L"ulNumerator=1, ulDenominator=20, cRows=-1") TEST_VARIATION(2, L"ulNumerator=2, ulDenominator=20, cRows=-3") TEST_VARIATION(3, L"ulNumerator=3, ulDenominator=20, cRows=(-3") TEST_VARIATION(4, L"Get one row handle at a time.") END_TEST_CASE() #undef THE_CLASS // }} // }} // {{ TCW_TEST_CASE_MAP(KeysetCursor_SchemaR) //-------------------------------------------------------------------- // @class In context of a Schema Rowset // class KeysetCursor_SchemaR : public KeysetCursor { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(KeysetCursor_SchemaR,KeysetCursor); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(KeysetCursor_SchemaR) #define THE_CLASS KeysetCursor_SchemaR BEG_TEST_CASE(KeysetCursor_SchemaR, KeysetCursor, L"In context of a Schema Rowset") TEST_VARIATION(1, L"ulNumerator=1, ulDenominator=20, cRows=-1") TEST_VARIATION(2, L"ulNumerator=2, ulDenominator=20, cRows=-3") TEST_VARIATION(3, L"ulNumerator=3, ulDenominator=20, cRows=(-3") TEST_VARIATION(4, L"Get one row handle at a time.") END_TEST_CASE() #undef THE_CLASS // }} // }} //-------------------------------------------------------------------- // @class Test GetRowsAtRatio via a Dynamic cursor. // class DynamicCursor : public TCIRowsetScroll { private: public: ~DynamicCursor(void) {}; DynamicCursor ( wchar_t* pwszTestCaseName) : TCIRowsetScroll(pwszTestCaseName) { }; // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // @cmember ulNumerator=1, ulDenominator=20, cRows=(-1 int Variation_1(); // @cmember ulNumerator=2, ulDenominator=20, cRows=(-3 int Variation_2(); // @cmember ulNumerator=3, ulDenominator=20, cRows=(-3 int Variation_3(); // @cmember Get one row handle at a time. int Variation_4(); }; // {{ TCW_TEST_CASE_MAP(DynamicCursor_Cmd) //-------------------------------------------------------------------- // @class In context of commands // class DynamicCursor_Cmd : public DynamicCursor { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(DynamicCursor_Cmd,DynamicCursor); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(DynamicCursor_Cmd) #define THE_CLASS DynamicCursor_Cmd BEG_TEST_CASE(DynamicCursor_Cmd, DynamicCursor, L"In context of commands") TEST_VARIATION(1, L"ulNumerator=1, ulDenominator=20, cRows=(-1") TEST_VARIATION(2, L"ulNumerator=2, ulDenominator=20, cRows=(-3") TEST_VARIATION(3, L"ulNumerator=3, ulDenominator=20, cRows=(-3") TEST_VARIATION(4, L"Get one row handle at a time.") END_TEST_CASE() #undef THE_CLASS // }} // }} // {{ TCW_TEST_CASE_MAP(DynamicCursor_OpenRowset) //-------------------------------------------------------------------- // @class In context of IOpenRowset // class DynamicCursor_OpenRowset : public DynamicCursor { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(DynamicCursor_OpenRowset,DynamicCursor); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(DynamicCursor_OpenRowset) #define THE_CLASS DynamicCursor_OpenRowset BEG_TEST_CASE(DynamicCursor_OpenRowset, DynamicCursor, L"In context of IOpenRowset") TEST_VARIATION(1, L"ulNumerator=1, ulDenominator=20, cRows=(-1") TEST_VARIATION(2, L"ulNumerator=2, ulDenominator=20, cRows=(-3") TEST_VARIATION(3, L"ulNumerator=3, ulDenominator=20, cRows=(-3") TEST_VARIATION(4, L"Get one row handle at a time.") END_TEST_CASE() #undef THE_CLASS // }} // }} // {{ TCW_TEST_CASE_MAP(DynamicCursor_SchemaR) //-------------------------------------------------------------------- // @class In context of a Schema Rowset // class DynamicCursor_SchemaR : public DynamicCursor { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(DynamicCursor_SchemaR,DynamicCursor); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); }; // {{ TCW_TESTCASE(DynamicCursor_SchemaR) #define THE_CLASS DynamicCursor_SchemaR BEG_TEST_CASE(DynamicCursor_SchemaR, DynamicCursor, L"In context of a Schema Rowset") TEST_VARIATION(1, L"ulNumerator=1, ulDenominator=20, cRows=(-1") TEST_VARIATION(2, L"ulNumerator=2, ulDenominator=20, cRows=(-3") TEST_VARIATION(3, L"ulNumerator=3, ulDenominator=20, cRows=(-3") TEST_VARIATION(4, L"Get one row handle at a time.") END_TEST_CASE() #undef THE_CLASS // }} // }} // {{ TCW_TEST_CASE_MAP(Zombie) //-------------------------------------------------------------------- // @class Test zombie states // class Zombie : public CTransaction { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); DBPROPSET m_DBPropSet; ULONG m_cProperty; DBPROP m_rgProperty[2]; public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(Zombie,CTransaction); // }} // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // {{ TCW_TESTVARS() // @cmember Commit with fRetaining=TRUE. int Variation_1(); // @cmember Commit with fRetaining=FALSE. int Variation_2(); // @cmember Abort with fRetaining=TRUE. int Variation_3(); // @cmember Abort with fRetaining=FALSE int Variation_4(); // }} }; // {{ TCW_TESTCASE(Zombie) #define THE_CLASS Zombie BEG_TEST_CASE(Zombie, CTransaction, L"Test zombie states") TEST_VARIATION(1, L"Commit with fRetaining=TRUE.") TEST_VARIATION(2, L"Commit with fRetaining=FALSE.") TEST_VARIATION(3, L"Abort with fRetaining=TRUE.") TEST_VARIATION(4, L"Abort with fRetaining=FALSE") END_TEST_CASE() #undef THE_CLASS // }} // }} // }} END_DECLARE_TEST_CASES() // {{ TCW_TESTMODULE(ThisModule) TEST_MODULE(48, ThisModule, gwszModuleDescrip) TEST_CASE(1, Bookmarks_cmd) TEST_CASE(2, Bookmarks_SchemaR) TEST_CASE(3, Bookmarks_OpenRowset) TEST_CASE(4, CanHoldRows_cmd) TEST_CASE(5, CanHoldRows_SchemaR) TEST_CASE(6, CanHoldRows_OpenRowset) TEST_CASE(7, CanFetchBackwards_Cmd) TEST_CASE(8, CanFetchBackwards_SchemaR) TEST_CASE(9, CanFetchBackwards_OpenRowset) TEST_CASE(10, CanFetchBackwards_CanHoldRows_Cmd) TEST_CASE(11, CanFetchBackwards_CanHoldRows_SchemaR) TEST_CASE(12, CanFetchBackwards_CanHoldRows_OpenRowset) TEST_CASE(13, MaxOpenRows_Cmd) TEST_CASE(14, MaxOpenRows_SchemaR) TEST_CASE(15, MaxOpenRows_OpenRowset) TEST_CASE(16, DeleteRows_cmd) TEST_CASE(17, DeleteRows_OpenRowset) TEST_CASE(18, RemoveDeleted_Cmd) TEST_CASE(19, RemoveDeleted_OpenRowset) TEST_CASE(20, Rowset_SingleRow_Cmd) TEST_CASE(21, Rowset_SingleRow_OpenRowset) TEST_CASE(22, Rowset_Empty_Cmd) TEST_CASE(23, Rowset_Empty_OpenRowset) TEST_CASE(24, Boundary_GetApproximatePosition_Cmd) TEST_CASE(25, Boundary_GetApproximatePosition_OpenRowset) TEST_CASE(26, Boundary_GetApproximatePosition_SchemaR) TEST_CASE(27, Boundary_GetRowsAtRatio_Cmd) TEST_CASE(28, Boundary_GetRowsAtRatio_OpenRowset) TEST_CASE(29, Boundary_GetRowsAtRatio_SchemaR) TEST_CASE(30, Parameters_Cmd) TEST_CASE(31, Parameters_OpenRowset) TEST_CASE(32, Parameters_SchemaR) TEST_CASE(33, Sequence_Cmd) TEST_CASE(34, Sequence_OpenRowset) TEST_CASE(35, Sequence_SchemaR) TEST_CASE(36, Consistency_Cmd) TEST_CASE(37, Consistency_OpenRowset) TEST_CASE(38, Consistency_SchemaR) TEST_CASE(39, Related_IRowset_Cmd) TEST_CASE(40, Related_IRowset_OpenRowset) TEST_CASE(41, Related_IRowset_SchemaR) TEST_CASE(42, KeysetCursor_Cmd) TEST_CASE(43, KeysetCursor_OpenRowset) TEST_CASE(44, KeysetCursor_SchemaR) TEST_CASE(45, DynamicCursor_Cmd) TEST_CASE(46, DynamicCursor_OpenRowset) TEST_CASE(47, DynamicCursor_SchemaR) TEST_CASE(48, Zombie) END_TEST_MODULE() // }} //*----------------------------------------------------------------------- //| Test Case: Bookmarks - test DBPROP_BOOKMARKS //| Created: 08/28/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Bookmarks::Init() { if(!TCIRowsetScroll::Init()) return FALSE; // Create a rowset and accessor. DBPROP_BOOKMARKS should be supported if // IRowsetScroll is requested on the rowset if(!GetRowsetAndAccessor(g_pCTable, SELECT_COLLISTFROMTBL, IID_IRowsetScroll)) return FALSE; return TRUE; } //*----------------------------------------------------------------------- // @mfunc *pBookmark=DBBMK_FIRST. S_OK is returned. // // @rdesc TEST_PASS or TEST_FAIL // int Bookmarks::Variation_1() { DBBOOKMARK DBBookmark=DBBMK_FIRST; BYTE *pBookmark=(BYTE *)&DBBookmark; DBCOUNTITEM pulPosition=0; DBCOUNTITEM pcRows=0; if(!CHECK(m_pIRowsetScroll->GetApproximatePosition(NULL,1,pBookmark, &pulPosition,&pcRows),S_OK)) return TEST_FAIL; if(!COMPARE(VerifyApproximatePosition(pulPosition, pcRows, 1), TRUE)) return TEST_FAIL; return TEST_PASS; } //*----------------------------------------------------------------------- // @mfunc *pBookmark=DBBMK_LAST. S_OK is returned. // // @rdesc TEST_PASS or TEST_FAIL // int Bookmarks::Variation_2() { DBBOOKMARK DBBookmark=DBBMK_LAST; BYTE *pBookmark=(BYTE *)&DBBookmark; DBCOUNTITEM pulPosition=0; DBCOUNTITEM pcRows=0; if(!CHECK(m_pIRowsetScroll->GetApproximatePosition(NULL,1,pBookmark, &pulPosition,&pcRows),S_OK)) return TEST_FAIL; if(!COMPARE(VerifyApproximatePosition(pulPosition, pcRows, m_ulRowCount), TRUE)) return TEST_FAIL; return TEST_PASS; } //*----------------------------------------------------------------------- // @mfunc *pBookmark=DBBMK_INVALID. DB_E_BADBOOKMARK is returned. // // @rdesc TEST_PASS or TEST_FAIL // int Bookmarks::Variation_3() { DBBOOKMARK DBBookmark=DBBMK_INVALID; BYTE *pBookmark=(BYTE *)&DBBookmark; DBCOUNTITEM pulPosition=3; DBCOUNTITEM pcRows=3; if(!CHECK(m_pIRowsetScroll->GetApproximatePosition(NULL,1,pBookmark, &pulPosition,&pcRows),DB_E_BADBOOKMARK)) { return TEST_FAIL; } // pulPosition and pcRows should be untouched. if(!COMPARE(3, pulPosition)) return TEST_FAIL; if(!COMPARE(3, pcRows)) return TEST_FAIL; return TEST_PASS; } //*----------------------------------------------------------------------- // @mfunc Get one row handle at a time (cRows==1). // // @rdesc TEST_PASS or TEST_FAIL // int Bookmarks::Variation_4() { DBCOUNTITEM pulPosition=0; DBCOUNTITEM pcRows=0; DBCOUNTITEM cRowCount; ULONG_PTR cbBookmark; BYTE * pBookmark=NULL; BOOL fTestPass=FALSE; // Get one row handle at a time, from the first row for(cRowCount=1; cRowCount<=m_ulRowCount; cRowCount++) { // Get the bookmark for the first row if(!GetBookmark(cRowCount, &cbBookmark, &pBookmark)) goto END; if(!CHECK(m_pIRowsetScroll->GetApproximatePosition(NULL,cbBookmark,pBookmark, &pulPosition,&pcRows),S_OK)) goto END; if(!VerifyApproximatePosition(pulPosition, pcRows, cRowCount)) goto END; // Release the bookmark PROVIDER_FREE(pBookmark); pBookmark=NULL; } fTestPass=TRUE; END: // Release the bookmark if(pBookmark) PROVIDER_FREE(pBookmark); if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Bookmarks::Terminate() { ReleaseRowsetAndAccessor(); return(TCIRowsetScroll::Terminate()); } // {{ TCW_TC_PROTOTYPE(Bookmarks_cmd) //*----------------------------------------------------------------------- //| Test Case: Bookmarks_cmd - test DBPROP_BOOKMARKS //| Created: 08/28/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Bookmarks_cmd::Init() { if (!SetRowsetType(USECOMMAND)) return TEST_SKIPPED; return (Bookmarks::Init()); } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Bookmarks_cmd::Terminate() { return(Bookmarks::Terminate()); } // }} // }} // {{ TCW_TC_PROTOTYPE(Bookmarks_SchemaR) //*----------------------------------------------------------------------- //| Test Case: Bookmarks_SchemaR - Using Schema Rowsets //| Created: 08/28/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Bookmarks_SchemaR::Init() { if (!SetRowsetType(USESCHEMAR)) return TEST_SKIPPED; return (Bookmarks::Init()); } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Bookmarks_SchemaR::Terminate() { return(Bookmarks::Terminate()); } // }} // }} // {{ TCW_TC_PROTOTYPE(Bookmarks_OpenRowset) //*----------------------------------------------------------------------- //| Test Case: Bookmarks_OpenRowset - In Context of IOpenRowset //| Created: 08/28/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Bookmarks_OpenRowset::Init() { if (!SetRowsetType(USEOPENROWSET)) return TEST_SKIPPED; return (Bookmarks::Init()); } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Bookmarks_OpenRowset::Terminate() { return(Bookmarks::Terminate()); } // }} // }} //*----------------------------------------------------------------------- //| Test Case: CanHoldRows - Test DBPROP_CANHOLDROWS property //| Created: 08/29/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL CanHoldRows::Init() { DBPROPID guidProperty=DBPROP_CANHOLDROWS; if(!TCIRowsetScroll::Init()) return FALSE; // Create a rowset and accessor if(!GetRowsetAndAccessor(g_pCTable, SELECT_COLLISTGROUPBY, IID_IRowsetScroll, 1,&guidProperty)) return FALSE; return TRUE; } //*----------------------------------------------------------------------- // @mfunc Get first two rows, get next three rows, pass bookmark of second row. S_OK returned. // // @rdesc TEST_PASS or TEST_FAIL // int CanHoldRows::Variation_1() { ULONG_PTR cbBookmark=0; BYTE *pBookmark=NULL; HROW *pHRow=NULL; HROW *pHRow2=NULL; DBCOUNTITEM cCount=0; DBCOUNTITEM cCount2=0; DBCOUNTITEM pulPosition=0; DBCOUNTITEM pcRows=0; BOOL fTestPass=FALSE; // Fetch the first two rows if(!CHECK(m_pIRowset->GetNextRows(NULL, // Chapter handle. 0, // Count of rows to skip before reading. 2, // The number of rows to fetch. &cCount, // Actual number of fetched rows. &pHRow), // Array of handles of retrieved rows. S_OK)) goto END; if(!COMPARE(2, cCount)) goto END; // Get a bookmark for the second row if(!GetBookmark(2, &cbBookmark, &pBookmark)) goto END; // Fetch the next three rows if(!CHECK(m_pIRowset->GetNextRows(NULL, // Chapter handle. 0, // Count of rows to skip before reading. 3, // The number of rows to fetch. &cCount2, // Actual number of fetched rows. &pHRow2), // Array of handles of retrieved rows. S_OK)) goto END; if(!COMPARE(3, cCount2)) goto END; if(!CHECK(m_pIRowsetScroll->GetApproximatePosition(NULL,cbBookmark,pBookmark, &pulPosition,&pcRows),S_OK)) goto END; if(!VerifyApproximatePosition(pulPosition, pcRows, 2)) goto END; fTestPass = TEST_PASS; END: // Release the bookmarks PROVIDER_FREE(pBookmark); // Release the row handles if(pHRow) { CHECK(m_pIRowset->ReleaseRows(cCount, pHRow, NULL, NULL, NULL),S_OK); PROVIDER_FREE(pHRow); } if(pHRow2) { CHECK(m_pIRowset->ReleaseRows(cCount2, pHRow2, NULL, NULL, NULL),S_OK); PROVIDER_FREE(pHRow2); } if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //*----------------------------------------------------------------------- // @mfunc Get first two rows, *pBookmark=second row bookmark. S_OK returned. // // @rdesc TEST_PASS or TEST_FAIL // int CanHoldRows::Variation_2() { ULONG_PTR cbBookmark=0; BYTE *pBookmark=NULL; HROW *pHRow=NULL; HROW *pHRow2=NULL; DBCOUNTITEM cCount=0; DBCOUNTITEM cCount2=0; DBCOUNTITEM pulPosition=0; DBCOUNTITEM pcRows=0; BOOL fTestPass=FALSE; //Start from the begining if(!CHECK(m_pIRowset->RestartPosition(NULL), S_OK)) goto END; // Get a bookmark for the second row if(!GetBookmark(2, &cbBookmark, &pBookmark)) goto END; // Fetch the first two rows if(!CHECK(m_pIRowset->GetNextRows(NULL, // Chapter handle. 0, // Count of rows to skip before reading. 2, // The number of rows to fetch. &cCount, // Actual number of fetched rows. &pHRow), // Array of handles of retrieved rows. S_OK)) goto END; if(!COMPARE(2, cCount)) goto END; if(!CHECK(m_pIRowsetScroll->GetApproximatePosition(NULL,cbBookmark,pBookmark, &pulPosition,&pcRows),S_OK)) goto END; if(!VerifyApproximatePosition(pulPosition, pcRows, 2)) goto END; // Fetch the next row to verify cursor position if(!CHECK(m_pIRowset->GetNextRows(NULL, // Chapter handle. 0, // Count of rows to skip before reading. 1, // The number of rows to fetch. &cCount2, // Actual number of fetched rows. &pHRow2), // Array of handles of retrieved rows. S_OK)) goto END; if(!COMPARE(VerifyRowPosition(*pHRow2, 3, g_pCTable, EXACT),TRUE)) goto END; fTestPass=TRUE; END: // Release the bookmarks PROVIDER_FREE(pBookmark); // Release the row handles if(pHRow) { CHECK(m_pIRowset->ReleaseRows(1, pHRow, NULL, NULL, NULL),S_OK); PROVIDER_FREE(pHRow); } if(pHRow2) { CHECK(m_pIRowset->ReleaseRows(1, pHRow2, NULL, NULL, NULL),S_OK); PROVIDER_FREE(pHRow2); } if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //*----------------------------------------------------------------------- // @mfunc Get first 5 rows, get last 5 rows, ulNumerator=1, ulDenominator=2, S_OK and 10th row returned. // // @rdesc TEST_PASS or TEST_FAIL // int CanHoldRows::Variation_3() { DBCOUNTITEM cCount=0; HROW *prghRows=NULL; DBCOUNTITEM cCount2=0; HROW *prghRows2=NULL; HROW *prghRows3=NULL; DBCOUNTITEM cRowsObtained=0; BOOL fTestPass=FALSE; //Start from the begining if(!CHECK(m_pIRowset->RestartPosition(NULL), S_OK)) goto END; // Fetch first few rows if(!CHECK(m_pIRowset->GetNextRows(NULL, // Chapter handle. 0, // Count of rows to skip before reading. 2, // The number of rows to fetch. &cCount, // Actual number of fetched rows. &prghRows), // Array of handles of retrieved rows. S_OK)) goto END; if(!COMPARE(2, cCount)) goto END; // Fetch last five rows if(!CHECK(m_pIRowset->GetNextRows(NULL, // Chapter handle. m_ulRowCount-4, // Count of rows to skip before reading. 2, // The number of rows to fetch. &cCount2, // Actual number of fetched rows. &prghRows2), // Array of handles of retrieved rows. S_OK)) goto END; if(!COMPARE(2, cCount)) goto END; // ulNumerator=1, ulDenominator=2, cRows=1. if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,1,2, 1,&cRowsObtained,&prghRows3),S_OK)) goto END; // One row should have been returned if(!COMPARE(cRowsObtained, 1)) goto END; if(!VerifyRowPosition(*prghRows3, GetRatio(m_ulRowCount,1,2)+1, g_pCTable, INEXACT)) goto END; fTestPass=TRUE; END: if(prghRows) { CHECK(m_pIRowset->ReleaseRows(2,prghRows,NULL,NULL,NULL),S_OK); PROVIDER_FREE(prghRows); } if(prghRows2) { CHECK(m_pIRowset->ReleaseRows(2,prghRows2,NULL,NULL,NULL),S_OK); PROVIDER_FREE(prghRows2); } if(prghRows3) { CHECK(m_pIRowset->ReleaseRows(cRowsObtained,prghRows3,NULL,NULL,NULL),S_OK); PROVIDER_FREE(prghRows3); } if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL CanHoldRows::Terminate() { ReleaseRowsetAndAccessor(); return(TCIRowsetScroll::Terminate()); } // {{ TCW_TC_PROTOTYPE(CanHoldRows_cmd) //*----------------------------------------------------------------------- //| Test Case: CanHoldRows_cmd - In context of commands //| Created: 08/29/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL CanHoldRows_cmd::Init() { if (!SetRowsetType(USECOMMAND)) return TEST_SKIPPED; // {{ TCW_INIT_BASECLASS_CHECK return (CanHoldRows::Init()); // }} } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL CanHoldRows_cmd::Terminate() { // TO DO: Add your own code here // {{ TCW_TERM_BASECLASS_CHECK2 return(CanHoldRows::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(CanHoldRows_SchemaR) //*----------------------------------------------------------------------- //| Test Case: CanHoldRows_SchemaR - In context of Schema rowsets //| Created: 08/29/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL CanHoldRows_SchemaR::Init() { BOOL fPass; if (!SetRowsetType(USESCHEMAR)) return TEST_SKIPPED; fPass = CanHoldRows::Init(); if(TEST_PASS == fPass) { if ( m_ulRowCount < 5 ) return TEST_SKIPPED; else return TEST_PASS; } else return fPass; } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL CanHoldRows_SchemaR::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CanHoldRows::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(CanHoldRows_OpenRowset) //*----------------------------------------------------------------------- //| Test Case: CanHoldRows_OpenRowset - In context of IOpenRowset //| Created: 08/29/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL CanHoldRows_OpenRowset::Init() { if (!SetRowsetType(USEOPENROWSET)) return TEST_SKIPPED; // {{ TCW_INIT_BASECLASS_CHECK return CanHoldRows::Init(); // }} } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL CanHoldRows_OpenRowset::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CanHoldRows::Terminate()); } // }} // }} // }} //*----------------------------------------------------------------------- //| Test Case: CanFetchBackwards - Test DBPROP_CANFETCHBACKWARDS //| Created: 09/01/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL CanFetchBackwards::Init() { DBPROPID guidProperty=DBPROP_CANFETCHBACKWARDS; if(!TCIRowsetScroll::Init()) return FALSE; // Create a rowset and an accessor. // DBPROP_CANFETCHBACKWARDS is requested. if(!GetRowsetAndAccessor(g_pCTable, SELECT_COLLISTFROMTBL, IID_IRowsetScroll, 1,&guidProperty)) return TEST_SKIPPED; return TRUE; } //*----------------------------------------------------------------------- // @mfunc ulNumerator=0, ulDenominator=last row, cRows=(-2). DB_S_ENDOFROWSET. // // @rdesc TEST_PASS or TEST_FAIL // int CanFetchBackwards::Variation_1() { DBCOUNTITEM cRowsObtained=0; HROW *prghRows=NULL; BOOL fTestPass=FALSE; // ulNumerator=0, ulDenominator=last row, cRows=(-2). if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,0,m_ulRowCount, -2,&cRowsObtained,&prghRows),DB_S_ENDOFROWSET)) goto END; if(!COMPARE(cRowsObtained, 0)) goto END; if( !COMPARE(prghRows,NULL) ) goto END; fTestPass=TRUE; END: // Release the row handle CHECK(m_pIRowset->ReleaseRows(cRowsObtained, prghRows, NULL, NULL, NULL),S_OK); PROVIDER_FREE(prghRows); if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //*----------------------------------------------------------------------- // @mfunc ulNumerator=1, ulDenominator=4, cRows=(-6). DB_S_ENDOFROWSET and five row handles returned. // // @rdesc TEST_PASS or TEST_FAIL // int CanFetchBackwards::Variation_2() { DBCOUNTITEM cRowsObtained=0; HROW *rghRows; BOOL fTestPass=FALSE; DBCOUNTITEM cRowCount; HRESULT hr; rghRows = (HROW *)PROVIDER_ALLOC(sizeof(HROW)*(m_ulRowCount/4+2)); // ulNumerator=1, ulDenominator=4, cRows=(-6). hr = m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,1,4, -(LONG(m_ulRowCount/4)+2),&cRowsObtained,&rghRows); if (!(COMPARE(SUCCEEDED(hr), TRUE)) ) goto END; if ( hr == DB_S_ENDOFROWSET ) { if (!COMPARE(cRowsObtained<(m_ulRowCount/4)+2, TRUE)) goto END; } else { odtLog << L"Warning, ideally. DB_S_ENDOFROWSET\n"; if(!COMPARE(cRowsObtained, (m_ulRowCount/4)+2)) fTestPass = FALSE; else fTestPass = TRUE; goto END; } // Make sure the row handles are returned in the traversal order for(cRowCount=0; cRowCountReleaseRows(cRowsObtained, rghRows, NULL, NULL, NULL),S_OK); PROVIDER_FREE(rghRows); if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //*----------------------------------------------------------------------- // @mfunc ulNumerator=3, ulDenominator=5, cRows=(-2). S_OK returned and 12th and 11th row handles returned. // // @rdesc TEST_PASS or TEST_FAIL // int CanFetchBackwards::Variation_3() { DBCOUNTITEM cRowsObtained=0,iCount; HROW rghRows[5]; HROW *prghRows=rghRows; BOOL fTestPass=FALSE; HRESULT hr = E_FAIL; // ulNumerator=3, ulDenominator=5, cRows=(-2). hr = m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,3,5, -2,&cRowsObtained,&prghRows); if (!(COMPARE(SUCCEEDED(hr), TRUE)) ) goto END; if ( hr == S_OK ) { if(!COMPARE(cRowsObtained, 2)) goto END; } else { if(!COMPARE(cRowsObtained<2, TRUE)) goto END; } for ( iCount = 0; iCount < cRowsObtained; iCount++ ) { VerifyRowPosition(prghRows[iCount],GetRatio(m_ulRowCount,3,5) + 1 - iCount,g_pCTable,INEXACT); } fTestPass=TRUE; END: // Release the row handles CHECK(m_pIRowset->ReleaseRows(cRowsObtained, prghRows, NULL, NULL, NULL),S_OK); if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //-------------------------------------------------------------------- // @mfunc ulNumerator=lastrow-1,ulDenominator=last row, cRows=2, expect DB_S_ENDOFROWSET // // @rdesc TEST_PASS or TEST_FAIL // int CanFetchBackwards::Variation_4() { DBCOUNTITEM cRowsObtained=0; HROW *prghRows=NULL; BOOL fTestPass=FALSE; HRESULT hr = S_OK; // ulNumerator=lastrow-1, ulDenominator=last row, cRows=(2). hr = m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,m_ulRowCount-1,m_ulRowCount, 2,&cRowsObtained,&prghRows); if (!(COMPARE(SUCCEEDED(hr), TRUE)) ) goto END; if ( hr == DB_S_ENDOFROWSET ) { if (!COMPARE(cRowsObtained, 1)) goto END; } else { odtLog << L"Warning, ideally. DB_S_ENDOFROWSET and 1 row should have been returned.\n"; fTestPass = TRUE; goto END; } if( !COMPARE(VerifyRowPosition(*prghRows, m_ulRowCount, g_pCTable, INEXACT), TRUE) ) goto END; fTestPass=TRUE; END: // Release the row handle CHECK(m_pIRowset->ReleaseRows(cRowsObtained, prghRows, NULL, NULL, NULL),S_OK); PROVIDER_FREE(prghRows); if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL CanFetchBackwards::Terminate() { ReleaseRowsetAndAccessor(); return(TCIRowsetScroll::Terminate()); } // {{ TCW_TC_PROTOTYPE(CanFetchBackwards_Cmd) //*----------------------------------------------------------------------- //| Test Case: CanFetchBackwards_Cmd - In context of commands //| Created: 09/01/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL CanFetchBackwards_Cmd::Init() { if (!SetRowsetType(USECOMMAND)) return TEST_SKIPPED; // {{ TCW_INIT_BASECLASS_CHECK return (CanFetchBackwards::Init()); // }} } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL CanFetchBackwards_Cmd::Terminate() { // TO DO: Add your own code here // {{ TCW_TERM_BASECLASS_CHECK2 return(CanFetchBackwards::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(CanFetchBackwards_SchemaR) //*----------------------------------------------------------------------- //| Test Case: CanFetchBackwards_SchemaR - In context of a Schema Rowset //| Created: 09/01/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL CanFetchBackwards_SchemaR::Init() { if (!SetRowsetType(USESCHEMAR)) return TEST_SKIPPED; // {{ TCW_INIT_BASECLASS_CHECK return (CanFetchBackwards::Init()); // }} } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL CanFetchBackwards_SchemaR::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CanFetchBackwards::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(CanFetchBackwards_OpenRowset) //*----------------------------------------------------------------------- //| Test Case: CanFetchBackwards_OpenRowset - In context of IOpenRowset //| Created: 09/01/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL CanFetchBackwards_OpenRowset::Init() { if (!SetRowsetType(USEOPENROWSET)) return TEST_SKIPPED; // {{ TCW_INIT_BASECLASS_CHECK return (CanFetchBackwards::Init()); // }} } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL CanFetchBackwards_OpenRowset::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CanFetchBackwards::Terminate()); } // }} // }} // }} //*----------------------------------------------------------------------- //| Test Case: CanFetchBackwards_CanHoldRows - Test DBPROP_CANFETCHBACKWARDS + DBPROP_CANHOLDROWS //| Created: 09/01/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL CanFetchBackwards_CanHoldRows::Init() { DBPROPID guidProperty[2]; ULONG cPrptSet=0; if(!TCIRowsetScroll::Init()) return FALSE; guidProperty[cPrptSet++]=DBPROP_CANFETCHBACKWARDS; guidProperty[cPrptSet++]=DBPROP_CANHOLDROWS; // Create a rowset and an accessor. // DBPROP_CANFETCHBACKWARDS and DBPROP_CANHOLDROWS are requested. if(!GetRowsetAndAccessor(g_pCTable, SELECT_REVCOLLIST, IID_IRowsetScroll, cPrptSet,guidProperty)) return TEST_SKIPPED; return TRUE; } //*----------------------------------------------------------------------- // @mfunc ulNumerator=1, ulDenominator=last row, cRows=(-1). S_OK and one row handle returned. // // @rdesc TEST_PASS or TEST_FAIL // int CanFetchBackwards_CanHoldRows::Variation_1() { DBCOUNTITEM cRowsObtained=0; HROW *prghRows=NULL; BOOL fTestPass=FALSE; // ulNumerator=1, ulDenominator=last row, cRows=(-1). if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,1,m_ulRowCount, -1,&cRowsObtained,&prghRows),S_OK)) goto END; if(!COMPARE(cRowsObtained, 1)) goto END; if( !COMPARE(VerifyRowPosition(*prghRows, 2, g_pCTable, INEXACT), TRUE) ) goto END; fTestPass=TRUE; END: // Release the row handle CHECK(m_pIRowset->ReleaseRows(cRowsObtained, prghRows, NULL, NULL, NULL),S_OK); PROVIDER_FREE(prghRows); if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //*----------------------------------------------------------------------- // @mfunc ulNumerator=3, ulDenominator=last row, cRows=(-3). Do not release rows, try another combination. S_OK returned. // // @rdesc TEST_PASS or TEST_FAIL // int CanFetchBackwards_CanHoldRows::Variation_2() { DBCOUNTITEM cRowsObtained=0; DBCOUNTITEM cRowsObtained2=0; HROW rghRows[5]; HROW *prghRows=rghRows; HROW *prghRows2=NULL; BOOL fTestPass=FALSE; DBCOUNTITEM cRowCount; HRESULT hr = E_FAIL; // ulNumerator=2, ulDenominator=last row, cRows=(-3). hr = m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,3,m_ulRowCount, -3,&cRowsObtained,&prghRows); if ( !COMPARE(hr==S_OK || hr==DB_S_ENDOFROWSET, TRUE) ) goto END; // The 3rd, 2nd, and 1st row handles should be retrieved if ( hr == S_OK ) { if( !COMPARE(cRowsObtained, 3)) goto END; } else { if ( !COMPARE(cRowsObtained<3, TRUE) ) goto END; } // Make sure the row handles are returned in the traversal order for(cRowCount=0; cRowCountGetRowsAtRatio(NULL,NULL,1,4, -1,&cRowsObtained2,&prghRows2),S_OK)) goto END; if(!COMPARE(cRowsObtained2, 1)) goto END; if( !COMPARE(VerifyRowPosition(*prghRows2, m_ulRowCount/4+1, g_pCTable, INEXACT), TRUE) ) goto END; fTestPass=TRUE; END: if(prghRows2) { CHECK(m_pIRowset->ReleaseRows(cRowsObtained2,prghRows2,NULL,NULL,NULL),S_OK); PROVIDER_FREE(prghRows2); } if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL CanFetchBackwards_CanHoldRows::Terminate() { ReleaseRowsetAndAccessor(); return(TCIRowsetScroll::Terminate()); } // {{ TCW_TC_PROTOTYPE(CanFetchBackwards_CanHoldRows_Cmd) //*----------------------------------------------------------------------- //| Test Case: CanFetchBackwards_CanHoldRows_Cmd - In context of Commands //| Created: 09/01/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL CanFetchBackwards_CanHoldRows_Cmd::Init() { if (!SetRowsetType(USECOMMAND)) return TEST_SKIPPED; // {{ TCW_INIT_BASECLASS_CHECK return (CanFetchBackwards_CanHoldRows::Init()); // }} } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL CanFetchBackwards_CanHoldRows_Cmd::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CanFetchBackwards_CanHoldRows::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(CanFetchBackwards_CanHoldRows_SchemaR) //*----------------------------------------------------------------------- //| Test Case: CanFetchBackwards_CanHoldRows_SchemaR - In context of a Schema Rowset //| Created: 09/01/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL CanFetchBackwards_CanHoldRows_SchemaR::Init() { BOOL fPass; if (!SetRowsetType(USESCHEMAR)) return TEST_SKIPPED; fPass = CanFetchBackwards_CanHoldRows::Init(); if(TEST_PASS == fPass) { if ( m_ulRowCount < 5 ) return TEST_SKIPPED; else return TEST_PASS; } else return fPass; } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL CanFetchBackwards_CanHoldRows_SchemaR::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CanFetchBackwards_CanHoldRows::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(CanFetchBackwards_CanHoldRows_OpenRowset) //*----------------------------------------------------------------------- //| Test Case: CanFetchBackwards_CanHoldRows_OpenRowset - In context of IOpenRowset //| Created: 09/01/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL CanFetchBackwards_CanHoldRows_OpenRowset::Init() { if (!SetRowsetType(USEOPENROWSET)) return TEST_SKIPPED; // {{ TCW_INIT_BASECLASS_CHECK return (CanFetchBackwards_CanHoldRows::Init()); // }} } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL CanFetchBackwards_CanHoldRows_OpenRowset::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CanFetchBackwards_CanHoldRows::Terminate()); } // }} // }} // }} //*----------------------------------------------------------------------- //| Test Case: MaxOpenRows - Test DBPROP_MAXOPENROWS //| Created: 09/01/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL MaxOpenRows::Init() { if(!TCIRowsetScroll::Init()) return FALSE; //Create a rowset and an accessor. if(!GetRowsetAndAccessor(g_pCTable, SELECT_REVCOLLIST, IID_IRowsetScroll)) return FALSE; return TRUE; } //*----------------------------------------------------------------------- // @mfunc MAXOPENROWS=3, ulNumerator=9, ulDenominator=10, and cRows=4. DB_S_ENDOFROWSET is returned. // // @rdesc TEST_PASS or TEST_FAIL // int MaxOpenRows::Variation_1() { HROW *prghRows=NULL; DBCOUNTITEM cRowsObtained=0; BOOL fTestPass=FALSE; DBPROPID guidProperty=DBPROP_MAXOPENROWS; ULONG cMaxOpenRowsCount=0; //remember g_cMaxOpenRowsCount ASSERT(g_cMaxOpenRowsCount <= UINT_MAX ); cMaxOpenRowsCount=(ULONG)g_cMaxOpenRowsCount; if(g_rgDBPrpt[IDX_MaxOpenRows].fSettable) { //Re-open a rowset with DBPROP_MAXOPENROWSET set to 3 ReleaseRowsetAndAccessor(); g_cMaxOpenRowsCount = 3; if(!GetRowsetAndAccessor(g_pCTable, SELECT_REVCOLLIST, IID_IRowsetScroll,1,&guidProperty)) goto END; } //If DBPROP_MAXOPENROWS=0 then there is no limit on the number of rows that can be active. if(g_cMaxOpenRowsCount == 0) { //ulNumerator=9, ulDenominator=10 if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,9,10, m_ulRowCount+1,&cRowsObtained,&prghRows), DB_S_ENDOFROWSET)) goto END; if( !COMPARE(cRowsObtained < m_ulRowCount, TRUE) ) goto END; if( !COMPARE(VerifyRowPosition(*prghRows, GetRatio(m_ulRowCount,9,10)+1, g_pCTable, INEXACT), TRUE) ) goto END; } else if(g_cMaxOpenRowsCount < LONG(m_ulRowCount)) { if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,0,10, m_ulRowCount+1,&cRowsObtained,&prghRows), DB_S_ROWLIMITEXCEEDED)) goto END; //only g_cMaxOpenRowsCount rows could be fetched if(!COMPARE(cRowsObtained, (ULONG)g_cMaxOpenRowsCount)) goto END; if( !COMPARE(VerifyRowPosition(*prghRows, 1, g_pCTable, EXACT), TRUE) ) goto END; } else { //ulNumerator=9, ulDenominator=10 if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,9,10, m_ulRowCount+1,&cRowsObtained,&prghRows), DB_S_ENDOFROWSET)) goto END; if( !COMPARE(cRowsObtained < m_ulRowCount, TRUE) ) goto END; if( !COMPARE(VerifyRowPosition(*prghRows, (9*m_ulRowCount)/10+1, g_pCTable, INEXACT), TRUE) ) goto END; } fTestPass=TRUE; END: //Release the row handles if(prghRows) { CHECK(m_pIRowset->ReleaseRows(cRowsObtained,prghRows, NULL, NULL, NULL), S_OK); PROVIDER_FREE(prghRows); } //Restore the max open rows g_cMaxOpenRowsCount=cMaxOpenRowsCount; if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //*----------------------------------------------------------------------- // @mfunc MAXOPENROWS=2, ulNumerator=1, ulDenominator=3, and cRows=3. DB_S_ROWLIMITEXCEEDED is returned. // // @rdesc TEST_PASS or TEST_FAIL // int MaxOpenRows::Variation_2() { HROW *prghRows=NULL; DBCOUNTITEM cRowsObtained=0; BOOL fTestPass=FALSE; DBPROPID guidProperty=DBPROP_MAXOPENROWS; DBCOUNTITEM cMaxOpenRowsCount=0; //remember g_cMaxOpenRowsCount cMaxOpenRowsCount=g_cMaxOpenRowsCount; //Re-open a rowset with DBPROP_MAXOPENROWS set if(g_rgDBPrpt[IDX_MaxOpenRows].fSettable) { ReleaseRowsetAndAccessor(); g_cMaxOpenRowsCount = 2; //Open rowset and accessor if(!GetRowsetAndAccessor(g_pCTable, SELECT_REVCOLLIST, IID_IRowsetScroll, 1,&guidProperty)) goto END; } if(g_cMaxOpenRowsCount==0) { //ulNumerator=1, ulDenominator=3, cRows=cRowset/3. if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,1,3, m_ulRowCount/3,&cRowsObtained,&prghRows), S_OK)) goto END; if(!COMPARE(cRowsObtained, (ULONG)(m_ulRowCount/3))) goto END; } //ulNumerator=1, ulDenominator=3, cRows=3. else if( g_cMaxOpenRowsCount < 3 ) { if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,1,3, 3,&cRowsObtained,&prghRows), DB_S_ROWLIMITEXCEEDED)) goto END; //Only g_cMaxOpenRowsCount rows can be fetched. if(!COMPARE(cRowsObtained, (ULONG)g_cMaxOpenRowsCount)) goto END; } else { //ulNumerator=1, ulDenominator=3, cRows=3. if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,1,3, 3,&cRowsObtained,&prghRows), DB_S_ENDOFROWSET)) if(!COMPARE(cRowsObtained, 3)) goto END; } if( !COMPARE(VerifyRowPosition(*prghRows, GetRatio(m_ulRowCount,1,3)+1, g_pCTable, INEXACT), TRUE) ) goto END; fTestPass=TRUE; END: //Release the row handles if(prghRows) { CHECK(m_pIRowset->ReleaseRows(cRowsObtained,prghRows, NULL, NULL, NULL), S_OK); PROVIDER_FREE(prghRows); } //Restore the max open rows g_cMaxOpenRowsCount=cMaxOpenRowsCount; if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //*----------------------------------------------------------------------- // @mfunc Use default MaxOpenRows // // @rdesc TEST_PASS or TEST_FAIL // int MaxOpenRows::Variation_3() { DBPROPID guidProperty=DBPROP_MAXOPENROWS; HROW *prghRows=NULL; DBCOUNTITEM cRows; DBCOUNTITEM cRowsObtained=0; BOOL fTestPass=FALSE; //Re-open a rowset with DBPROP_MAXOPENROWS set to default value. if(g_rgDBPrpt[IDX_MaxOpenRows].fSettable) { ReleaseRowsetAndAccessor(); //Open rowset and accessor if(!GetRowsetAndAccessor(g_pCTable, SELECT_REVCOLLIST, IID_IRowsetScroll, 1,&guidProperty)) goto END; } //If MaxOpenRows is default to 0, retrieve # of rows in the rowset, // else retrieve the MaxOpenRows in the rowset if( !g_cMaxOpenRowsCount || g_cMaxOpenRowsCount > LONG(m_ulRowCount) ) cRows=m_ulRowCount; else cRows=g_cMaxOpenRowsCount; //ulNumerator=1, ulDenominator=cRows, cRows=cRows. if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,0,cRows, cRows,&cRowsObtained,&prghRows), S_OK)) goto END; //All the row handles should be retrieved if(!COMPARE(cRowsObtained, cRows)) goto END; if( !COMPARE(VerifyRowPosition(prghRows[cRowsObtained-1],cRows,g_pCTable, EXACT), TRUE) ) goto END; fTestPass=TRUE; END: //Release the row handles if(prghRows) { CHECK(m_pIRowset->ReleaseRows(cRowsObtained,prghRows, NULL, NULL, NULL), S_OK); PROVIDER_FREE(prghRows); } ReleaseRowsetAndAccessor(); if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL MaxOpenRows::Terminate() { return(TCIRowsetScroll::Terminate()); } // {{ TCW_TC_PROTOTYPE(MaxOpenRows_Cmd) //*----------------------------------------------------------------------- //| Test Case: MaxOpenRows_Cmd - In context of commands //| Created: 09/01/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL MaxOpenRows_Cmd::Init() { if (!SetRowsetType(USECOMMAND)) return TEST_SKIPPED; //Make sure DBPROP_MAXOPENROWS is supported if(!g_rgDBPrpt[IDX_MaxOpenRows].fSupported) return TEST_SKIPPED; // {{ TCW_INIT_BASECLASS_CHECK return (MaxOpenRows::Init()); // }} } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL MaxOpenRows_Cmd::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(MaxOpenRows::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(MaxOpenRows_SchemaR) //*----------------------------------------------------------------------- //| Test Case: MaxOpenRows_SchemaR - In context of a Schema Rowset //| Created: 09/01/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL MaxOpenRows_SchemaR::Init() { if (!SetRowsetType(USESCHEMAR)) return TEST_SKIPPED; //Make sure DBPROP_MAXOPENROWS is supported if(!g_rgDBPrpt[IDX_MaxOpenRows].fSupported) return TEST_SKIPPED; // {{ TCW_INIT_BASECLASS_CHECK return (MaxOpenRows::Init()); // }} } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL MaxOpenRows_SchemaR::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(MaxOpenRows::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(MaxOpenRows_OpenRowset) //*----------------------------------------------------------------------- //| Test Case: MaxOpenRows_OpenRowset - In context of IOpenRowset //| Created: 09/01/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL MaxOpenRows_OpenRowset::Init() { if (!SetRowsetType(USEOPENROWSET)) return TEST_SKIPPED; //Make sure DBPROP_MAXOPENROWS is supported if(!g_rgDBPrpt[IDX_MaxOpenRows].fSupported) return TEST_SKIPPED; // {{ TCW_INIT_BASECLASS_CHECK return (MaxOpenRows::Init()); // }} } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL MaxOpenRows_OpenRowset::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(MaxOpenRows::Terminate()); } // }} // }} // }} //*----------------------------------------------------------------------- //| Test Case: DeleteRows - Delete rows from the rowset //| Created: 09/01/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL DeleteRows::Init() { if(!TCIRowsetScroll::Init()) return FALSE; return TRUE; } //*----------------------------------------------------------------------- // @mfunc *pBookmark=second row bookmark, delete second row. DB_E_DELETEDROW is returned. // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_1() { DBPROPID guidProperty[3]; ULONG cProperties; HROW *pHRow=NULL; DBCOUNTITEM cRowsObtained=0; IRowsetChange *pIRowsetChange=NULL; ULONG_PTR cbBookmark; BYTE *pBookmark=NULL; BOOL fTestPass=FALSE; DBCOUNTITEM pulPosition=0; DBCOUNTITEM pcRows=0; guidProperty[0]=DBPROP_IRowsetChange; guidProperty[1]=DBPROP_UPDATABILITY; guidProperty[2]=DBPROP_OTHERUPDATEDELETE; /* NOTE: DBPROP_OTHERINSERT = FALSE, DBPROP_OTHERUPDATEDELETE = FALSE, means static cursor. Since IRowsetChange is being asked for that implies that the cursor will no longer be static. Therefore a call to GetProperties will need to be made to see if the above mentioned properties were set. */ // Set DBPROP_OTHERUPDATEDELETE if supported if(g_rgDBPrpt[IDX_OtherUpdateDelete].fSupported) cProperties=3; else cProperties=2; // Open rowset, and accessor. Request IRowsetChange and IRowsetScroll TESTC_PROVIDER(GetRowsetAndAccessor(g_pCTable, SELECT_ORDERBYNUMERIC, IID_IRowsetScroll, cProperties, guidProperty)); // Get the bookmark for the 2nd row if(!GetBookmark(2, &cbBookmark, &pBookmark)) goto END; // Get the row handle for the 2nd row if(!CHECK(m_pIRowset->GetNextRows(NULL,1,1,&cRowsObtained,&pHRow),S_OK)) goto END; COMPARE(cRowsObtained, 1); // QI for IRowsetChange pointer if(!CHECK(m_pIRowsetScroll->QueryInterface(IID_IRowsetChange, (void **)&pIRowsetChange),S_OK)) goto END; // Delete the 2nd row if(!CHECK(pIRowsetChange->DeleteRows(NULL,1,pHRow,NULL),S_OK)) goto END; // Release the row handle CHECK(m_pIRowset->ReleaseRows(cRowsObtained,pHRow,NULL,NULL,NULL),S_OK); PROVIDER_FREE(pHRow); pHRow=NULL; // *pBookmark points to a deleted row. S_OK (DB_E_BADBOOKMARK is RemoveDeleted property is set. if ( IsPropertyActive(DBPROP_BOOKMARKSKIPPED) ) { if(!CHECK(m_pIRowsetScroll->GetApproximatePosition(NULL,cbBookmark,pBookmark, &pulPosition,&pcRows), S_OK)) goto END; if( !COMPARE(VerifyApproximatePosition(pulPosition, pcRows, 3), TRUE) ) goto END; } else if ( IsPropertyActive(DBPROP_REMOVEDELETED) ) { if(!CHECK(m_pIRowsetScroll->GetApproximatePosition(NULL,cbBookmark,pBookmark, &pulPosition,&pcRows), DB_E_BADBOOKMARK)) goto END; } else { if(!CHECK(m_pIRowsetScroll->GetApproximatePosition(NULL,cbBookmark,pBookmark, &pulPosition,&pcRows), S_OK)) goto END; if( !COMPARE(VerifyApproximatePosition(pulPosition, pcRows, 2), TRUE) ) goto END; } fTestPass = TEST_PASS; END: // Release IRowsetChange pointer SAFE_RELEASE(pIRowsetChange); // Release the bookmark PROVIDER_FREE(pBookmark); ReleaseRowsetAndAccessor(); if( TEST_SKIPPED != fTestPass ) PopulateTable(); return fTestPass; } //*----------------------------------------------------------------------- // @mfunc *pBookmark=DBBMK_LAST, delete last row. S_OK is returned. // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_2() { DBPROPID guidProperty[2]; ULONG cProperties=2; HROW *pHRow=NULL; DBCOUNTITEM cRowsObtained=0; IRowsetChange *pIRowsetChange=NULL; BOOL fTestPass=FALSE; DBCOUNTITEM pulPosition=0; DBCOUNTITEM pcRows=0; DBBOOKMARK DBBookmark=DBBMK_LAST; BYTE *pBookmark=(BYTE *)&DBBookmark; guidProperty[0]=DBPROP_IRowsetChange; guidProperty[1]=DBPROP_UPDATABILITY; // Open rowset, and accessor. Request IRowsetChange and IRowsetScroll TESTC_PROVIDER(GetRowsetAndAccessor(g_pCTable, SELECT_ORDERBYNUMERIC, IID_IRowsetScroll, cProperties, guidProperty)); // Get the row handle for the last row if(!CHECK(m_pIRowset->GetNextRows(NULL,m_ulRowCount-1,1,&cRowsObtained,&pHRow),S_OK)) goto END; COMPARE(cRowsObtained, 1); // QI for IRowsetChange pointer if(!CHECK(m_pIRowsetScroll->QueryInterface(IID_IRowsetChange, (void **)&pIRowsetChange),S_OK)) goto END; // Delete the last row if(!CHECK(pIRowsetChange->DeleteRows(NULL,1,pHRow,NULL),S_OK)) goto END; // Release the row handle CHECK(m_pIRowset->ReleaseRows(cRowsObtained,pHRow,NULL,NULL,NULL),S_OK); PROVIDER_FREE(pHRow); pHRow=NULL; if(!CHECK(m_pIRowsetScroll->GetApproximatePosition(NULL,1,pBookmark, &pulPosition,&pcRows), S_OK)) goto END; if ( IsPropertyActive(DBPROP_REMOVEDELETED) ) { m_ulRowCount--; if( !COMPARE(VerifyApproximatePosition(pulPosition, pcRows, m_ulRowCount-1), TRUE) ) goto END; } else { if( !COMPARE(VerifyApproximatePosition(pulPosition, pcRows, m_ulRowCount), TRUE) ) goto END; } fTestPass = TEST_PASS; END: // Release IRowsetChange pointer SAFE_RELEASE(pIRowsetChange); ReleaseRowsetAndAccessor(); if( TEST_SKIPPED != fTestPass ) PopulateTable(); return fTestPass; } //*----------------------------------------------------------------------- // @mfunc Ratio points to deleted row. DB_E_DELETEDROW and no row handles returned. // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_3() { DBPROPID guidProperty[2]; HROW *prghRows=NULL; DBCOUNTITEM cRowsObtained=0; IRowsetChange *pIRowsetChange=NULL; BOOL fTestPass=FALSE; guidProperty[0]=DBPROP_IRowsetChange; guidProperty[1]=DBPROP_UPDATABILITY; // Open rowset and accessor, request IRowsetChange and IRowsetScroll TESTC_PROVIDER(GetRowsetAndAccessor(g_pCTable, SELECT_ORDERBYNUMERIC, IID_IRowsetScroll, 2,guidProperty)); // Get the row handle for the 4th row if(!CHECK(m_pIRowset->GetNextRows(NULL,3,1,&cRowsObtained,&prghRows),S_OK)) goto END; COMPARE(cRowsObtained, 1); // QI for IRowsetChange pointer if(FAILED(m_pIRowsetScroll->QueryInterface(IID_IRowsetChange, (void **)&pIRowsetChange))) goto END; // Delete the 4th row if(!CHECK(pIRowsetChange->DeleteRows(NULL,1,prghRows,NULL),S_OK)) goto END; // Release the row handle CHECK(m_pIRowset->ReleaseRows(cRowsObtained,prghRows,NULL,NULL,NULL),S_OK); PROVIDER_FREE(prghRows); prghRows=NULL; if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,3,m_ulRowCount, 1,&cRowsObtained,&prghRows), S_OK)) goto END; if(!COMPARE(cRowsObtained, 1)) goto END; fTestPass = TEST_PASS; if ( S_OK == m_pIRowsetIdentity->IsSameRow(prghRows[0], m_pHRows[3]) ) { //Get Data for the row if(!CHECK(m_pIRowset->GetData(prghRows[0],m_hAccessor,m_pData),DB_E_DELETEDROW)) fTestPass = TEST_FAIL; } END: // Release IRowsetChange pointer SAFE_RELEASE(pIRowsetChange); // Release the row handle if(prghRows) { CHECK(m_pIRowset->ReleaseRows(cRowsObtained,prghRows,NULL,NULL,NULL),S_OK); PROVIDER_FREE(prghRows); } if( TEST_SKIPPED != fTestPass ) PopulateTable(); ReleaseRowsetAndAccessor(); return fTestPass; } //*----------------------------------------------------------------------- // @mfunc Delete 10th row. ulNumerator=1, ulDenominator=2, and cRows=1. S_OK and 10th row handle returned. // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_4() { DBPROPID guidProperty[2]; HROW *prghRows=NULL; DBCOUNTITEM cRowsObtained=0; IRowsetChange *pIRowsetChange=NULL; BOOL fTestPass=FALSE; guidProperty[0]=DBPROP_IRowsetChange; guidProperty[1]=DBPROP_UPDATABILITY; // Open rowset and accessor, request IRowsetChange and IRowsetScroll TESTC_PROVIDER(GetRowsetAndAccessor(g_pCTable, SELECT_ORDERBYNUMERIC, IID_IRowsetScroll, 2,guidProperty)); // Get a row handle if(!CHECK(m_pIRowset->GetNextRows(NULL,(m_ulRowCount/2),1,&cRowsObtained,&prghRows),S_OK)) goto END; COMPARE(cRowsObtained, 1); // QI for IRowsetChange pointer if(FAILED(m_pIRowsetScroll->QueryInterface(IID_IRowsetChange, (void **)&pIRowsetChange))) goto END; // Delete the row if(!CHECK(pIRowsetChange->DeleteRows(NULL,1,prghRows,NULL),S_OK)) goto END; // Release the row handle CHECK(m_pIRowset->ReleaseRows(cRowsObtained,prghRows,NULL,NULL,NULL),S_OK); PROVIDER_FREE(prghRows); prghRows=NULL; // ulNumerator=1, ulDenominator=2, cRows=1. if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,1,2, 1,&cRowsObtained,&prghRows), S_OK)) goto END; // One row handle should be retrieved if(!COMPARE(cRowsObtained, 1)) goto END; fTestPass = TEST_PASS; if ( S_OK == m_pIRowsetIdentity->IsSameRow(prghRows[0], m_pHRows[m_ulRowCount/2]) ) { //Get Data for the row if ( !CHECK(m_pIRowset->GetData(*prghRows,m_hAccessor,m_pData),DB_E_DELETEDROW) ) fTestPass=TEST_FAIL; } END: // Release IRowsetChange pointer SAFE_RELEASE(pIRowsetChange); // Release the row handle if(prghRows) { CHECK(m_pIRowset->ReleaseRows(cRowsObtained,prghRows,NULL,NULL,NULL),S_OK); PROVIDER_FREE(prghRows); } if( TEST_SKIPPED != fTestPass ) PopulateTable(); ReleaseRowsetAndAccessor(); return fTestPass; } //*----------------------------------------------------------------------- // @mfunc Delete 20th row. ulNumerator=20, ulDenominator=20, and cRows=1. S_OK and 20th row handle returned. // // @rdesc TEST_PASS or TEST_FAIL // int DeleteRows::Variation_5() { DBPROPID guidProperty[2]; HROW *prghRows=NULL; DBCOUNTITEM cRowsObtained=0; IRowsetChange *pIRowsetChange=NULL; BOOL fTestPass=FALSE; HRESULT hr=S_OK; guidProperty[0]=DBPROP_IRowsetChange; guidProperty[1]=DBPROP_UPDATABILITY; // Open rowset and accessor, request IRowsetChange and IRowsetScroll TESTC_PROVIDER(GetRowsetAndAccessor(g_pCTable, SELECT_ORDERBYNUMERIC, IID_IRowsetScroll, 2,guidProperty)); // Get the row handle for the last row if(!CHECK(m_pIRowset->GetNextRows(NULL,(m_ulRowCount-1),1,&cRowsObtained,&prghRows),S_OK)) goto END; COMPARE(cRowsObtained, 1); // QI for IRowsetChange pointer if(FAILED(m_pIRowsetScroll->QueryInterface(IID_IRowsetChange, (void **)&pIRowsetChange))) goto END; // Delete the last row if(!CHECK(pIRowsetChange->DeleteRows(NULL,1,prghRows,NULL),S_OK)) goto END; // Release the row handle CHECK(m_pIRowset->ReleaseRows(cRowsObtained,prghRows,NULL,NULL,NULL),S_OK); PROVIDER_FREE(prghRows); prghRows=NULL; if(g_rgDBPrpt[IDX_CanFetchBackwards].fDefault==VARIANT_FALSE) hr=DB_E_CANTFETCHBACKWARDS; // ulNumerator=last, ulDenominator=last, cRows=-1. (this fetch is exact). if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,m_ulRowCount,m_ulRowCount, -1,&cRowsObtained,&prghRows), hr)) goto END; if(hr==S_OK) { // One row handle should be retrieved if(!COMPARE(cRowsObtained, 1)) goto END; if (IsPropertyActive(DBPROP_REMOVEDELETED)) { if( !COMPARE(VerifyRowPosition(prghRows[0], m_ulRowCount-1, g_pCTable, EXACT), TRUE)) goto END; } else { //Get Data for the row if(!CHECK(m_pIRowset->GetData(*prghRows,m_hAccessor,m_pData),DB_E_DELETEDROW)) goto END; } } else { if(!COMPARE(cRowsObtained, 0)) goto END; } fTestPass=TRUE; END: // Release IRowsetChange pointer SAFE_RELEASE(pIRowsetChange); // Release the row handle if(prghRows) { CHECK(m_pIRowset->ReleaseRows(cRowsObtained,prghRows,NULL,NULL,NULL),S_OK); PROVIDER_FREE(prghRows); } if( TEST_SKIPPED != fTestPass ) PopulateTable(); ReleaseRowsetAndAccessor(); return fTestPass; } //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL DeleteRows::Terminate() { return(TCIRowsetScroll::Terminate()); } // {{ TCW_TC_PROTOTYPE(DeleteRows_cmd) //*----------------------------------------------------------------------- //| Test Case: DeleteRows_cmd - In context of commands //| Created: 09/01/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL DeleteRows_cmd::Init() { if (!SetRowsetType(USECOMMAND)) return TEST_SKIPPED; if (!AlteringRowsIsOK()) { odtLog<GetNextRows(NULL,2,1,&cRowsObtained,&pHRow),S_OK)) goto END; COMPARE(cRowsObtained, 1); // QI for IRowsetChange pointer if(FAILED(m_pIRowsetScroll->QueryInterface(IID_IRowsetChange, (void **)&pIRowsetChange))) goto END; // Delete the 3rd row if(!CHECK(pIRowsetChange->DeleteRows(NULL,1,pHRow,NULL),S_OK)) goto END; // Release the row handle CHECK(m_pIRowset->ReleaseRows(cRowsObtained,pHRow,NULL,NULL,NULL),S_OK); PROVIDER_FREE(pHRow); pHRow=NULL; // *pBookmark points to a deleted row. if ( IsPropertyActive(DBPROP_BOOKMARKSKIPPED) ) { if(!CHECK(m_pIRowsetScroll->GetApproximatePosition(NULL,cbBookmark,pBookmark, &pulPosition,&pcRows), S_OK)) goto END; if( !COMPARE(VerifyApproximatePosition(pulPosition, pcRows, 3), TRUE) ) goto END; } else { if(!CHECK(m_pIRowsetScroll->GetApproximatePosition(NULL,cbBookmark,pBookmark, &pulPosition,&pcRows), DB_E_BADBOOKMARK)) goto END; } fTestPass=TRUE; END: // Release IRowsetChange pointer SAFE_RELEASE(pIRowsetChange); // Release the row handle if(pHRow) { CHECK(m_pIRowset->ReleaseRows(cRowsObtained,pHRow,NULL,NULL,NULL),S_OK); PROVIDER_FREE(pHRow); } // Release the bookmark PROVIDER_FREE(pBookmark); if( TEST_SKIPPED != fTestPass ) PopulateTable(); ReleaseRowsetAndAccessor(); return fTestPass; } //*----------------------------------------------------------------------- // @mfunc Delete the 3rd row. *pBookmark points to the second row. S_OK is returned. // // @rdesc TEST_PASS or TEST_FAIL // int RemoveDeleted::Variation_2() { DBPROPID rgguidProperty[3]; HROW *pHRow=NULL; DBCOUNTITEM cRowsObtained=0; IRowsetChange *pIRowsetChange=NULL; ULONG_PTR cbBookmark; BYTE *pBookmark=NULL; DBCOUNTITEM pulPosition=0; DBCOUNTITEM pcRows=0; BOOL fTestPass=FALSE; rgguidProperty[0]=DBPROP_IRowsetChange; rgguidProperty[1]=DBPROP_REMOVEDELETED; rgguidProperty[2]=DBPROP_UPDATABILITY; // Open rowset and accessor, Request IRowsetChange and IRowsetScroll TESTC_PROVIDER(GetRowsetAndAccessor(g_pCTable, SELECT_ORDERBYNUMERIC, IID_IRowsetScroll, 3,rgguidProperty)); // Get the bookmark for the 2nd row if(!GetBookmark(2, &cbBookmark, &pBookmark)) goto END; // Get the row handle for the 3rd row if(!CHECK(m_pIRowset->GetNextRows(NULL,2,1,&cRowsObtained,&pHRow),S_OK)) goto END; COMPARE(cRowsObtained, 1); // QI for IRowsetChange pointer if(FAILED(m_pIRowsetScroll->QueryInterface(IID_IRowsetChange, (void **)&pIRowsetChange))) goto END; // Delete the 3rd row if(!CHECK(pIRowsetChange->DeleteRows(NULL,1,pHRow,NULL),S_OK)) goto END; // Release the row handle CHECK(m_pIRowset->ReleaseRows(cRowsObtained,pHRow,NULL,NULL,NULL),S_OK); PROVIDER_FREE(pHRow); pHRow=NULL; // Should get second row. if(!CHECK(m_pIRowsetScroll->GetApproximatePosition(NULL,cbBookmark,pBookmark, &pulPosition,&pcRows), S_OK)) goto END; if( !COMPARE(VerifyApproximatePosition(pulPosition, pcRows, 2), TRUE) ) goto END; fTestPass=TRUE; END: // Release IRowsetChange pointer SAFE_RELEASE(pIRowsetChange); // Release the row handle if(pHRow) { CHECK(m_pIRowset->ReleaseRows(cRowsObtained,pHRow,NULL,NULL,NULL),S_OK); PROVIDER_FREE(pHRow); } // Release the bookmark PROVIDER_FREE(pBookmark); if( TEST_SKIPPED != fTestPass ) PopulateTable(); ReleaseRowsetAndAccessor(); return fTestPass; } //*----------------------------------------------------------------------- // @mfunc Ratio points to deleted row. DB_E_DELETEDROW and no row handles returned. // // @rdesc TEST_PASS or TEST_FAIL // int RemoveDeleted::Variation_3() { DBPROPID rgguidProperty[3]; HROW *prghRows=NULL; DBCOUNTITEM cRowsObtained=0; IRowsetChange *pIRowsetChange=NULL; BOOL fTestPass=FALSE; rgguidProperty[0]=DBPROP_IRowsetChange; rgguidProperty[1]=DBPROP_REMOVEDELETED; rgguidProperty[2]=DBPROP_UPDATABILITY; // Open rowset and accessor, request IRowsetChange and IRowsetScroll TESTC_PROVIDER(GetRowsetAndAccessor(g_pCTable, SELECT_ORDERBYNUMERIC, IID_IRowsetScroll, 3,rgguidProperty)); // Get the row handle for the 1st row if(!CHECK(m_pIRowset->GetNextRows(NULL,0,1,&cRowsObtained,&prghRows),S_OK)) goto END; COMPARE(cRowsObtained, 1); // QI for IRowsetChange pointer if(FAILED(m_pIRowsetScroll->QueryInterface(IID_IRowsetChange, (void **)&pIRowsetChange))) goto END; // Delete the 1st row if(!CHECK(pIRowsetChange->DeleteRows(NULL,1,prghRows,NULL),S_OK)) goto END; m_ulRowCount--; // Release the row handle CHECK(m_pIRowset->ReleaseRows(cRowsObtained,prghRows,NULL,NULL,NULL),S_OK); PROVIDER_FREE(prghRows); prghRows=NULL; // ulNumerator=0, ulDenominator=20, cRows=1. The second row should be retrieved if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,0,m_ulRowCount, 1,&cRowsObtained,&prghRows), S_OK)) goto END; // No row handles should be retrieved if(!COMPARE(cRowsObtained, 1)) goto END; if( !COMPARE(VerifyRowPosition(*prghRows, 2, g_pCTable, EXACT), TRUE)) goto END; fTestPass = TRUE; END: // Release IRowsetChange pointer SAFE_RELEASE(pIRowsetChange); // Release the row handle if(prghRows) { CHECK(m_pIRowset->ReleaseRows(cRowsObtained,prghRows,NULL,NULL,NULL),S_OK); PROVIDER_FREE(prghRows); } if( TEST_SKIPPED != fTestPass ) PopulateTable(); ReleaseRowsetAndAccessor(); return fTestPass; } //*----------------------------------------------------------------------- // @mfunc Delete 18th row. ulNumerator=9, ulDenominator=10, and cRows=3. DB_S_ENDOFROWSET is returned. // // @rdesc TEST_PASS or TEST_FAIL // int RemoveDeleted::Variation_4() { DBPROPID rgguidProperty[3]; HROW *prghRows=NULL; DBCOUNTITEM cRowsObtained=0; BOOL fTestPass=FALSE; HRESULT hr; IRowsetChange *pIRowsetChange=NULL; rgguidProperty[0]=DBPROP_IRowsetChange; rgguidProperty[1]=DBPROP_REMOVEDELETED; rgguidProperty[2]=DBPROP_UPDATABILITY; // Open rowset and accessor, request IRowsetChange and IRowsetScroll TESTC_PROVIDER(GetRowsetAndAccessor(g_pCTable, SELECT_ORDERBYNUMERIC, IID_IRowsetScroll, 3,rgguidProperty)); // Get the row handle for the 9/10 row if(!CHECK(m_pIRowset->GetNextRows(NULL,GetRatio(m_ulRowCount, 9, 10)-1,1,&cRowsObtained,&prghRows),S_OK)) goto END; if(!COMPARE(cRowsObtained, 1)) goto END; // QI for IRowsetChange pointer if(FAILED(m_pIRowsetScroll->QueryInterface(IID_IRowsetChange, (void **)&pIRowsetChange))) goto END; // Delete the row if(!CHECK(pIRowsetChange->DeleteRows(NULL,1,prghRows,NULL),S_OK)) goto END; SAFE_RELEASE(pIRowsetChange); // Release the row handle CHECK(m_pIRowset->ReleaseRows(cRowsObtained,prghRows,NULL,NULL,NULL),S_OK); PROVIDER_FREE(prghRows); prghRows=NULL; // ulNumerator=9, ulDenominator=10, cRows=3. hr = m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,9,10, ((m_ulRowCount)/10)+1,&cRowsObtained,&prghRows); if (!COMPARE(SUCCEEDED(hr), TRUE)) goto END; if ( hr == DB_S_ENDOFROWSET ) { if (!COMPARE(cRowsObtained<(m_ulRowCount/10)+1, TRUE)) goto END; } else { odtLog << L"Warning, ideally. DB_S_ENDOFROWSET\n"; if(!COMPARE(cRowsObtained, (m_ulRowCount/10)+1)) goto END; } // The first row handle should be 19th row if( !COMPARE(VerifyRowPosition(*prghRows, GetRatio(m_ulRowCount, 9, 10)+1, g_pCTable, INEXACT), TRUE)) goto END; fTestPass=TRUE; END: // Release the row handles if(prghRows) { CHECK(m_pIRowset->ReleaseRows(cRowsObtained,prghRows, NULL, NULL, NULL), S_OK); PROVIDER_FREE(prghRows); } if( TEST_SKIPPED != fTestPass ) PopulateTable(); ReleaseRowsetAndAccessor(); return fTestPass; } //*----------------------------------------------------------------------- // @mfunc Delete 19th row. ulNumerator=19, ulDenominator=20, and cRows=1. S_OK and 20th row handle returned. // // @rdesc TEST_PASS or TEST_FAIL // int RemoveDeleted::Variation_5() { DBPROPID rgguidProperty[3]; HROW *prghRows=NULL; DBCOUNTITEM cRowsObtained=0; BOOL fTestPass=FALSE; HRESULT hr; IRowsetChange *pIRowsetChange=NULL; rgguidProperty[0]=DBPROP_IRowsetChange; rgguidProperty[1]=DBPROP_REMOVEDELETED; rgguidProperty[2]=DBPROP_UPDATABILITY; // Open rowset and accessor, request IRowsetChange and IRowsetScroll TESTC_PROVIDER(GetRowsetAndAccessor(g_pCTable, SELECT_ORDERBYNUMERIC, IID_IRowsetScroll, 3,rgguidProperty)); // Get the row handle for the next to last row if(!CHECK(m_pIRowset->GetNextRows(NULL,(m_ulRowCount-2),1,&cRowsObtained,&prghRows),S_OK)) goto END; if(!COMPARE(cRowsObtained, 1)) goto END; // QI for IRowsetChange pointer if(FAILED(m_pIRowsetScroll->QueryInterface(IID_IRowsetChange, (void **)&pIRowsetChange))) goto END; // Delete the row if(!CHECK(pIRowsetChange->DeleteRows(NULL,1,prghRows,NULL),S_OK)) goto END; SAFE_RELEASE(pIRowsetChange); // Release the row handle CHECK(m_pIRowset->ReleaseRows(cRowsObtained,prghRows,NULL,NULL,NULL),S_OK); PROVIDER_FREE(prghRows); prghRows=NULL; // Use (m_ulRowCount-2)/(m_ulRowCount-1) as the ratio hr = m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,m_ulRowCount-2,m_ulRowCount-1, 2,&cRowsObtained,&prghRows); if (!COMPARE(SUCCEEDED(hr), TRUE)) goto END; if ( hr == DB_S_ENDOFROWSET ) { if (!COMPARE(cRowsObtained, 1)) goto END; } else { odtLog << L"Warning, ideally. DB_S_ENDOFROWSET\n"; if(!COMPARE(cRowsObtained, 2)) goto END; } if( !COMPARE(VerifyRowPosition(prghRows[0], m_ulRowCount, g_pCTable, INEXACT), TRUE) ) goto END; fTestPass=TRUE; END: // Release the row handles if(prghRows) { CHECK(m_pIRowset->ReleaseRows(cRowsObtained,prghRows, NULL, NULL, NULL), S_OK); PROVIDER_FREE(prghRows); } if( TEST_SKIPPED != fTestPass ) PopulateTable(); ReleaseRowsetAndAccessor(); return fTestPass; } //*----------------------------------------------------------------------- // @mfunc Delete half the row. Request 3/4. Verify 3/4 row is returned // // @rdesc TEST_PASS or TEST_FAIL // int RemoveDeleted::Variation_6() { DBPROPID rgguidProperty[3]; HROW *prghRows=NULL; DBCOUNTITEM cRowsObtained=0; BOOL fTestPass=FALSE; HRESULT hr; IRowsetChange *pIRowsetChange=NULL; rgguidProperty[0]=DBPROP_IRowsetChange; rgguidProperty[1]=DBPROP_REMOVEDELETED; rgguidProperty[2]=DBPROP_UPDATABILITY; // Open rowset and accessor, request IRowsetChange and IRowsetScroll TESTC_PROVIDER(GetRowsetAndAccessor(g_pCTable, SELECT_ORDERBYNUMERIC, IID_IRowsetScroll, 3,rgguidProperty)); // Get the row handle for the last half of the rows if(!CHECK(m_pIRowset->GetNextRows(NULL,(m_ulRowCount/2)-1,m_ulRowCount,&cRowsObtained,&prghRows),DB_S_ENDOFROWSET)) goto END; if(!COMPARE(cRowsObtained >=m_ulRowCount/2, TRUE)) goto END; // QI for IRowsetChange pointer if(FAILED(m_pIRowsetScroll->QueryInterface(IID_IRowsetChange, (void **)&pIRowsetChange))) goto END; // Delete the row if(!CHECK(pIRowsetChange->DeleteRows(NULL,cRowsObtained,prghRows,NULL),S_OK)) goto END; SAFE_RELEASE(pIRowsetChange); // Release the row handle CHECK(m_pIRowset->ReleaseRows(cRowsObtained,prghRows,NULL,NULL,NULL),S_OK); PROVIDER_FREE(prghRows); prghRows=NULL; // Use 3/4 ratio hr = m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,3,4, 2,&cRowsObtained,&prghRows); if (!COMPARE(SUCCEEDED(hr), TRUE)) goto END; if ( hr == DB_S_ENDOFROWSET ) { odtLog << L"Warning, ideally, S_OK should be returned\n"; if (!COMPARE(cRowsObtained <= 1, TRUE)) goto END; } else { if(!COMPARE(cRowsObtained, 2)) goto END; if( !COMPARE(VerifyRowPosition(prghRows[0], GetRatio(m_ulRowCount/2, 3, 4)+1 , g_pCTable, INEXACT), TRUE) ) goto END; if( !COMPARE(VerifyRowPosition(prghRows[1], GetRatio(m_ulRowCount/2, 3, 4)+2, g_pCTable, INEXACT), TRUE) ) goto END; } fTestPass=TRUE; END: // Release the row handles if(prghRows) { CHECK(m_pIRowset->ReleaseRows(cRowsObtained,prghRows, NULL, NULL, NULL), S_OK); PROVIDER_FREE(prghRows); } if( TEST_SKIPPED != fTestPass ) PopulateTable(); ReleaseRowsetAndAccessor(); return fTestPass; } //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL RemoveDeleted::Terminate() { return(TCIRowsetScroll::Terminate()); } // {{ TCW_TC_PROTOTYPE(RemoveDeleted_Cmd) //*----------------------------------------------------------------------- //| Test Case: RemoveDeleted_Cmd - In context of Commands //| Created: 09/01/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL RemoveDeleted_Cmd::Init() { if (!SetRowsetType(USECOMMAND)) return TEST_SKIPPED; if ( !AlteringRowsIsOK() ) { odtLog<GetApproximatePosition(NULL,cbBookmark,pBookmark, &pulPosition,&pcRows),S_OK)) goto END; if(!COMPARE(VerifyApproximatePosition(pulPosition, pcRows, 1), TRUE)) goto END; fTestPass = TEST_PASS; END: // Release the bookmark PROVIDER_FREE(pBookmark); if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //*----------------------------------------------------------------------- // @mfunc ulNumerator=1, ulDenominator=1, cRows=-1. S_OK returned. // // @rdesc TEST_PASS or TEST_FAIL // int Rowset_SingleRow::Variation_2() { DBCOUNTITEM cRowsObtained=0; DBCOUNTITEM cRowsObtained2=0; HROW *prghRows=NULL; HROW *prghRows2=NULL; BOOL fTestPass=FALSE; HRESULT hr=S_OK; if(g_rgDBPrpt[IDX_CanFetchBackwards].fDefault==VARIANT_FALSE) hr=DB_E_CANTFETCHBACKWARDS; // ulNumerator=1, ulDenominator=1, cRows=1. if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,1,1, -1,&cRowsObtained,&prghRows),hr)) goto END; if(hr==S_OK) { if(!COMPARE(cRowsObtained, 1)) goto END; if(!VerifyRowPosition(prghRows[0], 1, g_p1RowTable, EXACT)) goto END; // Reset the cursor if(!CHECK(m_pIRowset->RestartPosition(NULL),S_OK)) goto END; // Fetch the row and verify reference count if(!CHECK(m_pIRowset->GetNextRows(NULL,0,1,&cRowsObtained2,&prghRows2),S_OK)) goto END; // Release the row handle and check ref count if(!CHECK(m_pIRowset->ReleaseRows(1,prghRows,NULL,NULL,NULL),S_OK)) goto END; } else { if(!COMPARE(cRowsObtained, 0)) goto END; } fTestPass=TRUE; END: // Release the row handle PROVIDER_FREE(prghRows); if(prghRows2) { CHECK(m_pIRowset->ReleaseRows(cRowsObtained2, prghRows2, NULL, NULL, NULL),S_OK); PROVIDER_FREE(prghRows2); } if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //*----------------------------------------------------------------------- // @mfunc ulNumerator=0, ulDenominator=1, cRows=1. S_OK returned. // // @rdesc TEST_PASS or TEST_FAIL // int Rowset_SingleRow::Variation_3() { DBCOUNTITEM cRowsObtained=0; DBCOUNTITEM cRowsObtained2=0; HROW *prghRows=NULL; HROW *prghRows2=NULL; BOOL fTestPass=FALSE; HRESULT hr=S_OK; if(g_rgDBPrpt[IDX_CanFetchBackwards].fDefault==VARIANT_FALSE) hr=DB_E_CANTFETCHBACKWARDS; // ulNumerator=1, ulDenominator=1, cRows=1. if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,0,1, 1,&cRowsObtained,&prghRows),hr)) goto END; if(hr==S_OK) { if(!COMPARE(cRowsObtained, 1)) goto END; if(!VerifyRowPosition(prghRows[0], 1, g_p1RowTable, EXACT)) goto END; // Reset the cursor if(!CHECK(m_pIRowset->RestartPosition(NULL),S_OK)) goto END; // Fetch the row and verify reference count if(!CHECK(m_pIRowset->GetNextRows(NULL,0,1,&cRowsObtained2,&prghRows2),S_OK)) goto END; // Release the row handle and check ref count if(!CHECK(m_pIRowset->ReleaseRows(1,prghRows,NULL,NULL,NULL),S_OK)) goto END; } else { if(!COMPARE(cRowsObtained, 0)) goto END; } fTestPass=TRUE; END: // Release the row handle PROVIDER_FREE(prghRows); if(prghRows2) { CHECK(m_pIRowset->ReleaseRows(cRowsObtained2, prghRows2, NULL, NULL, NULL),S_OK); PROVIDER_FREE(prghRows2); } if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //*----------------------------------------------------------------------- // @mfunc *pBookmark=DBBMK_LAST. S_OK is returned. // // @rdesc TEST_PASS or TEST_FAIL // int Rowset_SingleRow::Variation_4() { DBCOUNTITEM pulPosition=0; DBCOUNTITEM pcRows=0; DBBOOKMARK dbBookmark = DBBMK_LAST; BYTE *pBookmark=(BYTE *)&dbBookmark; BOOL fTestPass=FALSE; if(!CHECK(m_pIRowsetScroll->GetApproximatePosition(NULL,1,pBookmark, &pulPosition,&pcRows),S_OK)) goto END; if(!COMPARE(VerifyApproximatePosition(pulPosition, pcRows, 1), TRUE)) goto END; fTestPass = TEST_PASS; END: if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //*----------------------------------------------------------------------- // @mfunc *pBookmark=DBBMK_FIRST S_OK is returned. // // @rdesc TEST_PASS or TEST_FAIL // int Rowset_SingleRow::Variation_5() { DBCOUNTITEM pulPosition=0; DBCOUNTITEM pcRows=0; DBBOOKMARK dbBookmark = DBBMK_FIRST; BYTE *pBookmark=(BYTE *)&dbBookmark; BOOL fTestPass=FALSE; if(!CHECK(m_pIRowsetScroll->GetApproximatePosition(NULL,1,pBookmark, &pulPosition,&pcRows),S_OK)) goto END; if(!COMPARE(VerifyApproximatePosition(pulPosition, pcRows, 1), TRUE)) goto END; fTestPass = TEST_PASS; END: if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //*----------------------------------------------------------------------- // @mfunc ulNumerator=1, ulDenominator=3, cRows=1. S_OK returned. // // @rdesc TEST_PASS or TEST_FAIL // int Rowset_SingleRow::Variation_6() { DBCOUNTITEM cRowsObtained=0; HROW *prghRows=NULL; BOOL fTestPass=FALSE; HRESULT hr=S_OK; if(g_rgDBPrpt[IDX_CanFetchBackwards].fDefault==VARIANT_FALSE) hr=DB_E_CANTFETCHBACKWARDS; // ulNumerator=1, ulDenominator=1, cRows=1. if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,1,3, 1,&cRowsObtained,&prghRows),hr)) goto END; if(hr==S_OK) { if(!COMPARE(cRowsObtained, 1)) goto END; if(!VerifyRowPosition(prghRows[0], 1, g_p1RowTable, EXACT)) goto END; } else { if(!COMPARE(cRowsObtained, 0)) goto END; } fTestPass=TRUE; END: // Release the row handle PROVIDER_FREE(prghRows); return fTestPass; } //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Rowset_SingleRow::Terminate() { ReleaseRowsetAndAccessor(); return(TCIRowsetScroll::Terminate()); } // {{ TCW_TC_PROTOTYPE(Rowset_SingleRow_Cmd) //*----------------------------------------------------------------------- //| Test Case: Rowset_SingleRow_Cmd - In context of commands //| Created: 09/02/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Rowset_SingleRow_Cmd::Init() { if (!SetRowsetType(USECOMMAND)) return TEST_SKIPPED; if (!g_p1RowTable) { odtLog<GetApproximatePosition(NULL,1,pBookmark, &pulPosition,&pcRows),S_OK)) return TEST_FAIL; if((pcRows != 0) || (pulPosition != 0)) return TEST_FAIL; return TEST_PASS; } //*----------------------------------------------------------------------- // @mfunc ulNumerator=1, ulDenominator=1, cRows=1. DB_S_ENDOFROWSET and no row handle returned. // // @rdesc TEST_PASS or TEST_FAIL // int Rowset_Empty::Variation_2() { DBCOUNTITEM cRowsObtained=0; HROW *prghRows=NULL; BOOL fTestPass=FALSE; // ulNumerator=1, ulDenominator=1, cRows=1. if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,1,1, 1,&cRowsObtained,&prghRows),DB_S_ENDOFROWSET)) goto END; if(!COMPARE(prghRows,NULL)) goto END; if(COMPARE(cRowsObtained, 0)) fTestPass=TRUE; END: // Release the row handle if(prghRows) { CHECK(m_pIRowset->ReleaseRows(cRowsObtained, prghRows, NULL, NULL, NULL),S_OK); PROVIDER_FREE(prghRows); } if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //*----------------------------------------------------------------------- // @mfunc ulNumerator=1, ulDenominator=1, cRows=0. S_OK and no row handle returned. // // @rdesc TEST_PASS or TEST_FAIL // int Rowset_Empty::Variation_3() { DBCOUNTITEM cRowsObtained=0; HROW *prghRows=NULL; BOOL fTestPass=FALSE; // ulNumerator=1, ulDenominator=1, cRows=0. if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,1,1, 0,&cRowsObtained,&prghRows),S_OK)) goto END; if(!COMPARE(prghRows, NULL)) goto END; if(COMPARE(cRowsObtained, 0)) fTestPass=TRUE; END: // Release the row handle if(prghRows) { CHECK(m_pIRowset->ReleaseRows(cRowsObtained, prghRows, NULL, NULL, NULL),S_OK); PROVIDER_FREE(prghRows); } if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //-------------------------------------------------------------------- // @mfunc ulNumerator=0, ulDenominator=1, cRows=1. DB_S_ENDOFROWSET // // @rdesc TEST_PASS or TEST_FAIL // int Rowset_Empty::Variation_4() { DBCOUNTITEM cRowsObtained=0; HROW *prghRows=NULL; BOOL fTestPass=FALSE; // ulNumerator=1, ulDenominator=1, cRows=0. if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,0,1, 1,&cRowsObtained,&prghRows),DB_S_ENDOFROWSET)) goto END; if(!COMPARE(prghRows, NULL)) goto END; if(COMPARE(cRowsObtained, 0)) fTestPass=TRUE; END: // Release the row handle if(prghRows) { CHECK(m_pIRowset->ReleaseRows(cRowsObtained, prghRows, NULL, NULL, NULL),S_OK); PROVIDER_FREE(prghRows); } if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //-------------------------------------------------------------------- // @mfunc *pBookmark=DBBMK_LAST. S_OK is returned. // // @rdesc TEST_PASS or TEST_FAIL // int Rowset_Empty::Variation_5() { DBBOOKMARK DBBookmark=DBBMK_LAST; BYTE *pBookmark=(BYTE *)&DBBookmark; DBCOUNTITEM pulPosition=0; DBCOUNTITEM pcRows=0; if(!CHECK(m_pIRowsetScroll->GetApproximatePosition(NULL,1,pBookmark, &pulPosition,&pcRows),S_OK)) return TEST_FAIL; if((pcRows != 0) || (pulPosition != 0)) return TEST_FAIL; return TEST_PASS; } //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Rowset_Empty::Terminate() { ReleaseRowsetAndAccessor(); return(TCIRowsetScroll::Terminate()); } // {{ TCW_TC_PROTOTYPE(Rowset_Empty_Cmd) //*----------------------------------------------------------------------- //| Test Case: Rowset_Empty_Cmd - In context of commands //| Created: 09/02/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Rowset_Empty_Cmd::Init() { if (!SetRowsetType(USECOMMAND)) return TEST_SKIPPED; if (!g_pEmptyTable) { odtLog<GetApproximatePosition(NULL,m_cbBookmark,NULL, &m_pulPosition,&m_pcRows),E_INVALIDARG)) return TEST_PASS; return TEST_FAIL; } //*----------------------------------------------------------------------- // @mfunc pBookmark==NULL. DB_E_BADBOOKMARK is returned. // // @rdesc TEST_PASS or TEST_FAIL // int Boundary_GetApproximatePosition::Variation_2() { if(CHECK(m_pIRowsetScroll->GetApproximatePosition(NULL,1,NULL, &m_pulPosition,&m_pcRows),E_INVALIDARG)) return TEST_PASS; return TEST_FAIL; } //*----------------------------------------------------------------------- // @mfunc pBookmark points to a invalid bookmark. DB_E_BADBOOKMARK is returned. // // @rdesc TEST_PASS or TEST_FAIL // int Boundary_GetApproximatePosition::Variation_3() { DBBOOKMARK dbBookmark = DBBMK_INVALID; BYTE *pBookmark = (BYTE *)&dbBookmark; if(CHECK(m_pIRowsetScroll->GetApproximatePosition(NULL,1,pBookmark, &m_pulPosition,&m_pcRows),DB_E_BADBOOKMARK)) return TEST_PASS; return TEST_FAIL; } //*----------------------------------------------------------------------- // @mfunc pcRows==Null pointer. S_OK and no count of rows returned. // // @rdesc TEST_PASS or TEST_FAIL // int Boundary_GetApproximatePosition::Variation_4() { if(!CHECK(m_pIRowsetScroll->GetApproximatePosition(NULL,m_cbBookmark,m_pBookmark, &m_pulPosition,NULL),S_OK)) return TEST_FAIL; if(!COMPARE(VerifyApproximatePosition(m_pulPosition, m_ulRowCount, 1), TRUE)) return TEST_FAIL; return TEST_PASS; } //*----------------------------------------------------------------------- // @mfunc pulPosition is NULL and pcRows is NULL, S_OK // // @rdesc TEST_PASS or TEST_FAIL // int Boundary_GetApproximatePosition::Variation_5() { if(!CHECK(m_pIRowsetScroll->GetApproximatePosition(NULL,m_cbBookmark,m_pBookmark, NULL,NULL),S_OK)) return TEST_FAIL; return TEST_PASS; } //*----------------------------------------------------------------------- // @mfunc cbBookmark = 0, pBookmark = NULL // // @rdesc TEST_PASS or TEST_FAIL // int Boundary_GetApproximatePosition::Variation_6() { DBCOUNTITEM ulPosition = MAXDBCOUNTITEM; DBCOUNTITEM cRows = 0; if(!CHECK(m_pIRowsetScroll->GetApproximatePosition(NULL,0,NULL, &ulPosition,&cRows),S_OK)) return TEST_FAIL; COMPARE(ulPosition, MAXDBCOUNTITEM); if(!COMPARE(VerifyApproximatePosition(0, cRows, 0), TRUE)) return TEST_FAIL; return TEST_PASS; } //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Boundary_GetApproximatePosition::Terminate() { ReleaseRowsetAndAccessor(); return(TCIRowsetScroll::Terminate()); } // {{ TCW_TC_PROTOTYPE(Boundary_GetApproximatePosition_Cmd) //*----------------------------------------------------------------------- //| Test Case: Boundary_GetApproximatePosition_Cmd - In context of commands //| Created: 09/02/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Boundary_GetApproximatePosition_Cmd::Init() { if (!SetRowsetType(USECOMMAND)) return TEST_SKIPPED; // {{ TCW_INIT_BASECLASS_CHECK return (Boundary_GetApproximatePosition::Init()); // }} } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Boundary_GetApproximatePosition_Cmd::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(Boundary_GetApproximatePosition::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(Boundary_GetApproximatePosition_OpenRowset) //*----------------------------------------------------------------------- //| Test Case: Boundary_GetApproximatePosition_OpenRowset - In context of IOpenRowset //| Created: 09/02/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Boundary_GetApproximatePosition_OpenRowset::Init() { if (!SetRowsetType(USEOPENROWSET)) return TEST_SKIPPED; // {{ TCW_INIT_BASECLASS_CHECK return (Boundary_GetApproximatePosition::Init()); // }} } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Boundary_GetApproximatePosition_OpenRowset::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(Boundary_GetApproximatePosition::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(Boundary_GetApproximatePosition_SchemaR) //*----------------------------------------------------------------------- //| Test Case: Boundary_GetApproximatePosition_SchemaR - In context of a Schema Rowset //| Created: 09/02/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Boundary_GetApproximatePosition_SchemaR::Init() { if (!SetRowsetType(USESCHEMAR)) return TEST_SKIPPED; // {{ TCW_INIT_BASECLASS_CHECK return (Boundary_GetApproximatePosition::Init()); // }} } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Boundary_GetApproximatePosition_SchemaR::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(Boundary_GetApproximatePosition::Terminate()); } // }} // }} // }} //*----------------------------------------------------------------------- //| Test Case: Boundary_GetRowsAtRatio - Boundary conditions for GetRowsAtRatio //| Created: 09/02/97 //*----------------------------------------------------------------------- ///-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Boundary_GetRowsAtRatio::Init() { // Create a rowset and accessor if(!GetRowsetAndAccessor(g_pCTable, SELECT_REVCOLLIST, IID_IRowsetScroll, 0,NULL)) return FALSE; m_prghRows=&m_hRows; return TRUE; } //*----------------------------------------------------------------------- // @mfunc pcRowsObtained=Null pointer. E_INVALIDARG is returned. // // @rdesc TEST_PASS or TEST_FAIL // int Boundary_GetRowsAtRatio::Variation_1() { if(CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,0,1, 1,NULL,&m_prghRows),E_INVALIDARG)) return TEST_PASS; return TEST_FAIL; } //*----------------------------------------------------------------------- // @mfunc prghRows=NULL pointer. E_INVALIDARG is returned. // // @rdesc TEST_PASS or TEST_FAIL // int Boundary_GetRowsAtRatio::Variation_2() { if(CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,0,1, 1,&m_cRowsObtained,NULL),E_INVALIDARG)) return TEST_PASS; return TEST_FAIL; } //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Boundary_GetRowsAtRatio::Terminate() { ReleaseRowsetAndAccessor(); return(TCIRowsetScroll::Terminate()); } // {{ TCW_TC_PROTOTYPE(Boundary_GetRowsAtRatio_Cmd) //*----------------------------------------------------------------------- //| Test Case: Boundary_GetRowsAtRatio_Cmd - In context of commands //| Created: 09/02/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Boundary_GetRowsAtRatio_Cmd::Init() { if (!SetRowsetType(USECOMMAND)) return TEST_SKIPPED; // {{ TCW_INIT_BASECLASS_CHECK return (Boundary_GetRowsAtRatio::Init()); // }} } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Boundary_GetRowsAtRatio_Cmd::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(Boundary_GetRowsAtRatio::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(Boundary_GetRowsAtRatio_OpenRowset) //*----------------------------------------------------------------------- //| Test Case: Boundary_GetRowsAtRatio_OpenRowset - In context of IOpenRowset //| Created: 09/02/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Boundary_GetRowsAtRatio_OpenRowset::Init() { if (!SetRowsetType(USEOPENROWSET)) return TEST_SKIPPED; // {{ TCW_INIT_BASECLASS_CHECK return (Boundary_GetRowsAtRatio::Init()); // }} } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Boundary_GetRowsAtRatio_OpenRowset::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(Boundary_GetRowsAtRatio::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(Boundary_GetRowsAtRatio_SchemaR) //*----------------------------------------------------------------------- //| Test Case: Boundary_GetRowsAtRatio_SchemaR - In context of a Schema Rowset //| Created: 09/02/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Boundary_GetRowsAtRatio_SchemaR::Init() { if (!SetRowsetType(USESCHEMAR)) return TEST_SKIPPED; // {{ TCW_INIT_BASECLASS_CHECK return (Boundary_GetRowsAtRatio::Init()); // }} } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Boundary_GetRowsAtRatio_SchemaR::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(Boundary_GetRowsAtRatio::Terminate()); } // }} // }} // }} //*----------------------------------------------------------------------- //| Test Case: Parameters - Valid and invalid parameters passed into methods //| Created: 09/02/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Parameters::Init() { IColumnsInfo *pIColumnsInfo=NULL; DBCOUNTITEM cColumns; DBCOLUMNINFO *prgInfo=NULL; WCHAR *pStringsBuffer=NULL; BOOL fInitPass=FALSE; if(!TCIRowsetScroll::Init()) return FALSE; // Create a rowset and accessor if(!GetRowsetAndAccessor(g_pCTable, SELECT_COLLISTFROMTBL, IID_IRowsetScroll)) return FALSE; // Make sure IColumnsInfo returns correct infomation on the 0th column, // which is the bookmark column if(!CHECK(m_pIRowsetScroll->QueryInterface(IID_IColumnsInfo, (void **)&pIColumnsInfo),S_OK)) return FALSE; if(!CHECK(pIColumnsInfo->GetColumnInfo(&cColumns, &prgInfo,&pStringsBuffer),S_OK)) goto END; // The first element in the array should be the bookmark column if(!COMPARE(prgInfo->iOrdinal, 0)) goto END; if(!COMPARE(((prgInfo->dwFlags) & DBCOLUMNFLAGS_ISBOOKMARK),(DBCOLUMNFLAGS_ISBOOKMARK))) goto END; fInitPass=TRUE; END: // Release the interface pointer SAFE_RELEASE(pIColumnsInfo); // Free mem PROVIDER_FREE(prgInfo); PROVIDER_FREE(pStringsBuffer); return fInitPass; } //*----------------------------------------------------------------------- // @mfunc GetApproximatePosition: cbBookmark=0, pBookmark=null pointer, S_OK is returned. // // @rdesc TEST_PASS or TEST_FAIL // int Parameters::Variation_1() { ULONG_PTR cbBookmark=0; BYTE *pBookmark=NULL; DBCOUNTITEM pulPosition=0; DBCOUNTITEM pcRows=0; if(!CHECK(m_pIRowsetScroll->GetApproximatePosition(NULL,cbBookmark,pBookmark, &pulPosition,&pcRows),S_OK)) return TEST_FAIL; if(!COMPARE(VerifyApproximatePosition(pulPosition, pcRows, 0), TRUE)) return TEST_FAIL; return TEST_PASS; } //*----------------------------------------------------------------------- // @mfunc GetApproximatePosition: cbBookmark=0, pulPosition=null pointer, S_OK is returned. // // @rdesc TEST_PASS or TEST_FAIL // int Parameters::Variation_2() { ULONG_PTR cbBookmark=0; DBBOOKMARK DBBookmark=DBBMK_FIRST; BYTE *pBookmark=(BYTE *)&DBBookmark; DBCOUNTITEM *pulPosition=NULL; DBCOUNTITEM pcRows=0; if(!CHECK(m_pIRowsetScroll->GetApproximatePosition(NULL,cbBookmark,pBookmark, pulPosition,&pcRows),S_OK)) return TEST_FAIL; if(!COMPARE(VerifyApproximatePosition(0, pcRows, 0), TRUE)) return TEST_FAIL; return TEST_PASS; } //*----------------------------------------------------------------------- // @mfunc GetRowsAtRatio: cRows=0, *prghRows not NULL on input. *prghRows not null on output. S_OK is returned. // // @rdesc TEST_PASS or TEST_FAIL // int Parameters::Variation_3() { DBCOUNTITEM cRowsObtained=0; HROW rghRows[5]; HROW *prghRows=rghRows; BOOL fTestPass=TRUE; // ulNumerator=1, ulDenominator=2, cRows=0. if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,1,2, 0,&cRowsObtained,&prghRows),S_OK)) goto END; // No rows should have been returned if(!COMPARE(cRowsObtained, 0)) goto END; // prghRows should not be NULL if(!COMPARE(prghRows, rghRows)) fTestPass=FALSE; END: if(prghRows) { CHECK(m_pIRowset->ReleaseRows(cRowsObtained,prghRows,NULL,NULL,NULL),S_OK); //PROVIDER_FREE(prghRows); } if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //*----------------------------------------------------------------------- // @mfunc GetRowsAtRatio: cRows=0, *prghRows=NULL on input, *prghRows null on output. S_OK is returned. // // @rdesc TEST_PASS or TEST_FAIL // int Parameters::Variation_4() { DBCOUNTITEM cRowsObtained=0; HROW *prghRows=NULL; BOOL fTestPass=FALSE; // ulNumerator=1, ulDenominator=3, cRows=0. if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,1,3, 0,&cRowsObtained,&prghRows),S_OK)) goto END; if(!COMPARE(prghRows, NULL)) goto END; if(COMPARE(cRowsObtained, 0)) fTestPass=TRUE; END: if(prghRows) { CHECK(m_pIRowset->ReleaseRows(cRowsObtained, prghRows, NULL, NULL, NULL),S_OK); PROVIDER_FREE(prghRows); } if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //*----------------------------------------------------------------------- // @mfunc GetRowsAtRatio: ulNumerator=0, ulDenominator=4, cRows=5. S_OK and first 5 rows returned. // // @rdesc TEST_PASS or TEST_FAIL // int Parameters::Variation_5() { HROW * prghRows=NULL; DBCOUNTITEM cRowsObtained=0; DBCOUNTITEM cRowCount; BOOL fTestPass=FALSE; // ulNumerator=0, ulDenominator=4, cRows=5. if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,0,4, 5,&cRowsObtained,&prghRows), S_OK)) goto END; // Five row handles should be retrieved. if(!COMPARE(cRowsObtained, 5)) goto END; // Verify the row handle are retrieved correctly for(cRowCount=0; cRowCount<5; cRowCount++) { if(!VerifyRowPosition(prghRows[cRowCount],cRowCount+1,g_pCTable,EXACT)) goto END; } fTestPass=TRUE; END: // Release the row handles if(prghRows) { CHECK(m_pIRowset->ReleaseRows(cRowsObtained,prghRows, NULL, NULL, NULL), S_OK); PROVIDER_FREE(prghRows); } if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //*----------------------------------------------------------------------- // @mfunc GetRowsAtRatio: ulNumerator=5, ulDenominator=0, cRows=5. DB_E_BADRATIO is returned. // // @rdesc TEST_PASS or TEST_FAIL // int Parameters::Variation_6() { DBCOUNTITEM cRowsObtained=0; HROW *prghRows=NULL; BOOL fTestPass=FALSE; // ulNumerator=5, ulDenominator=0, cRows=5. if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,5,0, 5,&cRowsObtained,&prghRows),DB_E_BADRATIO)) goto END; if(!COMPARE(prghRows, NULL)) goto END; if(COMPARE(cRowsObtained, 0)) fTestPass=TRUE; END: if(prghRows) { CHECK(m_pIRowset->ReleaseRows(cRowsObtained, prghRows, NULL, NULL, NULL),S_OK); PROVIDER_FREE(prghRows); } if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //*----------------------------------------------------------------------- // @mfunc GetRowsAtRatio: ulNumerator=0, ulDenominator=0, cRows=5. DB_E_BADRATIO is returned. // // @rdesc TEST_PASS or TEST_FAIL // int Parameters::Variation_7() { DBCOUNTITEM cRowsObtained=0; HROW *prghRows=NULL; BOOL fTestPass=FALSE; // ulNumerator=0, ulDenominator=0, cRows=5. if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,0,0, 5,&cRowsObtained,&prghRows),DB_E_BADRATIO)) goto END; if(!COMPARE(prghRows, NULL)) goto END; if(COMPARE(cRowsObtained, 0)) fTestPass=TRUE; END: if(prghRows) { CHECK(m_pIRowset->ReleaseRows(cRowsObtained, prghRows, NULL, NULL, NULL),S_OK); PROVIDER_FREE(prghRows); } if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //*----------------------------------------------------------------------- // @mfunc GetRowsAtRatio: ulNumerator=ULONG_MAX, ulDenominator=1, cRows=1. DB_E_BADRATIO is returned. // // @rdesc TEST_PASS or TEST_FAIL // int Parameters::Variation_8() { DBCOUNTITEM cRowsObtained=0; HROW *prghRows=NULL; BOOL fTestPass=FALSE; // ulNumerator=ULONG_MAX, ulDenominator=1, cRows=1. if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,MAXDBCOUNTITEM,1, 1,&cRowsObtained,&prghRows),DB_E_BADRATIO)) goto END; if(!COMPARE(prghRows, NULL)) goto END; if(COMPARE(cRowsObtained, 0)) fTestPass=TRUE; END: if(prghRows) { CHECK(m_pIRowset->ReleaseRows(cRowsObtained, prghRows, NULL, NULL, NULL),S_OK); PROVIDER_FREE(prghRows); } if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //*----------------------------------------------------------------------- // @mfunc GetRowsAtRatio: ulNumerator=ULONG_MAX, ulDenominator=ULONG_MAX, cRows=1. S_OK and last row returned. // // @rdesc TEST_PASS or TEST_FAIL // int Parameters::Variation_9() { DBCOUNTITEM cRowsObtained=0; HROW *prghRows=NULL; BOOL fTestPass=FALSE; HRESULT hr=S_OK; if(g_rgDBPrpt[IDX_CanFetchBackwards].fDefault==VARIANT_FALSE) hr=DB_E_CANTFETCHBACKWARDS; // ulNumerator=ULONG_MAX, ulDenominator=ULONG_MAX, cRows=-1. if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,MAXDBCOUNTITEM,MAXDBCOUNTITEM, -1,&cRowsObtained,&prghRows),hr)) goto END; if(hr==S_OK) { // The last row handle should be retrieved if(!COMPARE(cRowsObtained, 1)) goto END; // Verify the last row if(!VerifyRowPosition(prghRows[0],m_ulRowCount,g_pCTable,EXACT)) goto END; } else { // No row should be retrieved if(!COMPARE(cRowsObtained, 0)) goto END; } fTestPass=TRUE; END: if(prghRows) { CHECK(m_pIRowset->ReleaseRows(cRowsObtained, prghRows, NULL, NULL, NULL),S_OK); PROVIDER_FREE(prghRows); } if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //*----------------------------------------------------------------------- // @mfunc GetRowsAtRatio: ulNumerator=ULONG_MAX-1, ulDenominator=ULONG_MAX, cRows=1. S_OK and last row returned. // // @rdesc TEST_PASS or TEST_FAIL // int Parameters::Variation_10() { DBCOUNTITEM cRowsObtained=0; HROW *prghRows=NULL; BOOL fTestPass=FALSE; HRESULT hr=S_OK; if(g_rgDBPrpt[IDX_CanFetchBackwards].fDefault==VARIANT_FALSE) hr=DB_E_CANTFETCHBACKWARDS; // ulNumerator=ULONG_MAX-1, ulDenominator=ULONG_MAX, cRows=1 if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,MAXDBCOUNTITEM-1,MAXDBCOUNTITEM, 1,&cRowsObtained,&prghRows),hr)) goto END; if(hr==S_OK) { // The last row handle should be retrieved if(!COMPARE(cRowsObtained, 1)) goto END; // Verify the last row if( !COMPARE(VerifyRowPosition(prghRows[0],m_ulRowCount,g_pCTable,INEXACT), TRUE) ) goto END; } else { // No row should be retrieved if(!COMPARE(cRowsObtained, 0)) goto END; } fTestPass=TRUE; END: if(prghRows) { CHECK(m_pIRowset->ReleaseRows(cRowsObtained, prghRows, NULL, NULL, NULL),S_OK); PROVIDER_FREE(prghRows); } return fTestPass; } //*----------------------------------------------------------------------- // @mfunc GetRowsAtRatio: ulNumerator=1, ulDenominator=1 cRows=1. DB_S_ENDOFROWSET. // // @rdesc TEST_PASS or TEST_FAIL // int Parameters::Variation_11() { DBCOUNTITEM cRowsObtained=0; HROW *prghRows=NULL; BOOL fTestPass=FALSE; // ulNumerator=1, ulDenominator=1, cRows=1. if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,1,1, 1,&cRowsObtained,&prghRows),DB_S_ENDOFROWSET)) goto END; // The last row handle should be retrieved if(!COMPARE(cRowsObtained, 0)) goto END; if(!COMPARE(prghRows, NULL)) goto END; fTestPass=TRUE; END: if(prghRows) { CHECK(m_pIRowset->ReleaseRows(cRowsObtained, prghRows, NULL, NULL, NULL),S_OK); PROVIDER_FREE(prghRows); } return fTestPass; } //*----------------------------------------------------------------------- // @mfunc GetRowsAtRatio: ulNumerator=LONG_MAX/2, ulDenominator=LONG_MAX+1 cRows=1. middle row. // // @rdesc TEST_PASS or TEST_FAIL // int Parameters::Variation_12() { DBCOUNTITEM cRowsObtained=0; HROW *prghRows=NULL; BOOL fTestPass=FALSE; // ulNumerator=LONG_MAX/2, ulDenominator=LONG_MAX+1 cRows=1. middle row. if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,MAXDBROWCOUNT/2,DBCOUNTITEM(MAXDBROWCOUNT)+1, 1,&cRowsObtained,&prghRows),S_OK)) goto END; // expect one row if(!COMPARE(cRowsObtained, 1)) goto END; // Verify the middle row if( !COMPARE(VerifyRowPosition(prghRows[0],m_ulRowCount/2,g_pCTable,INEXACT), TRUE) ) goto END; fTestPass=TRUE; END: if(prghRows) { CHECK(m_pIRowset->ReleaseRows(cRowsObtained, prghRows, NULL, NULL, NULL),S_OK); PROVIDER_FREE(prghRows); } return fTestPass; } //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Parameters::Terminate() { ReleaseRowsetAndAccessor(); return(TCIRowsetScroll::Terminate()); } // {{ TCW_TC_PROTOTYPE(Parameters_Cmd) //*----------------------------------------------------------------------- //| Test Case: Parameters_Cmd - In context of commands //| Created: 09/02/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Parameters_Cmd::Init() { if (!SetRowsetType(USECOMMAND)) return TEST_SKIPPED; // {{ TCW_INIT_BASECLASS_CHECK return (Parameters::Init()); // }} } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Parameters_Cmd::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(Parameters::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(Parameters_OpenRowset) //*----------------------------------------------------------------------- //| Test Case: Parameters_OpenRowset - In context of IOpenRowset //| Created: 09/02/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Parameters_OpenRowset::Init() { if (!SetRowsetType(USEOPENROWSET)) return TEST_SKIPPED; // {{ TCW_INIT_BASECLASS_CHECK return(Parameters::Init()); // }} } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Parameters_OpenRowset::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(Parameters::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(Parameters_SchemaR) //*----------------------------------------------------------------------- //| Test Case: Parameters_SchemaR - In context of a Schema Rowset //| Created: 09/02/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Parameters_SchemaR::Init() { if (!SetRowsetType(USESCHEMAR)) return TEST_SKIPPED; // {{ TCW_INIT_BASECLASS_CHECK return (Parameters::Init()); // }} } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Parameters_SchemaR::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(Parameters::Terminate()); } // }} // }} // }} //*----------------------------------------------------------------------- //| Test Case: Sequence - Specific sequences of API calls where order is interesting. //| Created: 09/02/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Sequence::Init() { if(!TCIRowsetScroll::Init()) return FALSE; // Create a rowset and accessor if(!GetRowsetAndAccessor(g_pCTable, SELECT_REVCOLLIST, IID_IRowsetScroll)) return FALSE; return TRUE; } //*----------------------------------------------------------------------- // @mfunc Open rowset, fetch all of the rows, *pBookmark=DBBMK_FIRST. S_OK is returned. // // @rdesc TEST_PASS or TEST_FAIL // int Sequence::Variation_1() { DBBOOKMARK DBBookmark=DBBMK_FIRST; BYTE *pBookmark=(BYTE *)&DBBookmark; HROW *pHRow=NULL; DBCOUNTITEM cCount=0; DBCOUNTITEM pulPosition=0; DBCOUNTITEM pcRows=0; BOOL fTestPass=TEST_FAIL; // Fetch all the rows if(!CHECK(m_pIRowset->GetNextRows(NULL, // Chapter handle. 0, // Count of rows to skip before reading. m_ulRowCount, // The number of rows to fetch. &cCount, // Actual number of fetched rows. &pHRow), // Array of handles of retrieved rows. S_OK)) goto END; if(!COMPARE(ULONG(m_ulRowCount), cCount)) goto END; if(!CHECK(m_pIRowsetScroll->GetApproximatePosition(NULL,1,pBookmark, &pulPosition,&pcRows),S_OK)) goto END; if(!COMPARE(VerifyApproximatePosition(pulPosition, pcRows, 1), TRUE)) return TEST_FAIL; fTestPass = TEST_PASS; END: // Release the row handles if(pHRow) { CHECK(m_pIRowset->ReleaseRows(cCount, pHRow, NULL, NULL, NULL),S_OK); PROVIDER_FREE(pHRow); } return fTestPass; } //*----------------------------------------------------------------------- // @mfunc ulNumerator=4, ulDenominator=5, and cRows=(-3 // // @rdesc TEST_PASS or TEST_FAIL // int Sequence::Variation_2() { DBCOUNTITEM cRowsObtained=0; HROW *prghRows=NULL; BOOL fTestPass=FALSE; HRESULT hr=S_OK; if(g_rgDBPrpt[IDX_CanFetchBackwards].fDefault==VARIANT_FALSE) hr=DB_E_CANTFETCHBACKWARDS; // ulNumerator=4, ulDenominator=5, cRows=(-3). if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,4,5, -3,&cRowsObtained,&prghRows),hr)) goto END; if(hr==S_OK) { if(!COMPARE(cRowsObtained,3)) goto END; if(!VerifyRowPosition(prghRows[0],GetRatio(m_ulRowCount,4,5)+1, g_pCTable,INEXACT)) goto END; if(!VerifyRowPosition(prghRows[1],GetRatio(m_ulRowCount,4,5), g_pCTable,INEXACT)) goto END; if(!VerifyRowPosition(prghRows[2],GetRatio(m_ulRowCount,4,5)-1, g_pCTable,INEXACT)) goto END; } else { if(!COMPARE(prghRows, NULL)) goto END; if(!COMPARE(cRowsObtained, 0)) goto END; } fTestPass=TRUE; END: if(prghRows) { CHECK(m_pIRowset->ReleaseRows(cRowsObtained, prghRows, NULL, NULL, NULL),S_OK); PROVIDER_FREE(prghRows); } if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Sequence::Terminate() { ReleaseRowsetAndAccessor(); return(TCIRowsetScroll::Terminate()); } // {{ TCW_TC_PROTOTYPE(Sequence_Cmd) //*----------------------------------------------------------------------- //| Test Case: Sequence_Cmd - In context of commands //| Created: 09/02/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Sequence_Cmd::Init() { if (!SetRowsetType(USECOMMAND)) return TEST_SKIPPED; // {{ TCW_INIT_BASECLASS_CHECK return (Sequence::Init()); // }} } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Sequence_Cmd::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(Sequence::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(Sequence_OpenRowset) //*----------------------------------------------------------------------- //| Test Case: Sequence_OpenRowset - In context of IOpenRowset //| Created: 09/02/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Sequence_OpenRowset::Init() { if (!SetRowsetType(USEOPENROWSET)) return TEST_SKIPPED; // {{ TCW_INIT_BASECLASS_CHECK return (Sequence::Init()); // }} } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Sequence_OpenRowset::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(Sequence::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(Sequence_SchemaR) //*----------------------------------------------------------------------- //| Test Case: Sequence_SchemaR - In context of Schema Rowset //| Created: 09/02/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Sequence_SchemaR::Init() { BOOL fPass; if (!SetRowsetType(USESCHEMAR)) return TEST_SKIPPED; fPass = Sequence::Init(); if(TEST_PASS == fPass) { if ( m_ulRowCount < 5 ) return TEST_SKIPPED; else return TEST_PASS; } else return fPass; } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Sequence_SchemaR::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(Sequence::Terminate()); } // }} // }} // }} //*----------------------------------------------------------------------- //| Test Case: Consistency - Make sure multiple methods can hold the same rows at the same time. //| Created: 09/02/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Consistency::Init() { DBPROPID guidPrpt[1]; guidPrpt[0]=DBPROP_CANHOLDROWS; if(!TCIRowsetScroll::Init()) return FALSE; // Create a rowset and accessor, requesting DBPROP_CANHOLDROWS if(!GetRowsetAndAccessor(g_pCTable, SELECT_REVCOLLIST, IID_IRowsetScroll, NUMELEM(guidPrpt), guidPrpt)) return FALSE; return TRUE; } //*----------------------------------------------------------------------- // @mfunc Retrieve three row handles from GetRowsAt,GetRowsByBookmark, and GetRowsAtRatio. // // @rdesc TEST_PASS or TEST_FAIL // int Consistency::Variation_1() { DBBOOKMARK DBBookmark=DBBMK_FIRST; BYTE *pBookmark1=(BYTE *)&DBBookmark; BYTE *rgpBookmarks2[3]; ULONG_PTR rgcbBookmarks2[3]; DBCOUNTITEM cRowsObtained1=0; DBCOUNTITEM cRowsObtained2=0; DBCOUNTITEM cRowsObtained3=0; HROW rghRows1[3]={NULL,NULL,NULL}; HROW *prghRows1=rghRows1; HROW rghRows2[3]={NULL,NULL,NULL}; HROW *prghRows3=NULL; IRowsetLocate *pIRowsetLocate=NULL; BOOL fTestPass=FALSE; DBREFCOUNT cRefCount; // QI for IRowsetLocate pointer if(!CHECK(m_pIRowsetScroll->QueryInterface(IID_IRowsetLocate, (void **)&pIRowsetLocate),S_OK)) goto END; // Retrieve the 3rd, 4th, and 5th row handles by calling GetRowsAt if(!CHECK(pIRowsetLocate->GetRowsAt(NULL,NULL,1,pBookmark1,2,3, &cRowsObtained1,&prghRows1),S_OK)) goto END; COMPARE(cRowsObtained1, 3); // Get the bookmark for the first row if(!GetBookmark(1,rgcbBookmarks2,rgpBookmarks2)) goto END; // Get the bookmark for the 2nd row if(!GetBookmark(2,&rgcbBookmarks2[1],&rgpBookmarks2[1])) goto END; // Get the bookmark for the 3rd row if(!GetBookmark(3,&rgcbBookmarks2[2],&rgpBookmarks2[2])) goto END; // Retrieve the 1st, 2nd, and 3rd row handles by call GetRowsByBookmark. // The 3rd row handle is being retrieved for the second time. if(!CHECK(pIRowsetLocate->GetRowsByBookmark(NULL,3,rgcbBookmarks2, (const BYTE **)rgpBookmarks2,rghRows2,NULL),S_OK)) goto END; // Now retrieve the 3rd row handle again by calling GetRowsAtRatio. // ulNumerator=3, ulDenominator=last row, cRows=1. if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,3,m_ulRowCount, 1,&cRowsObtained3,&prghRows3), S_OK)) goto END; COMPARE(cRowsObtained3, 1); // Make sure the 3rd row handle is retrieved three times if(!CHECK(m_pIRowset->ReleaseRows(1,prghRows3,NULL,&cRefCount,NULL),S_OK)) goto END; if(COMPARE(cRefCount >= 1, TRUE)) fTestPass=TRUE; END: // Free the Bookmark memory allocated PROVIDER_FREE(rgpBookmarks2[2]); PROVIDER_FREE(rgpBookmarks2[1]); PROVIDER_FREE(rgpBookmarks2[0]); // Release IRowsetLocate pointer if(pIRowsetLocate) pIRowsetLocate->Release(); // Release the row handle if(cRowsObtained1) CHECK(m_pIRowset->ReleaseRows(3,prghRows1,NULL,NULL,NULL),S_OK); if(cRowsObtained2) CHECK(m_pIRowset->ReleaseRows(3,rghRows2,NULL,NULL,NULL),S_OK); if(prghRows3) { if(fTestPass) { PROVIDER_FREE(prghRows3); } else { CHECK(m_pIRowset->ReleaseRows(cRowsObtained3, prghRows3, NULL, NULL, NULL),S_OK); PROVIDER_FREE(prghRows3); } } if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //*----------------------------------------------------------------------- // @mfunc Retrieve three row handles from GetRowsAt,GetRowsByBookmark, and GetRowsAtRatio. // Check IRowsetScroll inherits from IRowsetLocate // // @rdesc TEST_PASS or TEST_FAIL // int Consistency::Variation_2() { DBBOOKMARK DBBookmark=DBBMK_FIRST; BYTE *pBookmark1=(BYTE *)&DBBookmark; BYTE *rgpBookmarks2[3]; ULONG_PTR rgcbBookmarks2[3]; DBCOUNTITEM cRowsObtained1=0; DBCOUNTITEM cRowsObtained2=0; DBCOUNTITEM cRowsObtained3=0; HROW rghRows1[3]={NULL,NULL,NULL}; HROW *prghRows1=rghRows1; HROW rghRows2[3]={NULL,NULL,NULL}; HROW *prghRows3=NULL; BOOL fTestPass=FALSE; DBREFCOUNT cRefCount; // Retrieve the 3rd, 4th, and 5th row handles by calling GetRowsAt if(!CHECK(m_pIRowsetScroll->GetRowsAt(NULL,NULL,1,pBookmark1,2,3, &cRowsObtained1,&prghRows1),S_OK)) goto END; COMPARE(cRowsObtained1, 3); // Get the bookmark for the first row if(!GetBookmark(1,rgcbBookmarks2,rgpBookmarks2)) goto END; // Get the bookmark for the 2nd row if(!GetBookmark(2,&rgcbBookmarks2[1],&rgpBookmarks2[1])) goto END; // Get the bookmark for the 3rd row if(!GetBookmark(3,&rgcbBookmarks2[2],&rgpBookmarks2[2])) goto END; // Retrieve the 1st, 2nd, and 3rd row handles by call GetRowsByBookmark. // The 3rd row handle is being retrieved for the second time. if(!CHECK(m_pIRowsetScroll->GetRowsByBookmark(NULL,3,rgcbBookmarks2, (const BYTE **)rgpBookmarks2,rghRows2,NULL),S_OK)) goto END; // Now retrieve the 3rd row handle again by calling GetRowsAtRatio. // ulNumerator=3, ulDenominator=last row, cRows=1. if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,3,m_ulRowCount, 1,&cRowsObtained3,&prghRows3), S_OK)) goto END; COMPARE(cRowsObtained3, 1); // Make sure the 3rd row handle is retrieved three times if(!CHECK(m_pIRowset->ReleaseRows(1,prghRows3,NULL,&cRefCount,NULL),S_OK)) goto END; if(COMPARE(cRefCount >= 1, TRUE)) fTestPass=TRUE; END: // Free the Bookmark memory allocated PROVIDER_FREE(rgpBookmarks2[2]); PROVIDER_FREE(rgpBookmarks2[1]); PROVIDER_FREE(rgpBookmarks2[0]); // Release the row handle if(cRowsObtained1) CHECK(m_pIRowset->ReleaseRows(3,prghRows1,NULL,NULL,NULL),S_OK); if(cRowsObtained2) CHECK(m_pIRowset->ReleaseRows(3,rghRows2,NULL,NULL,NULL),S_OK); if(prghRows3) { if(fTestPass) { PROVIDER_FREE(prghRows3); } else { CHECK(m_pIRowset->ReleaseRows(cRowsObtained3, prghRows3, NULL, NULL, NULL),S_OK); PROVIDER_FREE(prghRows3); } } if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Consistency::Terminate() { ReleaseRowsetAndAccessor(); return(TCIRowsetScroll::Terminate()); } // {{ TCW_TC_PROTOTYPE(Consistency_Cmd) //*----------------------------------------------------------------------- //| Test Case: Consistency_Cmd - In context of commands //| Created: 09/02/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Consistency_Cmd::Init() { if (!SetRowsetType(USECOMMAND)) return TEST_SKIPPED; // {{ TCW_INIT_BASECLASS_CHECK return (Consistency::Init()); // }} } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Consistency_Cmd::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(Consistency::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(Consistency_OpenRowset) //*----------------------------------------------------------------------- //| Test Case: Consistency_OpenRowset - In context of IOpenRowset //| Created: 09/02/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Consistency_OpenRowset::Init() { if (!SetRowsetType(USEOPENROWSET)) return TEST_SKIPPED; // {{ TCW_INIT_BASECLASS_CHECK return (Consistency::Init()); // }} } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Consistency_OpenRowset::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(Consistency::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(Consistency_SchemaR) //*----------------------------------------------------------------------- //| Test Case: Consistency_SchemaR - In context of a schema rowset //| Created: 09/02/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Consistency_SchemaR::Init() { BOOL fPass; if (!SetRowsetType(USESCHEMAR)) return TEST_SKIPPED; fPass = Consistency::Init(); if(TEST_PASS == fPass) { if ( m_ulRowCount < 5 ) return TEST_SKIPPED; else return TEST_PASS; } else return fPass; } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Consistency_SchemaR::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(Consistency::Terminate()); } // }} // }} // }} //*----------------------------------------------------------------------- //| Test Case: Related_IRowset - Test related interface IRowset. //| Created: 09/02/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Related_IRowset::Init() { if(!TCIRowsetScroll::Init()) return FALSE; // Create a rowset and an accessor. if(!GetRowsetAndAccessor(g_pCTable, SELECT_COLLISTFROMTBL, IID_IRowsetScroll)) return FALSE; return TRUE; } //*----------------------------------------------------------------------- // @mfunc GetRowsAtRatio does not change the cursor location of the rowset. DB_E_ROWSNOTRELEASED is returned. // // @rdesc TEST_PASS or TEST_FAIL // int Related_IRowset::Variation_1() { HROW rghRows[1]; HROW *prghRows=rghRows; DBCOUNTITEM cRowsObtained=0; BOOL fTestPass=FALSE; if (IsPropertyActive(DBPROP_CANHOLDROWS)) return TEST_SKIPPED; //skip // Move the cursor position to before the third row. if(!CHECK(m_pIRowset->GetNextRows(NULL,2,0,&cRowsObtained,&prghRows),S_OK)) goto END; // No row should have been retrieved. if(!COMPARE(cRowsObtained, 0)) goto END; // ulNumerator=0, ulDenominator=last row, cRows=1. if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,0,m_ulRowCount, 1,&cRowsObtained,&prghRows), S_OK)) goto END; if(!COMPARE(VerifyRowPosition(prghRows[0], 1, g_pCTable,EXACT), TRUE)) goto END; // IRowset->GetNextRows returns DB_E_ROWSNOTRELEASED if(!CHECK(m_pIRowset->GetNextRows(NULL,0,1,&cRowsObtained,&prghRows),DB_E_ROWSNOTRELEASED)) goto END; // No row should be retrieved if(!COMPARE(cRowsObtained,0)) goto END; // Release the row handle retrieved by IRowsetScroll::GetRowsAtRatio if(!CHECK(m_pIRowset->ReleaseRows(1,prghRows,NULL,NULL,NULL),S_OK)) goto END; // IRowset->GetNextRows to retrieve the third row, return S_OK if(!CHECK(m_pIRowset->GetNextRows(NULL,0,1,&cRowsObtained,&prghRows),S_OK)) goto END; if(!COMPARE(cRowsObtained, 1)) goto END; if(!COMPARE(VerifyRowPosition(prghRows[0], 3, g_pCTable, EXACT), TRUE) ) goto END; fTestPass=TRUE; END: // Free the row handle if(cRowsObtained) CHECK(m_pIRowset->ReleaseRows(cRowsObtained, prghRows, NULL, NULL, NULL),S_OK); return fTestPass; } //*----------------------------------------------------------------------- // @mfunc Retrieve rows with GetNextRows and get same rows with GetRowsAtRatio. DB_E_ROWSNOTRELEASED is returned. // // @rdesc TEST_PASS or TEST_FAIL // int Related_IRowset::Variation_2() { DBCOUNTITEM cRowsObtained=0; HROW rghRows[1]; HROW *prghRows=rghRows; BOOL fTestPass=FALSE; if (IsPropertyActive(DBPROP_CANHOLDROWS)) return TEST_SKIPPED; //skip // Get the first row handle. if(!CHECK(m_pIRowset->GetNextRows(NULL,0,1,&cRowsObtained,&prghRows),S_OK)) goto END; // IRowsetScroll::GetRowsAtRatio returns DB_E_ROWSNOTRELEASED. if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,0,m_ulRowCount, 1,&cRowsObtained,&prghRows), DB_E_ROWSNOTRELEASED)) goto END; // No row should have been retrieved. if(!COMPARE(cRowsObtained,0)) goto END; // Release the row handle if(!CHECK(m_pIRowset->ReleaseRows(1,prghRows,NULL,NULL,NULL),S_OK)) goto END; // IRowsetScroll::GetRowsAtRatio returns S_OK if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,0,m_ulRowCount, 1,&cRowsObtained,&prghRows), S_OK)) goto END; // Verify the first row handle is retrieved if(!VerifyRowPosition(prghRows[0], 1, g_pCTable, EXACT)) goto END; fTestPass=TRUE; END: if(cRowsObtained) CHECK(m_pIRowset->ReleaseRows(cRowsObtained,prghRows,NULL,NULL,NULL),S_OK); if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Related_IRowset::Terminate() { ReleaseRowsetAndAccessor(); return(TCIRowsetScroll::Terminate()); } // {{ TCW_TC_PROTOTYPE(Related_IRowset_Cmd) //*----------------------------------------------------------------------- //| Test Case: Related_IRowset_Cmd - In context of commands //| Created: 09/02/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Related_IRowset_Cmd::Init() { if (!SetRowsetType(USECOMMAND)) return TEST_SKIPPED; // {{ TCW_INIT_BASECLASS_CHECK return (Related_IRowset::Init()); // }} } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Related_IRowset_Cmd::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(Related_IRowset::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(Related_IRowset_OpenRowset) //*----------------------------------------------------------------------- //| Test Case: Related_IRowset_OpenRowset - In context of IOpenRowset //| Created: 09/02/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Related_IRowset_OpenRowset::Init() { if (!SetRowsetType(USEOPENROWSET)) return TEST_SKIPPED; // {{ TCW_INIT_BASECLASS_CHECK return (Related_IRowset::Init()); // }} } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Related_IRowset_OpenRowset::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(Related_IRowset::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(Related_IRowset_SchemaR) //*----------------------------------------------------------------------- //| Test Case: Related_IRowset_SchemaR - In context of a schema Rowset //| Created: 09/02/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Related_IRowset_SchemaR::Init() { BOOL fPass; if (!SetRowsetType(USESCHEMAR)) return TEST_SKIPPED; fPass = Related_IRowset::Init(); if(TEST_PASS == fPass) { if ( m_ulRowCount < 5 ) return TEST_SKIPPED; else return TEST_PASS; } return fPass; } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Related_IRowset_SchemaR::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(Related_IRowset::Terminate()); } // }} // }} // }} //*----------------------------------------------------------------------- //| Test Case: KeysetCursor - Test GetRowsAtRatio via a Keyset Driven cursor. //| Created: 09/02/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL KeysetCursor::Init() { DBPROPID guidPropertySet[4]; ULONG cPrptSet=0; if(!TCIRowsetScroll::Init()) return FALSE; guidPropertySet[cPrptSet]=DBPROP_CANFETCHBACKWARDS; cPrptSet++; guidPropertySet[cPrptSet]=DBPROP_CANSCROLLBACKWARDS; cPrptSet++; guidPropertySet[cPrptSet]=DBPROP_CANHOLDROWS; cPrptSet++; guidPropertySet[cPrptSet]=DBPROP_OTHERUPDATEDELETE; cPrptSet++; // Create a rowset and an accessor. // DBPROP_CANFETCHBACKWARDS, DBPROP_CANSCROLLBACKWARDS and DBPROP_CANHOLDROWS // are requested if(!GetRowsetAndAccessor(g_pCTable, SELECT_REVCOLLIST, IID_IRowsetScroll, cPrptSet, guidPropertySet)) return TEST_SKIPPED; return TRUE; } //*----------------------------------------------------------------------- // @mfunc ulNumerator=1, ulDenominator=20, cRows=(-1 // // @rdesc TEST_PASS or TEST_FAIL // int KeysetCursor::Variation_1() { DBCOUNTITEM cRowsObtained; HROW *prghRows=NULL; BOOL fTestPass=FALSE; // ulNumerator=1, ulDenominator=20, cRows=(-1). if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,1,m_ulRowCount, -1,&cRowsObtained,&prghRows), S_OK)) goto END; // Only one row should have been retrieved if(!COMPARE(cRowsObtained, 1)) goto END; if(!VerifyRowPosition(*prghRows, 2, g_pCTable,INEXACT)) goto END; fTestPass=TRUE; END: // Release the row handle if(prghRows) { CHECK(m_pIRowset->ReleaseRows(cRowsObtained,prghRows,NULL,NULL,NULL), S_OK); PROVIDER_FREE(prghRows); } if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //*----------------------------------------------------------------------- // @mfunc ulNumerator=2, ulDenominator=20, cRows=(-3 // // @rdesc TEST_PASS or TEST_FAIL // int KeysetCursor::Variation_2() { DBCOUNTITEM cRowsObtained; HROW *prghRows=NULL; BOOL fTestPass=FALSE; HRESULT hr; // ulNumerator=1, ulDenominator=20, cRows=(-3). hr = m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,1,m_ulRowCount,-3,&cRowsObtained,&prghRows); if (!COMPARE(SUCCEEDED(hr),TRUE)) goto END; if ( hr == DB_S_ENDOFROWSET ) { if(!COMPARE(cRowsObtained<3, TRUE)) goto END; } else { odtLog << L"Warning, ideally. DB_S_ENDOFROWSET\n"; if(!COMPARE(cRowsObtained, 3)) goto END; } fTestPass=TEST_PASS; END: // Release the row handle if(prghRows) { CHECK(m_pIRowset->ReleaseRows(cRowsObtained,prghRows,NULL,NULL,NULL),S_OK); PROVIDER_FREE(prghRows); } if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //*----------------------------------------------------------------------- // @mfunc ulNumerator=3, ulDenominator=20, cRows=(-3 // // @rdesc TEST_PASS or TEST_FAIL // int KeysetCursor::Variation_3() { DBCOUNTITEM cFirstRowsObtained; DBCOUNTITEM cSecondRowsObtained; HROW *pFirsthRow=NULL; HROW *pSecondhRow=NULL; BOOL fTestPass=FALSE; HRESULT hr = E_FAIL; // ulNumerator=3, ulDenominator=last row, cRows=(-3). hr = m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,3,m_ulRowCount, -3,&cFirstRowsObtained,&pFirsthRow); if ( !COMPARE(hr==S_OK || hr==DB_S_ENDOFROWSET, TRUE) ) goto END; // The 3rd, 2nd, and 1st row handles should be retrieved if ( hr == S_OK ) { if( !COMPARE(cFirstRowsObtained, 3)) goto END; } else { if ( !COMPARE(cFirstRowsObtained<3, TRUE) ) goto END; } if(cFirstRowsObtained > 0 && !VerifyRowPosition(*pFirsthRow, 4, g_pCTable, INEXACT)) goto END; // ulNumerator=4, ulDenominator=last row, cRows=(-1). if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,4,m_ulRowCount, -1,&cSecondRowsObtained,&pSecondhRow), S_OK)) goto END; // Only one row should have been retrieved if(!COMPARE(cSecondRowsObtained, 1)) goto END; if(!VerifyRowPosition(*pSecondhRow, 5, g_pCTable, INEXACT)) goto END; fTestPass=TRUE; END: // Release the row handles if(pFirsthRow) { CHECK(m_pIRowset->ReleaseRows(cFirstRowsObtained,pFirsthRow,NULL,NULL,NULL),S_OK); PROVIDER_FREE(pFirsthRow); } // Release the row handles if(pSecondhRow) { CHECK(m_pIRowset->ReleaseRows(cSecondRowsObtained,pSecondhRow,NULL,NULL,NULL),S_OK); PROVIDER_FREE(pSecondhRow); } if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //*----------------------------------------------------------------------- // @mfunc Get one row handle at a time. // // @rdesc TEST_PASS or TEST_FAIL // int KeysetCursor::Variation_4() { DBCOUNTITEM cRowsObtained; HROW rghRows[1]; HROW *prghRows=rghRows; DBCOUNTITEM cRowCount; BOOL fTestPass = TEST_FAIL; // Get one row handle at a time from the first row for(cRowCount=0; cRowCountGetRowsAtRatio(NULL,NULL,cRowCount,m_ulRowCount, 1,&cRowsObtained,&prghRows), S_OK)) return TEST_FAIL; if(!VerifyRowPosition(rghRows[0],cRowCount+1,g_pCTable, (cRowCount==0 ? EXACT : INEXACT))) goto END; if(!CHECK(m_pIRowset->ReleaseRows(1,rghRows,NULL,NULL,NULL),S_OK)) goto END; } //cRowCount=m_ulRowCount; if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,cRowCount,m_ulRowCount, 1,&cRowsObtained,&prghRows), DB_S_ENDOFROWSET)) goto END; fTestPass = TEST_PASS; END: return fTestPass; } //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL KeysetCursor::Terminate() { ReleaseRowsetAndAccessor(); return(TCIRowsetScroll::Terminate()); } // {{ TCW_TC_PROTOTYPE(KeysetCursor_Cmd) //*----------------------------------------------------------------------- //| Test Case: KeysetCursor_Cmd - In context of commands //| Created: 09/02/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL KeysetCursor_Cmd::Init() { if (!SetRowsetType(USECOMMAND)) return TEST_SKIPPED; return KeysetCursor::Init(); } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL KeysetCursor_Cmd::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(KeysetCursor::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(KeysetCursor_OpenRowset) //*----------------------------------------------------------------------- //| Test Case: KeysetCursor_OpenRowset - In context of IOpenRowset //| Created: 09/02/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL KeysetCursor_OpenRowset::Init() { if (!SetRowsetType(USEOPENROWSET)) return TEST_SKIPPED; // {{ TCW_INIT_BASECLASS_CHECK return KeysetCursor::Init(); // }} } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL KeysetCursor_OpenRowset::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(KeysetCursor::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(KeysetCursor_SchemaR) //*----------------------------------------------------------------------- //| Test Case: KeysetCursor_SchemaR - In context of a Schema Rowset //| Created: 09/02/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL KeysetCursor_SchemaR::Init() { // wrong to ask for Dynamic cursor on Schema Rowset return TEST_SKIPPED; } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL KeysetCursor_SchemaR::Terminate() { // TO DO: Add your own code here // {{ TCW_TERM_BASECLASS_CHECK2 return(KeysetCursor::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(DynamicCursor) //*----------------------------------------------------------------------- //| Test Case: DynamicCursor - Test GetRowsAtRatio via a Dynamic cursor. //| Created: 09/02/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL DynamicCursor::Init() { DBPROPID guidPropertySet[4]; ULONG cPrptSet=0; if(!TCIRowsetScroll::Init()) return FALSE; guidPropertySet[cPrptSet]=DBPROP_CANFETCHBACKWARDS; cPrptSet++; guidPropertySet[cPrptSet]=DBPROP_CANSCROLLBACKWARDS; cPrptSet++; guidPropertySet[cPrptSet]=DBPROP_CANHOLDROWS; cPrptSet++; guidPropertySet[cPrptSet]=DBPROP_OTHERINSERT; cPrptSet++; // Create a rowset and an accessor. // DBPROP_CANFETCHBACKWARDS, DBPROP_CANSCROLLBACKWARDS and DBPROP_CANHOLDROWS // are requested. if(!GetRowsetAndAccessor(g_pCTable, SELECT_REVCOLLIST, IID_IRowsetScroll, cPrptSet, guidPropertySet)) return TEST_SKIPPED; return TRUE; } //*----------------------------------------------------------------------- // @mfunc ulNumerator=1, ulDenominator=20, cRows=(-1 // // @rdesc TEST_PASS or TEST_FAIL // int DynamicCursor::Variation_1() { DBCOUNTITEM cRowsObtained; HROW *prghRows=NULL; BOOL fTestPass=FALSE; // ulNumerator=1, ulDenominator=last row, cRows=(-1). if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,1,m_ulRowCount, -1,&cRowsObtained,&prghRows), S_OK)) goto END; // Only one row should have been retrieved if(!COMPARE(cRowsObtained, 1)) goto END; // The first row should have been retrieved if(!VerifyRowPosition(prghRows[0], 2, g_pCTable, INEXACT)) goto END; fTestPass=TRUE; END: // Release the row handle if(prghRows) { CHECK(m_pIRowset->ReleaseRows(cRowsObtained,prghRows,NULL,NULL,NULL), S_OK); PROVIDER_FREE(prghRows); } if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //*----------------------------------------------------------------------- // @mfunc ulNumerator=2, ulDenominator=20, cRows=(-3 // // @rdesc TEST_PASS or TEST_FAIL // int DynamicCursor::Variation_2() { DBCOUNTITEM cRowsObtained; HROW *prghRows=NULL; BOOL fTestPass=FALSE; // ulNumerator=2, ulDenominator=m_ulRowCount, cRows=(-3). if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,1,m_ulRowCount, -3,&cRowsObtained,&prghRows), DB_S_ENDOFROWSET)) goto END; // Two rows should have been retrieved if(!COMPARE(cRowsObtained, 2)) goto END; // Verify the ows if(!VerifyRowPosition(prghRows[0], 2, g_pCTable, INEXACT)) goto END; if(!VerifyRowPosition(prghRows[1], 1, g_pCTable, INEXACT)) goto END; fTestPass=TRUE; END: // Release the row handle if(prghRows) { CHECK(m_pIRowset->ReleaseRows(cRowsObtained,prghRows,NULL,NULL,NULL),S_OK); PROVIDER_FREE(prghRows); } if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //*----------------------------------------------------------------------- // @mfunc ulNumerator=3, ulDenominator=20, cRows=(-3 // // @rdesc TEST_PASS or TEST_FAIL // int DynamicCursor::Variation_3() { DBCOUNTITEM cFirstRowsObtained; DBCOUNTITEM cSecondRowsObtained; HROW *pFirsthRow=NULL; HROW *pSecondhRow=NULL; BOOL fTestPass=FALSE; // ulNumerator=3, ulDenominator=last row, cRows=(-3). if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,3,m_ulRowCount, -3,&cFirstRowsObtained,&pFirsthRow), S_OK)) goto END; // Three rows should have been retrieved if(!COMPARE(cFirstRowsObtained, 3)) goto END; if(!VerifyRowPosition(*pFirsthRow, 4, g_pCTable, INEXACT)) goto END; // ulNumerator=4, ulDenominator=last row, cRows=(-1). if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,4,m_ulRowCount, -1,&cSecondRowsObtained,&pSecondhRow), S_OK)) goto END; // Only one row should have been retrieved if(!COMPARE(cSecondRowsObtained, 1)) { fTestPass = FALSE; goto END; } // The 4th row handle should have been retrieved if(!VerifyRowPosition(*pSecondhRow, 5, g_pCTable, INEXACT)) goto END; fTestPass=TRUE; END: // Release the row handles if(pFirsthRow) { CHECK(m_pIRowset->ReleaseRows(cFirstRowsObtained,pFirsthRow,NULL,NULL,NULL),S_OK); PROVIDER_FREE(pFirsthRow); } // Release the row handles if(pSecondhRow) { CHECK(m_pIRowset->ReleaseRows(cSecondRowsObtained,pSecondhRow,NULL,NULL,NULL),S_OK); PROVIDER_FREE(pSecondhRow); } if(fTestPass) return TEST_PASS; else return TEST_FAIL; } //*----------------------------------------------------------------------- // @mfunc Get one row handle at a time. // // @rdesc TEST_PASS or TEST_FAIL // int DynamicCursor::Variation_4() { DBCOUNTITEM cRowsObtained; HROW rghRows[1]; HROW *prghRows=rghRows; DBCOUNTITEM cRowCount; BOOL fTestPass = TEST_FAIL; // Get one row handle at a time from the first row for(cRowCount=0; cRowCount < m_ulRowCount; cRowCount++) { if(!CHECK(m_pIRowsetScroll->GetRowsAtRatio(NULL,NULL,cRowCount,m_ulRowCount, 1,&cRowsObtained,&prghRows), S_OK)) return TEST_FAIL; // Verify the row position if(!VerifyRowPosition(rghRows[0],cRowCount+1,g_pCTable,(cRowCount == 0 ? EXACT : INEXACT))) goto END; if(!CHECK(m_pIRowset->ReleaseRows(1,rghRows,NULL,NULL,NULL),S_OK)) goto END; } fTestPass = TEST_PASS; END: return fTestPass; } //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL DynamicCursor::Terminate() { ReleaseRowsetAndAccessor(); return(TCIRowsetScroll::Terminate()); } // {{ TCW_TC_PROTOTYPE(DynamicCursor_Cmd) //*----------------------------------------------------------------------- //| Test Case: DynamicCursor_Cmd - In context of commands //| Created: 09/02/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL DynamicCursor_Cmd::Init() { if (!SetRowsetType(USECOMMAND)) return TEST_SKIPPED; // {{ TCW_INIT_BASECLASS_CHECK return DynamicCursor::Init(); } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL DynamicCursor_Cmd::Terminate() { // TO DO: Add your own code here // {{ TCW_TERM_BASECLASS_CHECK2 return(DynamicCursor::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(DynamicCursor_OpenRowset) //*----------------------------------------------------------------------- //| Test Case: DynamicCursor_OpenRowset - In context of IOpenRowset //| Created: 09/02/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL DynamicCursor_OpenRowset::Init() { if (!SetRowsetType(USEOPENROWSET)) return TEST_SKIPPED; // {{ TCW_INIT_BASECLASS_CHECK return DynamicCursor::Init(); // }} } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL DynamicCursor_OpenRowset::Terminate() { // TO DO: Add your own code here // {{ TCW_TERM_BASECLASS_CHECK2 return(DynamicCursor::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(DynamicCursor_SchemaR) //*----------------------------------------------------------------------- //| Test Case: DynamicCursor_SchemaR - In context of a Schema Rowset //| Created: 09/02/97 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL DynamicCursor_SchemaR::Init() { // wrong to ask for Dynamic cursor on Schema Rowset return TEST_SKIPPED; } // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL DynamicCursor_SchemaR::Terminate() { // TO DO: Add your own code here // {{ TCW_TERM_BASECLASS_CHECK2 return(DynamicCursor::Terminate()); } // }} // }} // }} //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL Zombie::Init() { if(!CTransaction::Init()) return TEST_SKIPPED; m_cProperty=1; m_DBPropSet.guidPropertySet=DBPROPSET_ROWSET; m_DBPropSet.cProperties=m_cProperty; m_DBPropSet.rgProperties=m_rgProperty; // Get key cursor & IRowsetChange m_rgProperty[0].dwPropertyID=DBPROP_IRowsetScroll; m_rgProperty[0].dwOptions=DBPROPOPTIONS_REQUIRED; m_rgProperty[0].vValue.vt=VT_BOOL; V_BOOL(&m_rgProperty[0].vValue)=VARIANT_TRUE; // Register interface to be tested if(!RegisterInterface(ROWSET_INTERFACE, IID_IRowsetScroll, 1, &m_DBPropSet)) return TEST_SKIPPED; return TRUE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc Commit with fRetaining=TRUE. Query based. // // @rdesc TEST_PASS or TEST_FAIL // int Zombie::Variation_1() { DBCOUNTITEM cRowsObtained; HROW rghRows[1]; HROW *prghRows=rghRows; BOOL fTestPass=FALSE; IRowsetScroll *pIRowsetScroll=NULL; // Start a transaction. Create a rowset with IRowsetScroll pointer. if(!StartTransaction(SELECT_ORDERBYNUMERIC, (IUnknown **)&pIRowsetScroll, 1, &m_DBPropSet)) goto END; // ulNumerator=50, ulDenominator=100, cRows=1. if(!CHECK(pIRowsetScroll->GetRowsAtRatio(NULL,NULL,50,100, 1,&cRowsObtained,&prghRows), S_OK)) goto END; if(!CHECK(m_pIRowset->ReleaseRows(1,prghRows,NULL,NULL,NULL),S_OK)) goto END; prghRows=NULL; // Commit the transaction with fRetaining==TRUE if(!GetCommit(TRUE)) goto END; if(!m_fCommitPreserve) { // Test zombie if(CHECK(pIRowsetScroll->GetRowsAtRatio(NULL,NULL,50,100, 1,&cRowsObtained,&prghRows), E_UNEXPECTED)) { if((COMPARE(cRowsObtained, 0)) && (COMPARE(prghRows, NULL))) fTestPass=TRUE; goto END; } } else // fully functional { // ulNumerator=50, ulDenominator=100, cRows=1. if(!CHECK(pIRowsetScroll->GetRowsAtRatio(NULL,NULL,50,100, 1,&cRowsObtained,&prghRows), S_OK)) goto END; // One row should have been retrieved if(COMPARE(cRowsObtained, 1)) fTestPass=TRUE; } END: // Release the row handle if(prghRows) CHECK(m_pIRowset->ReleaseRows(1,prghRows,NULL,NULL,NULL),S_OK); SAFE_RELEASE(pIRowsetScroll); // Clean up. Expected S_OK. CleanUpTransaction(S_OK); if(fTestPass) return TEST_PASS; else return TEST_FAIL; } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc Commit with fRetaining=FALSE. Cursor based. // // @rdesc TEST_PASS or TEST_FAIL // int Zombie::Variation_2() { DBCOUNTITEM cRowsObtained; HROW rghRows[1]; HROW *prghRows=rghRows; BOOL fTestPass=FALSE; IRowsetScroll *pIRowsetScroll=NULL; // Start a transaction. Create a rowset with IRowsetScroll pointer. // Cursor based update if(!StartTransaction(SELECT_ORDERBYNUMERIC, (IUnknown **)&pIRowsetScroll, 1, &m_DBPropSet)) goto END; // ulNumerator=77, ulDenominator=435, cRows=1. if(!CHECK(pIRowsetScroll->GetRowsAtRatio(NULL,NULL,77,435, 1,&cRowsObtained,&prghRows), S_OK)) goto END; if(!CHECK(m_pIRowset->ReleaseRows(1,prghRows,NULL,NULL,NULL),S_OK)) goto END; prghRows=NULL; // Commit the transaction with fRetaining==FALSE if(!GetCommit(FALSE)) goto END; if(!m_fCommitPreserve) { // Test zombie if(CHECK(pIRowsetScroll->GetRowsAtRatio(NULL,NULL,50,100, 1,&cRowsObtained,&prghRows), E_UNEXPECTED)) { if((COMPARE(cRowsObtained, 0)) && (COMPARE(prghRows, NULL))) fTestPass=TRUE; goto END; } } else // fully functional { // ulNumerator=50, ulDenominator=100, cRows=1. if(!CHECK(pIRowsetScroll->GetRowsAtRatio(NULL,NULL,50,100, 1,&cRowsObtained,&prghRows), S_OK)) goto END; // One row should have been retrieved if(COMPARE(cRowsObtained, 1)) fTestPass=TRUE; } END: // Release the row handle if(prghRows) CHECK(m_pIRowset->ReleaseRows(1,prghRows,NULL,NULL,NULL),S_OK); SAFE_RELEASE(pIRowsetScroll); // Clean up. Expected XACT_E_NOTRANSACTION. CleanUpTransaction(XACT_E_NOTRANSACTION); return fTestPass; } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc Abort with fRetaining=TRUE. Cursor based. // // @rdesc TEST_PASS or TEST_FAIL // int Zombie::Variation_3() { DBCOUNTITEM cRowsObtained; HROW rghRows[1]; HROW *prghRows=rghRows; BOOL fTestPass=FALSE; IRowsetScroll *pIRowsetScroll=NULL; // Start a transaction. Create a rowset with IRowsetScroll pointer. // Cursor based update if(!StartTransaction(SELECT_ORDERBYNUMERIC, (IUnknown **)&pIRowsetScroll, 1, &m_DBPropSet)) goto END; // ulNumerator=111, ulDenominator=999, cRows=1. if(!CHECK(pIRowsetScroll->GetRowsAtRatio(NULL,NULL,111,999, 1,&cRowsObtained,&prghRows), S_OK)) goto END; if(!CHECK(m_pIRowset->ReleaseRows(1,prghRows,NULL,NULL,NULL),S_OK)) goto END; prghRows=NULL; // Abort the transaction with fRetaining==TRUE if(!GetAbort(TRUE)) goto END; if(!m_fAbortPreserve) { // Test zombie if(CHECK(pIRowsetScroll->GetRowsAtRatio(NULL,NULL,50,100, 1,&cRowsObtained,&prghRows), E_UNEXPECTED)) { if((COMPARE(cRowsObtained, 0)) && (COMPARE(prghRows, NULL))) fTestPass=TRUE; goto END; } } else // fully functional { // ulNumerator=50, ulDenominator=100, cRows=1. if(!CHECK(pIRowsetScroll->GetRowsAtRatio(NULL,NULL,50,100, 1,&cRowsObtained,&prghRows), S_OK)) goto END; // One row should have been retrieved if(COMPARE(cRowsObtained, 1)) fTestPass=TRUE; } END: // Release the row handle if(prghRows) CHECK(m_pIRowset->ReleaseRows(1,prghRows,NULL,NULL,NULL),S_OK); SAFE_RELEASE(pIRowsetScroll); // Clean up CleanUpTransaction(S_OK); if(fTestPass) return TEST_PASS; else return TEST_FAIL; } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc Abort with fRetaining=FALSE. Query based. // // @rdesc TEST_PASS or TEST_FAIL // int Zombie::Variation_4() { DBCOUNTITEM cRowsObtained; HROW rghRows[1]; HROW *prghRows=rghRows; BOOL fTestPass=FALSE; IRowsetScroll *pIRowsetScroll=NULL; // Start a transaction. Create a rowset with IRowsetScroll pointer. // Query based update. if(!StartTransaction(SELECT_ORDERBYNUMERIC, (IUnknown **)&pIRowsetScroll, 1, &m_DBPropSet)) goto END; // ulNumerator=555, ulDenominator=1100, cRows=1. if(!CHECK(pIRowsetScroll->GetRowsAtRatio(NULL,NULL,555,1100, 1,&cRowsObtained,&prghRows), S_OK)) goto END; if(!CHECK(m_pIRowset->ReleaseRows(1,prghRows,NULL,NULL,NULL),S_OK)) goto END; prghRows=NULL; // Abort the transaction with fRetaining==FALSE if(!GetAbort(FALSE)) goto END; if(!m_fAbortPreserve) { // Test zombie if(CHECK(pIRowsetScroll->GetRowsAtRatio(NULL,NULL,50,100, 1,&cRowsObtained,&prghRows), E_UNEXPECTED)) { if((COMPARE(cRowsObtained, 0)) && (COMPARE(prghRows, NULL))) fTestPass=TRUE; goto END; } } else // fully functional { // ulNumerator=50, ulDenominator=100, cRows=1. if(!CHECK(pIRowsetScroll->GetRowsAtRatio(NULL,NULL,50,100, 1,&cRowsObtained,&prghRows), S_OK)) goto END; // One row should have been retrieved if(COMPARE(cRowsObtained, 1)) fTestPass=TRUE; } END: // Release the row handle if(prghRows) CHECK(m_pIRowset->ReleaseRows(1,prghRows,NULL,NULL,NULL),S_OK); SAFE_RELEASE(pIRowsetScroll); //clean up CleanUpTransaction(XACT_E_NOTRANSACTION); return fTestPass; } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL Zombie::Terminate() { return(CTransaction::Terminate()); } // }}