//-------------------------------------------------------------------- // Microsoft OLE DB Test // // Copyright 1995-2000 Microsoft Corporation. // // @doc // // @module ICLSFACT.CPP | OLE DB IClassFactory tests for Provider, // Provider's Error Lookup Service and the SDK Error object. // #include "modstandard.hpp" #define DBINITCONSTANTS // Must be defined to initialize constants in OLEDB.H #define INITGUID #include "iclsfact.h" #include "msdaguid.h" // ExtendedError #include "msdadc.h" // DataConversion // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Module Values // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // {{ TCW_MODULE_GLOBALS DECLARE_MODULE_CLSID = { 0xad830a70, 0x5fd7, 0x11cf, { 0x97, 0x63, 0x00, 0xaa, 0x00, 0xbd, 0xf9, 0x52 }}; DECLARE_MODULE_NAME("IClassFactory"); DECLARE_MODULE_OWNER("Microsoft"); DECLARE_MODULE_DESCRIP("OLE DB Class Factory tests for Provider, Provider's Error Lookup Service and SDK Error Object."); DECLARE_MODULE_VERSION(823743346); // TCW_WizardVersion(2) // TCW_Automation(True) // }} TCW_MODULE_GLOBALS_END //-------------------------------------------------------------------- // @func Module level initialization routine // // @rdesc Success or Failure // @flag TRUE | Successful initialization // @flag FALSE | Initialization problems // BOOL ModuleInit(CThisTestModule * pThisTestModule) { //Must either call CreateModInfo or CreateModuleDBSession before any testing if(!CreateModInfo(pThisTestModule)) return FALSE; return TRUE; } //-------------------------------------------------------------------- // @func Module level termination routine // // @rdesc Success or Failure // @flag TRUE | Successful initialization // @flag FALSE | Initialization problems // BOOL ModuleTerminate(CThisTestModule * pThisTestModule) { return ReleaseModInfo(pThisTestModule); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Base Class Section // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - class CClsFac : public COLEDB { protected: CLSID m_Clsid; CLSCTX m_ClsCtx; TCHAR m_wszLibFileName[MAX_PATH]; IUnknown * m_pIUnknown; IUnknown * m_pIUnknown2; IClassFactory * m_pIClassFactory; public: // @cmember CTOR CClsFac(LPWSTR wszTestCaseName); // @cmember DTOR virtual ~CClsFac(){} // @cmember This function must be called before // executing any member function so that the // correct component CLSID is used for valid calls. BOOL SetComponent(CLSID ComponentClsid, CLSCTX ComponentClsCtx); // @cmember This function will return the // CLSID for the EXTENDEDERRORS CLSID. CLSID GetExtendedErrorsCLSID(); // @cmember This function will return the // CLSID for the Provider's Enumerator CLSID. CLSID GetProviderEnumCLSID(); }; class CDllGetClassObj : public CClsFac { protected: public: // @cmember CTOR CDllGetClassObj(LPWSTR wszTestCaseName) : CClsFac(wszTestCaseName){}; // @cmember DTOR virtual ~CDllGetClassObj(){}; //----------------------------------------- // Member functions which perform each test //----------------------------------------- // @cmember Valid creation with CoGetClassObject int ValidCreationCoGetClassObject(); // @cmember Valid creation with LoadLibraryExEx int ValidCreationLoadLibraryEx(); // @cmember E_INVALIDARG - ppvObj = NULL int NullppvObj(); // @cmember E_NOINTERFACE - Invalid riid int Invalidriid(); // @cmember CLASS_E_CLASSNOTAVAILABLE - LoadLibraryExEx, Bad CLSID int Invalidrclsid(); }; class CCreateInstance : public CClsFac { protected: public: // @cmember CTOR CCreateInstance(LPWSTR wszTestCaseName) : CClsFac(wszTestCaseName){}; // @cmember DTOR virtual ~CCreateInstance(){}; //----------------------------------------- // Member functions which perform each test //----------------------------------------- // @cmember Valid creation of 2 objects, release in same order int MultipleCreateReleaseSameOrder(); // @cmember Valid creation of 2 objects, release in opposite order int MultipleCreateReleaseOppositeOrder(); // @cmember Call LockServer after CreateInstance int LockServerAfter(); // @cmember Non null pUnkOuter, takes expected HRESULT int ValidpUnkOuter(HRESULT hr); // @cmember Creates an instance for each supported interface int CreateEachInterface(ULONG cIids, IID * rgIids); // @cmember E_NOINTERFACE for Invalid riid int InvalidRiid(); // @cmember E_INVALIDARG for Null ppvObj int NullppvObj(); }; class CLockServer : public CClsFac { protected: public: // @cmember CTOR CLockServer(LPWSTR wszTestCaseName) : CClsFac(wszTestCaseName){}; // @cmember DTOR virtual ~CLockServer(){}; //----------------------------------------- // Member functions which perform each test //----------------------------------------- // @cmember LockServer and CreateInstance int LockAndCreate(); // @cmember LockServer and call CoFreeUnusedLibraries int LockAndFree(); // @cmember LockServer twice int LockTwice(); // @cmember LockServer, CreateInstance and Unlock Server int LockAndCreateAndUnlock(); // @cmember LockServer, Unlock Server and Create int LockAndUnlockAndCreate(); }; //-------------------------------------------------------------------- // CClsFac CClsFac CClsFac //-------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc Constructor // CClsFac::CClsFac(LPWSTR wszTestCaseName) : COLEDB(wszTestCaseName) { m_Clsid = GUID_NULL; m_ClsCtx = CLSCTX_INPROC_SERVER; wcscpy((wchar_t*)m_wszLibFileName, (wchar_t*)""); m_pIUnknown = NULL; m_pIUnknown2 = NULL; m_pIClassFactory = NULL; } //-------------------------------------------------------------------- // @mfunc Records the components CLSID to be tested in this test case, // and uses it to find the dll path and name based in the registry. // BOOL CClsFac::SetComponent(CLSID ComponentClsid, CLSCTX ComponentClsCtx) { DWORD cbDllName = sizeof(m_wszLibFileName); HKEY SubKey = 0; BOOL fResults = FALSE; TCHAR wszSubKeyIProc[MAX_PATH+1]; TCHAR wszSubKeyOProc[MAX_PATH+1]; LPWSTR wszClsid = NULL; LPTSTR szClsid1 = NULL; //Record the class id for the component to be tested m_Clsid = ComponentClsid; m_ClsCtx = ComponentClsCtx; //Make sure we allocated memory ok szClsid1 = (LPTSTR)PROVIDER_ALLOC(CLSID_WCHAR_SIZE_IN_BYTES); if (!szClsid1) goto CLEANUP; //Get string form of component's class ID if (SUCCEEDED(StringFromCLSID(ComponentClsid, &wszClsid))) { //Plug in clsid string to typical registry key path _tcscpy(wszSubKeyIProc, _T("CLSID\\")); _tcscpy(wszSubKeyOProc, _T("CLSID\\")); #ifndef UNICODE WideCharToMultiByte(CP_ACP,0,wszClsid,-1,szClsid1,CLSID_WCHAR_SIZE_IN_BYTES,NULL,NULL); _tcscat(wszSubKeyIProc, szClsid1); _tcscat(wszSubKeyOProc, szClsid1); #else wcscat((wchar_t*)wszSubKeyIProc, (wchar_t*)wszClsid); wcscat((wchar_t*)wszSubKeyOProc, (wchar_t*)wszClsid); #endif _tcscat(wszSubKeyIProc, _T("\\InprocServer32")); _tcscat(wszSubKeyOProc, _T("\\LocalServer32")); //Lookup the dll path and name and store it for use in LoadLibraryEx if( (ERROR_SUCCESS == RegOpenKeyEx(HKEY_CLASSES_ROOT, wszSubKeyIProc, 0, KEY_QUERY_VALUE, &SubKey)) || (ERROR_SUCCESS == RegOpenKeyEx(HKEY_CLASSES_ROOT, wszSubKeyOProc, 0, KEY_QUERY_VALUE, &SubKey)) ) { if (ERROR_SUCCESS == RegQueryValueEx(SubKey, NULL, NULL, NULL, (BYTE *)m_wszLibFileName, &cbDllName)) { fResults = TRUE; goto CLEANUP; } } //If we got here, there was a registry error odtLog << wszErrorReadingRegistry; } CLEANUP: // Close the SubKey if(SubKey) RegCloseKey(SubKey); PROVIDER_FREE(wszClsid); PROVIDER_FREE(szClsid1); return fResults; } //-------------------------------------------------------------------- // @mfunc Records the components CLSID to be tested in this test case, // and uses it to find the CLSID for Extended Error Lookup. // CLSID CClsFac::GetExtendedErrorsCLSID() { DWORD cbDllName = sizeof(m_wszLibFileName); HKEY SubKey = 0; CLSID ExtErrCLSID = GUID_NULL; TCHAR wszSubKey[MAX_PATH+1]; TCHAR szSubKeyName[MAX_PATH+1]; LPWSTR wpszKeyCLSID = NULL; LPWSTR wszClsid = NULL; LPTSTR szClsid1 = NULL; //Make sure we allocated memory ok szClsid1 = (LPTSTR)PROVIDER_ALLOC(CLSID_WCHAR_SIZE_IN_BYTES); if (!szClsid1) goto CLEANUP; //Get string form of provider class ID if (SUCCEEDED(StringFromCLSID(m_pThisTestModule->m_ProviderClsid, &wszClsid))) { //Plug in clsid string to typical registry key path _tcscpy(wszSubKey, _T("CLSID\\")); #ifndef UNICODE WideCharToMultiByte(CP_ACP,0,wszClsid,-1,szClsid1,CLSID_WCHAR_SIZE_IN_BYTES,NULL,NULL); _tcscat(wszSubKey, szClsid1); #else wcscat((wchar_t*)wszSubKey, (wchar_t*)wszClsid); #endif _tcscat(wszSubKey, _T("\\EXTENDEDERRORS")); //Lookup the dll path and name and store it for use in LoadLibraryEx if (ERROR_SUCCESS != RegOpenKeyEx(HKEY_CLASSES_ROOT, wszSubKey, 0, KEY_ENUMERATE_SUB_KEYS, &SubKey)) { //If we got here, there was a registry error odtLog << L"No Extended Error Support by the Provider\n"; goto CLEANUP; } //Lookup the dll path and name and store it for use in LoadLibraryEx if (ERROR_SUCCESS == RegEnumKeyEx(SubKey, NULL, szSubKeyName, &cbDllName, NULL, NULL, NULL, NULL)) { wpszKeyCLSID = (LPWSTR)PROVIDER_ALLOC(MAX_PATH+1); MultiByteToWideChar(CP_ACP,0,(LPCSTR)szSubKeyName,-1,wpszKeyCLSID,MAX_PATH+1); CLSIDFromString((LPOLESTR)wpszKeyCLSID, &ExtErrCLSID); } } CLEANUP: // Close the SubKey if(SubKey) RegCloseKey(SubKey); PROVIDER_FREE(wszClsid); PROVIDER_FREE(szClsid1); PROVIDER_FREE(wpszKeyCLSID); return ExtErrCLSID; } //-------------------------------------------------------------------- // @mfunc Records the components CLSID to be tested in this test case, // and uses it to find the CLSID for theProviders Enumerator. // CLSID CClsFac::GetProviderEnumCLSID() { HKEY SubKey = 0; CLSID ExtErrCLSID = GUID_NULL; TCHAR wszSubKey[MAX_PATH+1] = _T(""); TCHAR szKeyName[MAX_PATH+1] = _T(""); LONG cbKeyName; LPWSTR wszClsid = NULL; LPTSTR szClsid1 = NULL; //Make sure we allocated memory ok szClsid1 = (LPTSTR)PROVIDER_ALLOC(CLSID_WCHAR_SIZE_IN_BYTES); if (!szClsid1) goto CLEANUP; //Get string form of provider class ID if (SUCCEEDED(StringFromCLSID(m_pThisTestModule->m_ProviderClsid, &wszClsid))) { //Plug in clsid string to typical registry key path _tcscpy(wszSubKey, _T("CLSID\\")); #ifndef UNICODE WideCharToMultiByte(CP_ACP,0,wszClsid,-1,szClsid1,CLSID_WCHAR_SIZE_IN_BYTES,NULL,NULL); _tcscat(wszSubKey, szClsid1); #else wcscat((wchar_t*)wszSubKey, (wchar_t*)wszClsid); #endif //Lookup the dll path and name and store it for use in LoadLibraryEx if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_CLASSES_ROOT, wszSubKey, 0, KEY_READ, &SubKey)) if (ERROR_SUCCESS != RegQueryValue(SubKey, NULL, szKeyName, &cbKeyName)) goto CLEANUP; _tcscat(szKeyName, _T(" Enumerator")); } CLEANUP: odtLog <CreateInstance(NULL, IID_IUnknown, NULL); if ((m_hr != E_INVALIDARG) && (m_hr != E_POINTER)) CHECK(m_hr, E_INVALIDARG); } //Make sure we can use this class factory interface successfully if (CHECK(m_pIClassFactory->CreateInstance(NULL, IID_IUnknown, (void **)&m_pIUnknown), S_OK)) { //We've gotten the object successfully fResults = TRUE; if(m_pIUnknown->Release() != 0) odtLog <Release() != 0) odtLog <CreateInstance(NULL, IID_IUnknown, (void **)&m_pIUnknown), S_OK)) { //We've gotten the object successfully fResults = TRUE; if(m_pIUnknown->Release() != 0) odtLog <Release() != 0) odtLog <Release() != 0) odtLog <Release() != 0) odtLog <Release() != 0) odtLog <Release() != 0) odtLog <CreateInstance(NULL, IID_IUnknown, (void **)&m_pIUnknown), S_OK)) { //Call LockServer next if (CHECK(m_pIClassFactory->LockServer(TRUE), S_OK)) { fResults = TRUE; CHECK(m_pIClassFactory->LockServer(FALSE), S_OK); } SAFE_RELEASE(m_pIUnknown); } SAFE_RELEASE(m_pIClassFactory); } FreeLibrary(hinst); } if (fResults) return TEST_PASS; else return TEST_FAIL; } //-------------------------------------------------------------------- // @mfunc Non null pUnkOuter, takes expected HRESULT // int CCreateInstance::ValidpUnkOuter(HRESULT hr) { BOOL fResults = FALSE; //Make a bogus IUnkOuter, just to see if its taken by the object //which we are attempting to aggregate. IUnknown * pBogusIUnknown = NULL; if( !CHECK(CoCreateInstance(m_Clsid, NULL, m_ClsCtx, IID_IUnknown, (void **)&pBogusIUnknown), S_OK) ) return TEST_FAIL; //Try to make an aggregated object, checking that the result is what user expected if (CHECK(CoCreateInstance(m_Clsid, pBogusIUnknown, CLSCTX_INPROC_SERVER, IID_IUnknown, (void **)&m_pIUnknown), hr)) fResults = TRUE; //Release object if we successfully created it SAFE_RELEASE(m_pIUnknown); SAFE_RELEASE(pBogusIUnknown); if (fResults) return TEST_PASS; else return TEST_FAIL; } //-------------------------------------------------------------------- // @mfunc Creates an instance for each supported interface // int CCreateInstance::CreateEachInterface(ULONG cIids, IID * rgIids) { BOOL fResults = TRUE; //This will only change if we fail at least once //Loop thru array of IIDs and create one object using each interface while (cIids > 0) { //Change the one based count into an array index cIids--; if (CHECK(CoCreateInstance(m_Clsid, NULL, m_ClsCtx, rgIids[cIids], (void **)&m_pIUnknown), S_OK)) { SAFE_RELEASE(m_pIUnknown); } else fResults = FALSE; } if (fResults) return TEST_PASS; else return TEST_FAIL; } //-------------------------------------------------------------------- // @mfunc E_NOINTERFACE for Invalid riid // int CCreateInstance::InvalidRiid() { //Try to create the object asking for a invalid interface at this level if (CHECK(CoCreateInstance(m_Clsid, NULL, m_ClsCtx, IID_IRowsetLocate, (void **)&m_pIUnknown), E_NOINTERFACE)) return TEST_PASS; else return TEST_FAIL; } //-------------------------------------------------------------------- // @mfunc E_INVALIDARG for Null ppvObj // int CCreateInstance::NullppvObj() { if (CHECK(CoCreateInstance(m_Clsid, NULL, m_ClsCtx, IID_IClassFactory, NULL), E_INVALIDARG)) return TEST_PASS; else return TEST_FAIL; } //-------------------------------------------------------------------- // CLockServer CLockServer CLockServer //-------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc LockServer and CreateInstance // int CLockServer::LockAndCreate() { BOOL fResults = FALSE; //Check that our object can be created after locking and //released after unlocking the server if (CHECK(CoGetClassObject(m_Clsid, m_ClsCtx, NULL, IID_IClassFactory, (void **)&m_pIClassFactory), S_OK)) { if (CHECK(m_pIClassFactory->LockServer(TRUE), S_OK)) if (CHECK(m_pIClassFactory->CreateInstance(NULL, IID_IUnknown, (void **)&m_pIUnknown), S_OK)) if (CHECK(m_pIClassFactory->LockServer(FALSE), S_OK)) { //We've gotten the object successfully fResults = TRUE; if(m_pIUnknown->Release() != 0) odtLog <Release() != 0) odtLog <LockServer(TRUE), S_OK)) { CoFreeUnusedLibraries(); if (CHECK(m_pIClassFactory->CreateInstance(NULL, IID_IUnknown, (void **)&m_pIUnknown), S_OK)) if (CHECK(m_pIClassFactory->LockServer(FALSE), S_OK)) { //We've gotten the object successfully fResults = TRUE; if(m_pIUnknown->Release() != 0) odtLog <Release() != 0) odtLog <LockServer(TRUE), S_OK)) if (CHECK(m_pIClassFactory->LockServer(TRUE), S_OK)) if (CHECK(m_pIClassFactory->CreateInstance(NULL, IID_IUnknown, (void **)&m_pIUnknown), S_OK)) //Lock here again just to be sure we can do it after Create if (CHECK(m_pIClassFactory->LockServer(TRUE), S_OK)) if (CHECK(m_pIClassFactory->LockServer(FALSE), S_OK)) { if(m_pIUnknown->Release() != 0) odtLog <LockServer(FALSE), S_OK)) if (CHECK(m_pIClassFactory->LockServer(FALSE), S_OK)) fResults = TRUE; } if(m_pIClassFactory->Release() != 0) odtLog <LockServer(TRUE), S_OK)) if (CHECK(m_pIClassFactory->CreateInstance(NULL, IID_IUnknown, (void **)&m_pIUnknown), S_OK)) if (CHECK(m_pIClassFactory->LockServer(FALSE), S_OK)) { //We've gotten the object successfully fResults = TRUE; if(m_pIClassFactory->Release() != 0) odtLog <Release() != 0) odtLog <LockServer(TRUE), S_OK)) if (CHECK(m_pIClassFactory->LockServer(FALSE), S_OK)) if (CHECK(m_pIClassFactory->CreateInstance(NULL, IID_IUnknown, (void **)&m_pIUnknown), S_OK)) { //We've gotten the object successfully fResults = TRUE; if(m_pIClassFactory->Release() != 0) odtLog <Release() != 0) odtLog <m_ProviderClsid, m_pThisTestModule->m_clsctxProvider); } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc Valid creation with CoGetClassObject // // @rdesc TEST_PASS or TEST_FAIL // int DllGetClassObj_Provider::Variation_1() { return ValidCreationCoGetClassObject(); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc Valid creation with LoadLibraryEx // // @rdesc TEST_PASS or TEST_FAIL // int DllGetClassObj_Provider::Variation_2() { return ValidCreationLoadLibraryEx(); } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc E_INVALIDARG - ppvObj = NULL // // @rdesc TEST_PASS or TEST_FAIL // int DllGetClassObj_Provider::Variation_3() { return NullppvObj(); } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc E_NOINTERFACE - Invalid riid // // @rdesc TEST_PASS or TEST_FAIL // int DllGetClassObj_Provider::Variation_4() { return Invalidriid(); } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc CLASS_E_CLASSNOTAVAILABLE - LoadLibraryEx, Bad CLSID // // @rdesc TEST_PASS or TEST_FAIL // int DllGetClassObj_Provider::Variation_5() { return Invalidrclsid(); } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL DllGetClassObj_Provider::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CDllGetClassObj::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(DllGetClassObj_ErrorLookup) //*----------------------------------------------------------------------- //| Test Case: DllGetClassObj_ErrorLookup - DllGetClassObject test for Provider's Error Lookup service //| Created: 02/06/96 //| Updated: 04/25/98 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL DllGetClassObj_ErrorLookup::Init() { CLSID ErrorLookupCLSID; // {{ TCW_INIT_BASECLASS_CHECK if(CDllGetClassObj::Init()) // }} { // Get the CLSID out of the Registry ErrorLookupCLSID = GetExtendedErrorsCLSID(); if(ErrorLookupCLSID != GUID_NULL) return SetComponent(ErrorLookupCLSID,CLSCTX_INPROC_SERVER); else return TEST_SKIPPED; } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc Valid creation with CoGetClassObject // // @rdesc TEST_PASS or TEST_FAIL // int DllGetClassObj_ErrorLookup::Variation_1() { return ValidCreationCoGetClassObject(); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc Valid creation with LoadLibraryEx // // @rdesc TEST_PASS or TEST_FAIL // int DllGetClassObj_ErrorLookup::Variation_2() { return ValidCreationLoadLibraryEx(); } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc E_INVALIDARG - ppvObj = NULL // // @rdesc TEST_PASS or TEST_FAIL // int DllGetClassObj_ErrorLookup::Variation_3() { return NullppvObj(); } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc E_NOINTERFACE - Invalid riid // // @rdesc TEST_PASS or TEST_FAIL // int DllGetClassObj_ErrorLookup::Variation_4() { return Invalidriid(); } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc CLASS_E_CLASSNOTAVAILABLE - LoadLibraryEx, Bad CLSID // // @rdesc TEST_PASS or TEST_FAIL // int DllGetClassObj_ErrorLookup::Variation_5() { return Invalidrclsid(); } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL DllGetClassObj_ErrorLookup::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CDllGetClassObj::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(DllGetClassObj_ConversionLibrary) //*----------------------------------------------------------------------- //| Test Case: DllGetClassObj_ConversionLibrary - DllGetClassObject test for OLE DB Conversion Library Object //| Created: 02/06/96 //| Updated: 04/25/98 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL DllGetClassObj_ConversionLibrary::Init() { // {{ TCW_INIT_BASECLASS_CHECK if(CDllGetClassObj::Init()) // }} { return SetComponent(CLSID_OLEDB_CONVERSIONLIBRARY,CLSCTX_INPROC_SERVER); } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc Valid creation with CoGetClassObject // // @rdesc TEST_PASS or TEST_FAIL // int DllGetClassObj_ConversionLibrary::Variation_1() { return ValidCreationCoGetClassObject(); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc Valid creation with LoadLibraryEx // // @rdesc TEST_PASS or TEST_FAIL // int DllGetClassObj_ConversionLibrary::Variation_2() { return ValidCreationLoadLibraryEx(); } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc E_INVALIDARG - ppvObj = NULL // // @rdesc TEST_PASS or TEST_FAIL // int DllGetClassObj_ConversionLibrary::Variation_3() { return NullppvObj(); } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc E_NOINTERFACE - Invalid riid // // @rdesc TEST_PASS or TEST_FAIL // int DllGetClassObj_ConversionLibrary::Variation_4() { return Invalidriid(); } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc CLASS_E_CLASSNOTAVAILABLE - LoadLibraryEx, Bad CLSID // // @rdesc TEST_PASS or TEST_FAIL // int DllGetClassObj_ConversionLibrary::Variation_5() { return Invalidrclsid(); } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL DllGetClassObj_ConversionLibrary::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CDllGetClassObj::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(DllGetClassObj_OleDBEnumerator) //*----------------------------------------------------------------------- //| Test Case: DllGetClassObj_OleDBEnumerator - DllGetClassObject test for OLE DB Root Enumerator Object //| Created: 02/06/96 //| Updated: 04/25/98 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL DllGetClassObj_OleDBEnumerator::Init() { // {{ TCW_INIT_BASECLASS_CHECK if(CDllGetClassObj::Init()) // }} { return SetComponent(CLSID_OLEDB_ENUMERATOR,CLSCTX_INPROC_SERVER); } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc Valid creation with CoGetClassObject // // @rdesc TEST_PASS or TEST_FAIL // int DllGetClassObj_OleDBEnumerator::Variation_1() { return ValidCreationCoGetClassObject(); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc Valid creation with LoadLibraryEx // // @rdesc TEST_PASS or TEST_FAIL // int DllGetClassObj_OleDBEnumerator::Variation_2() { return ValidCreationLoadLibraryEx(); } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc E_INVALIDARG - ppvObj = NULL // // @rdesc TEST_PASS or TEST_FAIL // int DllGetClassObj_OleDBEnumerator::Variation_3() { return NullppvObj(); } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc E_NOINTERFACE - Invalid riid // // @rdesc TEST_PASS or TEST_FAIL // int DllGetClassObj_OleDBEnumerator::Variation_4() { return Invalidriid(); } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc CLASS_E_CLASSNOTAVAILABLE - LoadLibraryEx, Bad CLSID // // @rdesc TEST_PASS or TEST_FAIL // int DllGetClassObj_OleDBEnumerator::Variation_5() { return Invalidrclsid(); } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL DllGetClassObj_OleDBEnumerator::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CDllGetClassObj::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(DllGetClassObj_MsdasqlEnumerator) //*----------------------------------------------------------------------- //| Test Case: DllGetClassObj_MsdasqlEnumerator - DllGetClassObject test for MSDASQL's Enumerator Object //| Created: 02/06/96 //| Updated: 04/25/98 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL DllGetClassObj_MsdasqlEnumerator::Init() { // {{ TCW_INIT_BASECLASS_CHECK if(CDllGetClassObj::Init()) // }} { return SetComponent(CLSID_MSDASQL_ENUMERATOR,CLSCTX_INPROC_SERVER); } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc Valid creation with CoGetClassObject // // @rdesc TEST_PASS or TEST_FAIL // int DllGetClassObj_MsdasqlEnumerator::Variation_1() { return ValidCreationCoGetClassObject(); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc Valid creation with LoadLibraryEx // // @rdesc TEST_PASS or TEST_FAIL // int DllGetClassObj_MsdasqlEnumerator::Variation_2() { return ValidCreationLoadLibraryEx(); } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc E_INVALIDARG - ppvObj = NULL // // @rdesc TEST_PASS or TEST_FAIL // int DllGetClassObj_MsdasqlEnumerator::Variation_3() { return NullppvObj(); } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc E_NOINTERFACE - Invalid riid // // @rdesc TEST_PASS or TEST_FAIL // int DllGetClassObj_MsdasqlEnumerator::Variation_4() { return Invalidriid(); } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc CLASS_E_CLASSNOTAVAILABLE - LoadLibraryEx, Bad CLSID // // @rdesc TEST_PASS or TEST_FAIL // int DllGetClassObj_MsdasqlEnumerator::Variation_5() { return Invalidrclsid(); } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL DllGetClassObj_MsdasqlEnumerator::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CDllGetClassObj::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(CreateInstance_ErrorObject) //*----------------------------------------------------------------------- //| Test Case: CreateInstance_ErrorObject - CreateInstance test for OLE DB Error Object //| Created: 02/06/96 //| Updated: 04/25/98 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL CreateInstance_ErrorObject::Init() { // {{ TCW_INIT_BASECLASS_CHECK if(CCreateInstance::Init()) // }} { return SetComponent(CLSID_EXTENDEDERRORINFO,CLSCTX_INPROC_SERVER); } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc Multiple Creations, Release in same order // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_ErrorObject::Variation_1() { return MultipleCreateReleaseSameOrder(); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc Multiple Creations, Release in opposite order // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_ErrorObject::Variation_2() { return MultipleCreateReleaseOppositeOrder(); } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc LockServer After CreateInstance // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_ErrorObject::Variation_3() { return LockServerAfter(); } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc Valid pUnkOuter // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_ErrorObject::Variation_4() { return ValidpUnkOuter(CLASS_E_NOAGGREGATION); } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc Create one object with each supported interface // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_ErrorObject::Variation_5() { GUID rgIids[2]; //We have to do separate inits because IIDs are consts //and won't work with the direct initialization of the array rgIids[0] = IID_IErrorRecords; rgIids[1] = IID_IErrorInfo; return CreateEachInterface(2, rgIids); } // }} // {{ TCW_VAR_PROTOTYPE(6) //*----------------------------------------------------------------------- // @mfunc Invalid riid // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_ErrorObject::Variation_6() { return InvalidRiid(); } // }} // {{ TCW_VAR_PROTOTYPE(7) //*----------------------------------------------------------------------- // @mfunc Null ppvObj // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_ErrorObject::Variation_7() { return NullppvObj(); } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL CreateInstance_ErrorObject::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CCreateInstance::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(CreateInstance_Provider) //*----------------------------------------------------------------------- //| Test Case: CreateInstance_Provider - CreateInstance test for the Provider //| Created: 02/06/96 //| Updated: 04/25/98 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL CreateInstance_Provider::Init() { // {{ TCW_INIT_BASECLASS_CHECK if(CCreateInstance::Init()) // }} { return SetComponent(m_pThisTestModule->m_ProviderClsid,m_pThisTestModule->m_clsctxProvider); } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc Multiple Creations, Release in same order // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_Provider::Variation_1() { return MultipleCreateReleaseSameOrder(); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc Multiple Creations, Release in opposite order // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_Provider::Variation_2() { return MultipleCreateReleaseOppositeOrder(); } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc LockServer After CreateInstance // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_Provider::Variation_3() { return LockServerAfter(); } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc Valid pUnkOuter // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_Provider::Variation_4() { //Aggregation is mandatory for provider, //this should return S_OK return ValidpUnkOuter(S_OK); } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc Create one object with each supported interface // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_Provider::Variation_5() { const ULONG TOTAL_INTERFACES = 8; //8 Possible interfaces on the DSO IID rgIids[TOTAL_INTERFACES]; IID rgSupportedIids[TOTAL_INTERFACES]; ULONG cSupportedIids = 0; ULONG ul; //We have to do separate inits because IIDs are consts //and won't work with the direct initialization of the array //List of all optional interfaces we need to determine support for rgIids[0] = IID_IUnknown; rgIids[1] = IID_IDBInitialize; rgIids[2] = IID_IDBProperties; rgIids[3] = IID_IDBCreateSession; rgIids[4] = IID_IDBInfo; rgIids[5] = IID_IPersistFile; rgIids[6] = IID_ISupportErrorInfo; rgIids[7] = IID_IPersist; //Record all the mandatory interfaces as supported //NOTE: We can't include IDBCreateSession and IDBProperties //because they can't be directly asked for on CreateInstance, //they require Initialization first. if (CHECK(CoCreateInstance(m_Clsid, NULL, m_ClsCtx, IID_IUnknown, (void **)&m_pIUnknown), S_OK)) { //Loop thru optional interfaces, finding out which ones are supported for (ul = 0; ul < TOTAL_INTERFACES; ul++) { if (S_OK == (m_hr = m_pIUnknown->QueryInterface(rgIids[ul], (void **)&m_pIUnknown2))) { //Record this interface in our supported array rgSupportedIids[cSupportedIids] = rgIids[ul]; cSupportedIids++; m_pIUnknown2->Release(); } else { //Make sure we failed because it wasn't supported if( m_hr != E_NOINTERFACE ) CHECK(m_hr, E_UNEXPECTED); } } //Release our first interface m_pIUnknown->Release(); } //Now pass the array of supported interfaces to the function return CreateEachInterface(cSupportedIids, rgSupportedIids); } // }} // {{ TCW_VAR_PROTOTYPE(6) //*----------------------------------------------------------------------- // @mfunc Invalid riid // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_Provider::Variation_6() { return InvalidRiid(); } // }} // {{ TCW_VAR_PROTOTYPE(7) //*----------------------------------------------------------------------- // @mfunc Null ppvObj // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_Provider::Variation_7() { return NullppvObj(); } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL CreateInstance_Provider::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CCreateInstance::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(CreateInstance_ErrorLookup) //*----------------------------------------------------------------------- //| Test Case: CreateInstance_ErrorLookup - CreateInstance test for Provider's Error Lookup Service //| Created: 02/06/96 //| Updated: 04/25/98 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL CreateInstance_ErrorLookup::Init() { CLSID ErrorLookupCLSID; // {{ TCW_INIT_BASECLASS_CHECK if(CCreateInstance::Init()) // }} { // Get the CLSID out of the Registry ErrorLookupCLSID = GetExtendedErrorsCLSID(); if(ErrorLookupCLSID != GUID_NULL) return SetComponent(ErrorLookupCLSID,CLSCTX_INPROC_SERVER); else return TEST_SKIPPED; } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc Multiple Creations, Release in same order // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_ErrorLookup::Variation_1() { return MultipleCreateReleaseSameOrder(); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc Multiple Creations, Release in opposite order // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_ErrorLookup::Variation_2() { return MultipleCreateReleaseOppositeOrder(); } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc LockServer After CreateInstance // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_ErrorLookup::Variation_3() { return LockServerAfter(); } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc Valid pUnkOuter // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_ErrorLookup::Variation_4() { return ValidpUnkOuter(S_OK); } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc Create one object with each supported interface // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_ErrorLookup::Variation_5() { //Only interface we support is IErrorLookup IID rgIids[1]; rgIids[0] = IID_IErrorLookup; //Create object using this interface return CreateEachInterface(1, rgIids); } // }} // {{ TCW_VAR_PROTOTYPE(6) //*----------------------------------------------------------------------- // @mfunc Invalid riid // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_ErrorLookup::Variation_6() { return InvalidRiid(); } // }} // {{ TCW_VAR_PROTOTYPE(7) //*----------------------------------------------------------------------- // @mfunc Null ppvObj // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_ErrorLookup::Variation_7() { return NullppvObj(); } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL CreateInstance_ErrorLookup::Terminate() { // TO DO: Add your own code here // {{ TCW_TERM_BASECLASS_CHECK2 return(CCreateInstance::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(CreateInstance_ConversionLibrary) //*----------------------------------------------------------------------- //| Test Case: CreateInstance_ConversionLibrary - CreateInstance test for OLE DB Conversion Library Object //| Created: 02/06/96 //| Updated: 04/25/98 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL CreateInstance_ConversionLibrary::Init() { // {{ TCW_INIT_BASECLASS_CHECK if(CCreateInstance::Init()) // }} { return SetComponent(CLSID_OLEDB_CONVERSIONLIBRARY,CLSCTX_INPROC_SERVER); } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc Multiple Creations, Release in same order // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_ConversionLibrary::Variation_1() { return MultipleCreateReleaseSameOrder(); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc Multiple Creations, Release in opposite order // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_ConversionLibrary::Variation_2() { return MultipleCreateReleaseOppositeOrder(); } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc LockServer After CreateInstance // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_ConversionLibrary::Variation_3() { return LockServerAfter(); } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc Valid pUnkOuter // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_ConversionLibrary::Variation_4() { return ValidpUnkOuter(S_OK); } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc Create one object with each supported interface // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_ConversionLibrary::Variation_5() { GUID rgIids[1]; //We have to do separate inits because IIDs are consts //and won't work with the direct initialization of the array rgIids[0] = IID_IDataConvert; return CreateEachInterface(1, rgIids); } // }} // {{ TCW_VAR_PROTOTYPE(6) //*----------------------------------------------------------------------- // @mfunc Invalid riid // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_ConversionLibrary::Variation_6() { return InvalidRiid(); } // }} // {{ TCW_VAR_PROTOTYPE(7) //*----------------------------------------------------------------------- // @mfunc Null ppvObj // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_ConversionLibrary::Variation_7() { return NullppvObj(); } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL CreateInstance_ConversionLibrary::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CCreateInstance::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(CreateInstance_OleDBEnumerator) //*----------------------------------------------------------------------- //| Test Case: CreateInstance_OleDBEnumerator - CreateInstance test for OLE DB Root Enumerator Object //| Created: 02/06/96 //| Updated: 04/25/98 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL CreateInstance_OleDBEnumerator::Init() { // {{ TCW_INIT_BASECLASS_CHECK if(CCreateInstance::Init()) // }} { return SetComponent(CLSID_OLEDB_ENUMERATOR,CLSCTX_INPROC_SERVER); } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc Multiple Creations, Release in same order // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_OleDBEnumerator::Variation_1() { return MultipleCreateReleaseSameOrder(); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc Multiple Creations, Release in opposite order // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_OleDBEnumerator::Variation_2() { return MultipleCreateReleaseOppositeOrder(); } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc LockServer After CreateInstance // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_OleDBEnumerator::Variation_3() { return LockServerAfter(); } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc Valid pUnkOuter // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_OleDBEnumerator::Variation_4() { return ValidpUnkOuter(S_OK); } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc Create one object with each supported interface // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_OleDBEnumerator::Variation_5() { GUID rgIids[2]; //We have to do separate inits because IIDs are consts //and won't work with the direct initialization of the array rgIids[0] = IID_ISourcesRowset; rgIids[1] = IID_IParseDisplayName; return CreateEachInterface(2, rgIids); } // }} // {{ TCW_VAR_PROTOTYPE(6) //*----------------------------------------------------------------------- // @mfunc Invalid riid // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_OleDBEnumerator::Variation_6() { return InvalidRiid(); } // }} // {{ TCW_VAR_PROTOTYPE(7) //*----------------------------------------------------------------------- // @mfunc Null ppvObj // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_OleDBEnumerator::Variation_7() { return NullppvObj(); } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL CreateInstance_OleDBEnumerator::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CCreateInstance::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(CreateInstance_MsdasqlEnumerator) //*----------------------------------------------------------------------- //| Test Case: CreateInstance_MsdasqlEnumerator - CreateInstance test for MSDASQL's Enumerator Object //| Created: 02/06/96 //| Updated: 04/25/98 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL CreateInstance_MsdasqlEnumerator::Init() { // {{ TCW_INIT_BASECLASS_CHECK if(CCreateInstance::Init()) // }} { return SetComponent(CLSID_MSDASQL_ENUMERATOR,CLSCTX_INPROC_SERVER); } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc Multiple Creations, Release in same order // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_MsdasqlEnumerator::Variation_1() { return MultipleCreateReleaseSameOrder(); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc Multiple Creations, Release in opposite order // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_MsdasqlEnumerator::Variation_2() { return MultipleCreateReleaseOppositeOrder(); } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc LockServer After CreateInstance // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_MsdasqlEnumerator::Variation_3() { return LockServerAfter(); } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc Valid pUnkOuter // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_MsdasqlEnumerator::Variation_4() { return ValidpUnkOuter(S_OK); } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc Create one object with each supported interface // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_MsdasqlEnumerator::Variation_5() { GUID rgIids[2]; //We have to do separate inits because IIDs are consts //and won't work with the direct initialization of the array rgIids[0] = IID_ISourcesRowset; rgIids[1] = IID_IParseDisplayName; return CreateEachInterface(2, rgIids); } // }} // {{ TCW_VAR_PROTOTYPE(6) //*----------------------------------------------------------------------- // @mfunc Invalid riid // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_MsdasqlEnumerator::Variation_6() { return InvalidRiid(); } // }} // {{ TCW_VAR_PROTOTYPE(7) //*----------------------------------------------------------------------- // @mfunc Null ppvObj // // @rdesc TEST_PASS or TEST_FAIL // int CreateInstance_MsdasqlEnumerator::Variation_7() { return NullppvObj(); } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL CreateInstance_MsdasqlEnumerator::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CCreateInstance::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(LockServer_ErrorObject) //*----------------------------------------------------------------------- //| Test Case: LockServer_ErrorObject - LockServer test for the OLE DB Error Object //| Created: 02/07/96 //| Updated: 04/25/98 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL LockServer_ErrorObject::Init() { // {{ TCW_INIT_BASECLASS_CHECK if(CLockServer::Init()) // }} { return SetComponent(CLSID_EXTENDEDERRORINFO,CLSCTX_INPROC_SERVER); } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc LockAndCreate // // @rdesc TEST_PASS or TEST_FAIL // int LockServer_ErrorObject::Variation_1() { return LockAndCreate(); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc LockAndFree // // @rdesc TEST_PASS or TEST_FAIL // int LockServer_ErrorObject::Variation_2() { return LockAndFree(); } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc LockTwice // // @rdesc TEST_PASS or TEST_FAIL // int LockServer_ErrorObject::Variation_3() { return LockTwice(); } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc LockAndCreateAndUnlock // // @rdesc TEST_PASS or TEST_FAIL // int LockServer_ErrorObject::Variation_4() { return LockAndCreateAndUnlock(); } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc LockAndUnlockAndCreate // // @rdesc TEST_PASS or TEST_FAIL // int LockServer_ErrorObject::Variation_5() { return LockAndUnlockAndCreate(); } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL LockServer_ErrorObject::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CLockServer::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(LockServer_Provider) //*----------------------------------------------------------------------- //| Test Case: LockServer_Provider - LockServer test for the Provider //| Created: 02/07/96 //| Updated: 04/25/98 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL LockServer_Provider::Init() { // {{ TCW_INIT_BASECLASS_CHECK if(CLockServer::Init()) // }} { return SetComponent(m_pThisTestModule->m_ProviderClsid,m_pThisTestModule->m_clsctxProvider); } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc LockAndCreate // // @rdesc TEST_PASS or TEST_FAIL // int LockServer_Provider::Variation_1() { return LockAndCreate(); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc LockAndFree // // @rdesc TEST_PASS or TEST_FAIL // int LockServer_Provider::Variation_2() { return LockAndFree(); } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc LockTwice // // @rdesc TEST_PASS or TEST_FAIL // int LockServer_Provider::Variation_3() { return LockTwice(); } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc LockAndCreateAndUnlock // // @rdesc TEST_PASS or TEST_FAIL // int LockServer_Provider::Variation_4() { return LockAndCreateAndUnlock(); } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc LockAndUnlockAndCreate // // @rdesc TEST_PASS or TEST_FAIL // int LockServer_Provider::Variation_5() { return LockAndUnlockAndCreate(); } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL LockServer_Provider::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CLockServer::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(LockServer_ErrorLookup) //*----------------------------------------------------------------------- //| Test Case: LockServer_ErrorLookup - LockServer test for the Provider's Error Lookup Service //| Created: 02/07/96 //| Updated: 04/25/98 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL LockServer_ErrorLookup::Init() { CLSID ErrorLookupCLSID; // {{ TCW_INIT_BASECLASS_CHECK if(CLockServer::Init()) // }} { // Get the CLSID out of the Registry ErrorLookupCLSID = GetExtendedErrorsCLSID(); if(ErrorLookupCLSID != GUID_NULL) return SetComponent(ErrorLookupCLSID,CLSCTX_INPROC_SERVER); else return TEST_SKIPPED; } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc LockAndCreate // // @rdesc TEST_PASS or TEST_FAIL // int LockServer_ErrorLookup::Variation_1() { return LockAndCreate(); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc LockAndFree // // @rdesc TEST_PASS or TEST_FAIL // int LockServer_ErrorLookup::Variation_2() { return LockAndFree(); } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc LockTwice // // @rdesc TEST_PASS or TEST_FAIL // int LockServer_ErrorLookup::Variation_3() { return LockTwice(); } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc LockAndCreateAndUnlock // // @rdesc TEST_PASS or TEST_FAIL // int LockServer_ErrorLookup::Variation_4() { return LockAndCreateAndUnlock(); } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc LockAndUnlockAndCreate // // @rdesc TEST_PASS or TEST_FAIL // int LockServer_ErrorLookup::Variation_5() { return LockAndUnlockAndCreate(); } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL LockServer_ErrorLookup::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CLockServer::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(LockServer_ConversionLibrary) //*----------------------------------------------------------------------- //| Test Case: LockServer_ConversionLibrary - LockServer test for OLE DB Conversion Library Object //| Created: 02/07/96 //| Updated: 04/25/98 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL LockServer_ConversionLibrary::Init() { // {{ TCW_INIT_BASECLASS_CHECK if(CLockServer::Init()) // }} { return SetComponent(CLSID_OLEDB_CONVERSIONLIBRARY,CLSCTX_INPROC_SERVER); } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc LockAndCreate // // @rdesc TEST_PASS or TEST_FAIL // int LockServer_ConversionLibrary::Variation_1() { return LockAndCreate(); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc LockAndFree // // @rdesc TEST_PASS or TEST_FAIL // int LockServer_ConversionLibrary::Variation_2() { return LockAndFree(); } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc LockTwice // // @rdesc TEST_PASS or TEST_FAIL // int LockServer_ConversionLibrary::Variation_3() { return LockTwice(); } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc LockAndCreateAndUnlock // // @rdesc TEST_PASS or TEST_FAIL // int LockServer_ConversionLibrary::Variation_4() { return LockAndCreateAndUnlock(); } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc LockAndUnlockAndCreate // // @rdesc TEST_PASS or TEST_FAIL // int LockServer_ConversionLibrary::Variation_5() { return LockAndUnlockAndCreate(); } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL LockServer_ConversionLibrary::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CLockServer::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(LockServer_OleDBEnumerator) //*----------------------------------------------------------------------- //| Test Case: LockServer_OleDBEnumerator - LockServer test for OLE DB Root Enumerator Object //| Created: 02/07/96 //| Updated: 04/25/98 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL LockServer_OleDBEnumerator::Init() { // {{ TCW_INIT_BASECLASS_CHECK if(CLockServer::Init()) // }} { return SetComponent(CLSID_OLEDB_ENUMERATOR,CLSCTX_INPROC_SERVER); } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc LockAndCreate // // @rdesc TEST_PASS or TEST_FAIL // int LockServer_OleDBEnumerator::Variation_1() { return LockAndCreate(); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc LockAndFree // // @rdesc TEST_PASS or TEST_FAIL // int LockServer_OleDBEnumerator::Variation_2() { return LockAndFree(); } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc LockTwice // // @rdesc TEST_PASS or TEST_FAIL // int LockServer_OleDBEnumerator::Variation_3() { return LockTwice(); } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc LockAndCreateAndUnlock // // @rdesc TEST_PASS or TEST_FAIL // int LockServer_OleDBEnumerator::Variation_4() { return LockAndCreateAndUnlock(); } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc LockAndUnlockAndCreate // // @rdesc TEST_PASS or TEST_FAIL // int LockServer_OleDBEnumerator::Variation_5() { return LockAndUnlockAndCreate(); } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL LockServer_OleDBEnumerator::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CLockServer::Terminate()); } // }} // }} // }} // {{ TCW_TC_PROTOTYPE(LockServer_MsdasqlEnumerator) //*----------------------------------------------------------------------- //| Test Case: LockServer_MsdasqlEnumerator - LockServer test for MSDASQL's Enumerator Object //| Created: 02/07/96 //| Updated: 04/25/98 //*----------------------------------------------------------------------- //-------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL LockServer_MsdasqlEnumerator::Init() { // {{ TCW_INIT_BASECLASS_CHECK if(CLockServer::Init()) // }} { return SetComponent(CLSID_MSDASQL_ENUMERATOR,CLSCTX_INPROC_SERVER); } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc LockAndCreate // // @rdesc TEST_PASS or TEST_FAIL // int LockServer_MsdasqlEnumerator::Variation_1() { return LockAndCreate(); } // }} // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc LockAndFree // // @rdesc TEST_PASS or TEST_FAIL // int LockServer_MsdasqlEnumerator::Variation_2() { return LockAndFree(); } // }} // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc LockTwice // // @rdesc TEST_PASS or TEST_FAIL // int LockServer_MsdasqlEnumerator::Variation_3() { return LockTwice(); } // }} // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc LockAndCreateAndUnlock // // @rdesc TEST_PASS or TEST_FAIL // int LockServer_MsdasqlEnumerator::Variation_4() { return LockAndCreateAndUnlock(); } // }} // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc LockAndUnlockAndCreate // // @rdesc TEST_PASS or TEST_FAIL // int LockServer_MsdasqlEnumerator::Variation_5() { return LockAndUnlockAndCreate(); } // }} // {{ TCW_TERMINATE_METHOD //-------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TRUE or FALSE // BOOL LockServer_MsdasqlEnumerator::Terminate() { // {{ TCW_TERM_BASECLASS_CHECK2 return(CLockServer::Terminate()); } // }} // }} // }}