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.

Classes

struct  conv_results_t
 

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_TESTARGCONV   0x1000
 
#define DISPID_TEST_TESTGETCALLER   0x1001
 
#define DISPID_TEST_TESTGETCALLERJS   0x1002
 
#define DISPID_TEST_TESTGETCALLERNESTED   0x1003
 
#define call_change_type(a, b, c, d)   _call_change_type(__LINE__,a,b,c,d)
 
#define change_type_fail(a, b, c, d)   _change_type_fail(__LINE__,a,b,c,d)
 
#define parse_script(p, s)   _parse_script(__LINE__,p,s)
 

Functions

 DEFINE_EXPECT (sp_caller_QI_NULL)
 
 DEFINE_EXPECT (site_QI_NULL)
 
 DEFINE_EXPECT (testArgConv)
 
 DEFINE_EXPECT (testGetCaller)
 
 DEFINE_EXPECT (testGetCallerJS)
 
 DEFINE_EXPECT (testGetCallerNested)
 
 DEFINE_EXPECT (OnEnterScript)
 
 DEFINE_EXPECT (OnLeaveScript)
 
static void _call_change_type (unsigned line, IVariantChangeType *change_type, VARIANT *dst, VARIANT *src, VARTYPE vt)
 
static void _change_type_fail (unsigned line, IVariantChangeType *change_type, VARIANT *src, VARTYPE vt, HRESULT exhres)
 
static void test_change_type (IVariantChangeType *change_type, VARIANT *src, const conv_results_t *ex)
 
static void test_change_types (IVariantChangeType *change_type, IDispatch *obj_disp)
 
static void test_caller (IServiceProvider *caller, IDispatch *arg_obj)
 
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 void _parse_script (unsigned line, IActiveScriptParse *parser, const WCHAR *script)
 
static IActiveScriptParse * create_script (void)
 
static void run_scripts (void)
 
static BOOL check_jscript (void)
 
 START_TEST (caller)
 

Variables

static const CLSID CLSID_JScript
 
static IActiveScriptParse * active_script_parser
 
static IVariantChangeTypescript_change_type
 
static IDispatchstored_obj
 
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

◆ call_change_type

#define call_change_type (   a,
  b,
  c,
  d 
)    _call_change_type(__LINE__,a,b,c,d)

Definition at line 104 of file caller.c.

◆ change_type_fail

#define change_type_fail (   a,
  b,
  c,
  d 
)    _change_type_fail(__LINE__,a,b,c,d)

Definition at line 123 of file caller.c.

◆ 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 68 of file caller.c.

◆ CHECK_EXPECT

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

Definition at line 62 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 56 of file caller.c.

◆ CLEAR_CALLED

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

Definition at line 74 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 50 of file caller.c.

◆ DISPID_TEST_TESTARGCONV

#define DISPID_TEST_TESTARGCONV   0x1000

Definition at line 91 of file caller.c.

◆ DISPID_TEST_TESTGETCALLER

#define DISPID_TEST_TESTGETCALLER   0x1001

Definition at line 92 of file caller.c.

◆ DISPID_TEST_TESTGETCALLERJS

#define DISPID_TEST_TESTGETCALLERJS   0x1002

Definition at line 93 of file caller.c.

◆ DISPID_TEST_TESTGETCALLERNESTED

#define DISPID_TEST_TESTGETCALLERNESTED   0x1003

Definition at line 94 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 (   p,
  s 
)    _parse_script(__LINE__,p,s)

Definition at line 664 of file caller.c.

◆ SET_EXPECT

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

Definition at line 53 of file caller.c.

Function Documentation

◆ _call_change_type()

static void _call_change_type ( unsigned  line,
IVariantChangeType change_type,
VARIANT dst,
VARIANT src,
VARTYPE  vt 
)
static

Definition at line 105 of file caller.c.

106{
108
110 if(V_VT(src) != vt && vt != VT_BOOL && (V_VT(src) == VT_DISPATCH || V_VT(src) == VT_UNKNOWN)) {
111 SET_EXPECT(OnEnterScript);
112 SET_EXPECT(OnLeaveScript);
113 }
114 hres = IVariantChangeType_ChangeType(change_type, dst, src, 0, vt);
115 ok_(__FILE__,line)(hres == S_OK, "ChangeType(%d) failed: %08lx\n", vt, hres);
116 ok_(__FILE__,line)(V_VT(dst) == vt, "V_VT(dst) = %d\n", V_VT(dst));
117 if(V_VT(src) != vt && vt != VT_BOOL && (V_VT(src) == VT_DISPATCH || V_VT(src) == VT_UNKNOWN)) {
118 CHECK_CALLED(OnEnterScript);
119 CHECK_CALLED(OnLeaveScript);
120 }
121}
#define ok_(x1, x2)
Definition: atltest.h:61
@ VT_UNKNOWN
Definition: compat.h:2308
@ VT_BOOL
Definition: compat.h:2306
@ VT_DISPATCH
Definition: compat.h:2304
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
Definition: suminfo.c:91
GLenum src
Definition: glext.h:6340
GLenum GLenum dst
Definition: glext.h:6340
#define S_OK
Definition: intsafe.h:52
#define SET_EXPECT(func)
Definition: caller.c:53
#define CHECK_CALLED(func)
Definition: caller.c:68
HRESULT hres
Definition: protocol.c:465
static HRESULT change_type(VARIANT *dst, VARIANT *src, VARTYPE vt, IServiceProvider *caller)
Definition: dispex.c:914
#define V_VT(A)
Definition: oleauto.h:211
Definition: parser.c:49
void WINAPI VariantInit(VARIANTARG *pVarg)
Definition: variant.c:568

