ReactOS 0.4.17-dev-357-ga8f14ff
jscript.c File Reference
#include <initguid.h>
#include <ole2.h>
#include <activscp.h>
#include <objsafe.h>
#include <dispex.h>
#include "wine/test.h"
Include dependency graph for jscript.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 IActiveScriptParseProcedure2_Release   IActiveScriptParseProcedure2_32_Release
 
#define IActiveScriptParseProcedure2_ParseProcedureText   IActiveScriptParseProcedure2_32_ParseProcedureText
 
#define DEFINE_EXPECT(func)    static int expect_ ## func = 0, called_ ## func = 0
 
#define SET_EXPECT(func)    expect_ ## func = 1
 
#define SET_EXPECT_MULTI(func, num)    expect_ ## func = num
 
#define CHECK_EXPECT2(func)
 
#define CHECK_EXPECT(func)
 
#define CHECK_CALLED(func)
 
#define CHECK_NOT_CALLED(func)
 
#define CHECK_CALLED_MULTI(func, num)
 
#define test_state(s, ss)   _test_state(__LINE__,s,ss)
 
#define get_disp_id(a, b, c, d)   _get_disp_id(__LINE__,a,b,c,d)
 

Functions

 DEFINE_GUID (GUID_NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
 
 DEFINE_GUID (IID_IScriptTypeInfo, 0xc59c6b12, 0xf6c1, 0x11cf, 0x88, 0x35, 0x00, 0xa0, 0xc9, 0x11, 0xe8, 0xb2)
 
 DEFINE_EXPECT (GetLCID)
 
 DEFINE_EXPECT (OnStateChange_UNINITIALIZED)
 
 DEFINE_EXPECT (OnStateChange_STARTED)
 
 DEFINE_EXPECT (OnStateChange_CONNECTED)
 
 DEFINE_EXPECT (OnStateChange_DISCONNECTED)
 
 DEFINE_EXPECT (OnStateChange_CLOSED)
 
 DEFINE_EXPECT (OnStateChange_INITIALIZED)
 
 DEFINE_EXPECT (OnEnterScript)
 
 DEFINE_EXPECT (OnLeaveScript)
 
 DEFINE_EXPECT (OnScriptError)
 
 DEFINE_EXPECT (GetIDsOfNames)
 
 DEFINE_EXPECT (GetIDsOfNames_visible)
 
 DEFINE_EXPECT (GetIDsOfNames_persistent)
 
 DEFINE_EXPECT (GetItemInfo_global)
 
 DEFINE_EXPECT (GetItemInfo_global_code)
 
 DEFINE_EXPECT (GetItemInfo_visible)
 
 DEFINE_EXPECT (GetItemInfo_visible_code)
 
 DEFINE_EXPECT (GetItemInfo_persistent)
 
 DEFINE_EXPECT (testCall)
 
static void _test_state (unsigned line, IActiveScript *script, SCRIPTSTATE exstate)
 
static HRESULT WINAPI Dispatch_QueryInterface (IDispatch *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI Dispatch_AddRef (IDispatch *iface)
 
static ULONG WINAPI Dispatch_Release (IDispatch *iface)
 
static ULONG WINAPI global_AddRef (IDispatch *iface)
 
static ULONG WINAPI global_Release (IDispatch *iface)
 
static ULONG WINAPI visible_AddRef (IDispatch *iface)
 
static ULONG WINAPI visible_Release (IDispatch *iface)
 
static ULONG WINAPI visible_code_AddRef (IDispatch *iface)
 
static ULONG WINAPI visible_code_Release (IDispatch *iface)
 
static ULONG WINAPI persistent_AddRef (IDispatch *iface)
 
static ULONG WINAPI persistent_Release (IDispatch *iface)
 
static HRESULT WINAPI Dispatch_GetTypeInfoCount (IDispatch *iface, UINT *pctinfo)
 
static HRESULT WINAPI Dispatch_GetTypeInfo (IDispatch *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
 
static HRESULT WINAPI Dispatch_GetIDsOfNames (IDispatch *iface, REFIID riid, LPOLESTR *names, UINT name_cnt, LCID lcid, DISPID *ids)
 
static HRESULT WINAPI visible_GetIDsOfNames (IDispatch *iface, REFIID riid, LPOLESTR *names, UINT name_cnt, LCID lcid, DISPID *ids)
 
static HRESULT WINAPI persistent_GetIDsOfNames (IDispatch *iface, REFIID riid, LPOLESTR *names, UINT name_cnt, LCID lcid, DISPID *ids)
 
static HRESULT WINAPI Dispatch_Invoke (IDispatch *iface, DISPID id, REFIID riid, LCID lcid, WORD flags, DISPPARAMS *dp, VARIANT *res, EXCEPINFO *ei, UINT *err)
 
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 test_script_dispatch (IDispatchEx *dispex)
 
static IDispatchExget_script_dispatch (IActiveScript *script, const WCHAR *item_name)
 
static void parse_script (IActiveScriptParse *parser, const WCHAR *src)
 
static void _get_disp_id (unsigned line, IDispatchEx *dispex, const WCHAR *name, HRESULT exhr, DISPID *id)
 
static void test_no_script_dispatch (IActiveScript *script)
 
static void test_safety (IUnknown *unk)
 
static HRESULT set_script_prop (IActiveScript *engine, DWORD property, VARIANT *val)
 
static void test_invoke_versioning (IActiveScript *script)
 
static IActiveScriptcreate_jscript (void)
 
static void test_jscript (void)
 
static void test_jscript2 (void)
 
static void test_jscript_uninitializing (void)
 
static void test_aggregation (void)
 
static void test_case_sens (void)
 
static void test_param_ids (void)
 
static void test_code_persistence (void)
 
static void test_named_items (void)
 
static void test_typeinfo (const WCHAR *parse_func_name)
 
static BOOL check_jscript (void)
 
 START_TEST (jscript)
 

Variables

static const CLSID CLSID_JScript
 
static const CLSID CLSID_JScriptEncode
 
static const CLSIDengine_clsid = &CLSID_JScript
 
static ULONG global_named_item_ref
 
static ULONG visible_named_item_ref
 
static ULONG visible_code_named_item_ref
 
static ULONG persistent_named_item_ref
 
static const IDispatchVtbl dispatch_vtbl
 
static IDispatch dispatch_object = { &dispatch_vtbl }
 
static const IDispatchVtbl global_named_item_vtbl
 
static IDispatch global_named_item = { &global_named_item_vtbl }
 
static const IDispatchVtbl visible_named_item_vtbl
 
static IDispatch visible_named_item = { &visible_named_item_vtbl }
 
static const IDispatchVtbl visible_code_named_item_vtbl
 
static IDispatch visible_code_named_item = { &visible_code_named_item_vtbl }
 
static const IDispatchVtbl persistent_named_item_vtbl
 
static IDispatch persistent_named_item = { &persistent_named_item_vtbl }
 
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 = 0; \
}while(0)
GLenum func
Definition: glext.h:6028
#define expect_(expected, got, precision)
Definition: font.c:34

Definition at line 79 of file jscript.c.

◆ CHECK_CALLED_MULTI

#define CHECK_CALLED_MULTI (   func,
  num 
)
Value:
do { \
ok(called_ ## func == num, "expected " #func " %d times (got %d)\n", num, called_ ## func); \
expect_ ## func = called_ ## func = 0; \
}while(0)
GLuint GLuint num
Definition: glext.h:9618

Definition at line 91 of file jscript.c.

◆ CHECK_EXPECT

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

Definition at line 73 of file jscript.c.

◆ CHECK_EXPECT2

#define CHECK_EXPECT2 (   func)
Value:
do { \
ok(expect_ ##func, "unexpected call " #func "\n"); \
called_ ## func++; \
}while(0)

Definition at line 67 of file jscript.c.

◆ CHECK_NOT_CALLED

#define CHECK_NOT_CALLED (   func)
Value:
do { \
ok(!called_ ## func, "unexpected " #func "\n"); \
expect_ ## func = called_ ## func = FALSE; \
}while(0)
#define FALSE
Definition: types.h:117

Definition at line 85 of file jscript.c.

◆ COBJMACROS

#define COBJMACROS

Definition at line 19 of file jscript.c.

◆ CONST_VTABLE

#define CONST_VTABLE

Definition at line 20 of file jscript.c.

◆ DEFINE_EXPECT

#define DEFINE_EXPECT (   func)     static int expect_ ## func = 0, called_ ## func = 0

Definition at line 58 of file jscript.c.

◆ get_disp_id

#define get_disp_id (   a,
  b,
  c,
  d 
)    _get_disp_id(__LINE__,a,b,c,d)

Definition at line 524 of file jscript.c.

◆ IActiveScriptParse_InitNew

#define IActiveScriptParse_InitNew   IActiveScriptParse32_InitNew

Definition at line 43 of file jscript.c.

◆ IActiveScriptParse_ParseScriptText

#define IActiveScriptParse_ParseScriptText   IActiveScriptParse32_ParseScriptText

Definition at line 44 of file jscript.c.

◆ IActiveScriptParse_QueryInterface

#define IActiveScriptParse_QueryInterface   IActiveScriptParse32_QueryInterface

Definition at line 41 of file jscript.c.

◆ IActiveScriptParse_Release

#define IActiveScriptParse_Release   IActiveScriptParse32_Release

Definition at line 42 of file jscript.c.

◆ IActiveScriptParseProcedure2_ParseProcedureText

#define IActiveScriptParseProcedure2_ParseProcedureText   IActiveScriptParseProcedure2_32_ParseProcedureText

Definition at line 46 of file jscript.c.

◆ IActiveScriptParseProcedure2_Release

#define IActiveScriptParseProcedure2_Release   IActiveScriptParseProcedure2_32_Release

Definition at line 45 of file jscript.c.

◆ SET_EXPECT

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

Definition at line 61 of file jscript.c.

◆ SET_EXPECT_MULTI

#define SET_EXPECT_MULTI (   func,
  num 
)     expect_ ## func = num

Definition at line 64 of file jscript.c.

◆ test_state

#define test_state (   s,
  ss 
)    _test_state(__LINE__,s,ss)

Definition at line 119 of file jscript.c.

Function Documentation

◆ _get_disp_id()

static void _get_disp_id ( unsigned  line,
IDispatchEx dispex,
const WCHAR name,
HRESULT  exhr,
DISPID id 
)
static

Definition at line 525 of file jscript.c.

526{
527 DISPID id2;
528 HRESULT hr;
529 BSTR str;
530
532 hr = IDispatchEx_GetDispID(dispex, str, 0, id);
533 ok_(__FILE__,line)(hr == exhr, "GetDispID(%s) returned %08lx, expected %08lx\n",
534 wine_dbgstr_w(name), hr, exhr);
535
536 hr = IDispatchEx_GetIDsOfNames(dispex, &IID_NULL, &str, 1, 0, &id2);
538 ok_(__FILE__,line)(hr == exhr, "GetIDsOfNames(%s) returned %08lx, expected %08lx\n",
539 wine_dbgstr_w(name), hr, exhr);
540 ok_(__FILE__,line)(*id == id2, "GetIDsOfNames(%s) id != id2\n", wine_dbgstr_w(name));
541}
#define ok_(x1, x2)
Definition: atltest.h:61
HRESULT hr
Definition: delayimp.cpp:582
OLECHAR * BSTR
Definition: compat.h:2293
#define wine_dbgstr_w
Definition: kernel32.h:34
static VARIANTARG static DISPID
Definition: ordinal.c:49
BSTR WINAPI SysAllocString(LPCOLESTR str)
Definition: oleaut.c:238
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:271
#define IID_NULL
Definition: guiddef.h:98
const WCHAR * str
Definition: parser.c:49
Definition: name.c:39

◆ _test_state()

static void _test_state ( unsigned  line,
IActiveScript script,
SCRIPTSTATE  exstate 
)
static

Definition at line 120 of file jscript.c.

121{
122 SCRIPTSTATE state = -1;
124
125 hres = IActiveScript_GetScriptState(script, &state);
126 ok_(__FILE__,line) (hres == S_OK, "GetScriptState failed: %08lx\n", hres);
127 ok_(__FILE__,line) (state == exstate, "state=%d, expected %d\n", state, exstate);
128}
enum tagSCRIPTSTATE SCRIPTSTATE
static int state
Definition: maze.c:121
#define S_OK
Definition: intsafe.h:52
HRESULT hres
Definition: protocol.c:465
script
Definition: msipriv.h:383

◆ ActiveScriptSite_AddRef()

static ULONG WINAPI ActiveScriptSite_AddRef ( IActiveScriptSite iface)
static

Definition at line 326 of file jscript.c.

327{
328 return 2;
329}

◆ ActiveScriptSite_GetDocVersionString()

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

Definition at line 380 of file jscript.c.

381{
382 ok(0, "unexpected call\n");
383 return E_NOTIMPL;
384}
#define ok(value,...)
Definition: atltest.h:57
#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 342 of file jscript.c.

344{
345 ok(dwReturnMask == SCRIPTINFO_IUNKNOWN, "dwReturnMask = %lx\n", dwReturnMask);
346 if(!wcscmp(pstrName, L"globalItem")) {
347 CHECK_EXPECT(GetItemInfo_global);
348 IDispatch_AddRef(&global_named_item);
349 *ppiunkItem = (IUnknown*)&global_named_item;
350 return S_OK;
351 }
352 if(!wcscmp(pstrName, L"globalCodeItem")) {
353 CHECK_EXPECT(GetItemInfo_global_code);
354 IDispatch_AddRef(&dispatch_object);
355 *ppiunkItem = (IUnknown*)&dispatch_object;
356 return S_OK;
357 }
358 if(!wcscmp(pstrName, L"visibleItem")) {
359 CHECK_EXPECT(GetItemInfo_visible);
360 IDispatch_AddRef(&visible_named_item);
361 *ppiunkItem = (IUnknown*)&visible_named_item;
362 return S_OK;
363 }
364 if(!wcscmp(pstrName, L"visibleCodeItem")) {
365 CHECK_EXPECT(GetItemInfo_visible_code);
366 IDispatch_AddRef(&visible_code_named_item);
367 *ppiunkItem = (IUnknown*)&visible_code_named_item;
368 return S_OK;
369 }
370 if(!wcscmp(pstrName, L"persistent")) {
371 CHECK_EXPECT(GetItemInfo_persistent);
372 IDispatch_AddRef(&persistent_named_item);
373 *ppiunkItem = (IUnknown*)&persistent_named_item;
374 return S_OK;
375 }
376 ok(0, "unexpected call %s\n", wine_dbgstr_w(pstrName));
377 return E_NOTIMPL;
378}
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
Definition: wcs.c:1977
#define L(x)
Definition: resources.c:13
static IDispatch visible_code_named_item
Definition: jscript.c:297
static IDispatch dispatch_object
Definition: jscript.c:261
#define CHECK_EXPECT(func)
Definition: jscript.c:73
static IDispatch visible_named_item
Definition: jscript.c:285
static IDispatch global_named_item
Definition: jscript.c:273
static IDispatch persistent_named_item
Definition: jscript.c:309

◆ ActiveScriptSite_GetLCID()

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

Definition at line 336 of file jscript.c.

337{
338 CHECK_EXPECT(GetLCID);
339 return E_NOTIMPL;
340}

◆ ActiveScriptSite_OnEnterScript()

static HRESULT WINAPI ActiveScriptSite_OnEnterScript ( IActiveScriptSite iface)
static

Definition at line 427 of file jscript.c.

428{
429 CHECK_EXPECT(OnEnterScript);
430 return S_OK;
431}

◆ ActiveScriptSite_OnLeaveScript()

static HRESULT WINAPI ActiveScriptSite_OnLeaveScript ( IActiveScriptSite iface)
static

Definition at line 433 of file jscript.c.

434{
435 CHECK_EXPECT(OnLeaveScript);
436 return S_OK;
437}

◆ ActiveScriptSite_OnScriptError()

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

Definition at line 421 of file jscript.c.

422{
423 CHECK_EXPECT(OnScriptError);
424 return S_OK;
425}

◆ ActiveScriptSite_OnScriptTerminate()

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

Definition at line 386 of file jscript.c.

388{
389 ok(0, "unexpected call\n");
390 return E_NOTIMPL;
391}

◆ ActiveScriptSite_OnStateChange()

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

Definition at line 393 of file jscript.c.

394{
395 switch(ssScriptState) {
397 CHECK_EXPECT(OnStateChange_UNINITIALIZED);
398 return S_OK;
400 CHECK_EXPECT(OnStateChange_STARTED);
401 return S_OK;
403 CHECK_EXPECT(OnStateChange_CONNECTED);
404 return S_OK;
406 CHECK_EXPECT(OnStateChange_DISCONNECTED);
407 return S_OK;
409 CHECK_EXPECT(OnStateChange_CLOSED);
410 return S_OK;
412 CHECK_EXPECT(OnStateChange_INITIALIZED);
413 return S_OK;
414 default:
415 ok(0, "unexpected call %d\n", ssScriptState);
416 }
417
418 return E_NOTIMPL;
419}
@ SCRIPTSTATE_INITIALIZED
Definition: activscp.idl:62
@ SCRIPTSTATE_DISCONNECTED
Definition: activscp.idl:60
@ SCRIPTSTATE_STARTED
Definition: activscp.idl:58
@ SCRIPTSTATE_UNINITIALIZED
Definition: activscp.idl:57
@ SCRIPTSTATE_CLOSED
Definition: activscp.idl:61
@ SCRIPTSTATE_CONNECTED
Definition: activscp.idl:59

◆ ActiveScriptSite_QueryInterface()

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

Definition at line 311 of file jscript.c.

312{
313 *ppv = NULL;
314
316 *ppv = iface;
317 else if(IsEqualGUID(&IID_IActiveScriptSite, riid))
318 *ppv = iface;
319 else
320 return E_NOINTERFACE;
321
322 IUnknown_AddRef((IUnknown*)*ppv);
323 return S_OK;
324}
const GUID IID_IUnknown
#define NULL
Definition: types.h:112
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ ActiveScriptSite_Release()

static ULONG WINAPI ActiveScriptSite_Release ( IActiveScriptSite iface)
static

Definition at line 331 of file jscript.c.

332{
333 return 1;
334}

◆ check_jscript()

static BOOL check_jscript ( void  )
static

Definition at line 2422 of file jscript.c.

2423{
2424 IActiveScriptProperty *script_prop;
2425 HRESULT hres;
2426
2427 hres = CoCreateInstance(&CLSID_JScript, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
2428 &IID_IActiveScriptProperty, (void**)&script_prop);
2429 if(SUCCEEDED(hres))
2430 IActiveScriptProperty_Release(script_prop);
2431
2432 return hres == S_OK;
2433}
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
Definition: combase.c:1685
#define SUCCEEDED(hr)
Definition: intsafe.h:50
static const CLSID CLSID_JScript
Definition: jscript.c:53

Referenced by START_TEST().

◆ create_jscript()

static IActiveScript * create_jscript ( void  )
static

Definition at line 690 of file jscript.c.

691{
694
695 hres = CoCreateInstance(engine_clsid, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
696 &IID_IActiveScript, (void**)&ret);
697 ok(hres == S_OK, "CoCreateInstance failed: %08lx\n", hres);
698
699 return ret;
700}
return ret
Definition: mutex.c:146
static const CLSID * engine_clsid
Definition: jscript.c:117

Referenced by test_case_sens(), test_code_persistence(), test_jscript(), test_jscript2(), test_jscript_uninitializing(), test_named_items(), test_param_ids(), and test_typeinfo().

◆ DEFINE_EXPECT() [1/19]

DEFINE_EXPECT ( GetIDsOfNames  )

◆ DEFINE_EXPECT() [2/19]

DEFINE_EXPECT ( GetIDsOfNames_persistent  )

◆ DEFINE_EXPECT() [3/19]

DEFINE_EXPECT ( GetIDsOfNames_visible  )

◆ DEFINE_EXPECT() [4/19]

DEFINE_EXPECT ( GetItemInfo_global  )

◆ DEFINE_EXPECT() [5/19]

DEFINE_EXPECT ( GetItemInfo_global_code  )

◆ DEFINE_EXPECT() [6/19]

DEFINE_EXPECT ( GetItemInfo_persistent  )

◆ DEFINE_EXPECT() [7/19]

DEFINE_EXPECT ( GetItemInfo_visible  )

◆ DEFINE_EXPECT() [8/19]

DEFINE_EXPECT ( GetItemInfo_visible_code  )

◆ DEFINE_EXPECT() [9/19]

DEFINE_EXPECT ( GetLCID  )

◆ DEFINE_EXPECT() [10/19]

DEFINE_EXPECT ( OnEnterScript  )

◆ DEFINE_EXPECT() [11/19]

DEFINE_EXPECT ( OnLeaveScript  )

◆ DEFINE_EXPECT() [12/19]

DEFINE_EXPECT ( OnScriptError  )

◆ DEFINE_EXPECT() [13/19]

DEFINE_EXPECT ( OnStateChange_CLOSED  )

◆ DEFINE_EXPECT() [14/19]

DEFINE_EXPECT ( OnStateChange_CONNECTED  )

◆ DEFINE_EXPECT() [15/19]

DEFINE_EXPECT ( OnStateChange_DISCONNECTED  )

◆ DEFINE_EXPECT() [16/19]

DEFINE_EXPECT ( OnStateChange_INITIALIZED  )

◆ DEFINE_EXPECT() [17/19]

DEFINE_EXPECT ( OnStateChange_STARTED  )

◆ DEFINE_EXPECT() [18/19]

DEFINE_EXPECT ( OnStateChange_UNINITIALIZED  )

◆ DEFINE_EXPECT() [19/19]

DEFINE_EXPECT ( testCall  )

◆ DEFINE_GUID() [1/2]

DEFINE_GUID ( GUID_NULL  ,
,
,
,
,
,
,
,
,
,
,
 
)

◆ DEFINE_GUID() [2/2]

DEFINE_GUID ( IID_IScriptTypeInfo  ,
0xc59c6b12  ,
0xf6c1  ,
0x11cf  ,
0x88  ,
0x35  ,
0x00  ,
0xa0  ,
0xc9  ,
0x11  ,
0xe8  ,
0xb2   
)

◆ Dispatch_AddRef()

static ULONG WINAPI Dispatch_AddRef ( IDispatch iface)
static

Definition at line 142 of file jscript.c.

143{
144 return 2;
145}

◆ Dispatch_GetIDsOfNames()

static HRESULT WINAPI Dispatch_GetIDsOfNames ( IDispatch iface,
REFIID  riid,
LPOLESTR *  names,
UINT  name_cnt,
LCID  lcid,
DISPID ids 
)
static

Definition at line 205 of file jscript.c.

207{
208 ok(name_cnt == 1, "name_cnt = %u\n", name_cnt);
209 if(!wcscmp(names[0], L"testCall")) {
210 *ids = 1;
211 return S_OK;
212 }
213
214 CHECK_EXPECT2(GetIDsOfNames);
215 return DISP_E_UNKNOWNNAME;
216}
GLuint * ids
Definition: glext.h:5907
GLuint GLuint * names
Definition: glext.h:11545
#define CHECK_EXPECT2(func)
Definition: jscript.c:67
#define DISP_E_UNKNOWNNAME
Definition: winerror.h:3618

◆ Dispatch_GetTypeInfo()

static HRESULT WINAPI Dispatch_GetTypeInfo ( IDispatch iface,
UINT  iTInfo,
LCID  lcid,
ITypeInfo **  ppTInfo 
)
static

Definition at line 200 of file jscript.c.

201{
202 return DISP_E_BADINDEX;
203}
#define DISP_E_BADINDEX
Definition: winerror.h:3623

◆ Dispatch_GetTypeInfoCount()

static HRESULT WINAPI Dispatch_GetTypeInfoCount ( IDispatch iface,
UINT pctinfo 
)
static

Definition at line 194 of file jscript.c.

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

◆ Dispatch_Invoke()

static HRESULT WINAPI Dispatch_Invoke ( IDispatch iface,
DISPID  id,
REFIID  riid,
LCID  lcid,
WORD  flags,
DISPPARAMS *  dp,
VARIANT res,
EXCEPINFO *  ei,
UINT err 
)
static

Definition at line 240 of file jscript.c.

242{
243 CHECK_EXPECT(testCall);
244 ok(id == 1, "id = %lu\n", id);
245 ok(flags == DISPATCH_METHOD, "flags = %x\n", flags);
246 ok(!dp->cArgs, "cArgs = %u\n", dp->cArgs);
247 ok(!res, "res = %p\n", res);
248 return S_OK;
249}
GLuint res
Definition: glext.h:9613
GLbitfield flags
Definition: glext.h:7161
#define DISPATCH_METHOD
Definition: oleauto.h:1006

◆ Dispatch_QueryInterface()

static HRESULT WINAPI Dispatch_QueryInterface ( IDispatch iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 130 of file jscript.c.

131{
133 *ppv = iface;
134 IDispatch_AddRef(iface);
135 return S_OK;
136 }
137
138 *ppv = NULL;
139 return E_NOINTERFACE;
140}
const GUID IID_IDispatch

◆ Dispatch_Release()

static ULONG WINAPI Dispatch_Release ( IDispatch iface)
static

Definition at line 147 of file jscript.c.

148{
149 return 1;
150}

◆ get_script_dispatch()

static IDispatchEx * get_script_dispatch ( IActiveScript script,
const WCHAR item_name 
)
static

Definition at line 494 of file jscript.c.

495{
496 IDispatchEx *dispex;
497 IDispatch *disp;
499
500 disp = (void*)0xdeadbeef;
501 hres = IActiveScript_GetScriptDispatch(script, item_name, &disp);
502 ok(hres == S_OK, "GetScriptDispatch failed: %08lx\n", hres);
503
504 hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex);
505 IDispatch_Release(disp);
506 ok(hres == S_OK, "Could not get IDispatch iface: %08lx\n", hres);
507 return dispex;
508}

