ReactOS 0.4.17-dev-357-ga8f14ff
caller.c File Reference
#include <stdio.h>
#include <ole2.h>
#include <dispex.h>
#include <activscp.h>
#include <objsafe.h>
#include "wine/test.h"
Include dependency graph for caller.c:

Go to the source code of this file.

Macros

#define COBJMACROS
 
#define CONST_VTABLE
 
#define IActiveScriptParse_QueryInterface   IActiveScriptParse32_QueryInterface
 
#define IActiveScriptParse_Release   IActiveScriptParse32_Release
 
#define IActiveScriptParse_InitNew   IActiveScriptParse32_InitNew
 
#define IActiveScriptParse_ParseScriptText   IActiveScriptParse32_ParseScriptText
 
#define DEFINE_EXPECT(func)    static BOOL expect_ ## func = FALSE, called_ ## func = FALSE
 
#define SET_EXPECT(func)    expect_ ## func = TRUE
 
#define CHECK_EXPECT2(func)
 
#define CHECK_EXPECT(func)
 
#define CHECK_CALLED(func)
 
#define CLEAR_CALLED(func)    expect_ ## func = called_ ## func = FALSE
 
#define DISPID_TEST_TESTGETCALLER   0x1000
 
#define DISPID_TEST_TESTGETCALLERVBS   0x1001
 
#define DISPID_TEST_TESTGETCALLERNESTED   0x1002
 
#define parse_script(a, s)   _parse_script(__LINE__,a,s)
 

Functions

 DEFINE_EXPECT (sp_caller_QI_NULL)
 
 DEFINE_EXPECT (site_QI_NULL)
 
 DEFINE_EXPECT (testGetCaller)
 
 DEFINE_EXPECT (testGetCallerVBS)
 
 DEFINE_EXPECT (testGetCallerNested)
 
 DEFINE_EXPECT (OnEnterScript)
 
 DEFINE_EXPECT (OnLeaveScript)
 
static void _parse_script (unsigned line, IActiveScript *active_script, const WCHAR *script)
 