◆ _change_type_fail()

static void _change_type_fail ( unsigned  line,
IVariantChangeType change_type,
VARIANT src,
VARTYPE  vt,
HRESULT  exhres 
)
static

Definition at line 124 of file caller.c.

125{
126 VARIANT v;
128
129 V_VT(&v) = VT_EMPTY;
130 hres = IVariantChangeType_ChangeType(change_type, &v, src, 0, vt);
131 ok_(__FILE__,line)(hres == exhres, "ChangeType failed: %08lx, expected %08lx [%d]\n", hres, exhres, V_VT(src));
132}
@ VT_EMPTY
Definition: compat.h:2295
const GLdouble * v
Definition: gl.h:2040

◆ _parse_script()

static void _parse_script ( unsigned  line,
IActiveScriptParse *  parser,
const WCHAR script 
)
static

Definition at line 665 of file caller.c.

666{
668
670 ok_(__FILE__,line)(hres == S_OK, "ParseScriptText failed: %08lx\n", hres);
671}
#define NULL
Definition: types.h:112
#define IActiveScriptParse_ParseScriptText
Definition: caller.c:43
script
Definition: msipriv.h:383
Definition: import.c:81

◆ ActiveScriptSite_AddRef()

static ULONG WINAPI ActiveScriptSite_AddRef ( IActiveScriptSite iface)
static

Definition at line 588 of file caller.c.

589{
590 return 2;
591}

◆ ActiveScriptSite_GetDocVersionString()

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

Definition at line 615 of file caller.c.

616{
617 return E_NOTIMPL;
618}
#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 604 of file caller.c.

606{
607 ok(dwReturnMask == SCRIPTINFO_IUNKNOWN, "unexpected dwReturnMask %lx\n", dwReturnMask);
608 ok(!ppti, "ppti != NULL\n");
609 ok(!lstrcmpW(pstrName, L"test"), "pstrName = %s\n", wine_dbgstr_w(pstrName));
610
611 *ppiunkItem = (IUnknown*)&testObj;
612 return S_OK;
613}
#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 598 of file caller.c.

599{
600 *plcid = GetUserDefaultLCID();
601 return S_OK;
602}
LCID WINAPI GetUserDefaultLCID(void)
Definition: locale.c:1216

◆ ActiveScriptSite_OnEnterScript()

static HRESULT WINAPI ActiveScriptSite_OnEnterScript ( IActiveScriptSite iface)
static

Definition at line 636 of file caller.c.

637{
638 CHECK_EXPECT(OnEnterScript);
639 return E_NOTIMPL;
640}
#define CHECK_EXPECT(func)
Definition: caller.c:62

◆ ActiveScriptSite_OnLeaveScript()

static HRESULT WINAPI ActiveScriptSite_OnLeaveScript ( IActiveScriptSite iface)
static

Definition at line 642 of file caller.c.

643{
644 CHECK_EXPECT(OnLeaveScript);
645 return E_NOTIMPL;
646}

◆ ActiveScriptSite_OnScriptError()

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

Definition at line 631 of file caller.c.

632{
633 return E_NOTIMPL;
634}

◆ ActiveScriptSite_OnScriptTerminate()

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

Definition at line 620 of file caller.c.

622{
623 return E_NOTIMPL;
624}

◆ ActiveScriptSite_OnStateChange()

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

Definition at line 626 of file caller.c.

627{
628 return E_NOTIMPL;
629}

◆ ActiveScriptSite_QueryInterface()

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

Definition at line 571 of file caller.c.

572{
574 *ppv = iface;
575 }else if(IsEqualGUID(&IID_IActiveScriptSite, riid)) {
576 *ppv = iface;
577 }else {
579 CHECK_EXPECT(site_QI_NULL);
580 *ppv = NULL;
581 return E_NOINTERFACE;
582 }
583
584 IUnknown_AddRef((IUnknown*)*ppv);
585 return S_OK;
586}
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 593 of file caller.c.

594{
595 return 1;
596}

◆ check_jscript()

static BOOL check_jscript ( void  )
static

Definition at line 783 of file caller.c.