Referenced by test_case_sens(), test_code_persistence(), test_jscript(), test_jscript_uninitializing(), test_named_items(), test_param_ids(), and test_typeinfo().

◆ global_AddRef()

static ULONG WINAPI global_AddRef ( IDispatch iface)
static

Definition at line 154 of file jscript.c.

155{
156 return ++global_named_item_ref;
157}
static ULONG global_named_item_ref
Definition: jscript.c:152

◆ global_Release()

static ULONG WINAPI global_Release ( IDispatch iface)
static

Definition at line 159 of file jscript.c.

160{
161 return --global_named_item_ref;
162}

◆ parse_script()

static void parse_script ( IActiveScriptParse *  parser,
const WCHAR src 
)
static

Definition at line 510 of file jscript.c.

511{
513
514 SET_EXPECT(OnEnterScript);
515 SET_EXPECT(OnLeaveScript);
516
518 ok(hres == S_OK, "ParseScriptText failed: %08lx\n", hres);
519
520 CHECK_CALLED(OnEnterScript);
521 CHECK_CALLED(OnLeaveScript);
522}
GLenum src
Definition: glext.h:6340
#define SET_EXPECT(func)
Definition: jscript.c:61
#define IActiveScriptParse_ParseScriptText
Definition: jscript.c:44
#define CHECK_CALLED(func)
Definition: jscript.c:79
Definition: import.c:81

◆ persistent_AddRef()

static ULONG WINAPI persistent_AddRef ( IDispatch iface)
static

Definition at line 184 of file jscript.c.

185{
187}
static ULONG persistent_named_item_ref
Definition: jscript.c:152

◆ persistent_GetIDsOfNames()

static HRESULT WINAPI persistent_GetIDsOfNames ( IDispatch iface,
REFIID  riid,
LPOLESTR *  names,
UINT  name_cnt,
LCID  lcid,
DISPID ids 
)
static

Definition at line 231 of file jscript.c.

233{
234 ok(name_cnt == 1, "name_cnt = %u\n", name_cnt);
235
236 CHECK_EXPECT2(GetIDsOfNames_persistent);
237 return DISP_E_UNKNOWNNAME;
238}

◆ persistent_Release()

static ULONG WINAPI persistent_Release ( IDispatch iface)
static

Definition at line 189 of file jscript.c.

190{
192}

◆ set_script_prop()

static HRESULT set_script_prop ( IActiveScript engine,
DWORD  property,
VARIANT val 
)
static

Definition at line 645 of file jscript.c.

646{
647 IActiveScriptProperty *script_prop;
649
650 hres = IActiveScript_QueryInterface(engine, &IID_IActiveScriptProperty,
651 (void**)&script_prop);
652 ok(hres == S_OK, "Could not get IActiveScriptProperty: %08lx\n", hres);
653 if(FAILED(hres))
654 return hres;
655
656 hres = IActiveScriptProperty_SetProperty(script_prop, property, NULL, val);
657 IActiveScriptProperty_Release(script_prop);
658 return hres;
659}
GLuint GLfloat * val
Definition: glext.h:7180
#define FAILED(hr)
Definition: intsafe.h:51

Referenced by test_invoke_versioning().

◆ START_TEST()

START_TEST ( jscript  )

Definition at line 2435 of file jscript.c.

2436{
2438
2439 if(check_jscript()) {
2440 trace("Testing JScript object...\n");
2441 test_jscript();
2442 test_jscript2();
2450 test_typeinfo(L"some_func_name");
2451
2452 trace("Testing JScriptEncode object...\n");
2454 test_jscript();
2455 }else {
2456 win_skip("Broken engine, probably too old\n");
2457 }
2458
2460}
#define trace
Definition: atltest.h:70
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: combase.c:2842
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
Definition: compobj.c:531
#define win_skip
Definition: minitest.h:67
static BOOL check_jscript(void)
Definition: jscript.c:2422
static void test_typeinfo(const WCHAR *parse_func_name)
Definition: jscript.c:1966
static void test_jscript_uninitializing(void)
Definition: jscript.c:823
static void test_aggregation(void)
Definition: jscript.c:921
static void test_param_ids(void)
Definition: jscript.c:1051
static void test_jscript(void)
Definition: jscript.c:702
static void test_code_persistence(void)
Definition: jscript.c:1118
static void test_named_items(void)
Definition: jscript.c:1345
static void test_case_sens(void)
Definition: jscript.c:933
static const CLSID CLSID_JScriptEncode
Definition: jscript.c:55
static void test_jscript2(void)
Definition: jscript.c:769

◆ test_aggregation()

static void test_aggregation ( void  )
static

Definition at line 921 of file jscript.c.

922{
923 IUnknown *unk = (IUnknown*)0xdeadbeef;
925
926 hres = CoCreateInstance(&CLSID_JScript, (IUnknown*)0xdeadbeef, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
927 &IID_IUnknown, (void**)&unk);
929 "CoCreateInstance failed: %08lx, expected CLASS_E_NOAGGREGATION\n", hres);
930 ok(!unk || broken(unk != NULL), "unk = %p\n", unk);
931}
#define broken(x)
Definition: atltest.h:178
#define CLASS_E_NOAGGREGATION
Definition: winerror.h:3771

Referenced by START_TEST().

◆ test_case_sens()

static void test_case_sens ( void  )
static

Definition at line 933 of file jscript.c.