static HRESULT WINAPI sp_caller_QueryInterface (IServiceProvider *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI sp_caller_AddRef (IServiceProvider *iface)
 
static ULONG WINAPI sp_caller_Release (IServiceProvider *iface)
 
static HRESULT WINAPI sp_caller_QueryService (IServiceProvider *iface, REFGUID guidService, REFIID riid, void **ppv)
 
static HRESULT WINAPI DispatchEx_QueryInterface (IDispatchEx *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI DispatchEx_AddRef (IDispatchEx *iface)
 
static ULONG WINAPI DispatchEx_Release (IDispatchEx *iface)
 
static HRESULT WINAPI DispatchEx_GetTypeInfoCount (IDispatchEx *iface, UINT *pctinfo)
 
static HRESULT WINAPI DispatchEx_GetTypeInfo (IDispatchEx *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
 
static HRESULT WINAPI DispatchEx_GetIDsOfNames (IDispatchEx *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
 
static HRESULT WINAPI DispatchEx_Invoke (IDispatchEx *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
 
static HRESULT WINAPI DispatchEx_DeleteMemberByName (IDispatchEx *iface, BSTR bstrName, DWORD grfdex)
 
static HRESULT WINAPI DispatchEx_DeleteMemberByDispID (IDispatchEx *iface, DISPID id)
 
static HRESULT WINAPI DispatchEx_GetMemberProperties (IDispatchEx *iface, DISPID id, DWORD grfdexFetch, DWORD *pgrfdex)
 
static HRESULT WINAPI DispatchEx_GetMemberName (IDispatchEx *iface, DISPID id, BSTR *pbstrName)
 
static HRESULT WINAPI DispatchEx_GetNextDispID (IDispatchEx *iface, DWORD grfdex, DISPID id, DISPID *pid)
 
static HRESULT WINAPI DispatchEx_GetNameSpaceParent (IDispatchEx *iface, IUnknown **ppunk)
 
static HRESULT WINAPI Test_GetDispID (IDispatchEx *iface, BSTR bstrName, DWORD grfdex, DISPID *pid)
 
static HRESULT WINAPI Test_InvokeEx (IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp, VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
 
static HRESULT WINAPI ActiveScriptSite_QueryInterface (IActiveScriptSite *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI ActiveScriptSite_AddRef (IActiveScriptSite *iface)
 
static ULONG WINAPI ActiveScriptSite_Release (IActiveScriptSite *iface)
 
static HRESULT WINAPI ActiveScriptSite_GetLCID (IActiveScriptSite *iface, LCID *plcid)
 
static HRESULT WINAPI ActiveScriptSite_GetItemInfo (IActiveScriptSite *iface, LPCOLESTR pstrName, DWORD dwReturnMask, IUnknown **ppiunkItem, ITypeInfo **ppti)
 
static HRESULT WINAPI ActiveScriptSite_GetDocVersionString (IActiveScriptSite *iface, BSTR *pbstrVersion)
 
static HRESULT WINAPI ActiveScriptSite_OnScriptTerminate (IActiveScriptSite *iface, const VARIANT *pvarResult, const EXCEPINFO *pexcepinfo)
 
static HRESULT WINAPI ActiveScriptSite_OnStateChange (IActiveScriptSite *iface, SCRIPTSTATE ssScriptState)
 
static HRESULT WINAPI ActiveScriptSite_OnScriptError (IActiveScriptSite *iface, IActiveScriptError *pscripterror)
 
static HRESULT WINAPI ActiveScriptSite_OnEnterScript (IActiveScriptSite *iface)
 
static HRESULT WINAPI ActiveScriptSite_OnLeaveScript (IActiveScriptSite *iface)
 
static IActiveScriptcreate_script (void)
 
static void run_scripts (void)
 
 START_TEST (caller)
 

Variables

const CLSID CLSID_VBScript
 
static IActiveScriptactive_script
 
static IServiceProvidertest_get_caller_sp
 
static IServiceProvider sp_caller_obj = { &sp_caller_vtbl }
 
static const IServiceProviderVtbl sp_caller_vtbl
 
static IDispatchExVtbl testObjVtbl
 
static IDispatchEx testObj = { &testObjVtbl }
 
static const IActiveScriptSiteVtbl ActiveScriptSiteVtbl
 
static IActiveScriptSite ActiveScriptSite = { &ActiveScriptSiteVtbl }
 

Macro Definition Documentation

◆ CHECK_CALLED

#define CHECK_CALLED (   func)
Value:
do { \
ok(called_ ## func, "expected " #func "\n"); \
expect_ ## func = called_ ## func = FALSE; \
}while(0)
#define FALSE
Definition: types.h:117
GLenum func
Definition: glext.h:6028
#define expect_(expected, got, precision)
Definition: font.c:34

Definition at line 67 of file caller.c.

◆ CHECK_EXPECT

#define CHECK_EXPECT (   func)
Value:
do { \
CHECK_EXPECT2(func); \
expect_ ## func = FALSE; \
}while(0)

Definition at line 61 of file caller.c.

◆ CHECK_EXPECT2

#define CHECK_EXPECT2 (   func)
Value:
do { \
ok(expect_ ##func, "unexpected call " #func "\n"); \
called_ ## func = TRUE; \
}while(0)
#define TRUE
Definition: types.h:120

Definition at line 55 of file caller.c.

◆ CLEAR_CALLED

#define CLEAR_CALLED (   func)     expect_ ## func = called_ ## func = FALSE

Definition at line 73 of file caller.c.

◆ COBJMACROS

#define COBJMACROS

Definition at line 21 of file caller.c.

◆ CONST_VTABLE

#define CONST_VTABLE

Definition at line 22 of file caller.c.

◆ DEFINE_EXPECT

#define DEFINE_EXPECT (   func)     static BOOL expect_ ## func = FALSE, called_ ## func = FALSE

Definition at line 49 of file caller.c.

◆ DISPID_TEST_TESTGETCALLER

#define DISPID_TEST_TESTGETCALLER   0x1000

Definition at line 87 of file caller.c.

◆ DISPID_TEST_TESTGETCALLERNESTED

#define DISPID_TEST_TESTGETCALLERNESTED   0x1002

Definition at line 89 of file caller.c.

◆ DISPID_TEST_TESTGETCALLERVBS

#define DISPID_TEST_TESTGETCALLERVBS   0x1001

Definition at line 88 of file caller.c.

◆ IActiveScriptParse_InitNew

#define IActiveScriptParse_InitNew   IActiveScriptParse32_InitNew

Definition at line 42 of file caller.c.

◆ IActiveScriptParse_ParseScriptText

#define IActiveScriptParse_ParseScriptText   IActiveScriptParse32_ParseScriptText

Definition at line 43 of file caller.c.

◆ IActiveScriptParse_QueryInterface

#define IActiveScriptParse_QueryInterface   IActiveScriptParse32_QueryInterface

Definition at line 40 of file caller.c.

◆ IActiveScriptParse_Release

#define IActiveScriptParse_Release   IActiveScriptParse32_Release

Definition at line 41 of file caller.c.

◆ parse_script

#define parse_script (   a,
  s 
)    _parse_script(__LINE__,a,s)

Definition at line 91 of file caller.c.

◆ SET_EXPECT

#define SET_EXPECT (   func)     expect_ ## func = TRUE

Definition at line 52 of file caller.c.

Function Documentation

◆ _parse_script()

static void _parse_script ( unsigned  line,
IActiveScript active_script,
const WCHAR script 
)
static

Definition at line 92 of file caller.c.

93{
94 IActiveScriptParse *parser;
96
97 hres = IActiveScript_QueryInterface(active_script, &IID_IActiveScriptParse, (void**)&parser);
98 ok_(__FILE__,line)(hres == S_OK, "Could not get IActiveScriptParse: %08lx\n", hres);
99
101 ok_(__FILE__,line)(hres == S_OK, "ParseScriptText failed: %08lx\n", hres);
103}
#define ok_(x1, x2)
Definition: atltest.h:61
#define NULL
Definition: types.h:112
#define S_OK
Definition: intsafe.h:52
#define IActiveScriptParse_ParseScriptText
Definition: caller.c:43
#define IActiveScriptParse_Release
Definition: caller.c:41
HRESULT hres
Definition: protocol.c:465
script
Definition: msipriv.h:383
Definition: parser.c:49
Definition: import.c:81
static IActiveScript * active_script
Definition: caller.c:84

◆ ActiveScriptSite_AddRef()

static ULONG WINAPI ActiveScriptSite_AddRef ( IActiveScriptSite iface)
static

Definition at line 397 of file caller.c.

398{
399 return 2;
400}

◆ ActiveScriptSite_GetDocVersionString()

static HRESULT WINAPI ActiveScriptSite_GetDocVersionString ( IActiveScriptSite iface,
BSTR pbstrVersion 
)
static

Definition at line 424 of file caller.c.

425{
426 return E_NOTIMPL;
427}
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ ActiveScriptSite_GetItemInfo()

static HRESULT WINAPI ActiveScriptSite_GetItemInfo ( IActiveScriptSite iface,
LPCOLESTR  pstrName,
DWORD  dwReturnMask,
IUnknown **  ppiunkItem,
ITypeInfo **  ppti 
)
static

Definition at line 413 of file caller.c.

415{
416 ok(dwReturnMask == SCRIPTINFO_IUNKNOWN, "unexpected dwReturnMask %lx\n", dwReturnMask);
417 ok(!ppti, "ppti != NULL\n");
418 ok(!lstrcmpW(pstrName, L"test"), "pstrName = %s\n", wine_dbgstr_w(pstrName));
419
420 *ppiunkItem = (IUnknown*)&testObj;
421 return S_OK;
422}
#define ok(value,...)
Definition: atltest.h:57
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4152
#define L(x)
Definition: resources.c:13
static IDispatchEx testObj
Definition: caller.c:569
#define wine_dbgstr_w
Definition: kernel32.h:34

◆ ActiveScriptSite_GetLCID()

static HRESULT WINAPI ActiveScriptSite_GetLCID ( IActiveScriptSite iface,
LCID plcid 
)
static

Definition at line 407 of file caller.c.

408{
409 *plcid = GetUserDefaultLCID();
410 return S_OK;
411}
LCID WINAPI GetUserDefaultLCID(void)
Definition: locale.c:1216

◆ ActiveScriptSite_OnEnterScript()

static HRESULT WINAPI ActiveScriptSite_OnEnterScript ( IActiveScriptSite iface)
static

Definition at line 445 of file caller.c.

446{
447 CHECK_EXPECT(OnEnterScript);
448 return E_NOTIMPL;
449}
#define CHECK_EXPECT(func)
Definition: caller.c:62

◆ ActiveScriptSite_OnLeaveScript()

static HRESULT WINAPI ActiveScriptSite_OnLeaveScript ( IActiveScriptSite iface)
static

Definition at line 451 of file caller.c.

452{
453 CHECK_EXPECT(OnLeaveScript);
454 return E_NOTIMPL;
455}

◆ ActiveScriptSite_OnScriptError()

static HRESULT WINAPI ActiveScriptSite_OnScriptError ( IActiveScriptSite iface,
IActiveScriptError pscripterror 
)
static

Definition at line 440 of file caller.c.

441{
442 return E_NOTIMPL;
443}

◆ ActiveScriptSite_OnScriptTerminate()

static HRESULT WINAPI ActiveScriptSite_OnScriptTerminate ( IActiveScriptSite iface,
const VARIANT pvarResult,
const EXCEPINFO *  pexcepinfo 
)
static

Definition at line 429 of file caller.c.

431{
432 return E_NOTIMPL;
433}

◆ ActiveScriptSite_OnStateChange()

static HRESULT WINAPI ActiveScriptSite_OnStateChange ( IActiveScriptSite iface,
SCRIPTSTATE  ssScriptState 
)
static

Definition at line 435 of file caller.c.

436{
437 return E_NOTIMPL;
438}

◆ ActiveScriptSite_QueryInterface()

static HRESULT WINAPI ActiveScriptSite_QueryInterface ( IActiveScriptSite iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 380 of file caller.c.

381{
383 *ppv = iface;
384 }else if(IsEqualGUID(&IID_IActiveScriptSite, riid)) {
385 *ppv = iface;
386 }else {
388 CHECK_EXPECT(site_QI_NULL);
389 *ppv = NULL;
390 return E_NOINTERFACE;
391 }
392
393 IUnknown_AddRef((IUnknown*)*ppv);
394 return S_OK;
395}
const GUID IID_IUnknown
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define IID_NULL
Definition: guiddef.h:98
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ ActiveScriptSite_Release()

static ULONG WINAPI ActiveScriptSite_Release ( IActiveScriptSite iface)
static

Definition at line 402 of file caller.c.

403{
404 return 1;
405}

◆ create_script()

static IActiveScript * create_script ( void  )
static

Definition at line 473 of file caller.c.

474{
475 IActiveScriptParse *parser;
478
479 hres = CoCreateInstance(&CLSID_VBScript, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
480 &IID_IActiveScript, (void**)&script);
481 if(FAILED(hres))
482 return NULL;
483
484 hres = IActiveScript_QueryInterface(script, &IID_IActiveScriptParse, (void**)&parser);
485 ok(hres == S_OK, "Could not get IActiveScriptParse: %08lx\n", hres);
486
488 ok(hres == S_OK, "InitNew failed: %08lx\n", hres);
490
491 hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
492 ok(hres == S_OK, "SetScriptSite failed: %08lx\n", hres);
493
494 hres = IActiveScript_AddNamedItem(script, L"test",
495 SCRIPTITEM_ISVISIBLE|SCRIPTITEM_ISSOURCE|SCRIPTITEM_GLOBALMEMBERS);
496 ok(hres == S_OK, "AddNamedItem failed: %08lx\n", hres);
497
498 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_STARTED);
499 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_STARTED) failed: %08lx\n", hres);
500
501 return script;
502}
@ SCRIPTSTATE_STARTED
Definition: activscp.idl:58
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
Definition: combase.c:1685
#define FAILED(hr)
Definition: intsafe.h:51
#define IActiveScriptParse_InitNew
Definition: caller.c:42
static IActiveScriptSite ActiveScriptSite
Definition: caller.c:662
const CLSID CLSID_VBScript

◆ DEFINE_EXPECT() [1/7]

DEFINE_EXPECT ( OnEnterScript  )

◆ DEFINE_EXPECT() [2/7]

DEFINE_EXPECT ( OnLeaveScript  )

◆ DEFINE_EXPECT() [3/7]

DEFINE_EXPECT ( site_QI_NULL  )

◆ DEFINE_EXPECT() [4/7]

DEFINE_EXPECT ( sp_caller_QI_NULL  )

◆ DEFINE_EXPECT() [5/7]

DEFINE_EXPECT ( testGetCaller  )

◆ DEFINE_EXPECT() [6/7]

DEFINE_EXPECT ( testGetCallerNested  )

◆ DEFINE_EXPECT() [7/7]

DEFINE_EXPECT ( testGetCallerVBS  )

◆ DispatchEx_AddRef()

static ULONG WINAPI DispatchEx_AddRef ( IDispatchEx iface)
static

Definition at line 170 of file caller.c.

171{
172 return 2;
173}

◆ DispatchEx_DeleteMemberByDispID()

static HRESULT WINAPI DispatchEx_DeleteMemberByDispID ( IDispatchEx iface,
DISPID  id 
)
static

Definition at line 211 of file caller.c.

212{
213 ok(0, "unexpected call\n");
214 return E_NOTIMPL;
215}

◆ DispatchEx_DeleteMemberByName()

static HRESULT WINAPI DispatchEx_DeleteMemberByName ( IDispatchEx iface,
BSTR  bstrName,
DWORD  grfdex 
)
static

Definition at line 205 of file caller.c.

206{
207 ok(0, "unexpected call\n");
208 return E_NOTIMPL;
209}

◆ DispatchEx_GetIDsOfNames()

static HRESULT WINAPI DispatchEx_GetIDsOfNames ( IDispatchEx iface,
REFIID  riid,
LPOLESTR *  rgszNames,
UINT  cNames,
LCID  lcid,
DISPID rgDispId 
)
static

Definition at line 191 of file caller.c.

193{
194 ok(0, "unexpected call\n");
195 return E_NOTIMPL;
196}

◆ DispatchEx_GetMemberName()

static HRESULT WINAPI DispatchEx_GetMemberName ( IDispatchEx iface,
DISPID  id,
BSTR pbstrName 
)
static

Definition at line 223 of file caller.c.

224{
225 ok(0, "unexpected call\n");
226 return E_NOTIMPL;
227}

◆ DispatchEx_GetMemberProperties()

static HRESULT WINAPI DispatchEx_GetMemberProperties ( IDispatchEx iface,
DISPID  id,
DWORD  grfdexFetch,
DWORD pgrfdex 
)
static

Definition at line 217 of file caller.c.

218{
219 ok(0, "unexpected call\n");
220 return E_NOTIMPL;
221}

◆ DispatchEx_GetNameSpaceParent()

static HRESULT WINAPI DispatchEx_GetNameSpaceParent ( IDispatchEx iface,
IUnknown **  ppunk 
)
static

Definition at line 235 of file caller.c.

236{
237 ok(0, "unexpected call\n");
238 return E_NOTIMPL;
239}

◆ DispatchEx_GetNextDispID()

static HRESULT WINAPI DispatchEx_GetNextDispID ( IDispatchEx iface,
DWORD  grfdex,
DISPID  id,
DISPID pid 
)
static

Definition at line 229 of file caller.c.

230{
231 ok(0, "unexpected call\n");
232 return E_NOTIMPL;
233}

◆ DispatchEx_GetTypeInfo()

static HRESULT WINAPI DispatchEx_GetTypeInfo ( IDispatchEx iface,
UINT  iTInfo,
LCID  lcid,
ITypeInfo **  ppTInfo 
)
static

Definition at line 186 of file caller.c.

187{
188 return E_NOTIMPL;
189}

◆ DispatchEx_GetTypeInfoCount()

static HRESULT WINAPI DispatchEx_GetTypeInfoCount ( IDispatchEx iface,
UINT pctinfo 
)
static

Definition at line 180 of file caller.c.

181{
182 ok(0, "unexpected call\n");
183 return E_NOTIMPL;
184}

◆ DispatchEx_Invoke()

static HRESULT WINAPI DispatchEx_Invoke ( IDispatchEx iface,
DISPID  dispIdMember,
REFIID  riid,
LCID  lcid,
WORD  wFlags,
DISPPARAMS *  pDispParams,
VARIANT pVarResult,
EXCEPINFO *  pExcepInfo,
UINT puArgErr 
)
static

Definition at line 198 of file caller.c.

200{
201 ok(0, "unexpected call\n");
202 return E_NOTIMPL;
203}

◆ DispatchEx_QueryInterface()

static HRESULT WINAPI DispatchEx_QueryInterface ( IDispatchEx iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 154 of file caller.c.

155{
157 *ppv = iface;
158 }else if(IsEqualGUID(riid, &IID_IDispatch) || IsEqualGUID(riid, &IID_IDispatchEx)) {
159 *ppv = iface;
160 }else if(IsEqualGUID(&IID_IObjectSafety, riid)) {
161 ok(0, "Unexpected IID_IObjectSafety query\n");
162 }else {
163 *ppv = NULL;
164 return E_NOINTERFACE;
165 }
166
167 return S_OK;
168}
const GUID IID_IDispatch

◆ DispatchEx_Release()

static ULONG WINAPI DispatchEx_Release ( IDispatchEx iface)
static

Definition at line 175 of file caller.c.

176{
177 return 1;
178}

◆ run_scripts()

static void run_scripts ( void  )
static

Definition at line 504 of file caller.c.

505{
506 DISPPARAMS dp = { 0 };
507 IDispatchEx *dispex;
508 IDispatch *disp;
509 DISPID dispid;
511 BSTR bstr;
512
514
515 SET_EXPECT(OnEnterScript);
516 SET_EXPECT(OnLeaveScript);
517 SET_EXPECT(testGetCallerVBS);
519 L"Sub testGetCallerFunc\nCall testGetCaller\nEnd Sub\n"
520 L"Call testGetCallerVBS(42)");
521 CHECK_CALLED(testGetCallerVBS);
522 CHECK_CALLED(OnLeaveScript);
523 CHECK_CALLED(OnEnterScript);
524
525 hres = IActiveScript_GetScriptDispatch(active_script, NULL, &disp);
526 ok(hres == S_OK, "GetScriptDispatch failed: %08lx\n", hres);
527 hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex);
528 ok(hres == S_OK, "Could not get IDispatchEx: %08lx\n", hres);
529 IDispatch_Release(disp);
530 bstr = SysAllocString(L"testGetCallerFunc");
531 hres = IDispatchEx_GetDispID(dispex, bstr, 0, &dispid);
532 ok(hres == S_OK, "GetDispID failed: %08lx\n", hres);
533 SysFreeString(bstr);
534
535 SET_EXPECT(OnEnterScript);
536 SET_EXPECT(OnLeaveScript);
537 SET_EXPECT(testGetCaller);
538 hres = IDispatchEx_InvokeEx(dispex, dispid, 0, DISPATCH_METHOD, &dp, NULL, NULL, NULL);
539 ok(hres == S_OK, "InvokeEx failed: %08lx\n", hres);
540 CHECK_CALLED(testGetCaller);
541 CHECK_CALLED(OnLeaveScript);
543 SET_EXPECT(OnEnterScript);
544 SET_EXPECT(OnLeaveScript);
545 SET_EXPECT(testGetCaller);
546 hres = IDispatchEx_InvokeEx(dispex, dispid, 0, DISPATCH_METHOD, &dp, NULL, NULL, test_get_caller_sp);
547 ok(hres == S_OK, "InvokeEx failed: %08lx\n", hres);
548 CHECK_CALLED(testGetCaller);
549 CHECK_CALLED(OnLeaveScript);
550 IDispatchEx_Release(dispex);
551
552 IActiveScript_Release(active_script);
554}
OLECHAR * BSTR
Definition: compat.h:2293
#define SET_EXPECT(func)
Definition: caller.c:53
static IServiceProvider sp_caller_obj
Definition: caller.c:276
static IActiveScriptParse * create_script(void)
Definition: caller.c:673
#define parse_script(p, s)
Definition: caller.c:664
#define CHECK_CALLED(func)
Definition: caller.c:68
static IServiceProvider * test_get_caller_sp
Definition: caller.c:89
static VARIANTARG static DISPID
Definition: ordinal.c:49
struct stdole::DISPPARAMS DISPPARAMS
BSTR WINAPI SysAllocString(LPCOLESTR str)
Definition: oleaut.c:238
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:271
#define DISPATCH_METHOD
Definition: oleauto.h:1006

◆ sp_caller_AddRef()

static ULONG WINAPI sp_caller_AddRef ( IServiceProvider iface)
static

Definition at line 121 of file caller.c.

122{
123 return 2;
124}

◆ sp_caller_QueryInterface()

static HRESULT WINAPI sp_caller_QueryInterface ( IServiceProvider iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 107 of file caller.c.

108{
109 if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IServiceProvider, riid))
110 *ppv = &sp_caller_obj;
111 else {
112 ok(IsEqualGUID(&IID_NULL, riid), "unexpected riid %s\n", wine_dbgstr_guid(riid));
113 CHECK_EXPECT(sp_caller_QI_NULL);
114 *ppv = NULL;
115 return E_NOINTERFACE;
116 }
117
118 return S_OK;
119}
static __inline const char * wine_dbgstr_guid(const GUID *id)
Definition: debug.h:171

◆ sp_caller_QueryService()

static HRESULT WINAPI sp_caller_QueryService ( IServiceProvider iface,
REFGUID  guidService,
REFIID  riid,
void **  ppv 
)
static

Definition at line 131 of file caller.c.

133{
134 if(IsEqualGUID(guidService, &SID_GetCaller)) {
135 ok(IsEqualGUID(riid, &IID_IServiceProvider), "unexpected riid %s\n", wine_dbgstr_guid(riid));
136 *ppv = NULL;
137 return S_OK;
138 }
139
140 ok(0, "unexpected guidService %s with riid %s\n", wine_dbgstr_guid(guidService), wine_dbgstr_guid(riid));
141 *ppv = NULL;
142 return E_NOINTERFACE;
143}

◆ sp_caller_Release()

static ULONG WINAPI sp_caller_Release ( IServiceProvider iface)
static

Definition at line 126 of file caller.c.

127{
128 return 1;
129}

◆ START_TEST()

START_TEST ( caller  )

Definition at line 556 of file caller.c.

557{
559
560 run_scripts();
561
563}
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: combase.c:2842
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
Definition: compobj.c:531
static void run_scripts(void)
Definition: caller.c:705

◆ Test_GetDispID()

static HRESULT WINAPI Test_GetDispID ( IDispatchEx iface,
BSTR  bstrName,
DWORD  grfdex,
DISPID pid 
)
static

Definition at line 241 of file caller.c.

242{
243 if(!lstrcmpW(bstrName, L"testGetCaller")) {
244 ok(grfdex == fdexNameCaseInsensitive, "grfdex = %lx\n", grfdex);
246 return S_OK;
247 }
248 if(!lstrcmpW(bstrName, L"testGetCallerVBS")) {
249 ok(grfdex == fdexNameCaseInsensitive, "grfdex = %lx\n", grfdex);
251 return S_OK;
252 }
253 if(!lstrcmpW(bstrName, L"testGetCallerNested")) {
254 ok(grfdex == fdexNameCaseInsensitive, "grfdex = %lx\n", grfdex);
256 return S_OK;
257 }
258
259 return E_NOTIMPL;
260}
#define DISPID_TEST_TESTGETCALLER
Definition: caller.c:92
#define DISPID_TEST_TESTGETCALLERNESTED
Definition: caller.c:94
#define DISPID_TEST_TESTGETCALLERVBS
Definition: caller.c:88
_In_ ULONG_PTR _In_ ULONG _Out_ ULONG_PTR * pid
Definition: winddi.h:3837

◆ Test_InvokeEx()

static HRESULT WINAPI Test_InvokeEx ( IDispatchEx iface,
DISPID  id,
LCID  lcid,
WORD  wFlags,
DISPPARAMS *  pdp,
VARIANT pvarRes,
EXCEPINFO *  pei,
IServiceProvider pspCaller 
)
static

Definition at line 262 of file caller.c.

264{
265 IServiceProvider *caller = (void*)0xdeadbeef;
267
268 ok(pspCaller != NULL, "pspCaller == NULL\n");
269
270 switch(id) {
272 void *iface = (void*)0xdeadbeef;
273
274 CHECK_EXPECT(testGetCaller);
275 CHECK_CALLED(OnEnterScript);
276
277 ok(wFlags == DISPATCH_METHOD, "wFlags = %x\n", wFlags);
278 ok(pdp != NULL, "pdp == NULL\n");
279 ok(!pdp->rgdispidNamedArgs, "rgdispidNamedArgs != NULL\n");
280 ok(!pvarRes, "pvarRes != NULL\n");
281 ok(pei != NULL, "pei == NULL\n");
282
283 SET_EXPECT(OnEnterScript);
284 SET_EXPECT(OnLeaveScript);
285 SET_EXPECT(testGetCallerNested);
286 parse_script(active_script, L"Call testGetCallerNested(1,2)");
287 CHECK_CALLED(testGetCallerNested);
288 CHECK_CALLED(OnLeaveScript);
289 CHECK_CALLED(OnEnterScript);
290 SET_EXPECT(OnLeaveScript);
291
292 hres = IServiceProvider_QueryService(pspCaller, &SID_GetCaller, &IID_IServiceProvider, (void**)&caller);
293 ok(hres == S_OK, "Could not get SID_GetCaller service: %08lx\n", hres);
294 ok(caller == test_get_caller_sp, "caller != test_get_caller_sp\n");
295 if(caller) IServiceProvider_Release(caller);
296
298 SET_EXPECT(sp_caller_QI_NULL);
299 hres = IServiceProvider_QueryService(pspCaller, &SID_GetCaller, &IID_NULL, &iface);
300 ok(hres == (test_get_caller_sp ? E_NOINTERFACE : S_OK), "Could not query SID_GetCaller with IID_NULL: %08lx\n", hres);
301 ok(iface == NULL, "iface != NULL\n");
303 CHECK_CALLED(sp_caller_QI_NULL);
304 break;
305 }
306
308 IUnknown *unk;
309
310 CHECK_EXPECT(testGetCallerVBS);
311
312 ok(wFlags == DISPATCH_METHOD, "wFlags = %x\n", wFlags);
313 ok(pdp != NULL, "pdp == NULL\n");
314 ok(pdp->cArgs == 1, "cArgs = %d\n", pdp->cArgs);
315 ok(!pdp->rgdispidNamedArgs, "rgdispidNamedArgs != NULL\n");
316 ok(!pvarRes, "pvarRes != NULL\n");
317 ok(pei != NULL, "pei == NULL\n");
318 ok(V_VT(pdp->rgvarg) == VT_I2, "V_VT(rgvarg) = %d\n", V_VT(pdp->rgvarg));
319 ok(V_I2(pdp->rgvarg) == 42, "V_I2(rgvarg) = %d\n", V_I2(pdp->rgvarg));
320
321 hres = IServiceProvider_QueryService(pspCaller, &SID_GetCaller, &IID_IServiceProvider, (void**)&caller);
322 ok(hres == E_NOINTERFACE, "QueryService(SID_GetCaller) returned: %08lx\n", hres);
323 ok(caller == NULL, "caller != NULL\n");
324
325 SET_EXPECT(site_QI_NULL);
326 hres = IServiceProvider_QueryService(pspCaller, &IID_IActiveScriptSite, &IID_NULL, (void**)&unk);
327 ok(hres == E_NOINTERFACE, "QueryService(IActiveScriptSite->NULL) returned: %08lx\n", hres);
328 ok(!unk, "unk != NULL\n");
329 CHECK_CALLED(site_QI_NULL);
330 break;
331 }
332
334 CHECK_EXPECT(testGetCallerNested);
335
336 ok(wFlags == DISPATCH_METHOD, "wFlags = %x\n", wFlags);
337 ok(pdp != NULL, "pdp == NULL\n");
338 ok(pdp->cArgs == 2, "cArgs = %d\n", pdp->cArgs);
339 ok(!pdp->rgdispidNamedArgs, "rgdispidNamedArgs != NULL\n");
340 ok(!pvarRes, "pvarRes != NULL\n");
341 ok(pei != NULL, "pei == NULL\n");
342 ok(V_VT(&pdp->rgvarg[0]) == VT_I2, "V_VT(rgvarg[0]) = %d\n", V_VT(&pdp->rgvarg[0]));
343 ok(V_VT(&pdp->rgvarg[1]) == VT_I2, "V_VT(rgvarg[1]) = %d\n", V_VT(&pdp->rgvarg[1]));
344 ok(V_I2(&pdp->rgvarg[0]) == 2, "V_I2(rgvarg[0]) = %d\n", V_I2(&pdp->rgvarg[0]));
345 ok(V_I2(&pdp->rgvarg[1]) == 1, "V_I2(rgvarg[1]) = %d\n", V_I2(&pdp->rgvarg[1]));
346
347 hres = IServiceProvider_QueryService(pspCaller, &SID_GetCaller, &IID_IServiceProvider, (void**)&caller);
348 ok(hres == E_NOINTERFACE, "QueryService(SID_GetCaller) returned: %08lx\n", hres);
349 ok(caller == NULL, "caller != NULL\n");
350 break;
351
352 default:
353 ok(0, "unexpected call\n");
354 return E_NOTIMPL;
355 }
356
357 return S_OK;
358}
@ VT_I2
Definition: compat.h:2297
#define V_VT(A)
Definition: oleauto.h:211
#define V_I2(A)
Definition: oleauto.h:245
WINBASEAPI _In_ DWORD _Out_ _In_ WORD wFlags
Definition: wincon_undoc.h:337

Variable Documentation

◆ active_script

IActiveScript* active_script
static

◆ ActiveScriptSite

IActiveScriptSite ActiveScriptSite = { &ActiveScriptSiteVtbl }
static

Definition at line 471 of file caller.c.

◆ ActiveScriptSiteVtbl

const IActiveScriptSiteVtbl ActiveScriptSiteVtbl
static
Initial value:
= {
}
static ULONG WINAPI ActiveScriptSite_Release(IActiveScriptSite *iface)
Definition: caller.c:593
static HRESULT WINAPI ActiveScriptSite_OnLeaveScript(IActiveScriptSite *iface)
Definition: caller.c:642
static HRESULT WINAPI ActiveScriptSite_OnStateChange(IActiveScriptSite *iface, SCRIPTSTATE ssScriptState)
Definition: caller.c:626
static HRESULT WINAPI ActiveScriptSite_GetDocVersionString(IActiveScriptSite *iface, BSTR *pbstrVersion)
Definition: caller.c:615
static HRESULT WINAPI ActiveScriptSite_GetItemInfo(IActiveScriptSite *iface, LPCOLESTR pstrName, DWORD dwReturnMask, IUnknown **ppiunkItem, ITypeInfo **ppti)
Definition: caller.c:604
static HRESULT WINAPI ActiveScriptSite_QueryInterface(IActiveScriptSite *iface, REFIID riid, void **ppv)
Definition: caller.c:571
static HRESULT WINAPI ActiveScriptSite_OnEnterScript(IActiveScriptSite *iface)
Definition: caller.c:636
static ULONG WINAPI ActiveScriptSite_AddRef(IActiveScriptSite *iface)
Definition: caller.c:588
static HRESULT WINAPI ActiveScriptSite_OnScriptTerminate(IActiveScriptSite *iface, const VARIANT *pvarResult, const EXCEPINFO *pexcepinfo)
Definition: caller.c:620
static HRESULT WINAPI ActiveScriptSite_GetLCID(IActiveScriptSite *iface, LCID *plcid)
Definition: caller.c:598
static HRESULT WINAPI ActiveScriptSite_OnScriptError(IActiveScriptSite *iface, IActiveScriptError *pscripterror)
Definition: caller.c:631

Definition at line 457 of file caller.c.

◆ CLSID_VBScript

◆ sp_caller_obj

static IServiceProvider sp_caller_obj = { &sp_caller_vtbl }
static

Definition at line 105 of file caller.c.

◆ sp_caller_vtbl

const IServiceProviderVtbl sp_caller_vtbl
static
Initial value:
= {
}
static HRESULT WINAPI sp_caller_QueryInterface(IServiceProvider *iface, REFIID riid, void **ppv)
Definition: caller.c:278
static ULONG WINAPI sp_caller_Release(IServiceProvider *iface)
Definition: caller.c:297
static ULONG WINAPI sp_caller_AddRef(IServiceProvider *iface)
Definition: caller.c:292
static HRESULT WINAPI sp_caller_QueryService(IServiceProvider *iface, REFGUID guidService, REFIID riid, void **ppv)
Definition: caller.c:302

Definition at line 145 of file caller.c.

◆ test_get_caller_sp

IServiceProvider* test_get_caller_sp
static

Definition at line 85 of file caller.c.

◆ testObj

IDispatchEx testObj = { &testObjVtbl }
static

Definition at line 378 of file caller.c.

◆ testObjVtbl

IDispatchExVtbl testObjVtbl
static
Initial value:
= {
}
static HRESULT WINAPI DispatchEx_GetMemberProperties(IDispatchEx *iface, DISPID id, DWORD grfdexFetch, DWORD *pgrfdex)
Definition: caller.c:390
static ULONG WINAPI DispatchEx_Release(IDispatchEx *iface)
Definition: caller.c:346
static HRESULT WINAPI DispatchEx_GetIDsOfNames(IDispatchEx *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
Definition: caller.c:362
static HRESULT WINAPI DispatchEx_DeleteMemberByDispID(IDispatchEx *iface, DISPID id)
Definition: caller.c:384
static HRESULT WINAPI DispatchEx_GetNameSpaceParent(IDispatchEx *iface, IUnknown **ppunk)
Definition: caller.c:408
static HRESULT WINAPI DispatchEx_Invoke(IDispatchEx *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
Definition: caller.c:370
static HRESULT WINAPI DispatchEx_GetMemberName(IDispatchEx *iface, DISPID id, BSTR *pbstrName)
Definition: caller.c:396
static HRESULT WINAPI DispatchEx_GetNextDispID(IDispatchEx *iface, DWORD grfdex, DISPID id, DISPID *pid)
Definition: caller.c:402
static HRESULT WINAPI Test_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD grfdex, DISPID *pid)
Definition: caller.c:414
static HRESULT WINAPI DispatchEx_QueryInterface(IDispatchEx *iface, REFIID riid, void **ppv)
Definition: caller.c:325
static ULONG WINAPI DispatchEx_AddRef(IDispatchEx *iface)
Definition: caller.c:341
static HRESULT WINAPI DispatchEx_GetTypeInfo(IDispatchEx *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
Definition: caller.c:357
static HRESULT WINAPI DispatchEx_DeleteMemberByName(IDispatchEx *iface, BSTR bstrName, DWORD grfdex)
Definition: caller.c:378
static HRESULT WINAPI DispatchEx_GetTypeInfoCount(IDispatchEx *iface, UINT *pctinfo)
Definition: caller.c:351
static HRESULT WINAPI Test_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp, VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
Definition: caller.c:440

Definition at line 360 of file caller.c.