784{
785 IActiveScriptProperty *script_prop;
786 IActiveScriptParse *parser;
788
790 if(!parser)
791 return FALSE;
792
793 SET_EXPECT(OnEnterScript);
794 SET_EXPECT(OnLeaveScript);
795 hres = IActiveScriptParse_ParseScriptText(parser, L"if(!('localeCompare' in String.prototype)) throw 1;",
796 NULL, NULL, NULL, 0, 0, 0, NULL, NULL);
797 CLEAR_CALLED(OnEnterScript);
798 CLEAR_CALLED(OnLeaveScript);
799 if(hres == S_OK)
800 hres = IActiveScriptParse_QueryInterface(parser, &IID_IActiveScriptProperty, (void**)&script_prop);
802 if(hres == S_OK)
803 IActiveScriptProperty_Release(script_prop);
804
805 return hres == S_OK;
806}
#define CLEAR_CALLED(func)
Definition: caller.c:74
static IActiveScriptParse * create_script(void)
Definition: caller.c:673
#define IActiveScriptParse_Release
Definition: caller.c:41
#define IActiveScriptParse_QueryInterface
Definition: caller.c:40

Referenced by START_TEST().

◆ create_script()

static IActiveScriptParse * create_script ( void  )
static

Definition at line 673 of file caller.c.

674{
675 IActiveScriptParse *parser;
678
679 hres = CoCreateInstance(&CLSID_JScript, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
680 &IID_IActiveScript, (void**)&script);
681 if(FAILED(hres))
682 return NULL;
683
684 hres = IActiveScript_QueryInterface(script, &IID_IActiveScriptParse, (void**)&parser);
685 ok(hres == S_OK, "Could not get IActiveScriptParse: %08lx\n", hres);
686
688 ok(hres == S_OK, "InitNew failed: %08lx\n", hres);
689
690 hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
691 ok(hres == S_OK, "SetScriptSite failed: %08lx\n", hres);
692
693 hres = IActiveScript_AddNamedItem(script, L"test",
694 SCRIPTITEM_ISVISIBLE|SCRIPTITEM_ISSOURCE|SCRIPTITEM_GLOBALMEMBERS);
695 ok(hres == S_OK, "AddNamedItem failed: %08lx\n", hres);
696
697 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_STARTED);
698 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_STARTED) failed: %08lx\n", hres);
699
700 IActiveScript_Release(script);
701
702 return parser;
703}
@ 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
static const CLSID CLSID_JScript
Definition: caller.c:47
#define IActiveScriptParse_InitNew
Definition: caller.c:42
static IActiveScriptSite ActiveScriptSite
Definition: caller.c:662

Referenced by check_jscript(), run_scripts(), test_ActiveXObject(), test_CreateObject(), and test_GetObject().

◆ DEFINE_EXPECT() [1/8]

DEFINE_EXPECT ( OnEnterScript  )

◆ DEFINE_EXPECT() [2/8]

DEFINE_EXPECT ( OnLeaveScript  )

◆ DEFINE_EXPECT() [3/8]

DEFINE_EXPECT ( site_QI_NULL  )

◆ DEFINE_EXPECT() [4/8]

DEFINE_EXPECT ( sp_caller_QI_NULL  )

◆ DEFINE_EXPECT() [5/8]

DEFINE_EXPECT ( testArgConv  )

◆ DEFINE_EXPECT() [6/8]

DEFINE_EXPECT ( testGetCaller  )

◆ DEFINE_EXPECT() [7/8]

DEFINE_EXPECT ( testGetCallerJS  )

◆ DEFINE_EXPECT() [8/8]

DEFINE_EXPECT ( testGetCallerNested  )

◆ DispatchEx_AddRef()

static ULONG WINAPI DispatchEx_AddRef ( IDispatchEx iface)
static

Definition at line 341 of file caller.c.

342{
343 return 2;
344}

◆ DispatchEx_DeleteMemberByDispID()

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

Definition at line 384 of file caller.c.

385{
386 ok(0, "unexpected call\n");
387 return E_NOTIMPL;
388}

◆ DispatchEx_DeleteMemberByName()

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

Definition at line 378 of file caller.c.

379{
380 ok(0, "unexpected call %s %lx\n", wine_dbgstr_w(bstrName), grfdex);
381 return E_NOTIMPL;
382}

◆ DispatchEx_GetIDsOfNames()

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

Definition at line 362 of file caller.c.

365{
366 ok(0, "unexpected call\n");
367 return E_NOTIMPL;
368}

◆ DispatchEx_GetMemberName()

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

Definition at line 396 of file caller.c.

397{
398 ok(0, "unexpected call\n");
399 return E_NOTIMPL;
400}

◆ DispatchEx_GetMemberProperties()

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

Definition at line 390 of file caller.c.

391{
392 ok(0, "unexpected call\n");
393 return E_NOTIMPL;
394}

◆ DispatchEx_GetNameSpaceParent()

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

Definition at line 408 of file caller.c.

409{
410 ok(0, "unexpected call\n");
411 return E_NOTIMPL;
412}

◆ DispatchEx_GetNextDispID()

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

Definition at line 402 of file caller.c.

403{
404 ok(0, "unexpected call\n");
405 return E_NOTIMPL;
406}

◆ DispatchEx_GetTypeInfo()

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

Definition at line 357 of file caller.c.