934{
935 static const WCHAR *const names[] = { L"abc", L"foo", L"bar", L"mAth", L"evaL" };
936 DISPPARAMS dp = { NULL, NULL, 0, 0 };
937 IActiveScriptParse *parser;
939 EXCEPINFO ei = { 0 };
940 IDispatchEx *disp;
941 DISPID id, id2;
942 unsigned i;
943 HRESULT hr;
944 VARIANT v;
945 BSTR bstr;
946
948
949 hr = IActiveScript_QueryInterface(script, &IID_IActiveScriptParse, (void**)&parser);
950 ok(hr == S_OK, "Could not get IActiveScriptParse iface: %08lx\n", hr);
951
952 SET_EXPECT(GetLCID);
953 hr = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
954 ok(hr == S_OK, "SetScriptSite failed: %08lx\n", hr);
955 CHECK_CALLED(GetLCID);
956
957 SET_EXPECT(OnStateChange_INITIALIZED);
959 ok(hr == S_OK, "InitNew failed: %08lx\n", hr);
960 CHECK_CALLED(OnStateChange_INITIALIZED);
961
962 SET_EXPECT(OnStateChange_CONNECTED);
963 hr = IActiveScript_SetScriptState(script, SCRIPTSTATE_CONNECTED);
964 ok(hr == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08lx\n", hr);
965 CHECK_CALLED(OnStateChange_CONNECTED);
966
967 parse_script(parser, L"var aBc; var abC; function Foo() { }\nFoo.prototype.foo = 13; var Bar = new Foo(); Bar.Foo = 42;");
969
970 for(i = 0; i < ARRAY_SIZE(names); i++) {
971 bstr = SysAllocString(names[i]);
972 hr = IDispatchEx_GetIDsOfNames(disp, &IID_NULL, &bstr, 1, 0, &id);
973 ok(hr == DISP_E_UNKNOWNNAME, "GetIDsOfNames(%s) returned %08lx, expected %08lx\n", debugstr_w(bstr), hr, DISP_E_UNKNOWNNAME);
974
975 hr = IDispatchEx_GetDispID(disp, bstr, 0, &id);
976 ok(hr == DISP_E_UNKNOWNNAME, "GetDispID(%s) returned %08lx, expected %08lx\n", debugstr_w(bstr), hr, DISP_E_UNKNOWNNAME);
977
978 hr = IDispatchEx_GetDispID(disp, bstr, fdexNameCaseInsensitive, &id);
979 ok(hr == S_OK, "GetDispID(%s) with fdexNameCaseInsensitive failed: %08lx\n", debugstr_w(bstr), hr);
980 ok(id > 0, "Unexpected DISPID for %s: %ld\n", debugstr_w(bstr), id);
981 SysFreeString(bstr);
982 }
983
984 get_disp_id(disp, L"Bar", S_OK, &id);
985 hr = IDispatchEx_InvokeEx(disp, id, 0, DISPATCH_PROPERTYGET, &dp, &v, &ei, NULL);
986 ok(hr == S_OK, "InvokeEx failed: %08lx\n", hr);
987 ok(V_VT(&v) == VT_DISPATCH, "V_VT(v) = %d\n", V_VT(&v));
988 ok(V_DISPATCH(&v) != NULL, "V_DISPATCH(v) = NULL\n");
989 IDispatchEx_Release(disp);
990
991 hr = IDispatch_QueryInterface(V_DISPATCH(&v), &IID_IDispatchEx, (void**)&disp);
992 ok(hr == S_OK, "Could not get IDispatchEx iface: %08lx\n", hr);
993 VariantClear(&v);
994
995 bstr = SysAllocString(L"foo");
996 hr = IDispatchEx_GetDispID(disp, bstr, fdexNameCaseSensitive, &id);
997 ok(hr == S_OK, "GetDispID failed: %08lx\n", hr);
998
999 /* Native picks one "arbitrarily" here, depending how it's laid out, so can't compare exact id */
1000 hr = IDispatchEx_GetDispID(disp, bstr, fdexNameCaseInsensitive, &id2);
1001 ok(hr == S_OK, "GetDispID failed: %08lx\n", hr);
1002
1003 hr = IDispatchEx_GetIDsOfNames(disp, &IID_NULL, &bstr, 1, 0, &id2);
1004 ok(hr == S_OK, "GetIDsOfNames failed: %08lx\n", hr);
1005 ok(id == id2, "id != id2\n");
1006
1007 hr = IDispatchEx_DeleteMemberByName(disp, bstr, fdexNameCaseInsensitive);
1008 ok(hr == S_OK, "DeleteMemberByName failed: %08lx\n", hr);
1009
1010 hr = IDispatchEx_GetDispID(disp, bstr, fdexNameCaseInsensitive, &id2);
1011 ok(hr == S_OK, "GetDispID failed: %08lx\n", hr);
1012 ok(id == id2, "id != id2\n");
1013
1014 hr = IDispatchEx_GetDispID(disp, bstr, fdexNameCaseInsensitive | fdexNameEnsure, &id2);
1015 ok(hr == S_OK, "GetDispID failed: %08lx\n", hr);
1016 ok(id == id2, "id != id2\n");
1017 SysFreeString(bstr);
1018
1019 bstr = SysAllocString(L"fOo");
1020 hr = IDispatchEx_GetDispID(disp, bstr, fdexNameCaseInsensitive, &id2);
1021 ok(hr == S_OK, "GetDispID failed: %08lx\n", hr);
1022 ok(id == id2, "id != id2\n");
1023
1024 hr = IDispatchEx_GetDispID(disp, bstr, fdexNameCaseInsensitive | fdexNameEnsure, &id2);
1025 ok(hr == S_OK, "GetDispID failed: %08lx\n", hr);
1026 ok(id == id2, "id != id2\n");
1027
1028 hr = IDispatchEx_GetDispID(disp, bstr, fdexNameEnsure, &id2);
1029 ok(hr == S_OK, "GetDispID failed: %08lx\n", hr);
1030 ok(id != id2, "id == id2\n");
1031
1032 hr = IDispatchEx_GetDispID(disp, bstr, fdexNameCaseInsensitive | fdexNameEnsure, &id2);
1033 ok(hr == S_OK, "GetDispID failed: %08lx\n", hr);
1034 SysFreeString(bstr);
1035
1036 IDispatchEx_Release(disp);
1038
1039 SET_EXPECT(OnStateChange_DISCONNECTED);
1040 SET_EXPECT(OnStateChange_INITIALIZED);
1041 SET_EXPECT(OnStateChange_CLOSED);
1042 hr = IActiveScript_Close(script);
1043 ok(hr == S_OK, "Close failed: %08lx\n", hr);
1044 CHECK_CALLED(OnStateChange_DISCONNECTED);
1045 CHECK_CALLED(OnStateChange_INITIALIZED);
1046 CHECK_CALLED(OnStateChange_CLOSED);
1047
1048 IActiveScript_Release(script);
1049}
#define ARRAY_SIZE(A)
Definition: main.h:20
@ VT_DISPATCH
Definition: compat.h:2304
const GLdouble * v
Definition: gl.h:2040
GLuint id
Definition: glext.h:5910
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define debugstr_w
Definition: kernel32.h:32
#define parse_script(p, s)
Definition: activex.c:681
static IActiveScript * create_jscript(void)
Definition: jscript.c:690
static IDispatchEx * get_script_dispatch(IActiveScript *script, const WCHAR *item_name)
Definition: jscript.c:494
#define get_disp_id(a, b, c, d)
Definition: jscript.c:524
#define IActiveScriptParse_InitNew
Definition: jscript.c:43
#define IActiveScriptParse_Release
Definition: jscript.c:42
static IActiveScriptSite ActiveScriptSite
Definition: jscript.c:453
struct stdole::DISPPARAMS DISPPARAMS
struct stdole::EXCEPINFO EXCEPINFO
#define V_VT(A)
Definition: oleauto.h:211
#define V_DISPATCH(A)
Definition: oleauto.h:239
#define DISPATCH_PROPERTYGET
Definition: oleauto.h:1007
short WCHAR
Definition: pedump.c:58
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
Definition: variant.c:648

Referenced by START_TEST().

◆ test_code_persistence()

static void test_code_persistence ( void  )
static

Definition at line 1118 of file jscript.c.

1119{
1120 IActiveScriptParse *parse;
1122 IDispatchEx *dispex;
1123 VARIANT var;
1124 HRESULT hr;
1125 DISPID id;
1126 ULONG ref;
1127
1129
1130 hr = IActiveScript_QueryInterface(script, &IID_IActiveScriptParse, (void**)&parse);
1131 ok(hr == S_OK, "Could not get IActiveScriptParse iface: %08lx\n", hr);
1134
1135 SET_EXPECT(GetLCID);
1136 hr = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
1137 ok(hr == S_OK, "SetScriptSite failed: %08lx\n", hr);
1138 CHECK_CALLED(GetLCID);
1139
1140 SET_EXPECT(OnStateChange_INITIALIZED);
1142 ok(hr == S_OK, "InitNew failed: %08lx\n", hr);
1143 CHECK_CALLED(OnStateChange_INITIALIZED);
1145
1147 L"var x = 1;\n"
1148 L"var y = 2;\n",
1149 NULL, NULL, NULL, 0, 0, 0, NULL, NULL);
1150 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
1151
1153 L"var z = 3;\n"
1154 L"var y = 42;\n"
1155 L"var v = 10;\n",
1156 NULL, NULL, NULL, 0, 0, SCRIPTTEXT_ISPERSISTENT, NULL, NULL);
1157 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
1158
1159 /* Pending code does not add identifiers to the global scope */
1160 dispex = get_script_dispatch(script, NULL);
1161 id = 0;
1162 get_disp_id(dispex, L"x", DISP_E_UNKNOWNNAME, &id);
1163 ok(id == -1, "id = %ld, expected -1\n", id);
1164 id = 0;
1165 get_disp_id(dispex, L"y", DISP_E_UNKNOWNNAME, &id);
1166 ok(id == -1, "id = %ld, expected -1\n", id);
1167 id = 0;
1168 get_disp_id(dispex, L"z", DISP_E_UNKNOWNNAME, &id);
1169 ok(id == -1, "id = %ld, expected -1\n", id);
1170 IDispatchEx_Release(dispex);
1171
1172 /* Uninitialized state removes code without SCRIPTTEXT_ISPERSISTENT */
1173 SET_EXPECT(OnStateChange_UNINITIALIZED);
1174 hr = IActiveScript_SetScriptState(script, SCRIPTSTATE_UNINITIALIZED);
1175 ok(hr == S_OK, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08lx\n", hr);
1176 CHECK_CALLED(OnStateChange_UNINITIALIZED);
1178
1179 SET_EXPECT(GetLCID);
1180 SET_EXPECT(OnStateChange_INITIALIZED);
1181 hr = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
1182 ok(hr == S_OK, "SetScriptSite failed: %08lx\n", hr);
1183 CHECK_CALLED(GetLCID);
1184 CHECK_CALLED(OnStateChange_INITIALIZED);
1185
1186 hr = IActiveScriptParse_ParseScriptText(parse, L"v = 20;\n", NULL, NULL, NULL, 0, 0, 0, NULL, NULL);
1187 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
1188
1189 SET_EXPECT(OnStateChange_CONNECTED);
1190 SET_EXPECT_MULTI(OnEnterScript, 2);
1191 SET_EXPECT_MULTI(OnLeaveScript, 2);
1192 hr = IActiveScript_SetScriptState(script, SCRIPTSTATE_CONNECTED);
1193 ok(hr == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08lx\n", hr);
1194 CHECK_CALLED(OnStateChange_CONNECTED);
1195 CHECK_CALLED_MULTI(OnEnterScript, 2);
1196 CHECK_CALLED_MULTI(OnLeaveScript, 2);
1198
1199 dispex = get_script_dispatch(script, NULL);
1200 id = 0;
1201 get_disp_id(dispex, L"x", DISP_E_UNKNOWNNAME, &id);
1202 ok(id == -1, "id = %ld, expected -1\n", id);
1203 id = 0;
1204 get_disp_id(dispex, L"y", S_OK, &id);
1205 ok(id != -1, "id = -1\n");
1206 id = 0;
1207 get_disp_id(dispex, L"z", S_OK, &id);
1208 ok(id != -1, "id = -1\n");
1209 IDispatchEx_Release(dispex);
1210
1211 SET_EXPECT(OnEnterScript);
1212 SET_EXPECT(OnLeaveScript);
1213 hr = IActiveScriptParse_ParseScriptText(parse, L"y", NULL, NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
1214 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
1215 ok(V_VT(&var) == VT_I4 && V_I2(&var) == 42, "V_VT(y) = %d, V_I2(y) = %d\n", V_VT(&var), V_I2(&var));
1216 CHECK_CALLED(OnEnterScript);
1217 CHECK_CALLED(OnLeaveScript);
1218
1219 SET_EXPECT(OnEnterScript);
1220 SET_EXPECT(OnLeaveScript);
1221 hr = IActiveScriptParse_ParseScriptText(parse, L"v", NULL, NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
1222 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
1223 ok(V_VT(&var) == VT_I4 && V_I2(&var) == 20, "V_VT(var) = %d, V_I2(var) = %d\n", V_VT(&var), V_I2(&var));
1224 CHECK_CALLED(OnEnterScript);
1225 CHECK_CALLED(OnLeaveScript);
1226
1227 /* Uninitialized state does not remove persistent code, even if it was executed */
1228 SET_EXPECT(OnStateChange_DISCONNECTED);
1229 SET_EXPECT(OnStateChange_INITIALIZED);
1230 SET_EXPECT(OnStateChange_UNINITIALIZED);
1231 hr = IActiveScript_SetScriptState(script, SCRIPTSTATE_UNINITIALIZED);
1232 ok(hr == S_OK, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08lx\n", hr);
1233 CHECK_CALLED(OnStateChange_DISCONNECTED);
1234 CHECK_CALLED(OnStateChange_INITIALIZED);
1235 CHECK_CALLED(OnStateChange_UNINITIALIZED);
1237
1238 SET_EXPECT(GetLCID);
1239 SET_EXPECT(OnStateChange_INITIALIZED);
1240 hr = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
1241 ok(hr == S_OK, "SetScriptSite failed: %08lx\n", hr);
1242 CHECK_CALLED(GetLCID);
1243 CHECK_CALLED(OnStateChange_INITIALIZED);
1244
1245 dispex = get_script_dispatch(script, NULL);
1246 id = 0;
1247 get_disp_id(dispex, L"z", DISP_E_UNKNOWNNAME, &id);
1248 ok(id == -1, "id = %ld, expected -1\n", id);
1249 IDispatchEx_Release(dispex);
1250
1251 SET_EXPECT(OnStateChange_CONNECTED);
1252 SET_EXPECT(OnEnterScript);
1253 SET_EXPECT(OnLeaveScript);
1254 hr = IActiveScript_SetScriptState(script, SCRIPTSTATE_CONNECTED);
1255 ok(hr == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08lx\n", hr);
1256 CHECK_CALLED(OnStateChange_CONNECTED);
1257 CHECK_CALLED(OnEnterScript);
1258 CHECK_CALLED(OnLeaveScript);
1260
1261 dispex = get_script_dispatch(script, NULL);
1262 id = 0;
1263 get_disp_id(dispex, L"z", S_OK, &id);
1264 ok(id != -1, "id = -1\n");
1265 IDispatchEx_Release(dispex);
1266
1267 SET_EXPECT(OnEnterScript);
1268 SET_EXPECT(OnLeaveScript);
1269 hr = IActiveScriptParse_ParseScriptText(parse, L"y", NULL, NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
1270 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
1271 ok(V_VT(&var) == VT_I4 && V_I2(&var) == 42, "V_VT(y) = %d, V_I2(y) = %d\n", V_VT(&var), V_I2(&var));
1272 CHECK_CALLED(OnEnterScript);
1273 CHECK_CALLED(OnLeaveScript);
1274
1275 SET_EXPECT(OnEnterScript);
1276 SET_EXPECT(OnLeaveScript);
1277 hr = IActiveScriptParse_ParseScriptText(parse, L"v", NULL, NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
1278 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
1279 ok(V_VT(&var) == VT_I4 && V_I2(&var) == 10, "V_VT(var) = %d, V_I2(var) = %d\n", V_VT(&var), V_I2(&var));
1280 CHECK_CALLED(OnEnterScript);
1281 CHECK_CALLED(OnLeaveScript);
1282
1283 SET_EXPECT(OnStateChange_DISCONNECTED);
1284 SET_EXPECT(OnStateChange_INITIALIZED);
1285 SET_EXPECT(OnStateChange_UNINITIALIZED);
1286 hr = IActiveScript_SetScriptState(script, SCRIPTSTATE_UNINITIALIZED);
1287 ok(hr == S_OK, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08lx\n", hr);
1288 CHECK_CALLED(OnStateChange_DISCONNECTED);
1289 CHECK_CALLED(OnStateChange_INITIALIZED);
1290 CHECK_CALLED(OnStateChange_UNINITIALIZED);
1291
1292 SET_EXPECT(GetLCID);
1293 SET_EXPECT(OnStateChange_INITIALIZED);
1294 hr = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
1295 ok(hr == S_OK, "SetScriptSite failed: %08lx\n", hr);
1296 CHECK_CALLED(GetLCID);
1297 CHECK_CALLED(OnStateChange_INITIALIZED);
1298
1299 hr = IActiveScriptParse_ParseScriptText(parse, L"y = 2;\n", NULL, NULL, NULL, 0, 0, SCRIPTTEXT_ISPERSISTENT, NULL, NULL);
1300 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
1301
1302 /* Closing the script engine removes all code (even if it's pending and persistent) */
1303 SET_EXPECT(OnStateChange_CLOSED);
1304 hr = IActiveScript_Close(script);
1305 ok(hr == S_OK, "Close failed: %08lx\n", hr);
1306 CHECK_CALLED(OnStateChange_CLOSED);
1309
1310 SET_EXPECT(OnStateChange_INITIALIZED);
1311 SET_EXPECT(GetLCID);
1312 hr = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
1313 ok(hr == S_OK, "SetScriptSite failed: %08lx\n", hr);
1314 CHECK_CALLED(OnStateChange_INITIALIZED);
1315 CHECK_CALLED(GetLCID);
1317
1318 SET_EXPECT(OnStateChange_CONNECTED);
1319 hr = IActiveScript_SetScriptState(script, SCRIPTSTATE_CONNECTED);
1320 ok(hr == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08lx\n", hr);
1321 CHECK_CALLED(OnStateChange_CONNECTED);
1323
1324 dispex = get_script_dispatch(script, NULL);
1325 id = 0;
1326 get_disp_id(dispex, L"y", DISP_E_UNKNOWNNAME, &id);
1327 ok(id == -1, "id = %ld, expected -1\n", id);
1328 id = 0;
1329 get_disp_id(dispex, L"z", DISP_E_UNKNOWNNAME, &id);
1330 ok(id == -1, "id = %ld, expected -1\n", id);
1331 IDispatchEx_Release(dispex);
1332
1334
1335 SET_EXPECT(OnStateChange_DISCONNECTED);
1336 SET_EXPECT(OnStateChange_INITIALIZED);
1337 SET_EXPECT(OnStateChange_CLOSED);
1338 ref = IActiveScript_Release(script);
1339 ok(!ref, "ref = %ld\n", ref);
1340 CHECK_CALLED(OnStateChange_DISCONNECTED);
1341 CHECK_CALLED(OnStateChange_INITIALIZED);
1342 CHECK_CALLED(OnStateChange_CLOSED);
1343}
@ VT_I4
Definition: compat.h:2298
const char * var
Definition: shader.c:5666
#define test_state(s, ss)
Definition: jscript.c:119
static void test_safety(IUnknown *unk)
Definition: jscript.c:554
static void test_no_script_dispatch(IActiveScript *script)
Definition: jscript.c:543
#define CHECK_CALLED_MULTI(func, num)
Definition: jscript.c:91
#define SET_EXPECT_MULTI(func, num)
Definition: jscript.c:64
#define V_I2(A)
Definition: oleauto.h:245
Definition: send.c:48
uint32_t ULONG
Definition: typedefs.h:59

Referenced by START_TEST().

◆ test_invoke_versioning()

static void test_invoke_versioning ( IActiveScript script)
static

Definition at line 661 of file jscript.c.

662{
663 VARIANT v;
665
666 V_VT(&v) = VT_NULL;
667 hres = set_script_prop(script, SCRIPTPROP_INVOKEVERSIONING, &v);
668 if(hres == E_NOTIMPL) {
669 win_skip("SCRIPTPROP_INVOKESTRING not supported\n");
670 return;
671 }
672 ok(hres == E_INVALIDARG, "SetProperty(SCRIPTPROP_INVOKEVERSIONING) failed: %08lx\n", hres);
673
674 V_VT(&v) = VT_I2;
675 V_I2(&v) = 0;
676 hres = set_script_prop(script, SCRIPTPROP_INVOKEVERSIONING, &v);
677 ok(hres == E_INVALIDARG, "SetProperty(SCRIPTPROP_INVOKEVERSIONING) failed: %08lx\n", hres);
678
679 V_VT(&v) = VT_I4;
680 V_I4(&v) = 16;
681 hres = set_script_prop(script, SCRIPTPROP_INVOKEVERSIONING, &v);
682 ok(hres == E_INVALIDARG, "SetProperty(SCRIPTPROP_INVOKEVERSIONING) failed: %08lx\n", hres);
683
684 V_VT(&v) = VT_I4;
685 V_I4(&v) = 2;
686 hres = set_script_prop(script, SCRIPTPROP_INVOKEVERSIONING, &v);
687 ok(hres == S_OK, "SetProperty(SCRIPTPROP_INVOKEVERSIONING) failed: %08lx\n", hres);
688}
#define E_INVALIDARG
Definition: ddrawi.h:101
@ VT_NULL
Definition: compat.h:2296
@ VT_I2
Definition: compat.h:2297
static HRESULT set_script_prop(IActiveScript *engine, DWORD property, VARIANT *val)
Definition: jscript.c:645
#define V_I4(A)
Definition: oleauto.h:247

Referenced by test_jscript().

◆ test_jscript()

static void test_jscript ( void  )
static

Definition at line 702 of file jscript.c.

703{
704 IActiveScriptParse *parse;
706 IDispatchEx *dispex;
707 ULONG ref;
709
711
712 hres = IActiveScript_QueryInterface(script, &IID_IActiveScriptParse, (void**)&parse);
713 ok(hres == S_OK, "Could not get IActiveScriptParse: %08lx\n", hres);
714
718
720 ok(hres == S_OK, "InitNew failed: %08lx\n", hres);
721
723 ok(hres == E_UNEXPECTED, "InitNew failed: %08lx, expected E_UNEXPECTED\n", hres);
724
725 hres = IActiveScript_SetScriptSite(script, NULL);
726 ok(hres == E_POINTER, "SetScriptSite failed: %08lx, expected E_POINTER\n", hres);
727
730
731 SET_EXPECT(GetLCID);
732 SET_EXPECT(OnStateChange_INITIALIZED);
733 hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
734 ok(hres == S_OK, "SetScriptSite failed: %08lx\n", hres);
735 CHECK_CALLED(GetLCID);
736 CHECK_CALLED(OnStateChange_INITIALIZED);
737
739
740 hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
741 ok(hres == E_UNEXPECTED, "SetScriptSite failed: %08lx, expected E_UNEXPECTED\n", hres);
742
744 test_script_dispatch(dispex);
745
746 SET_EXPECT(OnStateChange_STARTED);
747 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_STARTED);
748 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_STARTED) failed: %08lx\n", hres);
749 CHECK_CALLED(OnStateChange_STARTED);
750
752
753 SET_EXPECT(OnStateChange_CLOSED);
754 hres = IActiveScript_Close(script);
755 ok(hres == S_OK, "Close failed: %08lx\n", hres);
756 CHECK_CALLED(OnStateChange_CLOSED);
757
760 test_script_dispatch(dispex);
761 IDispatchEx_Release(dispex);
762
764
765 ref = IActiveScript_Release(script);
766 ok(!ref, "ref = %ld\n", ref);
767}
static void test_invoke_versioning(IActiveScript *script)
Definition: jscript.c:661
static void test_script_dispatch(IDispatchEx *dispex)
Definition: jscript.c:455
#define E_UNEXPECTED
Definition: winerror.h:3528
#define E_POINTER
Definition: winerror.h:3480

Referenced by START_TEST().

◆ test_jscript2()

static void test_jscript2 ( void  )
static

Definition at line 769 of file jscript.c.

770{
771 IActiveScriptParse *parse;
773 ULONG ref;
775
777
778 hres = IActiveScript_QueryInterface(script, &IID_IActiveScriptParse, (void**)&parse);
779 ok(hres == S_OK, "Could not get IActiveScriptParse: %08lx\n", hres);
780
782
783 SET_EXPECT(GetLCID);
784 hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
785 ok(hres == S_OK, "SetScriptSite failed: %08lx\n", hres);
786 CHECK_CALLED(GetLCID);
787
789
790 SET_EXPECT(OnStateChange_INITIALIZED);
792 ok(hres == S_OK, "InitNew failed: %08lx\n", hres);
793 CHECK_CALLED(OnStateChange_INITIALIZED);
794
796 ok(hres == E_UNEXPECTED, "InitNew failed: %08lx, expected E_UNEXPECTED\n", hres);
797
798 SET_EXPECT(OnStateChange_CONNECTED);
799 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_CONNECTED);
800 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08lx\n", hres);
801 CHECK_CALLED(OnStateChange_CONNECTED);
802
804
805 SET_EXPECT(OnStateChange_DISCONNECTED);
806 SET_EXPECT(OnStateChange_INITIALIZED);
807 SET_EXPECT(OnStateChange_CLOSED);
808 hres = IActiveScript_Close(script);
809 ok(hres == S_OK, "Close failed: %08lx\n", hres);
810 CHECK_CALLED(OnStateChange_DISCONNECTED);
811 CHECK_CALLED(OnStateChange_INITIALIZED);
812 CHECK_CALLED(OnStateChange_CLOSED);
813
816
818
819 ref = IActiveScript_Release(script);
820 ok(!ref, "ref = %ld\n", ref);
821}

Referenced by START_TEST().

◆ test_jscript_uninitializing()

static void test_jscript_uninitializing ( void  )
static

Definition at line 823 of file jscript.c.

824{
825 IActiveScriptParse *parse;
827 IDispatchEx *dispex;
828 ULONG ref;
830
832
833 hres = IActiveScript_QueryInterface(script, &IID_IActiveScriptParse, (void**)&parse);
834 ok(hres == S_OK, "Could not get IActiveScriptParse: %08lx\n", hres);
835
837
839 ok(hres == S_OK, "InitNew failed: %08lx\n", hres);
840
841 SET_EXPECT(GetLCID);
842 SET_EXPECT(OnStateChange_INITIALIZED);
843 hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
844 ok(hres == S_OK, "SetScriptSite failed: %08lx\n", hres);
845 CHECK_CALLED(GetLCID);
846 CHECK_CALLED(OnStateChange_INITIALIZED);
847
849
850 hres = IActiveScriptParse_ParseScriptText(parse, L"function f() {}", NULL, NULL, NULL, 0, 1, 0x42, NULL, NULL);
851 ok(hres == S_OK, "ParseScriptText failed: %08lx\n", hres);
852
853 hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
854 ok(hres == E_UNEXPECTED, "SetScriptSite failed: %08lx, expected E_UNEXPECTED\n", hres);
855
856 SET_EXPECT(OnStateChange_UNINITIALIZED);
857 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_UNINITIALIZED);
858 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08lx\n", hres);
859 CHECK_CALLED(OnStateChange_UNINITIALIZED);
860
862
863 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_UNINITIALIZED);
864 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08lx\n", hres);
865
866 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_STARTED);
867 ok(hres == E_UNEXPECTED, "SetScriptState(SCRIPTSTATE_STARTED) returned: %08lx\n", hres);
868
869 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_CONNECTED);
870 ok(hres == E_UNEXPECTED, "SetScriptState(SCRIPTSTATE_CONNECTED) returned: %08lx\n", hres);
871
872 SET_EXPECT(GetLCID);
873 SET_EXPECT(OnStateChange_INITIALIZED);
874 hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
875 ok(hres == S_OK, "SetScriptSite failed: %08lx\n", hres);
876 CHECK_CALLED(GetLCID);
877 CHECK_CALLED(OnStateChange_INITIALIZED);
878
879 SET_EXPECT(OnStateChange_CONNECTED);
880 SET_EXPECT(OnEnterScript);
881 SET_EXPECT(OnLeaveScript);
882 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_CONNECTED);
883 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08lx\n", hres);
884 CHECK_CALLED(OnStateChange_CONNECTED);
885 CHECK_CALLED(OnEnterScript);
886 CHECK_CALLED(OnLeaveScript);
887
889
891 ok(dispex != NULL, "dispex == NULL\n");
892 IDispatchEx_Release(dispex);
893
894 SET_EXPECT(OnStateChange_DISCONNECTED);
895 SET_EXPECT(OnStateChange_INITIALIZED);
896 SET_EXPECT(OnStateChange_UNINITIALIZED);
897 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_UNINITIALIZED);
898 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08lx\n", hres);
899 CHECK_CALLED(OnStateChange_DISCONNECTED);
900 CHECK_CALLED(OnStateChange_INITIALIZED);
901 CHECK_CALLED(OnStateChange_UNINITIALIZED);
902
904
905 hres = IActiveScript_Close(script);
906 ok(hres == S_OK, "Close failed: %08lx\n", hres);
907
909
910 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_UNINITIALIZED);
911 ok(hres == E_UNEXPECTED, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08lx, expected E_UNEXPECTED\n", hres);
912
914
916
917 ref = IActiveScript_Release(script);
918 ok(!ref, "ref = %ld\n", ref);
919}

