/*** *cinvex.cpp * * Copyright (C) 1992, Microsoft Corporation. All Rights Reserved. * Information Contained Herein Is Proprietary and Confidential. * *Purpose: * This file implements the CInvokeExcepinfoSuite test object. The * purpose of this object is to drive testing of the EXCEPINFO * remoting support. * *Revision History: * * [00] 02-Dec-92 bradlo: Created. * *Implementation Notes: * *****************************************************************************/ #include "disptest.h" #include "tstsuite.h" extern OLECHAR FAR* g_szCExcepinfo; struct TEST{ HRESULT (*pfnTest)(int); NAMEDESC namedesc; OLECHAR FAR* szName; }; OLECHAR FAR* rgszExcepinfo0[] = { OLESTR("excepinfo0") }; OLECHAR FAR* rgszExcepinfo1[] = { OLESTR("excepinfo1") }; OLECHAR FAR* rgszExcepinfo2[] = { OLESTR("excepinfo2") }; HRESULT DefExcepinfoTest(int iTest); HRESULT DefExcepinfoTestW(int iTest); static TEST rgtest[] = { { DefExcepinfoTest, {rgszExcepinfo0, DIM(rgszExcepinfo0)}, OLESTR("excepinfo-0") }, { DefExcepinfoTest, {rgszExcepinfo1, DIM(rgszExcepinfo1)}, OLESTR("excepinfo-1") }, { DefExcepinfoTest, {rgszExcepinfo2, DIM(rgszExcepinfo2)}, OLESTR("excepinfo-2") }, }; SUITE_CONSTRUCTION_IMPL(CInvokeExcepinfoSuite) SUITE_IUNKNOWN_IMPL(CInvokeExcepinfoSuite) //--------------------------------------------------------------------- // ITestSuite Methods //--------------------------------------------------------------------- STDMETHODIMP CInvokeExcepinfoSuite::GetNameOfSuite(BSTR FAR* pbstr) { return ErrBstrAlloc(OLESTR("Invoke Excepinfo"), pbstr); } STDMETHODIMP CInvokeExcepinfoSuite::GetNameOfLogfile(BSTR FAR* pbstr) { return ErrBstrAlloc(OLESTR("invex.log"), pbstr); } STDMETHODIMP CInvokeExcepinfoSuite::GetTestCount(unsigned int FAR* pcTests) { *pcTests = DIM(rgtest); return NOERROR; } STDMETHODIMP CInvokeExcepinfoSuite::GetNameOfTest(unsigned int iTest, BSTR FAR* pbstr) { if(iTest >= DIM(rgtest)) return RESULT(E_FAIL); return ErrBstrAlloc(rgtest[iTest].szName, pbstr); } HRESULT DefExcepinfoTest(int iTest) { HRESULT hresult; EXCEPINFO excepinfo; DISPID FAR* rgdispid; IDispatch FAR* pdisp; DISPPARAMS dispparams; IfFailGo(CreateObject(g_szCExcepinfo, &pdisp), LError0); IfFailGo( GetDISPIDs(pdisp, &rgtest[iTest].namedesc, &rgdispid), LError1); dispparams.cArgs = 0; dispparams.cNamedArgs = 0; excepinfo.bstrSource = NULL; excepinfo.bstrHelpFile = NULL; excepinfo.bstrDescription = NULL; hresult = DoInvoke(pdisp, rgdispid[0], &dispparams, NULL, &excepinfo, NULL); if(GetScode(hresult) != DISP_E_EXCEPTION) goto LError2; DbPrExcepinfo(&excepinfo); SysFreeString(excepinfo.bstrSource); SysFreeString(excepinfo.bstrDescription); SysFreeString(excepinfo.bstrHelpFile); hresult = NOERROR; LError2:; delete rgdispid; LError1:; pdisp->Release(); LError0:; return hresult; } /*** *HRESULT CInvokeExcepinfoSuite::DoTest(unsigned int) *Purpose: * Execute a single CInvokeExcepinfoSuite test. * *Entry: * iTest = the index of the test to execute * *Exit: * return value = HRESULT * ***********************************************************************/ STDMETHODIMP CInvokeExcepinfoSuite::DoTest(unsigned int iTest) { IfFailRet(rgtest[iTest].pfnTest(iTest)); return NOERROR; }