358{
359 return E_NOTIMPL;
360}

◆ DispatchEx_GetTypeInfoCount()

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

Definition at line 351 of file caller.c.

352{
353 ok(0, "unexpected call\n");
354 return E_NOTIMPL;
355}

◆ 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 370 of file caller.c.

373{
374 ok(0, "unexpected call\n");
375 return E_NOTIMPL;
376}

◆ DispatchEx_QueryInterface()

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

Definition at line 325 of file caller.c.

326{
328 *ppv = iface;
329 }else if(IsEqualGUID(riid, &IID_IDispatch) || IsEqualGUID(riid, &IID_IDispatchEx)) {
330 *ppv = iface;
331 }else if(IsEqualGUID(&IID_IObjectSafety, riid)) {
332 ok(0, "Unexpected IID_IObjectSafety query\n");
333 }else {
334 *ppv = NULL;
335 return E_NOINTERFACE;
336 }
337
338 return S_OK;
339}
const GUID IID_IDispatch

◆ DispatchEx_Release()

static ULONG WINAPI DispatchEx_Release ( IDispatchEx iface)
static

Definition at line 346 of file caller.c.

347{
348 return 1;
349}

◆ run_scripts()

static void run_scripts ( void  )
static

Definition at line 705 of file caller.c.

706{
708 DISPPARAMS dp = { 0 };
709 IDispatchEx *dispex;
710 IDispatch *disp;
711 DISPID dispid;
713 VARIANT var;
714 BSTR bstr;
715
717
719 ok(hres == S_OK, "Could not get IVariantChangeType iface: %08lx\n", hres);
720
721 SET_EXPECT(OnEnterScript); /* checked in callback */
722 SET_EXPECT(testArgConv);
723 SET_EXPECT(testGetCallerJS);
725 L"var obj = {"
726 L" toString: function() { return 'strval'; },"
727 L" valueOf: function() { return 10; }"
728 L"};"
729 L"testArgConv(obj);"
730 L"function testGetCallerFunc() { testGetCaller(); };"
731 L"testGetCallerJS(42);");
732 CHECK_CALLED(testGetCallerJS);
733 CHECK_CALLED(testArgConv);
734 CHECK_CALLED(OnLeaveScript); /* set in callback */
735
737 IDispatch_Release(stored_obj);
738 IVariantChangeType_Release(script_change_type);
739
741 ok(hres == S_OK, "Could not get IActiveScript: %08lx\n", hres);
742 hres = IActiveScript_GetScriptDispatch(active_script, NULL, &disp);
743 ok(hres == S_OK, "GetScriptDispatch failed: %08lx\n", hres);
744 IActiveScript_Release(active_script);
745 hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex);
746 ok(hres == S_OK, "Could not get IDispatchEx: %08lx\n", hres);
747 IDispatch_Release(disp);
748 bstr = SysAllocString(L"testGetCallerFunc");
749 hres = IDispatchEx_GetDispID(dispex, bstr, 0, &dispid);
750 ok(hres == S_OK, "GetDispID failed: %08lx\n", hres);
751 SysFreeString(bstr);
752
753 hres = IDispatchEx_InvokeEx(dispex, dispid, 0, DISPATCH_PROPERTYGET, &dp, &var, NULL, NULL);
754 ok(hres == S_OK, "InvokeEx failed: %08lx\n", hres);
755 ok(V_VT(&var) == VT_DISPATCH, "V_VT(testGetCallerFunc) = %d\n", V_VT(&var));
756 ok(V_DISPATCH(&var) != NULL, "V_DISPATCH(testGetCallerFunc) = NULL\n");
757 IDispatchEx_Release(dispex);
758 hres = IDispatch_QueryInterface(V_DISPATCH(&var), &IID_IDispatchEx, (void**)&dispex);
759 ok(hres == S_OK, "Could not get IDispatchEx: %08lx\n", hres);
760 IDispatch_Release(V_DISPATCH(&var));
761
762 SET_EXPECT(OnEnterScript);
763 SET_EXPECT(OnLeaveScript);
764 SET_EXPECT(testGetCaller);
765 hres = IDispatchEx_InvokeEx(dispex, DISPID_VALUE, 0, DISPATCH_METHOD, &dp, NULL, NULL, NULL);
766 ok(hres == S_OK, "InvokeEx failed: %08lx\n", hres);
767 CHECK_CALLED(testGetCaller);
768 CHECK_CALLED(OnLeaveScript);
770 SET_EXPECT(OnEnterScript);
771 SET_EXPECT(OnLeaveScript);
772 SET_EXPECT(testGetCaller);
773 hres = IDispatchEx_InvokeEx(dispex, DISPID_VALUE, 0, DISPATCH_METHOD, &dp, NULL, NULL, test_get_caller_sp);
774 ok(hres == S_OK, "InvokeEx failed: %08lx\n", hres);
775 CHECK_CALLED(testGetCaller);
776 CHECK_CALLED(OnLeaveScript);
777 IDispatchEx_Release(dispex);
778
781}
OLECHAR * BSTR
Definition: compat.h:2293
static IVariantChangeType * script_change_type
Definition: caller.c:87
static IServiceProvider sp_caller_obj
Definition: caller.c:276
#define parse_script(p, s)
Definition: caller.c:664
static void test_change_types(IVariantChangeType *change_type, IDispatch *obj_disp)
Definition: caller.c:189
static IServiceProvider * test_get_caller_sp
Definition: caller.c:89
static IActiveScriptParse * active_script_parser
Definition: caller.c:86
static IDispatch * stored_obj
Definition: caller.c:88
const char * var
Definition: shader.c:5666
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
#define V_DISPATCH(A)
Definition: oleauto.h:239
#define DISPATCH_PROPERTYGET
Definition: oleauto.h:1007
static IActiveScript * active_script
Definition: caller.c:84