Referenced by START_TEST().

◆ test_named_items()

static void test_named_items ( void  )
static

Definition at line 1345 of file jscript.c.

1346{
1347 static const WCHAR *global_idents[] =
1348 {
1349 L"ActiveXObject",
1350 L"Array",
1351 L"Boolean",
1352 L"ReferenceError",
1353 L"RegExp",
1354 L"decodeURI",
1355 L"isNaN",
1356
1357 L"global_this",
1358 L"globalCode_this",
1359 L"testFunc_global",
1360 L"testVar_global"
1361 };
1362 static const WCHAR *global_code_test[] =
1363 {
1364 L"testFunc_global();",
1365 L"if(testVar_global != 5) throw new Error();",
1366 L"var testObj = new testClassFunc();",
1367 L"eval(\"testFunc_global();\");",
1368 L"if(Math.abs(-17) != 17) throw new Error();"
1369 };
1370 static const WCHAR *context_idents[] =
1371 {
1372 L"testFunc",
1373 L"testVar",
1374 L"testFuncConstr"
1375 };
1376 static const WCHAR *context_code_test[] =
1377 {
1378 L"testFunc();",
1379 L"if(testVar != 42) throw new Error();",
1380 L"if(Math.abs(-testVar) != 42) throw new Error();",
1381 L"if(testFuncConstr() != testVar) throw new Error();"
1382 };
1383 IDispatchEx *dispex, *dispex2;
1384 IActiveScriptParse *parse;
1386 IDispatch *disp;
1387 VARIANT var;
1388 unsigned i;
1389 HRESULT hr;
1390 DISPID id;
1391 ULONG ref;
1392 BSTR bstr;
1393
1395
1396 hr = IActiveScript_QueryInterface(script, &IID_IActiveScriptParse, (void**)&parse);
1397 ok(hr == S_OK, "Could not get IActiveScriptParse: %08lx\n", hr);
1398
1400
1401 hr = IActiveScript_AddNamedItem(script, L"visibleItem", SCRIPTITEM_ISVISIBLE);
1402 ok(hr == E_UNEXPECTED, "AddNamedItem returned: %08lx\n", hr);
1403 hr = IActiveScript_AddNamedItem(script, L"globalItem", SCRIPTITEM_GLOBALMEMBERS);
1404 ok(hr == E_UNEXPECTED, "AddNamedItem returned: %08lx\n", hr);
1405 hr = IActiveScript_AddNamedItem(script, L"codeOnlyItem", SCRIPTITEM_CODEONLY);
1406 ok(hr == E_UNEXPECTED, "AddNamedItem returned: %08lx\n", hr);
1407 hr = IActiveScript_AddNamedItem(script, L"persistent", SCRIPTITEM_ISPERSISTENT | SCRIPTITEM_CODEONLY);
1408 ok(hr == E_UNEXPECTED, "AddNamedItem returned: %08lx\n", hr);
1409
1410 SET_EXPECT(GetLCID);
1411 hr = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
1412 ok(hr == S_OK, "SetScriptSite failed: %08lx\n", hr);
1413 CHECK_CALLED(GetLCID);
1414
1415 SET_EXPECT(GetItemInfo_global);
1416 hr = IActiveScript_AddNamedItem(script, L"globalItem", SCRIPTITEM_GLOBALMEMBERS);
1417 ok(hr == S_OK, "AddNamedItem failed: %08lx\n", hr);
1418 CHECK_CALLED(GetItemInfo_global);
1419
1420 hr = IActiveScript_AddNamedItem(script, L"visibleItem", SCRIPTITEM_ISVISIBLE);
1421 ok(hr == S_OK, "AddNamedItem failed: %08lx\n", hr);
1422 hr = IActiveScript_AddNamedItem(script, L"visibleCodeItem", SCRIPTITEM_ISVISIBLE | SCRIPTITEM_CODEONLY);
1423 ok(hr == S_OK, "AddNamedItem failed: %08lx\n", hr);
1424 hr = IActiveScript_AddNamedItem(script, L"codeOnlyItem", SCRIPTITEM_CODEONLY);
1425 ok(hr == S_OK, "AddNamedItem failed: %08lx\n", hr);
1426 hr = IActiveScript_AddNamedItem(script, L"persistent", SCRIPTITEM_ISPERSISTENT | SCRIPTITEM_CODEONLY);
1427 ok(hr == S_OK, "AddNamedItem failed: %08lx\n", hr);
1428
1429 ok(global_named_item_ref > 0, "global_named_item_ref = %lu\n", global_named_item_ref);
1430 ok(visible_named_item_ref == 0, "visible_named_item_ref = %lu\n", visible_named_item_ref);
1431 ok(visible_code_named_item_ref == 0, "visible_code_named_item_ref = %lu\n", visible_code_named_item_ref);
1432 ok(persistent_named_item_ref == 0, "persistent_named_item_ref = %lu\n", persistent_named_item_ref);
1433
1434 hr = IActiveScript_GetScriptDispatch(script, L"noContext", &disp);
1435 ok(hr == E_INVALIDARG, "GetScriptDispatch returned: %08lx\n", hr);
1436 hr = IActiveScript_GetScriptDispatch(script, L"codeONLYItem", &disp);
1437 ok(hr == E_INVALIDARG, "GetScriptDispatch returned: %08lx\n", hr);
1438
1439 SET_EXPECT(GetItemInfo_global_code);
1440 hr = IActiveScript_AddNamedItem(script, L"globalCodeItem", SCRIPTITEM_GLOBALMEMBERS | SCRIPTITEM_CODEONLY);
1441 ok(hr == S_OK, "AddNamedItem failed: %08lx\n", hr);
1442 CHECK_CALLED(GetItemInfo_global_code);
1443
1444 dispex = get_script_dispatch(script, NULL);
1445 dispex2 = get_script_dispatch(script, L"globalItem");
1446 ok(dispex == dispex2, "get_script_dispatch returned different dispatch objects.\n");
1447 IDispatchEx_Release(dispex2);
1448 dispex2 = get_script_dispatch(script, L"globalCodeItem");
1449 ok(dispex == dispex2, "get_script_dispatch returned different dispatch objects.\n");
1450 IDispatchEx_Release(dispex2);
1451 dispex2 = get_script_dispatch(script, L"codeOnlyItem");
1452 ok(dispex != dispex2, "get_script_dispatch returned same dispatch objects.\n");
1453
1454 SET_EXPECT(OnStateChange_INITIALIZED);
1456 ok(hr == S_OK, "InitNew failed: %08lx\n", hr);
1457 CHECK_CALLED(OnStateChange_INITIALIZED);
1458
1459 SET_EXPECT(OnStateChange_CONNECTED);
1460 hr = IActiveScript_SetScriptState(script, SCRIPTSTATE_CONNECTED);
1461 ok(hr == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08lx\n", hr);
1462 CHECK_CALLED(OnStateChange_CONNECTED);
1463
1464 SET_EXPECT(testCall);
1465 parse_script(parse, L"testCall();");
1466 CHECK_CALLED(testCall);
1467
1468 SET_EXPECT(GetItemInfo_visible);
1469 SET_EXPECT(testCall);
1470 parse_script(parse, L"visibleItem.testCall();");
1471 CHECK_CALLED(GetItemInfo_visible);
1472 CHECK_CALLED(testCall);
1473
1474 SET_EXPECT(OnEnterScript);
1475 SET_EXPECT(OnLeaveScript);
1476 SET_EXPECT(testCall);
1477 hr = IActiveScriptParse_ParseScriptText(parse, L"testCall();", L"visibleCodeItem", NULL, NULL, 0, 0, 0, NULL, NULL);
1478 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
1479 CHECK_CALLED(OnEnterScript);
1480 CHECK_CALLED(OnLeaveScript);
1481 CHECK_CALLED(testCall);
1482
1483 SET_EXPECT(OnEnterScript);
1484 SET_EXPECT(GetIDsOfNames);
1485 SET_EXPECT(OnScriptError);
1486 SET_EXPECT(OnLeaveScript);
1487 hr = IActiveScriptParse_ParseScriptText(parse, L"codeOnlyItem();", L"codeOnlyItem", NULL, NULL, 0, 0, 0, NULL, NULL);
1488 ok(FAILED(hr), "ParseScriptText returned: %08lx\n", hr);
1489 CHECK_CALLED(OnEnterScript);
1490 CHECK_CALLED(GetIDsOfNames);
1491 CHECK_CALLED(OnScriptError);
1492 CHECK_CALLED(OnLeaveScript);
1493
1494 hr = IActiveScript_GetScriptDispatch(script, L"visibleCodeItem", &disp);
1495 ok(hr == S_OK, "GetScriptDispatch returned: %08lx\n", hr);
1496 SET_EXPECT(OnEnterScript);
1497 SET_EXPECT(OnLeaveScript);
1498 hr = IActiveScriptParse_ParseScriptText(parse, L"this", L"visibleCodeItem", NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
1499 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
1500 ok(V_VT(&var) == VT_DISPATCH && V_DISPATCH(&var) == disp,
1501 "Unexpected 'this': V_VT = %d, V_DISPATCH = %p\n", V_VT(&var), V_DISPATCH(&var));
1502 VariantClear(&var);
1503 CHECK_CALLED(OnEnterScript);
1504 CHECK_CALLED(OnLeaveScript);
1505 IDispatch_Release(disp);
1506
1507 SET_EXPECT(GetItemInfo_visible_code);
1508 SET_EXPECT(testCall);
1509 parse_script(parse, L"visibleCodeItem.testCall();");
1510 CHECK_CALLED(GetItemInfo_visible_code);
1511 CHECK_CALLED(testCall);
1512
1513 ok(global_named_item_ref > 0, "global_named_item_ref = %lu\n", global_named_item_ref);
1514 ok(visible_named_item_ref > 0, "visible_named_item_ref = %lu\n", visible_named_item_ref);
1515 ok(visible_code_named_item_ref > 0, "visible_code_named_item_ref = %lu\n", visible_code_named_item_ref);
1516 ok(persistent_named_item_ref == 0, "persistent_named_item_ref = %lu\n", persistent_named_item_ref);
1517
1518 SET_EXPECT(testCall);
1519 parse_script(parse, L"visibleItem.testCall();");
1520 CHECK_CALLED(testCall);
1521
1522 hr = IActiveScriptParse_ParseScriptText(parse, L"function testFunc() { }", L"CodeOnlyItem", NULL, NULL, 0, 0, 0, NULL, NULL);
1523 ok(hr == E_INVALIDARG, "ParseScriptText returned: %08lx\n", hr);
1524
1525 SET_EXPECT(OnEnterScript);
1526 SET_EXPECT(GetIDsOfNames);
1527 SET_EXPECT(OnLeaveScript);
1529 "var global_this = 0;\n"
1530 "var globalCode_this = 0;\n"
1531 "function testFunc_global() { }\n"
1532 "var testVar_global = 10;\n"
1533 "function testClassFunc() { this.x = 10; }\n",
1534 NULL, NULL, NULL, 0, 0, SCRIPTTEXT_ISPERSISTENT, NULL, NULL);
1535 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
1536 CHECK_CALLED(OnEnterScript);
1537 CHECK_CALLED(GetIDsOfNames);
1538 CHECK_CALLED(OnLeaveScript);
1539
1540 SET_EXPECT(OnEnterScript);
1541 SET_EXPECT(OnLeaveScript);
1542 hr = IActiveScriptParse_ParseScriptText(parse, L"function testFunc() { }\n", L"codeOnlyItem", NULL, NULL, 0, 0, 0, NULL, NULL);
1543 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
1544 CHECK_CALLED(OnEnterScript);
1545 CHECK_CALLED(OnLeaveScript);
1546
1547 SET_EXPECT(OnEnterScript);
1548 SET_EXPECT(OnLeaveScript);
1550 "var testVar = 42;\n"
1551 "testVar_global = 5;\n"
1552 "var testFuncConstr = new Function(\"return testVar;\");\n",
1553 L"codeOnlyItem", NULL, NULL, 0, 0, SCRIPTTEXT_ISPERSISTENT, NULL, NULL);
1554 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
1555 CHECK_CALLED(OnEnterScript);
1556 CHECK_CALLED(OnLeaveScript);
1557
1558 SET_EXPECT(OnEnterScript);
1559 SET_EXPECT(GetIDsOfNames_visible);
1560 SET_EXPECT(OnLeaveScript);
1561 hr = IActiveScriptParse_ParseScriptText(parse, L"var abc;\n", L"visibleItem", NULL, NULL, 0, 0, 0, NULL, NULL);
1562 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
1563 CHECK_CALLED(OnEnterScript);
1564 CHECK_CALLED(GetIDsOfNames_visible);
1565 CHECK_CALLED(OnLeaveScript);
1566
1567 SET_EXPECT(OnEnterScript);
1568 SET_EXPECT(OnLeaveScript);
1569 hr = IActiveScriptParse_ParseScriptText(parse, L"abc = 5;\n", L"visibleItem", NULL, NULL, 0, 0, 0, NULL, NULL);
1570 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
1571 CHECK_CALLED(OnEnterScript);
1572 CHECK_CALLED(OnLeaveScript);
1573 SET_EXPECT(OnEnterScript);
1574 SET_EXPECT(GetIDsOfNames_visible);
1575 SET_EXPECT(OnLeaveScript);
1576 hr = IActiveScriptParse_ParseScriptText(parse, L"testVar_global = 5;\n", L"visibleItem", NULL, NULL, 0, 0, 0, NULL, NULL);
1577 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
1578 CHECK_CALLED(OnEnterScript);
1579 CHECK_CALLED(GetIDsOfNames_visible);
1580 CHECK_CALLED(OnLeaveScript);
1581
1582 SET_EXPECT(OnEnterScript);
1583 SET_EXPECT(OnLeaveScript);
1584 hr = IActiveScriptParse_ParseScriptText(parse, L"var abc; testVar_global = 5;\n", L"visibleCodeItem", NULL, NULL, 0, 0, 0, NULL, NULL);
1585 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
1586 CHECK_CALLED(OnEnterScript);
1587 CHECK_CALLED(OnLeaveScript);
1588
1589 SET_EXPECT(OnEnterScript);
1590 SET_EXPECT(OnLeaveScript);
1591 hr = IActiveScriptParse_ParseScriptText(parse, L"global_this = this;\n", L"globalItem", NULL, NULL, 0, 0, SCRIPTTEXT_ISPERSISTENT, NULL, NULL);
1592 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
1593 CHECK_CALLED(OnEnterScript);
1594 CHECK_CALLED(OnLeaveScript);
1595
1596 SET_EXPECT(OnEnterScript);
1597 SET_EXPECT(OnLeaveScript);
1598 hr = IActiveScriptParse_ParseScriptText(parse, L"globalCode_this = this;\n", L"globalCodeItem", NULL, NULL, 0, 0, SCRIPTTEXT_ISPERSISTENT, NULL, NULL);
1599 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
1600 CHECK_CALLED(OnEnterScript);
1601 CHECK_CALLED(OnLeaveScript);
1602
1603 for (i = 0; i < ARRAY_SIZE(global_idents); i++)
1604 {
1605 bstr = SysAllocString(global_idents[i]);
1606 id = 0;
1607 hr = IDispatchEx_GetDispID(dispex, bstr, 0, &id);
1608 ok(hr == S_OK, "GetDispID(%s) returned %08lx\n", wine_dbgstr_w(global_idents[i]), hr);
1609 ok(id != -1, "[%s] id = -1\n", wine_dbgstr_w(global_idents[i]));
1610
1611 id = 0;
1612 hr = IDispatchEx_GetDispID(dispex2, bstr, 0, &id);
1613 ok(hr == DISP_E_UNKNOWNNAME, "GetDispID(%s) returned %08lx\n", wine_dbgstr_w(global_idents[i]), hr);
1614 ok(id == -1, "[%s] id = %ld, expected -1\n", wine_dbgstr_w(global_idents[i]), id);
1615 SysFreeString(bstr);
1616 }
1617
1618 for (i = 0; i < ARRAY_SIZE(context_idents); i++)
1619 {
1620 bstr = SysAllocString(context_idents[i]);
1621 id = 0;
1622 hr = IDispatchEx_GetDispID(dispex, bstr, 0, &id);
1623 ok(hr == DISP_E_UNKNOWNNAME, "GetDispID(%s) returned %08lx\n", wine_dbgstr_w(context_idents[i]), hr);
1624 ok(id == -1, "[%s] id = %ld, expected -1\n", wine_dbgstr_w(context_idents[i]), id);
1625 id = 0;
1626 hr = IDispatchEx_GetDispID(dispex2, bstr, 0, &id);
1627 ok(hr == S_OK, "GetDispID(%s) returned %08lx\n", wine_dbgstr_w(context_idents[i]), hr);
1628 ok(id != -1, "[%s] id = -1\n", wine_dbgstr_w(context_idents[i]));
1629 SysFreeString(bstr);
1630 }
1631
1632 for (i = 0; i < ARRAY_SIZE(global_code_test); i++)
1633 {
1634 SET_EXPECT(OnEnterScript);
1635 SET_EXPECT(OnLeaveScript);
1636 hr = IActiveScriptParse_ParseScriptText(parse, global_code_test[i], NULL, NULL, NULL, 0, 0, 0, NULL, NULL);
1637 ok(hr == S_OK, "ParseScriptText(%s) failed: %08lx\n", wine_dbgstr_w(global_code_test[i]), hr);
1638 CHECK_CALLED(OnEnterScript);
1639 CHECK_CALLED(OnLeaveScript);
1640
1641 SET_EXPECT(OnEnterScript);
1642 SET_EXPECT(GetIDsOfNames);
1643 SET_EXPECT(OnLeaveScript);
1644 hr = IActiveScriptParse_ParseScriptText(parse, global_code_test[i], L"codeOnlyItem", NULL, NULL, 0, 0, 0, NULL, NULL);
1645 ok(hr == S_OK, "ParseScriptText(%s) failed: %08lx\n", wine_dbgstr_w(global_code_test[i]), hr);
1646 CHECK_CALLED(OnEnterScript);
1647 CHECK_CALLED(OnLeaveScript);
1648 }
1649
1650 for (i = 0; i < ARRAY_SIZE(context_code_test); i++)
1651 {
1652 SET_EXPECT(OnEnterScript);
1653 SET_EXPECT(GetIDsOfNames);
1654 SET_EXPECT(OnScriptError);
1655 SET_EXPECT(OnLeaveScript);
1656 hr = IActiveScriptParse_ParseScriptText(parse, context_code_test[i], NULL, NULL, NULL, 0, 0, 0, NULL, NULL);
1657 ok(FAILED(hr), "ParseScriptText(%s) returned: %08lx\n", wine_dbgstr_w(context_code_test[i]), hr);
1658 CHECK_CALLED(OnEnterScript);
1659 CHECK_CALLED(GetIDsOfNames);
1660 CHECK_CALLED(OnScriptError);
1661 CHECK_CALLED(OnLeaveScript);
1662
1663 SET_EXPECT(OnEnterScript);
1664 SET_EXPECT(OnLeaveScript);
1665 hr = IActiveScriptParse_ParseScriptText(parse, context_code_test[i], L"codeOnlyItem", NULL, NULL, 0, 0, 0, NULL, NULL);
1666 ok(hr == S_OK, "ParseScriptText(%s) failed: %08lx\n", wine_dbgstr_w(context_code_test[i]), hr);
1667 CHECK_CALLED(OnEnterScript);
1668 CHECK_CALLED(OnLeaveScript);
1669 }
1670
1671 SET_EXPECT(OnEnterScript);
1672 SET_EXPECT(OnLeaveScript);
1673 hr = IActiveScriptParse_ParseScriptText(parse, L"this", NULL, NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
1674 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
1676 "Unexpected 'this': V_VT = %d, V_DISPATCH = %p\n", V_VT(&var), V_DISPATCH(&var));
1677 VariantClear(&var);
1678 CHECK_CALLED(OnEnterScript);
1679 CHECK_CALLED(OnLeaveScript);
1680
1681 SET_EXPECT(OnEnterScript);
1682 SET_EXPECT(OnLeaveScript);
1683 hr = IActiveScriptParse_ParseScriptText(parse, L"this", L"visibleItem", NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
1684 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
1686 "Unexpected 'this': V_VT = %d, V_DISPATCH = %p\n", V_VT(&var), V_DISPATCH(&var));
1687 VariantClear(&var);
1688 CHECK_CALLED(OnEnterScript);
1689 CHECK_CALLED(OnLeaveScript);
1690
1691 SET_EXPECT(OnEnterScript);
1692 SET_EXPECT(OnLeaveScript);
1693 hr = IActiveScriptParse_ParseScriptText(parse, L"this", L"codeOnlyItem", NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
1694 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
1695 ok(V_VT(&var) == VT_DISPATCH && V_DISPATCH(&var) == (IDispatch*)dispex2,
1696 "Unexpected 'this': V_VT = %d, V_DISPATCH = %p\n", V_VT(&var), V_DISPATCH(&var));
1697 VariantClear(&var);
1698 CHECK_CALLED(OnEnterScript);
1699 CHECK_CALLED(OnLeaveScript);
1700
1701 SET_EXPECT(OnEnterScript);
1702 SET_EXPECT(OnLeaveScript);
1703 hr = IActiveScriptParse_ParseScriptText(parse, L"globalCode_this", NULL, NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
1704 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
1706 "Unexpected 'this': V_VT = %d, V_DISPATCH = %p\n", V_VT(&var), V_DISPATCH(&var));
1707 VariantClear(&var);
1708 CHECK_CALLED(OnEnterScript);
1709 CHECK_CALLED(OnLeaveScript);
1710
1711 IDispatchEx_Release(dispex2);
1712 IDispatchEx_Release(dispex);
1713
1714 dispex = get_script_dispatch(script, L"persistent");
1715 SET_EXPECT(OnEnterScript);
1716 SET_EXPECT(OnLeaveScript);
1717 hr = IActiveScriptParse_ParseScriptText(parse, L"this", L"persistent", NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
1718 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
1719 ok(V_VT(&var) == VT_DISPATCH && V_DISPATCH(&var) == (IDispatch*)dispex,
1720 "Unexpected 'this': V_VT = %d, V_DISPATCH = %p\n", V_VT(&var), V_DISPATCH(&var));
1721 VariantClear(&var);
1722 CHECK_CALLED(OnEnterScript);
1723 CHECK_CALLED(OnLeaveScript);
1724 IDispatchEx_Release(dispex);
1725
1726 SET_EXPECT(OnEnterScript);
1727 SET_EXPECT(OnLeaveScript);
1728 hr = IActiveScriptParse_ParseScriptText(parse, L"var x = 13;\n", L"persistent", NULL, NULL, 0, 0, SCRIPTTEXT_ISPERSISTENT, NULL, NULL);
1729 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
1730 CHECK_CALLED(OnEnterScript);
1731 CHECK_CALLED(OnLeaveScript);
1732 SET_EXPECT(OnEnterScript);
1733 SET_EXPECT(OnLeaveScript);
1734 hr = IActiveScriptParse_ParseScriptText(parse, L"x = 10;\n", L"persistent", NULL, NULL, 0, 0, 0, NULL, NULL);
1735 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
1736 CHECK_CALLED(OnEnterScript);
1737 CHECK_CALLED(OnLeaveScript);
1738 SET_EXPECT(OnEnterScript);
1739 SET_EXPECT(OnLeaveScript);
1740 hr = IActiveScriptParse_ParseScriptText(parse, L"x", L"persistent", NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
1741 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
1742 ok(V_VT(&var) == VT_I4 && V_I4(&var) == 10, "Unexpected 'x': V_VT = %d, V_I4 = %ld\n", V_VT(&var), V_I4(&var));
1743 CHECK_CALLED(OnEnterScript);
1744 CHECK_CALLED(OnLeaveScript);
1745
1746 dispex = get_script_dispatch(script, L"persistent");
1747
1748 /* reinitialize script engine */
1749
1750 SET_EXPECT(OnStateChange_DISCONNECTED);
1751 SET_EXPECT(OnStateChange_INITIALIZED);
1752 SET_EXPECT(OnStateChange_UNINITIALIZED);
1753 hr = IActiveScript_SetScriptState(script, SCRIPTSTATE_UNINITIALIZED);
1754 ok(hr == S_OK, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08lx\n", hr);
1755 CHECK_CALLED(OnStateChange_DISCONNECTED);
1756 CHECK_CALLED(OnStateChange_INITIALIZED);
1757 CHECK_CALLED(OnStateChange_UNINITIALIZED);
1759
1760 ok(global_named_item_ref == 0, "global_named_item_ref = %lu\n", global_named_item_ref);
1761 ok(visible_named_item_ref == 0, "visible_named_item_ref = %lu\n", visible_named_item_ref);
1762 ok(visible_code_named_item_ref == 0, "visible_code_named_item_ref = %lu\n", visible_code_named_item_ref);
1763 ok(persistent_named_item_ref == 0, "persistent_named_item_ref = %lu\n", persistent_named_item_ref);
1764
1765 hr = IActiveScript_GetScriptDispatch(script, L"codeOnlyItem", &disp);
1766 ok(hr == E_UNEXPECTED, "hr = %08lx, expected E_UNEXPECTED\n", hr);
1767
1768 SET_EXPECT(GetLCID);
1769 SET_EXPECT(OnStateChange_INITIALIZED);
1770 SET_EXPECT(GetItemInfo_persistent);
1771 hr = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
1772 ok(hr == S_OK, "SetScriptSite failed: %08lx\n", hr);
1773 CHECK_CALLED(GetLCID);
1774 CHECK_CALLED(OnStateChange_INITIALIZED);
1775 CHECK_CALLED(GetItemInfo_persistent);
1776 ok(persistent_named_item_ref > 0, "persistent_named_item_ref = %lu\n", persistent_named_item_ref);
1777
1778 hr = IActiveScript_AddNamedItem(script, L"codeOnlyItem", SCRIPTITEM_CODEONLY);
1779 ok(hr == S_OK, "AddNamedItem failed: %08lx\n", hr);
1780
1781 SET_EXPECT(OnStateChange_CONNECTED);
1782 SET_EXPECT_MULTI(OnEnterScript, 5);
1783 SET_EXPECT_MULTI(OnLeaveScript, 5);
1784 SET_EXPECT(GetIDsOfNames_persistent);
1785 hr = IActiveScript_SetScriptState(script, SCRIPTSTATE_CONNECTED);
1786 ok(hr == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08lx\n", hr);
1787 CHECK_CALLED(OnStateChange_CONNECTED);
1788 CHECK_CALLED_MULTI(OnEnterScript, 5);
1789 CHECK_CALLED_MULTI(OnLeaveScript, 5);
1790 CHECK_CALLED(GetIDsOfNames_persistent);
1792
1793 dispex2 = get_script_dispatch(script, L"persistent");
1794 ok(dispex != dispex2, "Same script dispatch returned for \"persistent\" named item\n");
1795 IDispatchEx_Release(dispex2);
1796 IDispatchEx_Release(dispex);
1797 SET_EXPECT(OnEnterScript);
1798 SET_EXPECT(OnLeaveScript);
1799 hr = IActiveScriptParse_ParseScriptText(parse, L"x", L"persistent", NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
1800 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
1801 ok(V_VT(&var) == VT_I4 && V_I4(&var) == 13, "Unexpected 'x': V_VT = %d, V_I4 = %ld\n", V_VT(&var), V_I4(&var));
1802 CHECK_CALLED(OnEnterScript);
1803 CHECK_CALLED(OnLeaveScript);
1804
1805 /* this object it set to named idem when persistent items are re-initialized, even for CODEONLY items */
1806 SET_EXPECT(OnEnterScript);
1807 SET_EXPECT(OnLeaveScript);
1808 hr = IActiveScriptParse_ParseScriptText(parse, L"this", L"persistent", NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
1809 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
1811 "Unexpected 'this': V_VT = %d, V_DISPATCH = %p\n", V_VT(&var), V_DISPATCH(&var));
1812 VariantClear(&var);
1813 CHECK_CALLED(OnEnterScript);
1814 CHECK_CALLED(OnLeaveScript);
1815
1816 /* lookups also query named items */
1817 SET_EXPECT(OnEnterScript);
1818 SET_EXPECT(OnLeaveScript);
1819 SET_EXPECT(GetIDsOfNames_persistent);
1820 hr = IActiveScriptParse_ParseScriptText(parse, L"var abc123;", L"persistent", NULL, NULL, 0, 0, 0, NULL, NULL);
1821 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
1822 CHECK_CALLED(OnEnterScript);
1823 CHECK_CALLED(OnLeaveScript);
1824 CHECK_CALLED(GetIDsOfNames_persistent);
1825
1826 SET_EXPECT(OnEnterScript);
1827 SET_EXPECT(OnLeaveScript);
1828 SET_EXPECT(GetIDsOfNames_persistent);
1829 SET_EXPECT(OnScriptError);
1830 hr = IActiveScriptParse_ParseScriptText(parse, L"testCall();", L"persistent", NULL, NULL, 0, 0, 0, NULL, NULL);
1831 ok(FAILED(hr), "ParseScriptText returned: %08lx\n", hr);
1832 CHECK_CALLED(OnEnterScript);
1833 CHECK_CALLED(OnLeaveScript);
1834 CHECK_CALLED(GetIDsOfNames_persistent);
1835 CHECK_CALLED(OnScriptError);
1836
1837 dispex = get_script_dispatch(script, NULL);
1838 for (i = 0; i < ARRAY_SIZE(global_idents); i++)
1839 {
1840 bstr = SysAllocString(global_idents[i]);
1841 id = 0;
1842 hr = IDispatchEx_GetDispID(dispex, bstr, 0, &id);
1843 ok(hr == S_OK, "GetDispID(%s) returned %08lx\n", wine_dbgstr_w(global_idents[i]), hr);
1844 ok(id != -1, "[%s] id = -1\n", wine_dbgstr_w(global_idents[i]));
1845 SysFreeString(bstr);
1846 }
1847
1848 for (i = 0; i < ARRAY_SIZE(context_idents); i++)
1849 {
1850 bstr = SysAllocString(context_idents[i]);
1851 id = 0;
1852 hr = IDispatchEx_GetDispID(dispex, bstr, 0, &id);
1853 ok(hr == DISP_E_UNKNOWNNAME, "GetDispID(%s) returned %08lx\n", wine_dbgstr_w(context_idents[i]), hr);
1854 ok(id == -1, "[%s] id = %ld, expected -1\n", wine_dbgstr_w(context_idents[i]), id);
1855 SysFreeString(bstr);
1856 }
1857
1858 SET_EXPECT(OnEnterScript);
1859 SET_EXPECT(OnLeaveScript);
1860 hr = IActiveScriptParse_ParseScriptText(parse, L"global_this", NULL, NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
1861 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
1862 ok(V_VT(&var) == VT_DISPATCH && V_DISPATCH(&var) == (IDispatch*)dispex,
1863 "Unexpected 'this': V_VT = %d, V_DISPATCH = %p\n", V_VT(&var), V_DISPATCH(&var));
1864 VariantClear(&var);
1865 CHECK_CALLED(OnEnterScript);
1866 CHECK_CALLED(OnLeaveScript);
1867
1868 SET_EXPECT(OnEnterScript);
1869 SET_EXPECT(OnLeaveScript);
1870 hr = IActiveScriptParse_ParseScriptText(parse, L"globalCode_this", NULL, NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
1871 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
1872 ok(V_VT(&var) == VT_DISPATCH && V_DISPATCH(&var) == (IDispatch*)dispex,
1873 "Unexpected 'this': V_VT = %d, V_DISPATCH = %p\n", V_VT(&var), V_DISPATCH(&var));
1874 VariantClear(&var);
1875 CHECK_CALLED(OnEnterScript);
1876 CHECK_CALLED(OnLeaveScript);
1877
1878 SET_EXPECT(OnEnterScript);
1879 SET_EXPECT(OnLeaveScript);
1880 hr = IActiveScriptParse_ParseScriptText(parse, L"global_this = 0; globalCode_this = 0;\n", NULL, NULL, NULL, 0, 0, 0, NULL, NULL);
1881 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
1882 CHECK_CALLED(OnEnterScript);
1883 CHECK_CALLED(OnLeaveScript);
1884 IDispatchEx_Release(dispex);
1885
1886 dispex = get_script_dispatch(script, L"codeOnlyItem");
1887 for (i = 0; i < ARRAY_SIZE(global_idents); i++)
1888 {
1889 bstr = SysAllocString(global_idents[i]);
1890 id = 0;
1891 hr = IDispatchEx_GetDispID(dispex, bstr, 0, &id);
1892 ok(hr == DISP_E_UNKNOWNNAME, "GetDispID(%s) returned %08lx\n", wine_dbgstr_w(global_idents[i]), hr);
1893 ok(id == -1, "[%s] id = %ld, expected -1\n", wine_dbgstr_w(global_idents[i]), id);
1894 SysFreeString(bstr);
1895 }
1896
1897 for (i = 0; i < ARRAY_SIZE(context_idents); i++)
1898 {
1899 bstr = SysAllocString(context_idents[i]);
1900 id = 0;
1901 hr = IDispatchEx_GetDispID(dispex, bstr, 0, &id);
1902 ok(hr == DISP_E_UNKNOWNNAME, "GetDispID(%s) returned %08lx\n", wine_dbgstr_w(context_idents[i]), hr);
1903 ok(id == -1, "[%s] id = %ld, expected -1\n", wine_dbgstr_w(context_idents[i]), id);
1904 SysFreeString(bstr);
1905 }
1906 IDispatchEx_Release(dispex);
1907
1908 for (i = 0; i < ARRAY_SIZE(global_code_test); i++)
1909 {
1910 SET_EXPECT(OnEnterScript);
1911 SET_EXPECT(OnLeaveScript);
1912 hr = IActiveScriptParse_ParseScriptText(parse, global_code_test[i], NULL, NULL, NULL, 0, 0, 0, NULL, NULL);
1913 ok(hr == S_OK, "ParseScriptText(%s) failed: %08lx\n", wine_dbgstr_w(global_code_test[i]), hr);
1914 CHECK_CALLED(OnEnterScript);
1915 CHECK_CALLED(OnLeaveScript);
1916 SET_EXPECT(OnEnterScript);
1917 SET_EXPECT(OnLeaveScript);
1918 hr = IActiveScriptParse_ParseScriptText(parse, global_code_test[i], L"codeOnlyItem", NULL, NULL, 0, 0, 0, NULL, NULL);
1919 ok(hr == S_OK, "ParseScriptText(%s) failed: %08lx\n", wine_dbgstr_w(global_code_test[i]), hr);
1920 CHECK_CALLED(OnEnterScript);
1921 CHECK_CALLED(OnLeaveScript);
1922 }
1923
1924 for (i = 0; i < ARRAY_SIZE(context_code_test); i++)
1925 {
1926 SET_EXPECT(OnEnterScript);
1927 SET_EXPECT(OnScriptError);
1928 SET_EXPECT(OnLeaveScript);
1929 hr = IActiveScriptParse_ParseScriptText(parse, context_code_test[i], NULL, NULL, NULL, 0, 0, 0, NULL, NULL);
1930 ok(FAILED(hr), "ParseScriptText(%s) returned: %08lx\n", wine_dbgstr_w(context_code_test[i]), hr);
1931 CHECK_CALLED(OnEnterScript);
1932 CHECK_CALLED(OnScriptError);
1933 CHECK_CALLED(OnLeaveScript);
1934
1935 SET_EXPECT(OnEnterScript);
1936 SET_EXPECT(OnScriptError);
1937 SET_EXPECT(OnLeaveScript);
1938 hr = IActiveScriptParse_ParseScriptText(parse, context_code_test[i], L"codeOnlyItem", NULL, NULL, 0, 0, 0, NULL, NULL);
1939 ok(FAILED(hr), "ParseScriptText(%s) returned: %08lx\n", wine_dbgstr_w(context_code_test[i]), hr);
1940 CHECK_CALLED(OnEnterScript);
1941 CHECK_CALLED(OnScriptError);
1942 CHECK_CALLED(OnLeaveScript);
1943 }
1944
1945 SET_EXPECT(OnStateChange_DISCONNECTED);
1946 SET_EXPECT(OnStateChange_INITIALIZED);
1947 SET_EXPECT(OnStateChange_CLOSED);
1948 hr = IActiveScript_Close(script);
1949 ok(hr == S_OK, "Close failed: %08lx\n", hr);
1950 CHECK_CALLED(OnStateChange_DISCONNECTED);
1951 CHECK_CALLED(OnStateChange_INITIALIZED);
1952 CHECK_CALLED(OnStateChange_CLOSED);
1953
1954 ok(global_named_item_ref == 0, "global_named_item_ref = %lu\n", global_named_item_ref);
1955 ok(visible_named_item_ref == 0, "visible_named_item_ref = %lu\n", visible_named_item_ref);
1956 ok(visible_code_named_item_ref == 0, "visible_code_named_item_ref = %lu\n", visible_code_named_item_ref);
1957 ok(persistent_named_item_ref == 0, "persistent_named_item_ref = %lu\n", persistent_named_item_ref);
1958
1961
1962 ref = IActiveScript_Release(script);
1963 ok(!ref, "ref = %ld\n", ref);
1964}
static ULONG visible_named_item_ref
Definition: jscript.c:152
static ULONG visible_code_named_item_ref
Definition: jscript.c:152

Referenced by START_TEST().

◆ test_no_script_dispatch()

static void test_no_script_dispatch ( IActiveScript script)
static

Definition at line 543 of file jscript.c.

544{
545 IDispatch *disp;
547
548 disp = (void*)0xdeadbeef;
549 hres = IActiveScript_GetScriptDispatch(script, NULL, &disp);
550 ok(hres == E_UNEXPECTED, "hres = %08lx, expected E_UNEXPECTED\n", hres);
551 ok(!disp, "disp != NULL\n");
552}

Referenced by test_code_persistence(), test_jscript(), test_jscript2(), and test_named_items().

◆ test_param_ids()

static void test_param_ids ( void  )
static

Definition at line 1051 of file jscript.c.

1052{
1053 static const WCHAR *const names1[] = { L"test", L"c", L"foo", L"b", L"a" };
1054 static const WCHAR *const names2[] = { L"test", L"bar" };
1055 static const WCHAR *const names3[] = { L"bar", L"test" };
1056 DISPID id[ARRAY_SIZE(names1)];
1057 IActiveScriptParse *parser;
1059 IDispatchEx *disp;
1060 HRESULT hr;
1061
1063
1064 hr = IActiveScript_QueryInterface(script, &IID_IActiveScriptParse, (void**)&parser);
1065 ok(hr == S_OK, "Could not get IActiveScriptParse iface: %08lx\n", hr);
1066
1067 SET_EXPECT(GetLCID);
1068 hr = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
1069 ok(hr == S_OK, "SetScriptSite failed: %08lx\n", hr);
1070 CHECK_CALLED(GetLCID);
1071
1072 SET_EXPECT(OnStateChange_INITIALIZED);
1074 ok(hr == S_OK, "InitNew failed: %08lx\n", hr);
1075 CHECK_CALLED(OnStateChange_INITIALIZED);
1076
1077 SET_EXPECT(OnStateChange_CONNECTED);
1078 hr = IActiveScript_SetScriptState(script, SCRIPTSTATE_CONNECTED);
1079 ok(hr == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08lx\n", hr);
1080 CHECK_CALLED(OnStateChange_CONNECTED);
1081
1082 parse_script(parser, L"function test(a, b, c, foo) { return a + b + c - foo; }\nfunction bar() { }");
1084
1085 hr = IDispatchEx_GetIDsOfNames(disp, &IID_NULL, (WCHAR**)names1, ARRAY_SIZE(names1), 0, id);
1086 ok(hr == DISP_E_UNKNOWNNAME, "GetIDsOfNames returned %08lx, expected %08lx\n", hr, DISP_E_UNKNOWNNAME);
1087 ok(id[0] > 0, "Unexpected DISPID for \"test\": %ld\n", id[0]);
1088 ok(id[4] == DISPID_UNKNOWN, "Unexpected DISPID for \"a\" parameter: %ld\n", id[4]);
1089 ok(id[3] == DISPID_UNKNOWN, "Unexpected DISPID for \"b\" parameter: %ld\n", id[3]);
1090 ok(id[1] == DISPID_UNKNOWN, "Unexpected DISPID for \"c\" parameter: %ld\n", id[1]);
1091 ok(id[2] == DISPID_UNKNOWN, "Unexpected DISPID for \"foo\" parameter: %ld\n", id[2]);
1092
1093 hr = IDispatchEx_GetIDsOfNames(disp, &IID_NULL, (WCHAR**)names2, ARRAY_SIZE(names2), 0, id);
1094 ok(hr == DISP_E_UNKNOWNNAME, "GetIDsOfNames returned %08lx, expected %08lx\n", hr, DISP_E_UNKNOWNNAME);
1095 ok(id[0] > 0, "Unexpected DISPID for \"test\": %ld\n", id[0]);
1096 ok(id[1] == DISPID_UNKNOWN, "Unexpected DISPID for \"bar\": %ld\n", id[1]);
1097
1098 hr = IDispatchEx_GetIDsOfNames(disp, &IID_NULL, (WCHAR**)names3, ARRAY_SIZE(names3), 0, id);
1099 ok(hr == DISP_E_UNKNOWNNAME, "GetIDsOfNames returned %08lx, expected %08lx\n", hr, DISP_E_UNKNOWNNAME);
1100 ok(id[0] > 0, "Unexpected DISPID for \"bar\": %ld\n", id[0]);
1101 ok(id[1] == DISPID_UNKNOWN, "Unexpected DISPID for \"test\": %ld\n", id[1]);
1102
1103 IDispatchEx_Release(disp);
1105
1106 SET_EXPECT(OnStateChange_DISCONNECTED);
1107 SET_EXPECT(OnStateChange_INITIALIZED);
1108 SET_EXPECT(OnStateChange_CLOSED);
1109 hr = IActiveScript_Close(script);
1110 ok(hr == S_OK, "Close failed: %08lx\n", hr);
1111 CHECK_CALLED(OnStateChange_DISCONNECTED);
1112 CHECK_CALLED(OnStateChange_INITIALIZED);
1113 CHECK_CALLED(OnStateChange_CLOSED);
1114
1115 IActiveScript_Release(script);
1116}

Referenced by START_TEST().

◆ test_safety()

static void test_safety ( IUnknown unk)
static

Definition at line 554 of file jscript.c.

555{
556 IObjectSafety *safety;
557 DWORD supported, enabled;
559
560 hres = IUnknown_QueryInterface(unk, &IID_IObjectSafety, (void**)&safety);
561 ok(hres == S_OK, "Could not get IObjectSafety: %08lx\n", hres);
562 if(FAILED(hres))
563 return;
564
565 hres = IObjectSafety_GetInterfaceSafetyOptions(safety, &IID_NULL, &supported, NULL);
566 ok(hres == E_POINTER, "GetInterfaceSafetyOptions failed: %08lx, expected E_POINTER\n", hres);
567 hres = IObjectSafety_GetInterfaceSafetyOptions(safety, &IID_NULL, NULL, &enabled);
568 ok(hres == E_POINTER, "GetInterfaceSafetyOptions failed: %08lx, expected E_POINTER\n", hres);
569
570 supported = enabled = 0xdeadbeef;
571 hres = IObjectSafety_GetInterfaceSafetyOptions(safety, &IID_NULL, &supported, &enabled);
572 ok(hres == S_OK, "GetInterfaceSafetyOptions failed: %08lx\n", hres);
573 ok(supported == (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER),
574 "supported=%lx\n", supported);
575 ok(enabled == INTERFACE_USES_DISPEX, "enabled=%lx\n", enabled);
576
577 supported = enabled = 0xdeadbeef;
578 hres = IObjectSafety_GetInterfaceSafetyOptions(safety, &IID_IActiveScript, &supported, &enabled);
579 ok(hres == S_OK, "GetInterfaceSafetyOptions failed: %08lx\n", hres);
580 ok(supported == (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER),
581 "supported=%lx\n", supported);
582 ok(enabled == INTERFACE_USES_DISPEX, "enabled=%lx\n", enabled);
583
584 supported = enabled = 0xdeadbeef;
585 hres = IObjectSafety_GetInterfaceSafetyOptions(safety, &IID_IActiveScriptParse, &supported, &enabled);
586 ok(hres == S_OK, "GetInterfaceSafetyOptions failed: %08lx\n", hres);
587 ok(supported == (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER),
588 "supported=%lx\n", supported);
589 ok(enabled == INTERFACE_USES_DISPEX, "enabled=%lx\n", enabled);
590
591 hres = IObjectSafety_SetInterfaceSafetyOptions(safety, &IID_IActiveScriptParse,
592 INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER
593 |INTERFACESAFE_FOR_UNTRUSTED_CALLER,
594 INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER);
595 ok(hres == E_FAIL, "SetInterfaceSafetyOptions failed: %08lx, expected E_FAIL\n", hres);
596
597 hres = IObjectSafety_SetInterfaceSafetyOptions(safety, &IID_IActiveScriptParse,
598 INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER,
599 INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER);
600 ok(hres == S_OK, "SetInterfaceSafetyOptions failed: %08lx\n", hres);
601
602 supported = enabled = 0xdeadbeef;
603 hres = IObjectSafety_GetInterfaceSafetyOptions(safety, &IID_IActiveScriptParse, &supported, &enabled);
604 ok(hres == S_OK, "GetInterfaceSafetyOptions failed: %08lx\n", hres);
605 ok(supported == (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER),
606 "supported=%lx\n", supported);
607 ok(enabled == (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER),
608 "enabled=%lx\n", enabled);
609
610 hres = IObjectSafety_SetInterfaceSafetyOptions(safety, &IID_IActiveScriptParse, INTERFACESAFE_FOR_UNTRUSTED_DATA, 0);
611 ok(hres == S_OK, "SetInterfaceSafetyOptions failed: %08lx\n", hres);
612
613 supported = enabled = 0xdeadbeef;
614 hres = IObjectSafety_GetInterfaceSafetyOptions(safety, &IID_IActiveScriptParse, &supported, &enabled);
615 ok(hres == S_OK, "GetInterfaceSafetyOptions failed: %08lx\n", hres);
616 ok(supported == (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER),
617 "supported=%lx\n", supported);
618 ok(enabled == (INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER), "enabled=%lx\n", enabled);
619
620 hres = IObjectSafety_SetInterfaceSafetyOptions(safety, &IID_IActiveScriptParse,
621 INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER, 0);
622 ok(hres == S_OK, "SetInterfaceSafetyOptions failed: %08lx\n", hres);
623
624 supported = enabled = 0xdeadbeef;
625 hres = IObjectSafety_GetInterfaceSafetyOptions(safety, &IID_IActiveScriptParse, &supported, &enabled);
626 ok(hres == S_OK, "GetInterfaceSafetyOptions failed: %08lx\n", hres);
627 ok(supported == (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER),
628 "supported=%lx\n", supported);
629 ok(enabled == INTERFACE_USES_DISPEX, "enabled=%lx\n", enabled);
630
631 hres = IObjectSafety_SetInterfaceSafetyOptions(safety, &IID_IActiveScriptParse,
632 INTERFACE_USES_DISPEX, 0);
633 ok(hres == S_OK, "SetInterfaceSafetyOptions failed: %08lx\n", hres);
634
635 supported = enabled = 0xdeadbeef;
636 hres = IObjectSafety_GetInterfaceSafetyOptions(safety, &IID_IActiveScriptParse, &supported, &enabled);
637 ok(hres == S_OK, "GetInterfaceSafetyOptions failed: %08lx\n", hres);
638 ok(supported == (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER),
639 "supported=%lx\n", supported);
640 ok(enabled == INTERFACE_USES_DISPEX, "enabled=%lx\n", enabled);
641
642 IObjectSafety_Release(safety);
643}
#define E_FAIL
Definition: ddrawi.h:102
unsigned long DWORD
Definition: ntddk_ex.h:95
GLenum GLenum GLsizei const GLuint GLboolean enabled
Definition: glext.h:7750

Referenced by test_code_persistence(), and test_jscript().

◆ test_script_dispatch()

static void test_script_dispatch ( IDispatchEx dispex)
static

Definition at line 455 of file jscript.c.

456{
457 DISPPARAMS dp = {NULL,NULL,0,0};
458 EXCEPINFO ei;
459 BSTR str;
460 DISPID id;
461 VARIANT v;
463
464 str = SysAllocString(L"ActiveXObject");
465 hres = IDispatchEx_GetDispID(dispex, str, fdexNameCaseSensitive, &id);
467 ok(hres == S_OK, "GetDispID failed: %08lx\n", hres);
468
469 str = SysAllocString(L"Math");
470 hres = IDispatchEx_GetDispID(dispex, str, fdexNameCaseSensitive, &id);
472 ok(hres == S_OK, "GetDispID failed: %08lx\n", hres);
473
474 memset(&ei, 0, sizeof(ei));
475 hres = IDispatchEx_InvokeEx(dispex, id, 0, DISPATCH_PROPERTYGET, &dp, &v, &ei, NULL);
476 ok(hres == S_OK, "InvokeEx failed: %08lx\n", hres);
477 ok(V_VT(&v) == VT_DISPATCH, "V_VT(v) = %d\n", V_VT(&v));
478 ok(V_DISPATCH(&v) != NULL, "V_DISPATCH(v) = NULL\n");
479 VariantClear(&v);
480
481 str = SysAllocString(L"String");
482 hres = IDispatchEx_GetDispID(dispex, str, fdexNameCaseSensitive, &id);
484 ok(hres == S_OK, "GetDispID failed: %08lx\n", hres);
485
486 memset(&ei, 0, sizeof(ei));
487 hres = IDispatchEx_InvokeEx(dispex, id, 0, DISPATCH_PROPERTYGET, &dp, &v, &ei, NULL);
488 ok(hres == S_OK, "InvokeEx failed: %08lx\n", hres);
489 ok(V_VT(&v) == VT_DISPATCH, "V_VT(v) = %d\n", V_VT(&v));
490 ok(V_DISPATCH(&v) != NULL, "V_DISPATCH(v) = NULL\n");
491 VariantClear(&v);
492}
#define memset(x, y, z)
Definition: compat.h:39

Referenced by test_jscript().

◆ test_typeinfo()

static void test_typeinfo ( const WCHAR parse_func_name)
static

Definition at line 1966 of file jscript.c.

1967{
1968 static struct
1969 {
1970 const WCHAR *name;
1971 UINT num_args;
1972 } func[] =
1973 {
1974 { L"emptyfn", 0 },
1975 { L"voidfn", 0 },
1976 { L"math", 2 },
1977 { L"foobar", 1 },
1978 { L"C", 0 },
1979 { L"funcvar", 2 },
1980 { L"f1", 1 },
1981 { L"f2", 1 }
1982 };
1983 static struct
1984 {
1985 const WCHAR *name;
1986 } var[] =
1987 {
1988 { L"global_var" },
1989 { L"uninit" },
1990 { L"obj" }
1991 };
1992 const WCHAR *source = L""
1993 "var global_var = 42;\n"
1994
1995 "function emptyfn() { }\n"
1996 "function voidfn() { return void(0); }\n"
1997 "function math(x, y) { return x - y; }\n"
1998 "function foobar(x) { return \"foobar\"; }\n"
1999
2000 "function C() {\n"
2001 " this.x;\n"
2002 " this.strret = function() { return \"ret\"; }\n"
2003 "}\n"
2004
2005 "var uninit;\n"
2006 "var obj = new C();\n"
2007
2008 "var funcvar = function(x, y) { return x * y; };\n"
2009 "var native_func = decodeURI;\n"
2010
2011 "(function() {\n"
2012 " f1 = function infuncexpr(x) { return 1; }\n"
2013 " f2 = function infuncexpr(x) { return 2; }\n"
2014 "})();\n";
2015 UINT expected_funcs_cnt = parse_func_name ? 0 : ARRAY_SIZE(func);
2016 UINT expected_vars_cnt = parse_func_name ? 0 : ARRAY_SIZE(var);
2017
2018 ITypeInfo *typeinfo, *typeinfo2;
2019 ITypeComp *typecomp, *typecomp2;
2020 IActiveScriptParse *parser;
2022 FUNCDESC *funcdesc;
2023 VARDESC *vardesc;
2024 IDispatchEx *disp;
2025 DESCKIND desckind;
2026 INT implTypeFlags;
2027 UINT count, index;
2028 HREFTYPE reftype;
2029 BINDPTR bindptr;
2030 MEMBERID memid;
2031 TYPEATTR *attr;
2032 HRESULT hr;
2033 WCHAR str[64], *names = str;
2034 BSTR bstr, bstrs[5];
2035 void *obj;
2036 int i;
2037
2038 if (parse_func_name)
2039 trace("Testing TypeInfo for function %s...\n", wine_dbgstr_w(parse_func_name));
2040 else
2041 trace("Testing TypeInfo for script dispatch...\n");
2042
2044
2045 hr = IActiveScript_QueryInterface(script, &IID_IActiveScriptParse, (void**)&parser);
2046 ok(hr == S_OK, "Could not get IActiveScriptParse iface: %08lx\n", hr);
2047
2048 SET_EXPECT(GetLCID);
2049 hr = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
2050 ok(hr == S_OK, "SetScriptSite failed: %08lx\n", hr);
2051 CHECK_CALLED(GetLCID);
2052
2053 SET_EXPECT(OnStateChange_INITIALIZED);
2055 ok(hr == S_OK, "InitNew failed: %08lx\n", hr);
2056 CHECK_CALLED(OnStateChange_INITIALIZED);
2057
2058 SET_EXPECT(OnStateChange_CONNECTED);
2059 hr = IActiveScript_SetScriptState(script, SCRIPTSTATE_CONNECTED);
2060 ok(hr == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08lx\n", hr);
2061 CHECK_CALLED(OnStateChange_CONNECTED);
2062
2063 if (parse_func_name)
2064 {
2065 IActiveScriptParseProcedure2 *parse_proc;
2066 IDispatch *proc_disp;
2067
2068 hr = IActiveScript_QueryInterface(script, &IID_IActiveScriptParseProcedure2, (void**)&parse_proc);
2069 ok(hr == S_OK, "Could not get IActiveScriptParse: %08lx\n", hr);
2070
2071 hr = IActiveScriptParseProcedure2_ParseProcedureText(parse_proc, source, NULL, parse_func_name,
2072 NULL, NULL, NULL, 0, 0, SCRIPTPROC_IMPLICIT_THIS | SCRIPTPROC_IMPLICIT_PARENTS, &proc_disp);
2073 ok(hr == S_OK, "ParseProcedureText failed: %08lx\n", hr);
2075
2076 hr = IDispatch_QueryInterface(proc_disp, &IID_IDispatchEx, (void**)&disp);
2077 ok(hr == S_OK, "Could not get IDispatchEx: %08lx\n", hr);
2078 IDispatch_Release(proc_disp);
2079 }
2080 else
2081 {
2084 }
2085
2086 hr = IDispatchEx_QueryInterface(disp, &IID_ITypeInfo, (void**)&typeinfo);
2087 ok(hr == E_NOINTERFACE, "QueryInterface(IID_ITypeInfo) returned: %08lx\n", hr);
2088 hr = IDispatchEx_GetTypeInfo(disp, 1, LOCALE_USER_DEFAULT, &typeinfo);
2089 ok(hr == DISP_E_BADINDEX, "GetTypeInfo returned: %08lx\n", hr);
2090 hr = IDispatchEx_GetTypeInfo(disp, 0, LOCALE_USER_DEFAULT, &typeinfo);
2091 ok(hr == S_OK, "GetTypeInfo failed: %08lx\n", hr);
2092 hr = IDispatchEx_GetTypeInfo(disp, 0, LOCALE_USER_DEFAULT, &typeinfo2);
2093 ok(hr == S_OK, "GetTypeInfo failed: %08lx\n", hr);
2094 ok(typeinfo != typeinfo2, "TypeInfo was not supposed to be shared.\n");
2095 ITypeInfo_Release(typeinfo2);
2096
2097 obj = (void*)0xdeadbeef;
2098 hr = ITypeInfo_CreateInstance(typeinfo, NULL, NULL, NULL);
2099 ok(hr == E_INVALIDARG, "CreateInstance returned: %08lx\n", hr);
2100 hr = ITypeInfo_CreateInstance(typeinfo, NULL, NULL, &obj);
2101 ok(hr == TYPE_E_BADMODULEKIND, "CreateInstance returned: %08lx\n", hr);
2102 hr = ITypeInfo_CreateInstance(typeinfo, NULL, &IID_IDispatch, &obj);
2103 ok(hr == TYPE_E_BADMODULEKIND, "CreateInstance returned: %08lx\n", hr);
2104 ok(!obj, "Unexpected non-null obj %p.\n", obj);
2105
2106 hr = ITypeInfo_GetDocumentation(typeinfo, MEMBERID_NIL, &bstr, NULL, NULL, NULL);
2107 ok(hr == S_OK, "GetDocumentation(MEMBERID_NIL) failed: %08lx\n", hr);
2108 ok(!lstrcmpW(bstr, L"JScriptTypeInfo"), "Unexpected TypeInfo name %s\n", wine_dbgstr_w(bstr));
2109 SysFreeString(bstr);
2110
2111 hr = ITypeInfo_GetTypeAttr(typeinfo, &attr);
2112 ok(hr == S_OK, "GetTypeAttr failed: %08lx\n", hr);
2113 ok(IsEqualGUID(&attr->guid, &IID_IScriptTypeInfo), "Unexpected GUID %s\n", wine_dbgstr_guid(&attr->guid));
2114 ok(attr->lcid == LOCALE_USER_DEFAULT, "Unexpected LCID %lu\n", attr->lcid);
2115 ok(attr->memidConstructor == MEMBERID_NIL, "Unexpected constructor memid %lu\n", attr->memidConstructor);
2116 ok(attr->memidDestructor == MEMBERID_NIL, "Unexpected destructor memid %lu\n", attr->memidDestructor);
2117 ok(attr->cbSizeInstance == 4, "Unexpected cbSizeInstance %lu\n", attr->cbSizeInstance);
2118 ok(attr->typekind == TKIND_DISPATCH, "Unexpected typekind %u\n", attr->typekind);
2119 ok(attr->cFuncs == expected_funcs_cnt, "Unexpected cFuncs %u\n", attr->cFuncs);
2120 ok(attr->cVars == expected_vars_cnt, "Unexpected cVars %u\n", attr->cVars);
2121 ok(attr->cImplTypes == 1, "Unexpected cImplTypes %u\n", attr->cImplTypes);
2122 ok(attr->cbSizeVft == sizeof(IDispatchVtbl), "Unexpected cbSizeVft %u\n", attr->cbSizeVft);
2123 ok(attr->cbAlignment == 4, "Unexpected cbAlignment %u\n", attr->cbAlignment);
2124 ok(attr->wTypeFlags == TYPEFLAG_FDISPATCHABLE, "Unexpected wTypeFlags 0x%x\n", attr->wTypeFlags);
2125 ok(attr->tdescAlias.vt == VT_EMPTY, "Unexpected tdescAlias.vt %d\n", attr->tdescAlias.vt);
2126 ok(attr->idldescType.wIDLFlags == IDLFLAG_NONE, "Unexpected idldescType.wIDLFlags 0x%x\n", attr->idldescType.wIDLFlags);
2127 ITypeInfo_ReleaseTypeAttr(typeinfo, attr);
2128
2129 /* The type inherits from IDispatch */
2130 hr = ITypeInfo_GetImplTypeFlags(typeinfo, 0, NULL);
2131 ok(hr == E_INVALIDARG, "GetImplTypeFlags returned: %08lx\n", hr);
2132 hr = ITypeInfo_GetImplTypeFlags(typeinfo, 1, &implTypeFlags);
2133 ok(hr == TYPE_E_ELEMENTNOTFOUND, "GetImplTypeFlags returned: %08lx\n", hr);
2134 hr = ITypeInfo_GetImplTypeFlags(typeinfo, -1, &implTypeFlags);
2135 ok(hr == TYPE_E_ELEMENTNOTFOUND, "GetImplTypeFlags returned: %08lx\n", hr);
2136 hr = ITypeInfo_GetImplTypeFlags(typeinfo, 0, &implTypeFlags);
2137 ok(hr == S_OK, "GetImplTypeFlags failed: %08lx\n", hr);
2138 ok(implTypeFlags == 0, "Unexpected implTypeFlags 0x%x\n", implTypeFlags);
2139
2140 hr = ITypeInfo_GetRefTypeOfImplType(typeinfo, 0, NULL);
2141 ok(hr == E_INVALIDARG, "GetRefTypeOfImplType returned: %08lx\n", hr);
2142 hr = ITypeInfo_GetRefTypeOfImplType(typeinfo, 1, &reftype);
2143 ok(hr == TYPE_E_ELEMENTNOTFOUND, "GetRefTypeOfImplType returned: %08lx\n", hr);
2144 hr = ITypeInfo_GetRefTypeOfImplType(typeinfo, -1, &reftype);
2145 ok(hr == TYPE_E_ELEMENTNOTFOUND, "GetRefTypeOfImplType failed: %08lx\n", hr);
2146 hr = ITypeInfo_GetRefTypeOfImplType(typeinfo, 0, &reftype);
2147 ok(hr == S_OK, "GetRefTypeOfImplType failed: %08lx\n", hr);
2148 ok(reftype == 1, "Unexpected reftype %ld\n", reftype);
2149
2150 hr = ITypeInfo_GetRefTypeInfo(typeinfo, reftype, NULL);
2151 ok(hr == E_INVALIDARG, "GetRefTypeInfo returned: %08lx\n", hr);
2152 hr = ITypeInfo_GetRefTypeInfo(typeinfo, -1, &typeinfo2);
2153 ok(hr == E_INVALIDARG, "GetRefTypeInfo returned: %08lx\n", hr);
2154 hr = ITypeInfo_GetRefTypeInfo(typeinfo, 4, &typeinfo2);
2155 ok(hr == E_FAIL, "GetRefTypeInfo returned: %08lx\n", hr);
2156 hr = ITypeInfo_GetRefTypeInfo(typeinfo, 0, &typeinfo2);
2157 ok(hr == S_OK, "GetRefTypeInfo failed: %08lx\n", hr);
2158 ok(typeinfo == typeinfo2, "Unexpected TypeInfo %p (expected %p)\n", typeinfo2, typeinfo);
2159 ITypeInfo_Release(typeinfo2);
2160 hr = ITypeInfo_GetRefTypeInfo(typeinfo, reftype, &typeinfo2);
2161 ok(hr == S_OK, "GetRefTypeInfo failed: %08lx\n", hr);
2162 hr = ITypeInfo_GetDocumentation(typeinfo2, MEMBERID_NIL, &bstr, NULL, NULL, NULL);
2163 ok(hr == S_OK, "GetDocumentation(MEMBERID_NIL) failed: %08lx\n", hr);
2164 ok(!lstrcmpW(bstr, L"IDispatch"), "Unexpected TypeInfo name %s\n", wine_dbgstr_w(bstr));
2165 ITypeInfo_Release(typeinfo2);
2166 SysFreeString(bstr);
2167
2168 /* GetIDsOfNames looks into the inherited types as well */
2169 wcscpy(str, L"queryinterface");
2170 hr = ITypeInfo_GetIDsOfNames(typeinfo, NULL, 1, &memid);
2171 ok(hr == E_INVALIDARG, "GetIDsOfNames returned: %08lx\n", hr);
2172 hr = ITypeInfo_GetIDsOfNames(typeinfo, &names, 1, NULL);
2173 ok(hr == E_INVALIDARG, "GetIDsOfNames returned: %08lx\n", hr);
2174 hr = ITypeInfo_GetIDsOfNames(typeinfo, &names, 0, &memid);
2175 ok(hr == E_INVALIDARG, "GetIDsOfNames returned: %08lx\n", hr);
2176 hr = ITypeInfo_GetIDsOfNames(typeinfo, &names, 1, &memid);
2177 ok(hr == S_OK, "GetIDsOfNames failed: %08lx\n", hr);
2178 ok(!lstrcmpW(str, L"queryinterface"), "Unexpected string %s\n", wine_dbgstr_w(str));
2179 if (expected_funcs_cnt)
2180 {
2181 wcscpy(str, L"Math");
2182 hr = ITypeInfo_GetIDsOfNames(typeinfo, &names, 1, &memid);
2183 ok(hr == S_OK, "GetIDsOfNames failed: %08lx\n", hr);
2184 ok(!lstrcmpW(str, L"Math"), "Unexpected string %s\n", wine_dbgstr_w(str));
2185 hr = ITypeInfo_GetNames(typeinfo, memid, NULL, 1, &count);
2186 ok(hr == E_INVALIDARG, "GetNames returned: %08lx\n", hr);
2187 hr = ITypeInfo_GetNames(typeinfo, memid, bstrs, 1, NULL);
2188 ok(hr == E_INVALIDARG, "GetNames returned: %08lx\n", hr);
2189 hr = ITypeInfo_GetNames(typeinfo, memid, bstrs, 0, &count);
2190 ok(hr == S_OK, "GetNames failed: %08lx\n", hr);
2191 ok(count == 0, "Unexpected count %u\n", count);
2192 hr = ITypeInfo_GetNames(typeinfo, memid, bstrs, ARRAY_SIZE(bstrs), &count);
2193 ok(hr == S_OK, "GetNames failed: %08lx\n", hr);
2194 ok(count == 3, "Unexpected count %u\n", count);
2195 ok(!lstrcmpW(bstrs[0], L"math"), "Unexpected function name %s\n", wine_dbgstr_w(bstrs[0]));
2196 ok(!lstrcmpW(bstrs[1], L"x"), "Unexpected function first param name %s\n", wine_dbgstr_w(bstrs[1]));
2197 ok(!lstrcmpW(bstrs[2], L"y"), "Unexpected function second param name %s\n", wine_dbgstr_w(bstrs[2]));
2198 for (i = 0; i < count; i++) SysFreeString(bstrs[i]);
2199
2200 hr = ITypeInfo_GetMops(typeinfo, memid, NULL);
2201 ok(hr == E_INVALIDARG, "GetMops returned: %08lx\n", hr);
2202 hr = ITypeInfo_GetMops(typeinfo, memid, &bstr);
2203 ok(hr == S_OK, "GetMops failed: %08lx\n", hr);
2204 ok(!bstr, "Unexpected non-null string %s\n", wine_dbgstr_w(bstr));
2205 hr = ITypeInfo_GetMops(typeinfo, MEMBERID_NIL, &bstr);
2206 ok(hr == S_OK, "GetMops failed: %08lx\n", hr);
2207 ok(!bstr, "Unexpected non-null string %s\n", wine_dbgstr_w(bstr));
2208
2209 /* These always fail */
2210 obj = (void*)0xdeadbeef;
2211 hr = ITypeInfo_AddressOfMember(typeinfo, memid, INVOKE_FUNC, NULL);
2212 ok(hr == E_INVALIDARG, "AddressOfMember returned: %08lx\n", hr);
2213 hr = ITypeInfo_AddressOfMember(typeinfo, memid, INVOKE_FUNC, &obj);
2214 ok(hr == TYPE_E_BADMODULEKIND, "AddressOfMember returned: %08lx\n", hr);
2215 ok(!obj, "Unexpected non-null obj %p.\n", obj);
2216 bstr = (BSTR)0xdeadbeef;
2217 hr = ITypeInfo_GetDllEntry(typeinfo, memid, INVOKE_FUNC, &bstr, NULL, NULL);
2218 ok(hr == TYPE_E_BADMODULEKIND, "GetDllEntry returned: %08lx\n", hr);
2219 ok(!bstr, "Unexpected non-null str %p.\n", bstr);
2220 wcscpy(str, L"Invoke");
2221 hr = ITypeInfo_GetIDsOfNames(typeinfo, &names, 1, &memid);
2222 ok(hr == S_OK, "GetIDsOfNames failed: %08lx\n", hr);
2223 obj = (void*)0xdeadbeef;
2224 hr = ITypeInfo_AddressOfMember(typeinfo, memid, INVOKE_FUNC, &obj);
2225 ok(hr == TYPE_E_BADMODULEKIND, "AddressOfMember returned: %08lx\n", hr);
2226 ok(!obj, "Unexpected non-null obj %p.\n", obj);
2227 bstr = (BSTR)0xdeadbeef;
2228 hr = ITypeInfo_GetDllEntry(typeinfo, memid, INVOKE_FUNC, &bstr, NULL, NULL);
2229 ok(hr == TYPE_E_BADMODULEKIND, "GetDllEntry returned: %08lx\n", hr);
2230 ok(!bstr, "Unexpected non-null str %p.\n", bstr);
2231 }
2232
2233 /* Check variable descriptions */
2234 hr = ITypeInfo_GetVarDesc(typeinfo, 0, NULL);
2235 ok(hr == E_INVALIDARG, "GetVarDesc returned: %08lx\n", hr);
2236 hr = ITypeInfo_GetVarDesc(typeinfo, 1337, &vardesc);
2237 ok(hr == TYPE_E_ELEMENTNOTFOUND, "GetVarDesc returned: %08lx\n", hr);
2238 for (i = 0; i < expected_vars_cnt; i++)
2239 {
2240 hr = ITypeInfo_GetVarDesc(typeinfo, i, &vardesc);
2241 ok(hr == S_OK, "GetVarDesc(%u) failed: %08lx\n", i, hr);
2242 hr = ITypeInfo_GetDocumentation(typeinfo, vardesc->memid, &bstr, &bstrs[0], NULL, NULL);
2243 ok(hr == S_OK, "[%u] GetDocumentation failed: %08lx\n", i, hr);
2244 ok(!lstrcmpW(bstr, var[i].name), "[%u] Unexpected variable name %s (expected %s)\n",
2246 ok(!bstrs[0], "[%u] Unexpected doc string %s\n", i, wine_dbgstr_w(bstrs[0]));
2247 SysFreeString(bstr);
2248 ok(vardesc->memid <= 0xFFFF, "[%u] Unexpected memid 0x%lx\n", i, vardesc->memid);
2249 ok(vardesc->lpstrSchema == NULL, "[%u] Unexpected lpstrSchema %p\n", i, vardesc->lpstrSchema);
2250 ok(vardesc->oInst == 0, "[%u] Unexpected oInst %lu\n", i, vardesc->oInst);
2251 ok(vardesc->varkind == VAR_DISPATCH, "[%u] Unexpected varkind %d\n", i, vardesc->varkind);
2252 ok(vardesc->wVarFlags == 0, "[%u] Unexpected wVarFlags 0x%x\n", i, vardesc->wVarFlags);
2253 ok(vardesc->elemdescVar.tdesc.vt == VT_VARIANT,
2254 "[%u] Unexpected variable type vt %d (expected %d)\n", i, vardesc->elemdescVar.tdesc.vt, 0);
2255 ok(vardesc->elemdescVar.paramdesc.pparamdescex == NULL,
2256 "[%u] Unexpected variable type pparamdescex %p\n", i, vardesc->elemdescVar.paramdesc.pparamdescex);
2257 ok(vardesc->elemdescVar.paramdesc.wParamFlags == PARAMFLAG_NONE,
2258 "[%u] Unexpected variable type wParamFlags 0x%x\n", i, vardesc->elemdescVar.paramdesc.wParamFlags);
2259 ITypeInfo_ReleaseVarDesc(typeinfo, vardesc);
2260 }
2261
2262 /* Check function descriptions */
2263 hr = ITypeInfo_GetFuncDesc(typeinfo, 0, NULL);
2264 ok(hr == E_INVALIDARG, "GetFuncDesc returned: %08lx\n", hr);
2265 hr = ITypeInfo_GetFuncDesc(typeinfo, 1337, &funcdesc);
2266 ok(hr == TYPE_E_ELEMENTNOTFOUND, "GetFuncDesc returned: %08lx\n", hr);
2267 for (i = 0; i < expected_funcs_cnt; i++)
2268 {
2269 hr = ITypeInfo_GetFuncDesc(typeinfo, i, &funcdesc);
2270 ok(hr == S_OK, "GetFuncDesc(%u) failed: %08lx\n", i, hr);
2271 hr = ITypeInfo_GetDocumentation(typeinfo, funcdesc->memid, &bstr, &bstrs[0], NULL, NULL);
2272 ok(hr == S_OK, "[%u] GetDocumentation failed: %08lx\n", i, hr);
2273 ok(!lstrcmpW(bstr, func[i].name), "[%u] Unexpected function name %s (expected %s)\n",
2275 ok(!bstrs[0], "[%u] Unexpected doc string %s\n", i, wine_dbgstr_w(bstrs[0]));
2276 SysFreeString(bstr);
2277 ok(funcdesc->memid <= 0xFFFF, "[%u] Unexpected memid 0x%lx\n", i, funcdesc->memid);
2278 ok(funcdesc->lprgscode == NULL, "[%u] Unexpected lprgscode %p\n", i, funcdesc->lprgscode);
2279 ok(func[i].num_args ? (funcdesc->lprgelemdescParam != NULL) : (funcdesc->lprgelemdescParam == NULL),
2280 "[%u] Unexpected lprgelemdescParam %p\n", i, funcdesc->lprgelemdescParam);
2281 ok(funcdesc->funckind == FUNC_DISPATCH, "[%u] Unexpected funckind %u\n", i, funcdesc->funckind);
2282 ok(funcdesc->invkind == INVOKE_FUNC, "[%u] Unexpected invkind %u\n", i, funcdesc->invkind);
2283 ok(funcdesc->callconv == CC_STDCALL, "[%u] Unexpected callconv %u\n", i, funcdesc->callconv);
2284 ok(funcdesc->cParams == func[i].num_args, "[%u] Unexpected cParams %d (expected %d)\n",
2285 i, funcdesc->cParams, func[i].num_args);
2286 ok(funcdesc->cParamsOpt == 0, "[%u] Unexpected cParamsOpt %d\n", i, funcdesc->cParamsOpt);
2287 ok(funcdesc->cScodes == 0, "[%u] Unexpected cScodes %d\n", i, funcdesc->cScodes);
2288 ok(funcdesc->wFuncFlags == 0, "[%u] Unexpected wFuncFlags 0x%x\n", i, funcdesc->wFuncFlags);
2289 ok(funcdesc->elemdescFunc.tdesc.vt == VT_VARIANT,
2290 "[%u] Unexpected return type vt %d\n", i, funcdesc->elemdescFunc.tdesc.vt);
2291 ok(funcdesc->elemdescFunc.paramdesc.pparamdescex == NULL,
2292 "[%u] Unexpected return type pparamdescex %p\n", i, funcdesc->elemdescFunc.paramdesc.pparamdescex);
2293 ok(funcdesc->elemdescFunc.paramdesc.wParamFlags == PARAMFLAG_NONE,
2294 "[%u] Unexpected return type wParamFlags 0x%x\n", i, funcdesc->elemdescFunc.paramdesc.wParamFlags);
2295 if (funcdesc->lprgelemdescParam)
2296 for (index = 0; index < funcdesc->cParams; index++)
2297 {
2298 ok(funcdesc->lprgelemdescParam[index].tdesc.vt == VT_VARIANT,
2299 "[%u] Unexpected parameter %u vt %d\n", i, index, funcdesc->lprgelemdescParam[index].tdesc.vt);
2300 ok(funcdesc->lprgelemdescParam[index].paramdesc.pparamdescex == NULL,
2301 "[%u] Unexpected parameter %u pparamdescex %p\n", i, index, funcdesc->lprgelemdescParam[index].paramdesc.pparamdescex);
2302 ok(funcdesc->lprgelemdescParam[index].paramdesc.wParamFlags == PARAMFLAG_NONE,
2303 "[%u] Unexpected parameter %u wParamFlags 0x%x\n", i, index, funcdesc->lprgelemdescParam[index].paramdesc.wParamFlags);
2304 }
2305 ITypeInfo_ReleaseFuncDesc(typeinfo, funcdesc);
2306 }
2307
2308 /* Test TypeComp Binds */
2309 hr = ITypeInfo_QueryInterface(typeinfo, &IID_ITypeComp, (void**)&typecomp);
2310 ok(hr == S_OK, "QueryInterface(IID_ITypeComp) failed: %08lx\n", hr);
2311 hr = ITypeInfo_GetTypeComp(typeinfo, NULL);
2312 ok(hr == E_INVALIDARG, "GetTypeComp returned: %08lx\n", hr);
2313 hr = ITypeInfo_GetTypeComp(typeinfo, &typecomp2);
2314 ok(hr == S_OK, "GetTypeComp failed: %08lx\n", hr);
2315 ok(typecomp == typecomp2, "QueryInterface(IID_ITypeComp) and GetTypeComp returned different TypeComps\n");
2316 ITypeComp_Release(typecomp2);
2317 wcscpy(str, L"not_found");
2318 hr = ITypeComp_Bind(typecomp, NULL, 0, 0, &typeinfo2, &desckind, &bindptr);
2319 ok(hr == E_INVALIDARG, "Bind returned: %08lx\n", hr);
2320 hr = ITypeComp_Bind(typecomp, str, 0, 0, NULL, &desckind, &bindptr);
2321 ok(hr == E_INVALIDARG, "Bind returned: %08lx\n", hr);
2322 hr = ITypeComp_Bind(typecomp, str, 0, 0, &typeinfo2, NULL, &bindptr);
2323 ok(hr == E_INVALIDARG, "Bind returned: %08lx\n", hr);
2324 hr = ITypeComp_Bind(typecomp, str, 0, 0, &typeinfo2, &desckind, NULL);
2325 ok(hr == E_INVALIDARG, "Bind returned: %08lx\n", hr);
2326 hr = ITypeComp_Bind(typecomp, str, 0, 0, &typeinfo2, &desckind, &bindptr);
2327 ok(hr == S_OK, "Bind failed: %08lx\n", hr);
2328 ok(desckind == DESCKIND_NONE, "Unexpected desckind %u\n", desckind);
2329 wcscpy(str, L"addRef");
2330 hr = ITypeComp_Bind(typecomp, str, 0, 0, &typeinfo2, &desckind, &bindptr);
2331 ok(hr == S_OK, "Bind failed: %08lx\n", hr);
2332 ok(desckind == DESCKIND_FUNCDESC, "Unexpected desckind %u\n", desckind);
2333 ok(!lstrcmpW(str, L"addRef"), "Unexpected string %s\n", wine_dbgstr_w(str));
2334 ITypeInfo_ReleaseFuncDesc(typeinfo2, bindptr.lpfuncdesc);
2335 ITypeInfo_Release(typeinfo2);
2336 for (i = 0; i < expected_vars_cnt; i++)
2337 {
2338 wcscpy(str, var[i].name);
2339 hr = ITypeComp_Bind(typecomp, str, 0, INVOKE_PROPERTYGET, &typeinfo2, &desckind, &bindptr);
2340 ok(hr == S_OK, "Bind failed: %08lx\n", hr);
2341 ok(desckind == DESCKIND_VARDESC, "Unexpected desckind %u\n", desckind);
2342 ITypeInfo_ReleaseVarDesc(typeinfo2, bindptr.lpvardesc);
2343 ITypeInfo_Release(typeinfo2);
2344 }
2345 for (i = 0; i < expected_funcs_cnt; i++)
2346 {
2347 wcscpy(str, func[i].name);
2348 hr = ITypeComp_Bind(typecomp, str, 0, INVOKE_FUNC, &typeinfo2, &desckind, &bindptr);
2349 ok(hr == S_OK, "Bind failed: %08lx\n", hr);
2350 ok(desckind == DESCKIND_FUNCDESC, "Unexpected desckind %u\n", desckind);
2351 ITypeInfo_ReleaseFuncDesc(typeinfo2, bindptr.lpfuncdesc);
2352 ITypeInfo_Release(typeinfo2);
2353 }
2354 wcscpy(str, L"JScriptTypeInfo");
2355 hr = ITypeComp_BindType(typecomp, NULL, 0, &typeinfo2, &typecomp2);
2356 ok(hr == E_INVALIDARG, "BindType returned: %08lx\n", hr);
2357 hr = ITypeComp_BindType(typecomp, str, 0, NULL, &typecomp2);
2358 ok(hr == E_INVALIDARG, "BindType returned: %08lx\n", hr);
2359 hr = ITypeComp_BindType(typecomp, str, 0, &typeinfo2, NULL);
2360 ok(hr == E_INVALIDARG, "BindType returned: %08lx\n", hr);
2361 hr = ITypeComp_BindType(typecomp, str, 0, &typeinfo2, &typecomp2);
2362 ok(hr == S_OK, "BindType failed: %08lx\n", hr);
2363 ok(!typeinfo2, "Unexpected TypeInfo %p (expected null)\n", typeinfo2);
2364 ok(!typecomp2, "Unexpected TypeComp %p (expected null)\n", typecomp2);
2365 wcscpy(str, L"C");
2366 hr = ITypeComp_BindType(typecomp, str, 0, &typeinfo2, &typecomp2);
2367 ok(hr == S_OK, "BindType failed: %08lx\n", hr);
2368 ok(!typeinfo2, "Unexpected TypeInfo %p (expected null)\n", typeinfo2);
2369 ok(!typecomp2, "Unexpected TypeComp %p (expected null)\n", typecomp2);
2370 wcscpy(str, L"IDispatch");
2371 hr = ITypeComp_BindType(typecomp, str, 0, &typeinfo2, &typecomp2);
2372 ok(hr == S_OK, "BindType failed: %08lx\n", hr);
2373 ok(!typeinfo2, "Unexpected TypeInfo %p (expected null)\n", typeinfo2);
2374 ok(!typecomp2, "Unexpected TypeComp %p (expected null)\n", typecomp2);
2375 ITypeComp_Release(typecomp);
2376
2377 /* Updating the script won't update the typeinfo obtained before,
2378 but it will be reflected in any typeinfo obtained afterwards. */
2379 if (!parse_func_name)
2380 {
2382 "var new_var;\n"
2383 "function new_func() { }\n");
2384
2385 hr = IDispatchEx_GetTypeInfo(disp, 0, LOCALE_USER_DEFAULT, &typeinfo2);
2386 ok(hr == S_OK, "GetTypeInfo failed: %08lx\n", hr);
2387 hr = ITypeInfo_GetTypeAttr(typeinfo, &attr);
2388 ok(hr == S_OK, "GetTypeAttr failed: %08lx\n", hr);
2389 ok(attr->cFuncs == expected_funcs_cnt, "Unexpected cFuncs %u\n", attr->cFuncs);
2390 ok(attr->cVars == expected_vars_cnt, "Unexpected cVars %u\n", attr->cVars);
2391 ITypeInfo_ReleaseTypeAttr(typeinfo, attr);
2392 hr = ITypeInfo_GetTypeAttr(typeinfo2, &attr);
2393 ok(hr == S_OK, "GetTypeAttr failed: %08lx\n", hr);
2394 ok(attr->cFuncs == expected_funcs_cnt + 1, "Unexpected cFuncs %u\n", attr->cFuncs);
2395 ok(attr->cVars == expected_vars_cnt + 1, "Unexpected cVars %u\n", attr->cVars);
2396 ITypeInfo_ReleaseTypeAttr(typeinfo2, attr);
2397 ITypeInfo_Release(typeinfo2);
2398
2399 /* Adding an identifier that differs only in case gives an error
2400 when retrieving the TypeInfo, even though it is valid jscript. */
2401 parse_script(parser, L"var NEW_FUNC;\n");
2402 hr = IDispatchEx_GetTypeInfo(disp, 0, LOCALE_USER_DEFAULT, &typeinfo2);
2403 ok(hr == TYPE_E_AMBIGUOUSNAME, "GetTypeInfo returned: %08lx\n", hr);
2404 }
2405
2406 ITypeInfo_Release(typeinfo);
2407 IDispatchEx_Release(disp);
2409
2410 SET_EXPECT(OnStateChange_DISCONNECTED);
2411 SET_EXPECT(OnStateChange_INITIALIZED);
2412 SET_EXPECT(OnStateChange_CLOSED);
2413 hr = IActiveScript_Close(script);
2414 ok(hr == S_OK, "Close failed: %08lx\n", hr);
2415 CHECK_CALLED(OnStateChange_DISCONNECTED);
2416 CHECK_CALLED(OnStateChange_INITIALIZED);
2417 CHECK_CALLED(OnStateChange_CLOSED);
2418
2419 IActiveScript_Release(script);
2420}
#define index(s, c)
Definition: various.h:29
@ VT_VARIANT
Definition: compat.h:2307
@ VT_EMPTY
Definition: compat.h:2295
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4152
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLuint index
Definition: glext.h:6031
#define IActiveScriptParseProcedure2_ParseProcedureText
Definition: jscript.c:46
#define IActiveScriptParseProcedure2_Release
Definition: jscript.c:45
unsigned int UINT
Definition: ndis.h:50
#define LOCALE_USER_DEFAULT
#define MEMBERID_NIL
Definition: oleauto.h:1003
wcscpy
static __inline const char * wine_dbgstr_guid(const GUID *id)
Definition: debug.h:171
@ CC_STDCALL
Definition: spec2def.c:94
Definition: cookie.c:202
int32_t INT
Definition: typedefs.h:58
@ TKIND_DISPATCH
Definition: widltypes.h:238
#define TYPE_E_BADMODULEKIND
Definition: winerror.h:3647
#define TYPE_E_ELEMENTNOTFOUND
Definition: winerror.h:3642
#define TYPE_E_AMBIGUOUSNAME
Definition: winerror.h:3643

Referenced by START_TEST().

◆ visible_AddRef()

static ULONG WINAPI visible_AddRef ( IDispatch iface)
static

Definition at line 164 of file jscript.c.

165{
166 return ++visible_named_item_ref;
167}

◆ visible_code_AddRef()

static ULONG WINAPI visible_code_AddRef ( IDispatch iface)
static

Definition at line 174 of file jscript.c.

175{
177}

◆ visible_code_Release()

static ULONG WINAPI visible_code_Release ( IDispatch iface)
static

Definition at line 179 of file jscript.c.

180{
182}

◆ visible_GetIDsOfNames()

static HRESULT WINAPI visible_GetIDsOfNames ( IDispatch iface,
REFIID  riid,
LPOLESTR *  names,
UINT  name_cnt,
LCID  lcid,
DISPID ids 
)
static

Definition at line 218 of file jscript.c.

220{
221 ok(name_cnt == 1, "name_cnt = %u\n", name_cnt);
222 if(!wcscmp(names[0], L"testCall")) {
223 *ids = 1;
224 return S_OK;
225 }
226
227 CHECK_EXPECT2(GetIDsOfNames_visible);
228 return DISP_E_UNKNOWNNAME;
229}

◆ visible_Release()

static ULONG WINAPI visible_Release ( IDispatch iface)
static

Definition at line 169 of file jscript.c.

170{
171 return --visible_named_item_ref;
172}

Variable Documentation

◆ ActiveScriptSite

◆ ActiveScriptSiteVtbl

const IActiveScriptSiteVtbl ActiveScriptSiteVtbl
static
Initial value:
= {
}
static ULONG WINAPI ActiveScriptSite_Release(IActiveScriptSite *iface)
Definition: jscript.c:331
static HRESULT WINAPI ActiveScriptSite_OnLeaveScript(IActiveScriptSite *iface)
Definition: jscript.c:433
static HRESULT WINAPI ActiveScriptSite_OnStateChange(IActiveScriptSite *iface, SCRIPTSTATE ssScriptState)
Definition: jscript.c:393
static HRESULT WINAPI ActiveScriptSite_GetDocVersionString(IActiveScriptSite *iface, BSTR *pbstrVersion)
Definition: jscript.c:380
static HRESULT WINAPI ActiveScriptSite_GetItemInfo(IActiveScriptSite *iface, LPCOLESTR pstrName, DWORD dwReturnMask, IUnknown **ppiunkItem, ITypeInfo **ppti)
Definition: jscript.c:342
static HRESULT WINAPI ActiveScriptSite_QueryInterface(IActiveScriptSite *iface, REFIID riid, void **ppv)
Definition: jscript.c:311
static HRESULT WINAPI ActiveScriptSite_OnEnterScript(IActiveScriptSite *iface)
Definition: jscript.c:427
static ULONG WINAPI ActiveScriptSite_AddRef(IActiveScriptSite *iface)
Definition: jscript.c:326
static HRESULT WINAPI ActiveScriptSite_OnScriptTerminate(IActiveScriptSite *iface, const VARIANT *pvarResult, const EXCEPINFO *pexcepinfo)
Definition: jscript.c:386
static HRESULT WINAPI ActiveScriptSite_GetLCID(IActiveScriptSite *iface, LCID *plcid)
Definition: jscript.c:336
static HRESULT WINAPI ActiveScriptSite_OnScriptError(IActiveScriptSite *iface, IActiveScriptError *pscripterror)
Definition: jscript.c:421

Definition at line 439 of file jscript.c.

◆ CLSID_JScript

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

Definition at line 53 of file jscript.c.

Referenced by check_jscript(), and test_aggregation().

◆ CLSID_JScriptEncode

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

Definition at line 55 of file jscript.c.

Referenced by DllGetClassObject(), and START_TEST().

◆ dispatch_object

IDispatch dispatch_object = { &dispatch_vtbl }
static

Definition at line 261 of file jscript.c.

Referenced by ActiveScriptSite_GetItemInfo().

◆ dispatch_vtbl

const IDispatchVtbl dispatch_vtbl
static
Initial value:
= {
}
static HRESULT WINAPI Dispatch_GetTypeInfoCount(IDispatch *iface, UINT *pctinfo)
Definition: jscript.c:194
static ULONG WINAPI Dispatch_Release(IDispatch *iface)
Definition: jscript.c:147
static HRESULT WINAPI Dispatch_GetIDsOfNames(IDispatch *iface, REFIID riid, LPOLESTR *names, UINT name_cnt, LCID lcid, DISPID *ids)
Definition: jscript.c:205
static HRESULT WINAPI Dispatch_GetTypeInfo(IDispatch *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
Definition: jscript.c:200
static ULONG WINAPI Dispatch_AddRef(IDispatch *iface)
Definition: jscript.c:142
static HRESULT WINAPI Dispatch_Invoke(IDispatch *iface, DISPID id, REFIID riid, LCID lcid, WORD flags, DISPPARAMS *dp, VARIANT *res, EXCEPINFO *ei, UINT *err)
Definition: jscript.c:240
static HRESULT WINAPI Dispatch_QueryInterface(IDispatch *iface, REFIID riid, void **ppv)
Definition: jscript.c:130

Definition at line 251 of file jscript.c.

◆ engine_clsid

const CLSID* engine_clsid = &CLSID_JScript
static

Definition at line 117 of file jscript.c.

Referenced by create_jscript(), and START_TEST().

◆ global_named_item

IDispatch global_named_item = { &global_named_item_vtbl }
static

Definition at line 273 of file jscript.c.

Referenced by ActiveScriptSite_GetItemInfo(), and test_named_items().

◆ global_named_item_ref

ULONG global_named_item_ref
static

Definition at line 152 of file jscript.c.

Referenced by global_AddRef(), global_Release(), and test_named_items().

◆ global_named_item_vtbl

const IDispatchVtbl global_named_item_vtbl
static
Initial value:
= {
}
static ULONG WINAPI global_Release(IDispatch *iface)
Definition: jscript.c:159
static ULONG WINAPI global_AddRef(IDispatch *iface)
Definition: jscript.c:154

Definition at line 263 of file jscript.c.

◆ persistent_named_item

IDispatch persistent_named_item = { &persistent_named_item_vtbl }
static

Definition at line 309 of file jscript.c.

Referenced by ActiveScriptSite_GetItemInfo(), and test_named_items().

◆ persistent_named_item_ref

ULONG persistent_named_item_ref
static

Definition at line 152 of file jscript.c.

Referenced by persistent_AddRef(), persistent_Release(), and test_named_items().

◆ persistent_named_item_vtbl

const IDispatchVtbl persistent_named_item_vtbl
static
Initial value:
= {
}
static ULONG WINAPI persistent_AddRef(IDispatch *iface)
Definition: jscript.c:184
static ULONG WINAPI persistent_Release(IDispatch *iface)
Definition: jscript.c:189
static HRESULT WINAPI persistent_GetIDsOfNames(IDispatch *iface, REFIID riid, LPOLESTR *names, UINT name_cnt, LCID lcid, DISPID *ids)
Definition: jscript.c:231

Definition at line 299 of file jscript.c.

◆ visible_code_named_item

IDispatch visible_code_named_item = { &visible_code_named_item_vtbl }
static

Definition at line 297 of file jscript.c.

Referenced by ActiveScriptSite_GetItemInfo().

◆ visible_code_named_item_ref

ULONG visible_code_named_item_ref
static

Definition at line 152 of file jscript.c.

Referenced by test_named_items(), visible_code_AddRef(), and visible_code_Release().

◆ visible_code_named_item_vtbl

const IDispatchVtbl visible_code_named_item_vtbl
static
Initial value:
= {
}
static ULONG WINAPI visible_code_Release(IDispatch *iface)
Definition: jscript.c:179
static ULONG WINAPI visible_code_AddRef(IDispatch *iface)
Definition: jscript.c:174

Definition at line 287 of file jscript.c.

◆ visible_named_item

IDispatch visible_named_item = { &visible_named_item_vtbl }
static

Definition at line 285 of file jscript.c.

Referenced by ActiveScriptSite_GetItemInfo(), and test_named_items().

◆ visible_named_item_ref

ULONG visible_named_item_ref
static

Definition at line 152 of file jscript.c.

Referenced by test_named_items(), visible_AddRef(), and visible_Release().

◆ visible_named_item_vtbl

const IDispatchVtbl visible_named_item_vtbl
static
Initial value:
= {
}
static ULONG WINAPI visible_Release(IDispatch *iface)
Definition: jscript.c:169
static ULONG WINAPI visible_AddRef(IDispatch *iface)
Definition: jscript.c:164
static HRESULT WINAPI visible_GetIDsOfNames(IDispatch *iface, REFIID riid, LPOLESTR *names, UINT name_cnt, LCID lcid, DISPID *ids)
Definition: jscript.c:218

Definition at line 275 of file jscript.c.