ReactOS 0.4.17-dev-357-ga8f14ff
jscript.c
Go to the documentation of this file.
1/*
2 * Copyright 2008 Jacek Caban for CodeWeavers
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17 */
18
19#define COBJMACROS
20#define CONST_VTABLE
21
22#include <initguid.h>
23#include <ole2.h>
24#include <activscp.h>
25#include <objsafe.h>
26#include <dispex.h>
27
28#include "wine/test.h"
29
30#ifdef _WIN64
31
32#define IActiveScriptParse_QueryInterface IActiveScriptParse64_QueryInterface
33#define IActiveScriptParse_Release IActiveScriptParse64_Release
34#define IActiveScriptParse_InitNew IActiveScriptParse64_InitNew
35#define IActiveScriptParse_ParseScriptText IActiveScriptParse64_ParseScriptText
36#define IActiveScriptParseProcedure2_Release IActiveScriptParseProcedure2_64_Release
37#define IActiveScriptParseProcedure2_ParseProcedureText IActiveScriptParseProcedure2_64_ParseProcedureText
38
39#else
40
41#define IActiveScriptParse_QueryInterface IActiveScriptParse32_QueryInterface
42#define IActiveScriptParse_Release IActiveScriptParse32_Release
43#define IActiveScriptParse_InitNew IActiveScriptParse32_InitNew
44#define IActiveScriptParse_ParseScriptText IActiveScriptParse32_ParseScriptText
45#define IActiveScriptParseProcedure2_Release IActiveScriptParseProcedure2_32_Release
46#define IActiveScriptParseProcedure2_ParseProcedureText IActiveScriptParseProcedure2_32_ParseProcedureText
47
48#endif
49
50DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
51DEFINE_GUID(IID_IScriptTypeInfo, 0xc59c6b12, 0xf6c1, 0x11cf, 0x88,0x35, 0x00,0xa0,0xc9,0x11,0xe8,0xb2);
52
53static const CLSID CLSID_JScript =
54 {0xf414c260,0x6ac0,0x11cf,{0xb6,0xd1,0x00,0xaa,0x00,0xbb,0xbb,0x58}};
56 {0xf414c262,0x6ac0,0x11cf,{0xb6,0xd1,0x00,0xaa,0x00,0xbb,0xbb,0x58}};
57
58#define DEFINE_EXPECT(func) \
59 static int expect_ ## func = 0, called_ ## func = 0
60
61#define SET_EXPECT(func) \
62 expect_ ## func = 1
63
64#define SET_EXPECT_MULTI(func, num) \
65 expect_ ## func = num
66
67#define CHECK_EXPECT2(func) \
68 do { \
69 ok(expect_ ##func, "unexpected call " #func "\n"); \
70 called_ ## func++; \
71 }while(0)
72
73#define CHECK_EXPECT(func) \
74 do { \
75 CHECK_EXPECT2(func); \
76 expect_ ## func--; \
77 }while(0)
78
79#define CHECK_CALLED(func) \
80 do { \
81 ok(called_ ## func, "expected " #func "\n"); \
82 expect_ ## func = called_ ## func = 0; \
83 }while(0)
84
85#define CHECK_NOT_CALLED(func) \
86 do { \
87 ok(!called_ ## func, "unexpected " #func "\n"); \
88 expect_ ## func = called_ ## func = FALSE; \
89 }while(0)
90
91#define CHECK_CALLED_MULTI(func, num) \
92 do { \
93 ok(called_ ## func == num, "expected " #func " %d times (got %d)\n", num, called_ ## func); \
94 expect_ ## func = called_ ## func = 0; \
95 }while(0)
96
98DEFINE_EXPECT(OnStateChange_UNINITIALIZED);
99DEFINE_EXPECT(OnStateChange_STARTED);
100DEFINE_EXPECT(OnStateChange_CONNECTED);
101DEFINE_EXPECT(OnStateChange_DISCONNECTED);
102DEFINE_EXPECT(OnStateChange_CLOSED);
103DEFINE_EXPECT(OnStateChange_INITIALIZED);
104DEFINE_EXPECT(OnEnterScript);
105DEFINE_EXPECT(OnLeaveScript);
106DEFINE_EXPECT(OnScriptError);
107DEFINE_EXPECT(GetIDsOfNames);
108DEFINE_EXPECT(GetIDsOfNames_visible);
109DEFINE_EXPECT(GetIDsOfNames_persistent);
110DEFINE_EXPECT(GetItemInfo_global);
111DEFINE_EXPECT(GetItemInfo_global_code);
112DEFINE_EXPECT(GetItemInfo_visible);
113DEFINE_EXPECT(GetItemInfo_visible_code);
114DEFINE_EXPECT(GetItemInfo_persistent);
116
118
119#define test_state(s,ss) _test_state(__LINE__,s,ss)
120static void _test_state(unsigned line, IActiveScript *script, SCRIPTSTATE exstate)
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}
129
131{
133 *ppv = iface;
134 IDispatch_AddRef(iface);
135 return S_OK;
136 }
137
138 *ppv = NULL;
139 return E_NOINTERFACE;
140}
141
143{
144 return 2;
145}
146
148{
149 return 1;
150}
151
153
155{
156 return ++global_named_item_ref;
157}
158
160{
161 return --global_named_item_ref;
162}
163
165{
166 return ++visible_named_item_ref;
167}
168
170{
171 return --visible_named_item_ref;
172}
173
175{
177}
178
180{
182}
183
185{
187}
188
190{
192}
193
195{
196 ok(0, "unexpected call\n");
197 return E_NOTIMPL;
198}
199
201{
202 return DISP_E_BADINDEX;
203}
204
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}
217
218static HRESULT WINAPI visible_GetIDsOfNames(IDispatch *iface, REFIID riid, LPOLESTR *names, UINT name_cnt,
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}
230
233{
234 ok(name_cnt == 1, "name_cnt = %u\n", name_cnt);
235
236 CHECK_EXPECT2(GetIDsOfNames_persistent);
237 return DISP_E_UNKNOWNNAME;
238}
239
241 DISPPARAMS *dp, VARIANT *res, EXCEPINFO *ei, UINT *err)
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}
250
251static const IDispatchVtbl dispatch_vtbl = {
259};
260
262
263static const IDispatchVtbl global_named_item_vtbl = {
271};
272
274
275static const IDispatchVtbl visible_named_item_vtbl = {
283};
284
286
287static const IDispatchVtbl visible_code_named_item_vtbl = {
295};
296
298
299static const IDispatchVtbl persistent_named_item_vtbl = {
307};
308
310
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}
325
327{
328 return 2;
329}
330
332{
333 return 1;
334}
335
337{
338 CHECK_EXPECT(GetLCID);
339 return E_NOTIMPL;
340}
341
343 DWORD dwReturnMask, IUnknown **ppiunkItem, ITypeInfo **ppti)
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}
379
381{
382 ok(0, "unexpected call\n");
383 return E_NOTIMPL;
384}
385
387 const VARIANT *pvarResult, const EXCEPINFO *pexcepinfo)
388{
389 ok(0, "unexpected call\n");
390 return E_NOTIMPL;
391}
392
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}
420
422{
423 CHECK_EXPECT(OnScriptError);
424 return S_OK;
425}
426
428{
429 CHECK_EXPECT(OnEnterScript);
430 return S_OK;
431}
432
434{
435 CHECK_EXPECT(OnLeaveScript);
436 return S_OK;
437}
438
439static const IActiveScriptSiteVtbl ActiveScriptSiteVtbl = {
451};
452
454
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}
493
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}
509
510static void parse_script(IActiveScriptParse *parser, const WCHAR *src)
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}
523
524#define get_disp_id(a,b,c,d) _get_disp_id(__LINE__,a,b,c,d)
525static void _get_disp_id(unsigned line, IDispatchEx *dispex, const WCHAR *name, HRESULT exhr, DISPID *id)
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}
542
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}
553
554static void test_safety(IUnknown *unk)
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}
644
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}
660
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}
689
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}
701
702static void test_jscript(void)
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}
768
769static void test_jscript2(void)
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}
822
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}
920
921static void test_aggregation(void)
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}
932
933static void test_case_sens(void)
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}
1050
1051static void test_param_ids(void)
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}
1117
1118static void test_code_persistence(void)
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}
1344
1345static void test_named_items(void)
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}
1965
1966static void test_typeinfo(const WCHAR *parse_func_name)
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}
2421
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}
2434
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}
@ 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
enum tagSCRIPTSTATE SCRIPTSTATE
static int state
Definition: maze.c:121
#define trace
Definition: atltest.h:70
#define ok(value,...)
Definition: atltest.h:57
#define broken(x)
Definition: atltest.h:178
#define START_TEST(x)
Definition: atltest.h:75
#define ok_(x1, x2)
Definition: atltest.h:61
#define index(s, c)
Definition: various.h:29
#define ARRAY_SIZE(A)
Definition: main.h:20
const GUID IID_IUnknown
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: combase.c:2842
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
Definition: combase.c:1685
OLECHAR * BSTR
Definition: compat.h:2293
@ VT_NULL
Definition: compat.h:2296
@ VT_VARIANT
Definition: compat.h:2307
@ VT_I4
Definition: compat.h:2298
@ VT_I2
Definition: compat.h:2297
@ VT_EMPTY
Definition: compat.h:2295
@ VT_DISPATCH
Definition: compat.h:2304
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4152
LCID lcid
Definition: locale.c:5660
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
Definition: wcs.c:1977
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
Definition: compobj.c:531
return ret
Definition: mutex.c:146
#define L(x)
Definition: resources.c:13
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
const GLdouble * v
Definition: gl.h:2040
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLenum func
Definition: glext.h:6028
GLenum GLenum GLsizei const GLuint GLboolean enabled
Definition: glext.h:7750
GLuint res
Definition: glext.h:9613
GLenum src
Definition: glext.h:6340
GLuint * ids
Definition: glext.h:5907
GLuint GLuint * names
Definition: glext.h:11545
GLuint index
Definition: glext.h:6031
GLbitfield flags
Definition: glext.h:7161
GLuint GLfloat * val
Definition: glext.h:7180
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
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define debugstr_w
Definition: kernel32.h:32
#define wine_dbgstr_w
Definition: kernel32.h:34
#define GUID_NULL
Definition: ks.h:106
#define win_skip
Definition: minitest.h:67
const char * var
Definition: shader.c:5666
HRESULT hres
Definition: protocol.c:465
#define parse_script(p, s)
Definition: activex.c:681
static ULONG WINAPI persistent_AddRef(IDispatch *iface)
Definition: jscript.c:184
static BOOL check_jscript(void)
Definition: jscript.c:2422
#define SET_EXPECT(func)
Definition: jscript.c:61
static IActiveScript * create_jscript(void)
Definition: jscript.c:690
static ULONG WINAPI ActiveScriptSite_Release(IActiveScriptSite *iface)
Definition: jscript.c:331
static HRESULT WINAPI ActiveScriptSite_OnLeaveScript(IActiveScriptSite *iface)
Definition: jscript.c:433
static void test_invoke_versioning(IActiveScript *script)
Definition: jscript.c:661
static const IDispatchVtbl visible_named_item_vtbl
Definition: jscript.c:275
static void test_typeinfo(const WCHAR *parse_func_name)
Definition: jscript.c:1966
static void test_jscript_uninitializing(void)
Definition: jscript.c:823
static HRESULT WINAPI Dispatch_GetTypeInfoCount(IDispatch *iface, UINT *pctinfo)
Definition: jscript.c:194
static void test_aggregation(void)
Definition: jscript.c:921
static const IDispatchVtbl global_named_item_vtbl
Definition: jscript.c:263
static HRESULT WINAPI ActiveScriptSite_OnStateChange(IActiveScriptSite *iface, SCRIPTSTATE ssScriptState)
Definition: jscript.c:393
static ULONG visible_named_item_ref
Definition: jscript.c:152
static void test_param_ids(void)
Definition: jscript.c:1051
static IDispatch visible_code_named_item
Definition: jscript.c:297
static IDispatchEx * get_script_dispatch(IActiveScript *script, const WCHAR *item_name)
Definition: jscript.c:494
static const CLSID CLSID_JScript
Definition: jscript.c:53
static void test_script_dispatch(IDispatchEx *dispex)
Definition: jscript.c:455
static ULONG WINAPI Dispatch_Release(IDispatch *iface)
Definition: jscript.c:147
#define get_disp_id(a, b, c, d)
Definition: jscript.c:524
static IDispatch dispatch_object
Definition: jscript.c:261
#define IActiveScriptParseProcedure2_ParseProcedureText
Definition: jscript.c:46
#define CHECK_EXPECT(func)
Definition: jscript.c:73
static ULONG WINAPI persistent_Release(IDispatch *iface)
Definition: jscript.c:189
static void test_jscript(void)
Definition: jscript.c:702
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 ULONG WINAPI visible_Release(IDispatch *iface)
Definition: jscript.c:169
static HRESULT WINAPI persistent_GetIDsOfNames(IDispatch *iface, REFIID riid, LPOLESTR *names, UINT name_cnt, LCID lcid, DISPID *ids)
Definition: jscript.c:231
#define DEFINE_EXPECT(func)
Definition: jscript.c:58
#define IActiveScriptParse_InitNew
Definition: jscript.c:43
static void test_code_persistence(void)
Definition: jscript.c:1118
#define IActiveScriptParse_ParseScriptText
Definition: jscript.c:44
#define IActiveScriptParseProcedure2_Release
Definition: jscript.c:45
#define IActiveScriptParse_Release
Definition: jscript.c:42
static void test_named_items(void)
Definition: jscript.c:1345
static ULONG WINAPI global_Release(IDispatch *iface)
Definition: jscript.c:159
static void test_case_sens(void)
Definition: jscript.c:933
static ULONG visible_code_named_item_ref
Definition: jscript.c:152
#define test_state(s, ss)
Definition: jscript.c:119
static HRESULT WINAPI Dispatch_GetIDsOfNames(IDispatch *iface, REFIID riid, LPOLESTR *names, UINT name_cnt, LCID lcid, DISPID *ids)
Definition: jscript.c:205
static void _test_state(unsigned line, IActiveScript *script, SCRIPTSTATE exstate)
Definition: jscript.c:120
#define CHECK_EXPECT2(func)
Definition: jscript.c:67
static const IDispatchVtbl dispatch_vtbl
Definition: jscript.c:251
static HRESULT WINAPI ActiveScriptSite_QueryInterface(IActiveScriptSite *iface, REFIID riid, void **ppv)
Definition: jscript.c:311
static HRESULT WINAPI Dispatch_GetTypeInfo(IDispatch *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
Definition: jscript.c:200
static ULONG WINAPI visible_code_Release(IDispatch *iface)
Definition: jscript.c:179
static ULONG WINAPI Dispatch_AddRef(IDispatch *iface)
Definition: jscript.c:142
static const IDispatchVtbl persistent_named_item_vtbl
Definition: jscript.c:299
static HRESULT WINAPI ActiveScriptSite_OnEnterScript(IActiveScriptSite *iface)
Definition: jscript.c:427
static ULONG WINAPI visible_AddRef(IDispatch *iface)
Definition: jscript.c:164
#define CHECK_CALLED(func)
Definition: jscript.c:79
static ULONG WINAPI ActiveScriptSite_AddRef(IActiveScriptSite *iface)
Definition: jscript.c:326
static const CLSID CLSID_JScriptEncode
Definition: jscript.c:55
static HRESULT WINAPI ActiveScriptSite_OnScriptTerminate(IActiveScriptSite *iface, const VARIANT *pvarResult, const EXCEPINFO *pexcepinfo)
Definition: jscript.c:386
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 void test_safety(IUnknown *unk)
Definition: jscript.c:554
static void test_no_script_dispatch(IActiveScript *script)
Definition: jscript.c:543
static void test_jscript2(void)
Definition: jscript.c:769
static HRESULT WINAPI Dispatch_QueryInterface(IDispatch *iface, REFIID riid, void **ppv)
Definition: jscript.c:130
static const CLSID * engine_clsid
Definition: jscript.c:117
static ULONG global_named_item_ref
Definition: jscript.c:152
static IDispatch visible_named_item
Definition: jscript.c:285
static ULONG persistent_named_item_ref
Definition: jscript.c:152
static const IActiveScriptSiteVtbl ActiveScriptSiteVtbl
Definition: jscript.c:439
#define CHECK_CALLED_MULTI(func, num)
Definition: jscript.c:91
static HRESULT WINAPI visible_GetIDsOfNames(IDispatch *iface, REFIID riid, LPOLESTR *names, UINT name_cnt, LCID lcid, DISPID *ids)
Definition: jscript.c:218
static const IDispatchVtbl visible_code_named_item_vtbl
Definition: jscript.c:287
static void _get_disp_id(unsigned line, IDispatchEx *dispex, const WCHAR *name, HRESULT exhr, DISPID *id)
Definition: jscript.c:525
static HRESULT WINAPI ActiveScriptSite_GetLCID(IActiveScriptSite *iface, LCID *plcid)
Definition: jscript.c:336
static IDispatch global_named_item
Definition: jscript.c:273
static HRESULT set_script_prop(IActiveScript *engine, DWORD property, VARIANT *val)
Definition: jscript.c:645
static IActiveScriptSite ActiveScriptSite
Definition: jscript.c:453
static HRESULT WINAPI ActiveScriptSite_OnScriptError(IActiveScriptSite *iface, IActiveScriptError *pscripterror)
Definition: jscript.c:421
#define SET_EXPECT_MULTI(func, num)
Definition: jscript.c:64
static ULONG WINAPI visible_code_AddRef(IDispatch *iface)
Definition: jscript.c:174
static IDispatch persistent_named_item
Definition: jscript.c:309
static ULONG WINAPI global_AddRef(IDispatch *iface)
Definition: jscript.c:154
static VARIANTARG static DISPID
Definition: ordinal.c:49
script
Definition: msipriv.h:383
unsigned int UINT
Definition: ndis.h:50
#define LOCALE_USER_DEFAULT
BSTR WINAPI SysAllocString(LPCOLESTR str)
Definition: oleaut.c:238
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:271
#define DISPATCH_METHOD
Definition: oleauto.h:1006
#define MEMBERID_NIL
Definition: oleauto.h:1003
#define V_VT(A)
Definition: oleauto.h:211
#define V_I4(A)
Definition: oleauto.h:247
#define V_DISPATCH(A)
Definition: oleauto.h:239
#define DISPATCH_PROPERTYGET
Definition: oleauto.h:1007
#define V_I2(A)
Definition: oleauto.h:245
const GUID IID_IDispatch
short WCHAR
Definition: pedump.c:58
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8)
Definition: guiddef.h:68
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define REFIID
Definition: guiddef.h:118
#define IID_NULL
Definition: guiddef.h:98
#define err(...)
const WCHAR * str
DWORD LCID
Definition: nls.h:13
wcscpy
static __inline const char * wine_dbgstr_guid(const GUID *id)
Definition: debug.h:171
#define memset(x, y, z)
Definition: compat.h:39
@ CC_STDCALL
Definition: spec2def.c:94
Definition: cookie.c:202
Definition: parser.c:49
Definition: name.c:39
Definition: import.c:81
Definition: send.c:48
int32_t INT
Definition: typedefs.h:58
uint32_t ULONG
Definition: typedefs.h:59
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
Definition: variant.c:648
@ TKIND_DISPATCH
Definition: widltypes.h:238
#define WINAPI
Definition: msvc.h:6
#define TYPE_E_BADMODULEKIND
Definition: winerror.h:3647
#define TYPE_E_ELEMENTNOTFOUND
Definition: winerror.h:3642
#define E_NOINTERFACE
Definition: winerror.h:3479
#define TYPE_E_AMBIGUOUSNAME
Definition: winerror.h:3643
#define CLASS_E_NOAGGREGATION
Definition: winerror.h:3771
#define E_UNEXPECTED
Definition: winerror.h:3528
#define DISP_E_BADINDEX
Definition: winerror.h:3623
#define E_POINTER
Definition: winerror.h:3480
#define DISP_E_UNKNOWNNAME
Definition: winerror.h:3618