Referenced by START_TEST().

◆ sp_caller_AddRef()

static ULONG WINAPI sp_caller_AddRef ( IServiceProvider iface)
static

Definition at line 292 of file caller.c.

293{
294 return 2;
295}

◆ sp_caller_QueryInterface()

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

Definition at line 278 of file caller.c.

279{
280 if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IServiceProvider, riid))
281 *ppv = &sp_caller_obj;
282 else {
283 ok(IsEqualGUID(&IID_NULL, riid), "unexpected riid %s\n", wine_dbgstr_guid(riid));
284 CHECK_EXPECT(sp_caller_QI_NULL);
285 *ppv = NULL;
286 return E_NOINTERFACE;
287 }
288
289 return S_OK;
290}
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 302 of file caller.c.

304{
305 if(IsEqualGUID(guidService, &SID_GetCaller)) {
306 ok(IsEqualGUID(riid, &IID_IServiceProvider), "unexpected riid %s\n", wine_dbgstr_guid(riid));
307 *ppv = NULL;
308 return S_OK;
309 }
310
311 ok(0, "unexpected guidService %s with riid %s\n", wine_dbgstr_guid(guidService), wine_dbgstr_guid(riid));
312 *ppv = NULL;
313 return E_NOINTERFACE;
314}

◆ sp_caller_Release()

static ULONG WINAPI sp_caller_Release ( IServiceProvider iface)
static

Definition at line 297 of file caller.c.

298{
299 return 1;
300}

◆ START_TEST()

START_TEST ( caller  )

Definition at line 808 of file caller.c.

809{
811
812 if(check_jscript())
813 run_scripts();
814 else
815 win_skip("Broken (too old) jscript\n");
816
818}
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: combase.c:2842
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
Definition: compobj.c:531
static BOOL check_jscript(void)
Definition: caller.c:783
static void run_scripts(void)
Definition: caller.c:705
#define win_skip
Definition: minitest.h:67

◆ test_caller()

static void test_caller ( IServiceProvider caller,
IDispatch arg_obj 
)
static

Definition at line 255 of file caller.c.

256{
258 IUnknown *unk;
260
261 hres = IServiceProvider_QueryService(caller, &SID_VariantConversion, &IID_IVariantChangeType, (void**)&change_type);
262 ok(hres == S_OK, "Could not get SID_VariantConversion service: %08lx\n", hres);
263
264 ok(change_type == script_change_type, "change_type != script_change_type\n");
266
267 IVariantChangeType_Release(change_type);
268
269 SET_EXPECT(site_QI_NULL);
270 hres = IServiceProvider_QueryService(caller, &IID_IActiveScriptSite, &IID_NULL, (void**)&unk);
271 ok(hres == E_NOINTERFACE, "Querying for IActiveScriptSite->NULL returned: %08lx\n", hres);
272 ok(!unk, "unk != NULL\n");
273 CHECK_CALLED(site_QI_NULL);
274}

Referenced by Test_InvokeEx().

◆ test_change_type()

static void test_change_type ( IVariantChangeType change_type,
VARIANT src,
const conv_results_t ex 
)
static

Definition at line 134 of file caller.c.

135{
136 VARIANT v;
137
139 ok(V_I4(&v) == ex->int_result, "V_I4(v) = %ld, expected %d\n", V_I4(&v), ex->int_result);
140
142 ok(V_UI2(&v) == (UINT16)ex->int_result, "V_UI2(v) = %u, expected %u\n", V_UI2(&v), (UINT16)ex->int_result);
143
145 ok(!lstrcmpW(V_BSTR(&v), ex->str_result), "V_BSTR(v) = %s, expected %s\n", wine_dbgstr_w(V_BSTR(&v)), wine_dbgstr_w(ex->str_result));
146 VariantClear(&v);
147
149 ok(V_BOOL(&v) == ex->bool_result, "V_BOOL(v) = %x, expected %x\n", V_BOOL(&v), ex->bool_result);
150
151 if(ex->test_double) {
153 ok(V_R8(&v) == ex->double_result, "V_R8(v) = %lf, expected %lf\n", V_R8(&v), ex->double_result);
154
156 ok(V_R4(&v) == (float)ex->double_result, "V_R4(v) = %f, expected %f\n", V_R4(&v), (float)ex->double_result);
157 }
158
159 if(V_VT(src) == VT_NULL)
161 else
163
164 if(V_VT(src) == VT_EMPTY)
166 else
168
170 ok(V_I2(&v) == (INT16)ex->int_result, "V_I2(v) = %d, expected %d\n", V_I2(&v), ex->int_result);
171
172 if(V_VT(src) != VT_UNKNOWN)
174 else {
176 ok(V_UNKNOWN(&v) == V_UNKNOWN(src), "V_UNKNOWN(v) != V_UNKNOWN(src)\n");
177 VariantClear(&v);
178 }
179
180 if(V_VT(src) != VT_DISPATCH)
182 else {
184 ok(V_DISPATCH(&v) == V_DISPATCH(src), "V_DISPATCH(v) != V_DISPATCH(src)\n");
185 VariantClear(&v);
186 }
187}
unsigned short UINT16
Definition: actypes.h:129
short INT16
Definition: actypes.h:130
@ VT_BSTR
Definition: compat.h:2303
@ VT_R4
Definition: compat.h:2299
@ VT_NULL
Definition: compat.h:2296
@ VT_UI2
Definition: compat.h:2312
@ VT_R8
Definition: compat.h:2300
@ VT_I4
Definition: compat.h:2298
@ VT_I2
Definition: compat.h:2297
#define call_change_type(a, b, c, d)
Definition: caller.c:104
#define change_type_fail(a, b, c, d)
Definition: caller.c:123
#define V_BOOL(A)
Definition: oleauto.h:224
#define V_UNKNOWN(A)
Definition: oleauto.h:281
#define V_UI2(A)
Definition: oleauto.h:268
#define V_BSTR(A)
Definition: oleauto.h:226
#define V_I4(A)
Definition: oleauto.h:247
#define V_R4(A)
Definition: oleauto.h:260
#define V_R8(A)
Definition: oleauto.h:262
#define V_I2(A)
Definition: oleauto.h:245
Definition: comerr.c:44
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
Definition: variant.c:648

Referenced by test_change_types().

◆ test_change_types()

static void test_change_types ( IVariantChangeType change_type,
IDispatch obj_disp 
)
static

Definition at line 189 of file caller.c.

190{
191 VARIANT v, dst;
192 BSTR str;
194
195 static const conv_results_t bool_results[] = {
196 {0, L"false", VARIANT_FALSE, 1,0.0},
197 {1, L"true", VARIANT_TRUE, 1,1.0}};
198 static const conv_results_t int_results[] = {
199 {0, L"0", VARIANT_FALSE, 1,0.0},
200 {-100, L"-100", VARIANT_TRUE, 1,-100.0},
201 {0x10010, L"65552", VARIANT_TRUE, 1,65552.0}};
202 static const conv_results_t empty_results =
203 {0, L"undefined", VARIANT_FALSE, 0,0};
204 static const conv_results_t null_results =
205 {0, L"null", VARIANT_FALSE, 0,0};
206 static const conv_results_t obj_results =
207 {10, L"strval", VARIANT_TRUE, 1,10.0};
208
209 V_VT(&v) = VT_BOOL;
210 V_BOOL(&v) = VARIANT_FALSE;
211 test_change_type(change_type, &v, bool_results);
212 V_BOOL(&v) = VARIANT_TRUE;
213 test_change_type(change_type, &v, bool_results+1);
214
215 V_VT(&v) = VT_I4;
216 V_I4(&v) = 0;
217 test_change_type(change_type, &v, int_results);
218 V_I4(&v) = -100;
219 test_change_type(change_type, &v, int_results+1);
220 V_I4(&v) = 0x10010;
221 test_change_type(change_type, &v, int_results+2);
222
223 V_VT(&v) = VT_EMPTY;
224 test_change_type(change_type, &v, &empty_results);
225
226 V_VT(&v) = VT_NULL;
227 test_change_type(change_type, &v, &null_results);
228
229 V_VT(&v) = VT_UNKNOWN;
230 V_UNKNOWN(&v) = (IUnknown*)obj_disp;
231 test_change_type(change_type, &v, &obj_results);
232
233 V_VT(&v) = VT_DISPATCH;
234 V_DISPATCH(&v) = obj_disp;
235 test_change_type(change_type, &v, &obj_results);
236
237 V_VT(&v) = VT_BOOL;
238 V_BOOL(&v) = VARIANT_FALSE;
239 V_VT(&dst) = 0xdead;
240 hres = IVariantChangeType_ChangeType(change_type, &dst, &v, 0, VT_I4);
241 ok(hres == DISP_E_BADVARTYPE, "ChangeType failed: %08lx, expected DISP_E_BADVARTYPE\n", hres);
242 ok(V_VT(&dst) == 0xdead, "V_VT(dst) = %d\n", V_VT(&dst));
243
244 /* Test conversion in place */
245 V_VT(&v) = VT_BSTR;
246 V_BSTR(&v) = str = SysAllocString(L"test");
247 hres = IVariantChangeType_ChangeType(change_type, &v, &v, 0, VT_BSTR);
248 ok(hres == S_OK, "ChangeType failed: %08lx\n", hres);
249 ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v));
250 ok(V_BSTR(&v) != str, "V_BSTR(v) == str\n");
251 ok(!lstrcmpW(V_BSTR(&v), L"test"), "V_BSTR(v) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
252 VariantClear(&v);
253}
static void test_change_type(IVariantChangeType *change_type, VARIANT *src, const conv_results_t *ex)
Definition: caller.c:134
const WCHAR * str
#define DISP_E_BADVARTYPE
Definition: winerror.h:3620

Referenced by run_scripts(), and test_caller().

◆ Test_GetDispID()

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

Definition at line 414 of file caller.c.

415{
416 if(!lstrcmpW(bstrName, L"testArgConv")) {
417 ok(grfdex == fdexNameCaseSensitive, "grfdex = %lx\n", grfdex);
419 return S_OK;
420 }
421 if(!lstrcmpW(bstrName, L"testGetCaller")) {
422 ok(grfdex == fdexNameCaseSensitive, "grfdex = %lx\n", grfdex);
424 return S_OK;
425 }
426 if(!lstrcmpW(bstrName, L"testGetCallerJS")) {
427 ok(grfdex == fdexNameCaseSensitive, "grfdex = %lx\n", grfdex);
429 return S_OK;
430 }
431 if(!lstrcmpW(bstrName, L"testGetCallerNested")) {
432 ok(grfdex == fdexNameCaseSensitive, "grfdex = %lx\n", grfdex);
434 return S_OK;
435 }
436
437 return E_NOTIMPL;
438}
#define DISPID_TEST_TESTGETCALLERJS
Definition: caller.c:93
#define DISPID_TEST_TESTGETCALLER
Definition: caller.c:92
#define DISPID_TEST_TESTARGCONV
Definition: caller.c:91
#define DISPID_TEST_TESTGETCALLERNESTED
Definition: caller.c:94
_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 440 of file caller.c.

442{
443 IServiceProvider *caller = (void*)0xdeadbeef;
445
446 ok(pspCaller != NULL, "pspCaller == NULL\n");
447
448 switch(id) {
450 CHECK_EXPECT(testArgConv);
451
452 ok(wFlags == INVOKE_FUNC, "wFlags = %x\n", wFlags);
453 ok(pdp != NULL, "pdp == NULL\n");
454 ok(!pdp->rgdispidNamedArgs, "rgdispidNamedArgs != NULL\n");
455 ok(!pvarRes, "pvarRes != NULL\n");
456 ok(pei != NULL, "pei == NULL\n");
457
458 ok(pdp->cArgs == 1, "cArgs = %d\n", pdp->cArgs);
459 ok(V_VT(pdp->rgvarg) == VT_DISPATCH, "V_VT(rgvarg) = %d\n", V_VT(pdp->rgvarg));
460
461 CHECK_CALLED(OnEnterScript);
462 test_caller(pspCaller, V_DISPATCH(pdp->rgvarg));
463 SET_EXPECT(OnLeaveScript);
464
465 stored_obj = V_DISPATCH(pdp->rgvarg);
466 IDispatch_AddRef(stored_obj);
467 break;
468
470 void *iface = (void*)0xdeadbeef;
471
472 CHECK_EXPECT(testGetCaller);
473 CHECK_CALLED(OnEnterScript);
474
475 ok(wFlags == DISPATCH_METHOD, "wFlags = %x\n", wFlags);
476 ok(pdp != NULL, "pdp == NULL\n");
477 ok(!pdp->rgdispidNamedArgs, "rgdispidNamedArgs != NULL\n");
478 ok(!pvarRes, "pvarRes != NULL\n");
479 ok(pei != NULL, "pei == NULL\n");
480
481 SET_EXPECT(OnEnterScript);
482 SET_EXPECT(OnLeaveScript);
483 SET_EXPECT(testGetCallerNested);
485 NULL, NULL, NULL, 0, 0, 0, NULL, NULL);
486 ok(hres == S_OK, "ParseScriptText failed: %08lx\n", hres);
487 CHECK_CALLED(testGetCallerNested);
488 CHECK_CALLED(OnLeaveScript);
489 CHECK_CALLED(OnEnterScript);
490 SET_EXPECT(OnLeaveScript);
491
492 hres = IServiceProvider_QueryService(pspCaller, &SID_GetCaller, &IID_IServiceProvider, (void**)&caller);
493 ok(hres == S_OK, "Could not get SID_GetCaller service: %08lx\n", hres);
494 ok(caller == test_get_caller_sp, "caller != test_get_caller_sp\n");
495 if(caller) IServiceProvider_Release(caller);
496
498 SET_EXPECT(sp_caller_QI_NULL);
499 hres = IServiceProvider_QueryService(pspCaller, &SID_GetCaller, &IID_NULL, &iface);
500 ok(hres == (test_get_caller_sp ? E_NOINTERFACE : S_OK), "Could not query SID_GetCaller with IID_NULL: %08lx\n", hres);
501 ok(iface == NULL, "iface != NULL\n");
503 CHECK_CALLED(sp_caller_QI_NULL);
504 break;
505 }
506
508 CHECK_EXPECT(testGetCallerJS);
509
510 ok(wFlags == DISPATCH_METHOD, "wFlags = %x\n", wFlags);
511 ok(pdp != NULL, "pdp == NULL\n");
512 ok(pdp->cArgs == 1, "cArgs = %d\n", pdp->cArgs);
513 ok(!pdp->rgdispidNamedArgs, "rgdispidNamedArgs != NULL\n");
514 ok(!pvarRes, "pvarRes != NULL\n");
515 ok(pei != NULL, "pei == NULL\n");
516 ok(V_VT(pdp->rgvarg) == VT_I4, "V_VT(rgvarg) = %d\n", V_VT(pdp->rgvarg));
517 ok(V_I4(pdp->rgvarg) == 42, "V_I4(rgvarg) = %ld\n", V_I4(pdp->rgvarg));
518
519 hres = IServiceProvider_QueryService(pspCaller, &SID_GetCaller, &IID_IServiceProvider, (void**)&caller);
520 ok(hres == E_NOINTERFACE, "QueryService(SID_GetCaller) returned: %08lx\n", hres);
521 ok(caller == NULL, "caller != NULL\n");
522 break;
523
525 CHECK_EXPECT(testGetCallerNested);
526
527 ok(wFlags == DISPATCH_METHOD, "wFlags = %x\n", wFlags);
528 ok(pdp != NULL, "pdp == NULL\n");
529 ok(pdp->cArgs == 2, "cArgs = %d\n", pdp->cArgs);
530 ok(!pdp->rgdispidNamedArgs, "rgdispidNamedArgs != NULL\n");
531 ok(!pvarRes, "pvarRes != NULL\n");
532 ok(pei != NULL, "pei == NULL\n");
533 ok(V_VT(&pdp->rgvarg[0]) == VT_I4, "V_VT(rgvarg[0]) = %d\n", V_VT(&pdp->rgvarg[0]));
534 ok(V_VT(&pdp->rgvarg[1]) == VT_I4, "V_VT(rgvarg[1]) = %d\n", V_VT(&pdp->rgvarg[1]));
535 ok(V_I4(&pdp->rgvarg[0]) == 2, "V_I4(rgvarg[0]) = %ld\n", V_I4(&pdp->rgvarg[0]));
536 ok(V_I4(&pdp->rgvarg[1]) == 1, "V_I4(rgvarg[1]) = %ld\n", V_I4(&pdp->rgvarg[1]));
537
538 hres = IServiceProvider_QueryService(pspCaller, &SID_GetCaller, &IID_IServiceProvider, (void**)&caller);
539 ok(hres == E_NOINTERFACE, "QueryService(SID_GetCaller) returned: %08lx\n", hres);
540 ok(caller == NULL, "caller != NULL\n");
541 break;
542
543 default:
544 ok(0, "unexpected call\n");
545 return E_NOTIMPL;
546 }
547
548 return S_OK;
549}
static void test_caller(IServiceProvider *caller, IDispatch *arg_obj)
Definition: caller.c:255
WINBASEAPI _In_ DWORD _Out_ _In_ WORD wFlags
Definition: wincon_undoc.h:337

Variable Documentation

◆ active_script_parser

IActiveScriptParse* active_script_parser
static

Definition at line 86 of file caller.c.

Referenced by run_scripts(), and Test_InvokeEx().

◆ ActiveScriptSite

IActiveScriptSite ActiveScriptSite = { &ActiveScriptSiteVtbl }
static

Definition at line 662 of file caller.c.

Referenced by create_script().

◆ 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 648 of file caller.c.

◆ CLSID_JScript

const CLSID CLSID_JScript
static
Initial value:
=
{0xf414c260,0x6ac0,0x11cf,{0xb6,0xd1,0x00,0xaa,0x00,0xbb,0xbb,0x58}}

Definition at line 47 of file caller.c.

Referenced by create_script().

◆ script_change_type

IVariantChangeType* script_change_type
static

Definition at line 87 of file caller.c.

Referenced by run_scripts(), and test_caller().

◆ sp_caller_obj

static IServiceProvider sp_caller_obj = { &sp_caller_vtbl }
static

Definition at line 276 of file caller.c.

Referenced by run_scripts(), and sp_caller_QueryInterface().

◆ 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 316 of file caller.c.

◆ stored_obj

IDispatch* stored_obj
static

Definition at line 88 of file caller.c.

Referenced by run_scripts(), and Test_InvokeEx().

◆ test_get_caller_sp

IServiceProvider* test_get_caller_sp
static

Definition at line 89 of file caller.c.

Referenced by run_scripts(), and Test_InvokeEx().

◆ testObj

IDispatchEx testObj = { &testObjVtbl }
static

Definition at line 569 of file caller.c.

Referenced by ActiveScriptSite_GetItemInfo().

◆ 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 551 of file caller.c.