ReactOS 0.4.17-dev-357-ga8f14ff
vbscript.c
Go to the documentation of this file.
1/*
2 * Copyright 2011 Jacek Caban for CodeWeavers
3 * Copyright 2019 Dmitry Timoshkov
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
18 */
19
20#define COBJMACROS
21#define CONST_VTABLE
22
23#include <initguid.h>
24#include <ole2.h>
25#include <activscp.h>
26#include <objsafe.h>
27#include <dispex.h>
28
29#include "vbsregexp55.h"
30
31#include "wine/test.h"
32
33#ifdef _WIN64
34
35#define IActiveScriptParse_QueryInterface IActiveScriptParse64_QueryInterface
36#define IActiveScriptParse_Release IActiveScriptParse64_Release
37#define IActiveScriptParse_InitNew IActiveScriptParse64_InitNew
38#define IActiveScriptParse_ParseScriptText IActiveScriptParse64_ParseScriptText
39#define IActiveScriptParseProcedure2_Release \
40 IActiveScriptParseProcedure2_64_Release
41
42#else
43
44#define IActiveScriptParse_QueryInterface IActiveScriptParse32_QueryInterface
45#define IActiveScriptParse_Release IActiveScriptParse32_Release
46#define IActiveScriptParse_InitNew IActiveScriptParse32_InitNew
47#define IActiveScriptParse_ParseScriptText IActiveScriptParse32_ParseScriptText
48#define IActiveScriptParseProcedure2_Release \
49 IActiveScriptParseProcedure2_32_Release
50
51#endif
52
53DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
54DEFINE_GUID(IID_IScriptTypeInfo, 0xc59c6b12, 0xf6c1, 0x11cf, 0x88,0x35, 0x00,0xa0,0xc9,0x11,0xe8,0xb2);
55
56#define DEFINE_EXPECT(func) \
57 static int expect_ ## func = 0, called_ ## func = 0
58
59#define SET_EXPECT(func) \
60 expect_ ## func = 1
61
62#define SET_EXPECT_MULTI(func, num) \
63 expect_ ## func = num
64
65#define CHECK_EXPECT2(func) \
66 do { \
67 ok(expect_ ##func, "unexpected call " #func "\n"); \
68 called_ ## func++; \
69 }while(0)
70
71#define CHECK_EXPECT(func) \
72 do { \
73 CHECK_EXPECT2(func); \
74 expect_ ## func--; \
75 }while(0)
76
77#define CHECK_CALLED(func) \
78 do { \
79 ok(called_ ## func, "expected " #func "\n"); \
80 expect_ ## func = called_ ## func = 0; \
81 }while(0)
82
83#define CHECK_CALLED_MULTI(func, num) \
84 do { \
85 ok(called_ ## func == num, "expected " #func " %d times (got %d)\n", num, called_ ## func); \
86 expect_ ## func = called_ ## func = 0; \
87 }while(0)
88
90DEFINE_EXPECT(OnStateChange_UNINITIALIZED);
91DEFINE_EXPECT(OnStateChange_STARTED);
92DEFINE_EXPECT(OnStateChange_CONNECTED);
93DEFINE_EXPECT(OnStateChange_DISCONNECTED);
94DEFINE_EXPECT(OnStateChange_CLOSED);
95DEFINE_EXPECT(OnStateChange_INITIALIZED);
96DEFINE_EXPECT(OnEnterScript);
97DEFINE_EXPECT(OnLeaveScript);
98DEFINE_EXPECT(OnScriptError);
99DEFINE_EXPECT(GetIDsOfNames);
100DEFINE_EXPECT(GetIDsOfNames_visible);
101DEFINE_EXPECT(GetIDsOfNames_persistent);
102DEFINE_EXPECT(GetItemInfo_global);
103DEFINE_EXPECT(GetItemInfo_global_code);
104DEFINE_EXPECT(GetItemInfo_visible);
105DEFINE_EXPECT(GetItemInfo_visible_code);
106DEFINE_EXPECT(GetItemInfo_persistent);
108
109DEFINE_GUID(CLSID_VBScript, 0xb54f3741, 0x5b07, 0x11cf, 0xa4,0xb0, 0x00,0xaa,0x00,0x4a,0x55,0xe8);
110DEFINE_GUID(CLSID_VBScriptRegExp, 0x3f4daca4, 0x160d, 0x11d2, 0xa8,0xe9, 0x00,0x10,0x4b,0x36,0x5c,0x9f);
111
112#define test_state(s,ss) _test_state(__LINE__,s,ss)
113static void _test_state(unsigned line, IActiveScript *script, SCRIPTSTATE exstate)
114{
115 SCRIPTSTATE state = -1;
117
118 hres = IActiveScript_GetScriptState(script, &state);
119 ok_(__FILE__,line) (hres == S_OK, "GetScriptState failed: %08lx\n", hres);
120 ok_(__FILE__,line) (state == exstate, "state=%d, expected %d\n", state, exstate);
121}
122
124{
126 *ppv = iface;
127 IDispatch_AddRef(iface);
128 return S_OK;
129 }
130
131 *ppv = NULL;
132 return E_NOINTERFACE;
133}
134
136{
137 return 2;
138}
139
141{
142 return 1;
143}
144
146
148{
149 return ++global_named_item_ref;
150}
151
153{
154 return --global_named_item_ref;
155}
156
158{
159 return ++visible_named_item_ref;
160}
161
163{
164 return --visible_named_item_ref;
165}
166
168{
170}
171
173{
175}
176
178{
180}
181
183{
185}
186
188{
189 ok(0, "unexpected call\n");
190 return E_NOTIMPL;
191}
192
194{
195 return DISP_E_BADINDEX;
196}
197
200{
201 ok(name_cnt == 1, "name_cnt = %u\n", name_cnt);
202 if(!wcscmp(names[0], L"testCall")) {
203 *ids = 1;
204 return S_OK;
205 }
206
207 CHECK_EXPECT2(GetIDsOfNames);
208 return DISP_E_UNKNOWNNAME;
209}
210
211static HRESULT WINAPI visible_GetIDsOfNames(IDispatch *iface, REFIID riid, LPOLESTR *names, UINT name_cnt,
213{
214 ok(name_cnt == 1, "name_cnt = %u\n", name_cnt);
215 if(!wcscmp(names[0], L"testCall")) {
216 *ids = 1;
217 return S_OK;
218 }
219
220 CHECK_EXPECT2(GetIDsOfNames_visible);
221 return DISP_E_UNKNOWNNAME;
222}
223
226{
227 ok(name_cnt == 1, "name_cnt = %u\n", name_cnt);
228
229 CHECK_EXPECT2(GetIDsOfNames_persistent);
230 return DISP_E_UNKNOWNNAME;
231}
232
234 DISPPARAMS *dp, VARIANT *res, EXCEPINFO *ei, UINT *err)
235{
236 CHECK_EXPECT(testCall);
237 ok(id == 1, "id = %lu\n", id);
238 ok(flags == DISPATCH_METHOD, "flags = %x\n", flags);
239 ok(!dp->cArgs, "cArgs = %u\n", dp->cArgs);
240 ok(!res, "res = %p\n", res);
241 return S_OK;
242}
243
244static const IDispatchVtbl dispatch_vtbl = {
252};
253
255
256static const IDispatchVtbl global_named_item_vtbl = {
264};
265
267
268static const IDispatchVtbl visible_named_item_vtbl = {
276};
277
279
280static const IDispatchVtbl visible_code_named_item_vtbl = {
288};
289
291
292static const IDispatchVtbl persistent_named_item_vtbl = {
300};
301
303
305{
306 *ppv = NULL;
307
309 *ppv = iface;
310 else if(IsEqualGUID(&IID_IActiveScriptSite, riid))
311 *ppv = iface;
312 else
313 return E_NOINTERFACE;
314
315 IUnknown_AddRef((IUnknown*)*ppv);
316 return S_OK;
317}
318
320{
321 return 2;
322}
323
325{
326 return 1;
327}
328
330{
331 CHECK_EXPECT(GetLCID);
332 return E_NOTIMPL;
333}
334
336 DWORD return_mask, IUnknown **item_unk, ITypeInfo **item_ti)
337{
338 ok(return_mask == SCRIPTINFO_IUNKNOWN, "return_mask = %lx\n", return_mask);
339 if(!wcscmp(name, L"globalItem")) {
340 CHECK_EXPECT(GetItemInfo_global);
341 IDispatch_AddRef(&global_named_item);
342 *item_unk = (IUnknown*)&global_named_item;
343 return S_OK;
344 }
345 if(!wcscmp(name, L"globalCodeItem")) {
346 CHECK_EXPECT(GetItemInfo_global_code);
347 IDispatch_AddRef(&dispatch_object);
348 *item_unk = (IUnknown*)&dispatch_object;
349 return S_OK;
350 }
351 if(!wcscmp(name, L"visibleItem")) {
352 CHECK_EXPECT(GetItemInfo_visible);
353 IDispatch_AddRef(&visible_named_item);
354 *item_unk = (IUnknown*)&visible_named_item;
355 return S_OK;
356 }
357 if(!wcscmp(name, L"visibleCodeItem")) {
358 CHECK_EXPECT(GetItemInfo_visible_code);
359 IDispatch_AddRef(&visible_code_named_item);
360 *item_unk = (IUnknown*)&visible_code_named_item;
361 return S_OK;
362 }
363 if(!wcscmp(name, L"persistent")) {
364 CHECK_EXPECT(GetItemInfo_persistent);
365 IDispatch_AddRef(&persistent_named_item);
366 *item_unk = (IUnknown*)&persistent_named_item;
367 return S_OK;
368 }
369 ok(0, "unexpected call %s\n", wine_dbgstr_w(name));
370 return E_NOTIMPL;
371}
372
374{
375 ok(0, "unexpected call\n");
376 return E_NOTIMPL;
377}
378
380 const VARIANT *pvarResult, const EXCEPINFO *pexcepinfo)
381{
382 ok(0, "unexpected call\n");
383 return E_NOTIMPL;
384}
385
387{
388 switch(ssScriptState) {
390 CHECK_EXPECT(OnStateChange_UNINITIALIZED);
391 return S_OK;
393 CHECK_EXPECT(OnStateChange_STARTED);
394 return S_OK;
396 CHECK_EXPECT(OnStateChange_CONNECTED);
397 return S_OK;
399 CHECK_EXPECT(OnStateChange_DISCONNECTED);
400 return S_OK;
402 CHECK_EXPECT(OnStateChange_CLOSED);
403 return S_OK;
405 CHECK_EXPECT(OnStateChange_INITIALIZED);
406 return S_OK;
407 default:
408 ok(0, "unexpected call %d\n", ssScriptState);
409 }
410
411 return E_NOTIMPL;
412}
413
415{
416 CHECK_EXPECT(OnScriptError);
417 return E_NOTIMPL;
418}
419
421{
422 CHECK_EXPECT(OnEnterScript);
423 return S_OK;
424}
425
427{
428 CHECK_EXPECT(OnLeaveScript);
429 return S_OK;
430}
431
432static const IActiveScriptSiteVtbl ActiveScriptSiteVtbl = {
444};
445
447
449{
450 IObjectSafety *safety;
451 DWORD supported, enabled;
453
454 hres = IActiveScript_QueryInterface(script, &IID_IObjectSafety, (void**)&safety);
455 ok(hres == S_OK, "Could not get IObjectSafety: %08lx\n", hres);
456 if(FAILED(hres))
457 return;
458
459 hres = IObjectSafety_GetInterfaceSafetyOptions(safety, &IID_NULL, &supported, NULL);
460 ok(hres == E_POINTER, "GetInterfaceSafetyOptions failed: %08lx, expected E_POINTER\n", hres);
461 hres = IObjectSafety_GetInterfaceSafetyOptions(safety, &IID_NULL, NULL, &enabled);
462 ok(hres == E_POINTER, "GetInterfaceSafetyOptions failed: %08lx, expected E_POINTER\n", hres);
463
464 supported = enabled = 0xdeadbeef;
465 hres = IObjectSafety_GetInterfaceSafetyOptions(safety, &IID_NULL, &supported, &enabled);
466 ok(hres == S_OK, "GetInterfaceSafetyOptions failed: %08lx\n", hres);
467 ok(supported == (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER),
468 "supported=%lx\n", supported);
469 ok(enabled == INTERFACE_USES_DISPEX, "enabled=%lx\n", enabled);
470
471 supported = enabled = 0xdeadbeef;
472 hres = IObjectSafety_GetInterfaceSafetyOptions(safety, &IID_IActiveScript, &supported, &enabled);
473 ok(hres == S_OK, "GetInterfaceSafetyOptions failed: %08lx\n", hres);
474 ok(supported == (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER),
475 "supported=%lx\n", supported);
476 ok(enabled == INTERFACE_USES_DISPEX, "enabled=%lx\n", enabled);
477
478 supported = enabled = 0xdeadbeef;
479 hres = IObjectSafety_GetInterfaceSafetyOptions(safety, &IID_IActiveScriptParse, &supported, &enabled);
480 ok(hres == S_OK, "GetInterfaceSafetyOptions failed: %08lx\n", hres);
481 ok(supported == (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER),
482 "supported=%lx\n", supported);
483 ok(enabled == INTERFACE_USES_DISPEX, "enabled=%lx\n", enabled);
484
485 hres = IObjectSafety_SetInterfaceSafetyOptions(safety, &IID_IActiveScriptParse,
486 INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER
487 |INTERFACESAFE_FOR_UNTRUSTED_CALLER,
488 INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER);
489 ok(hres == E_FAIL, "SetInterfaceSafetyOptions failed: %08lx, expected E_FAIL\n", hres);
490
491 hres = IObjectSafety_SetInterfaceSafetyOptions(safety, &IID_IActiveScriptParse,
492 INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER,
493 INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER);
494 ok(hres == S_OK, "SetInterfaceSafetyOptions failed: %08lx\n", hres);
495
496 supported = enabled = 0xdeadbeef;
497 hres = IObjectSafety_GetInterfaceSafetyOptions(safety, &IID_IActiveScriptParse, &supported, &enabled);
498 ok(hres == S_OK, "GetInterfaceSafetyOptions failed: %08lx\n", hres);
499 ok(supported == (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER),
500 "supported=%lx\n", supported);
501 ok(enabled == (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER),
502 "enabled=%lx\n", enabled);
503
504 hres = IObjectSafety_SetInterfaceSafetyOptions(safety, &IID_IActiveScriptParse, INTERFACESAFE_FOR_UNTRUSTED_DATA, 0);
505 ok(hres == S_OK, "SetInterfaceSafetyOptions failed: %08lx\n", hres);
506
507 supported = enabled = 0xdeadbeef;
508 hres = IObjectSafety_GetInterfaceSafetyOptions(safety, &IID_IActiveScriptParse, &supported, &enabled);
509 ok(hres == S_OK, "GetInterfaceSafetyOptions failed: %08lx\n", hres);
510 ok(supported == (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER),
511 "supported=%lx\n", supported);
512 ok(enabled == (INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER), "enabled=%lx\n", enabled);
513
514 hres = IObjectSafety_SetInterfaceSafetyOptions(safety, &IID_IActiveScriptParse,
515 INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER, 0);
516 ok(hres == S_OK, "SetInterfaceSafetyOptions failed: %08lx\n", hres);
517
518 supported = enabled = 0xdeadbeef;
519 hres = IObjectSafety_GetInterfaceSafetyOptions(safety, &IID_IActiveScriptParse, &supported, &enabled);
520 ok(hres == S_OK, "GetInterfaceSafetyOptions failed: %08lx\n", hres);
521 ok(supported == (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER),
522 "supported=%lx\n", supported);
523 ok(enabled == INTERFACE_USES_DISPEX, "enabled=%lx\n", enabled);
524
525 hres = IObjectSafety_SetInterfaceSafetyOptions(safety, &IID_IActiveScriptParse,
526 INTERFACE_USES_DISPEX, 0);
527 ok(hres == S_OK, "SetInterfaceSafetyOptions failed: %08lx\n", hres);
528
529 supported = enabled = 0xdeadbeef;
530 hres = IObjectSafety_GetInterfaceSafetyOptions(safety, &IID_IActiveScriptParse, &supported, &enabled);
531 ok(hres == S_OK, "GetInterfaceSafetyOptions failed: %08lx\n", hres);
532 ok(supported == (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER),
533 "supported=%lx\n", supported);
534 ok(enabled == INTERFACE_USES_DISPEX, "enabled=%lx\n", enabled);
535
536 IObjectSafety_Release(safety);
537}
538
540{
541 IDispatchEx *dispex;
542 IDispatch *disp;
544
545 disp = (void*)0xdeadbeef;
546 hres = IActiveScript_GetScriptDispatch(script, item_name, &disp);
547 ok(hres == S_OK, "GetScriptDispatch failed: %08lx\n", hres);
548 if(FAILED(hres))
549 return NULL;
550
551 hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex);
552 IDispatch_Release(disp);
553 ok(hres == S_OK, "Could not get IDispatchEx iface: %08lx\n", hres);
554 return dispex;
555}
556
557static void parse_script(IActiveScriptParse *parse, const WCHAR *src)
558{
559 BSTR str;
561
562 SET_EXPECT(OnEnterScript);
563 SET_EXPECT(OnLeaveScript);
564
568 ok(hres == S_OK, "ParseScriptText failed: %08lx\n", hres);
569
570 CHECK_CALLED(OnEnterScript);
571 CHECK_CALLED(OnLeaveScript);
572}
573
574#define get_disp_id(a,b,c,d) _get_disp_id(__LINE__,a,b,c,d)
575static void _get_disp_id(unsigned line, IDispatchEx *dispex, const WCHAR *name, HRESULT exhres, DISPID *id)
576{
577 DISPID id2;
578 BSTR str;
580
582 hres = IDispatchEx_GetDispID(dispex, str, 0, id);
583 ok_(__FILE__,line)(hres == exhres, "GetDispID(%s) returned %08lx, expected %08lx\n",
584 wine_dbgstr_w(name), hres, exhres);
585
586 hres = IDispatchEx_GetIDsOfNames(dispex, &IID_NULL, &str, 1, 0, &id2);
588 ok_(__FILE__,line)(hres == exhres, "GetIDsOfNames(%s) returned %08lx, expected %08lx\n",
589 wine_dbgstr_w(name), hres, exhres);
590 ok_(__FILE__,line)(*id == id2, "GetIDsOfNames(%s) id != id2\n", wine_dbgstr_w(name));
591}
592
594{
595 IDispatch *disp;
597
598 disp = (void*)0xdeadbeef;
599 hres = IActiveScript_GetScriptDispatch(script, NULL, &disp);
600 ok(hres == E_UNEXPECTED, "hres = %08lx, expected E_UNEXPECTED\n", hres);
601 ok(!disp, "disp != NULL\n");
602}
603
605{
608
609 hres = CoCreateInstance(&CLSID_VBScript, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
610 &IID_IActiveScript, (void**)&ret);
611 ok(hres == S_OK, "CoCreateInstance failed: %08lx\n", hres);
612
613 return ret;
614}
615
616static void test_scriptdisp(void)
617{
618 IDispatchEx *script_disp, *script_disp2;
619 IActiveScriptParse *parser;
620 IActiveScript *vbscript;
621 DISPID id, id2;
622 DISPPARAMS dp;
623 EXCEPINFO ei;
624 VARIANT v;
625 ULONG ref;
627
628 vbscript = create_vbscript();
629
630 hres = IActiveScript_QueryInterface(vbscript, &IID_IActiveScriptParse, (void**)&parser);
631 ok(hres == S_OK, "Could not get IActiveScriptParse iface: %08lx\n", hres);
632
634 test_safety(vbscript);
635
636 SET_EXPECT(GetLCID);
637 hres = IActiveScript_SetScriptSite(vbscript, &ActiveScriptSite);
638 ok(hres == S_OK, "SetScriptSite failed: %08lx\n", hres);
639 CHECK_CALLED(GetLCID);
640
641 script_disp2 = get_script_dispatch(vbscript, NULL);
642
644
645 SET_EXPECT(OnStateChange_INITIALIZED);
647 ok(hres == S_OK, "InitNew failed: %08lx\n", hres);
648 CHECK_CALLED(OnStateChange_INITIALIZED);
649
651
652 SET_EXPECT(OnStateChange_CONNECTED);
653 hres = IActiveScript_SetScriptState(vbscript, SCRIPTSTATE_CONNECTED);
654 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08lx\n", hres);
655 CHECK_CALLED(OnStateChange_CONNECTED);
656
658
660 ok(script_disp == script_disp2, "script_disp != script_disp2\n");
661 IDispatchEx_Release(script_disp2);
662
663 id = 100;
665 ok(id == -1, "id = %ld, expected -1\n", id);
666
667 get_disp_id(script_disp, L"globalVariable", DISP_E_UNKNOWNNAME, &id);
668 parse_script(parser, L"dim globalVariable\nglobalVariable = 3");
669 get_disp_id(script_disp, L"globalVariable", S_OK, &id);
670
671 memset(&dp, 0, sizeof(dp));
672 memset(&ei, 0, sizeof(ei));
673 V_VT(&v) = VT_EMPTY;
674 hres = IDispatchEx_InvokeEx(script_disp, id, 0, DISPATCH_PROPERTYGET|DISPATCH_METHOD, &dp, &v, &ei, NULL);
675 ok(hres == S_OK, "InvokeEx failed: %08lx\n", hres);
676 ok(V_VT(&v) == VT_I2, "V_VT(v) = %d\n", V_VT(&v));
677 ok(V_I2(&v) == 3, "V_I2(v) = %d\n", V_I2(&v));
678
679 get_disp_id(script_disp, L"globalVariable2", DISP_E_UNKNOWNNAME, &id);
680 parse_script(parser, L"globalVariable2 = 4");
681 get_disp_id(script_disp, L"globalVariable2", S_OK, &id);
682
683 get_disp_id(script_disp, L"globalFunction", DISP_E_UNKNOWNNAME, &id);
684 parse_script(parser, L"function globalFunction()\nglobalFunction=5\nend function");
685 get_disp_id(script_disp, L"globalFunction", S_OK, &id);
686
687 SET_EXPECT(OnEnterScript);
688 SET_EXPECT(OnLeaveScript);
689
690 memset(&dp, 0, sizeof(dp));
691 memset(&ei, 0, sizeof(ei));
692 V_VT(&v) = VT_EMPTY;
693 hres = IDispatchEx_InvokeEx(script_disp, id, 0, DISPATCH_PROPERTYGET|DISPATCH_METHOD, &dp, &v, &ei, NULL);
694 ok(hres == S_OK, "InvokeEx failed: %08lx\n", hres);
695 ok(V_VT(&v) == VT_I2, "V_VT(v) = %d\n", V_VT(&v));
696 ok(V_I2(&v) == 5, "V_I2(v) = %d\n", V_I2(&v));
697
698 CHECK_CALLED(OnEnterScript);
699 CHECK_CALLED(OnLeaveScript);
700
701 SET_EXPECT(OnEnterScript);
702 SET_EXPECT(OnLeaveScript);
703
704 memset(&dp, 0, sizeof(dp));
705 memset(&ei, 0, sizeof(ei));
706 V_VT(&v) = VT_EMPTY;
707 hres = IDispatchEx_Invoke(script_disp, id, &IID_NULL, 0, DISPATCH_PROPERTYGET|DISPATCH_METHOD, &dp, &v, &ei, NULL);
708 ok(hres == S_OK, "InvokeEx failed: %08lx\n", hres);
709 ok(V_VT(&v) == VT_I2, "V_VT(v) = %d\n", V_VT(&v));
710 ok(V_I2(&v) == 5, "V_I2(v) = %d\n", V_I2(&v));
711
712 CHECK_CALLED(OnEnterScript);
713 CHECK_CALLED(OnLeaveScript);
714
715 get_disp_id(script_disp, L"globalSub", DISP_E_UNKNOWNNAME, &id);
716 parse_script(parser, L"sub globalSub()\nend sub");
717 get_disp_id(script_disp, L"globalSub", S_OK, &id);
718 get_disp_id(script_disp, L"globalSub", S_OK, &id2);
719 ok(id == id2, "id != id2\n");
720
721 get_disp_id(script_disp, L"constVariable", DISP_E_UNKNOWNNAME, &id);
722 parse_script(parser, L"const constVariable = 6");
723 get_disp_id(script_disp, L"ConstVariable", S_OK, &id);
724 get_disp_id(script_disp, L"Constvariable", S_OK, &id2);
725 ok(id == id2, "id != id2\n");
726
727 IDispatchEx_Release(script_disp);
728
730
731 SET_EXPECT(OnStateChange_DISCONNECTED);
732 SET_EXPECT(OnStateChange_INITIALIZED);
733 SET_EXPECT(OnStateChange_CLOSED);
734 hres = IActiveScript_Close(vbscript);
735 ok(hres == S_OK, "Close failed: %08lx\n", hres);
736 CHECK_CALLED(OnStateChange_DISCONNECTED);
737 CHECK_CALLED(OnStateChange_INITIALIZED);
738 CHECK_CALLED(OnStateChange_CLOSED);
739
740 ref = IActiveScript_Release(vbscript);
741 ok(!ref, "ref = %ld\n", ref);
742}
743
744static void test_param_ids(void)
745{
746 static const WCHAR *const names1[] = { L"test", L"c", L"foo", L"b", L"a" };
747 static const WCHAR *const names2[] = { L"test", L"bar" };
748 static const WCHAR *const names3[] = { L"bar", L"test" };
749 DISPID id[ARRAY_SIZE(names1)];
750 IActiveScriptParse *parser;
751 IActiveScript *vbscript;
753 HRESULT hr;
754
755 vbscript = create_vbscript();
756
757 hr = IActiveScript_QueryInterface(vbscript, &IID_IActiveScriptParse, (void**)&parser);
758 ok(hr == S_OK, "Could not get IActiveScriptParse iface: %08lx\n", hr);
759
760 SET_EXPECT(GetLCID);
761 hr = IActiveScript_SetScriptSite(vbscript, &ActiveScriptSite);
762 ok(hr == S_OK, "SetScriptSite failed: %08lx\n", hr);
763 CHECK_CALLED(GetLCID);
764
765 SET_EXPECT(OnStateChange_INITIALIZED);
767 ok(hr == S_OK, "InitNew failed: %08lx\n", hr);
768 CHECK_CALLED(OnStateChange_INITIALIZED);
769
770 SET_EXPECT(OnStateChange_CONNECTED);
771 hr = IActiveScript_SetScriptState(vbscript, SCRIPTSTATE_CONNECTED);
772 ok(hr == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08lx\n", hr);
773 CHECK_CALLED(OnStateChange_CONNECTED);
774
775 parse_script(parser, L"function test(byval a, byval b, byval c, byval foo)\ntest = a + b + c - foo\nend function\n"
776 "function bar\nend function");
778
779 hr = IDispatchEx_GetIDsOfNames(script_disp, &IID_NULL, (WCHAR**)names1, ARRAY_SIZE(names1), 0, id);
780 ok(hr == DISP_E_UNKNOWNNAME, "GetIDsOfNames returned %08lx, expected %08lx\n", hr, DISP_E_UNKNOWNNAME);
781 ok(id[0] > 0, "Unexpected DISPID for \"test\": %ld\n", id[0]);
782 ok(id[4] == DISPID_UNKNOWN, "Unexpected DISPID for \"a\" parameter: %ld\n", id[4]);
783 ok(id[3] == DISPID_UNKNOWN, "Unexpected DISPID for \"b\" parameter: %ld\n", id[3]);
784 ok(id[1] == DISPID_UNKNOWN, "Unexpected DISPID for \"c\" parameter: %ld\n", id[1]);
785 ok(id[2] == DISPID_UNKNOWN, "Unexpected DISPID for \"foo\" parameter: %ld\n", id[2]);
786
787 hr = IDispatchEx_GetIDsOfNames(script_disp, &IID_NULL, (WCHAR**)names2, ARRAY_SIZE(names2), 0, id);
788 ok(hr == DISP_E_UNKNOWNNAME, "GetIDsOfNames returned %08lx, expected %08lx\n", hr, DISP_E_UNKNOWNNAME);
789 ok(id[0] > 0, "Unexpected DISPID for \"test\": %ld\n", id[0]);
790 ok(id[1] == DISPID_UNKNOWN, "Unexpected DISPID for \"bar\": %ld\n", id[1]);
791
792 hr = IDispatchEx_GetIDsOfNames(script_disp, &IID_NULL, (WCHAR**)names3, ARRAY_SIZE(names3), 0, id);
793 ok(hr == DISP_E_UNKNOWNNAME, "GetIDsOfNames returned %08lx, expected %08lx\n", hr, DISP_E_UNKNOWNNAME);
794 ok(id[0] > 0, "Unexpected DISPID for \"bar\": %ld\n", id[0]);
795 ok(id[1] == DISPID_UNKNOWN, "Unexpected DISPID for \"test\": %ld\n", id[1]);
796
797 IDispatchEx_Release(script_disp);
799
800 SET_EXPECT(OnStateChange_DISCONNECTED);
801 SET_EXPECT(OnStateChange_INITIALIZED);
802 SET_EXPECT(OnStateChange_CLOSED);
803 hr = IActiveScript_Close(vbscript);
804 ok(hr == S_OK, "Close failed: %08lx\n", hr);
805 CHECK_CALLED(OnStateChange_DISCONNECTED);
806 CHECK_CALLED(OnStateChange_INITIALIZED);
807 CHECK_CALLED(OnStateChange_CLOSED);
808
809 IActiveScript_Release(vbscript);
810}
811
812static void test_code_persistence(void)
813{
814 IActiveScriptParse *parser;
816 IActiveScript *vbscript;
817 VARIANT var;
818 HRESULT hr;
819 DISPID id;
820 ULONG ref;
821
822 vbscript = create_vbscript();
823
824 hr = IActiveScript_QueryInterface(vbscript, &IID_IActiveScriptParse, (void**)&parser);
825 ok(hr == S_OK, "Could not get IActiveScriptParse iface: %08lx\n", hr);
827 test_safety(vbscript);
828
829 SET_EXPECT(GetLCID);
830 hr = IActiveScript_SetScriptSite(vbscript, &ActiveScriptSite);
831 ok(hr == S_OK, "SetScriptSite failed: %08lx\n", hr);
832 CHECK_CALLED(GetLCID);
833
834 SET_EXPECT(OnStateChange_INITIALIZED);
836 ok(hr == S_OK, "InitNew failed: %08lx\n", hr);
837 CHECK_CALLED(OnStateChange_INITIALIZED);
839
841 "x = 1\n"
842 "dim y\ny = 2\n",
843 NULL, NULL, NULL, 0, 0, 0, NULL, NULL);
844 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
845
847 "dim z\n"
848 "y = 42\n"
849 "var = 10\n",
850 NULL, NULL, NULL, 0, 0, SCRIPTTEXT_ISPERSISTENT, NULL, NULL);
851 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
852
853 /* Pending code does not add identifiers to the global scope */
855 id = 0;
857 ok(id == -1, "id = %ld, expected -1\n", id);
858 id = 0;
860 ok(id == -1, "id = %ld, expected -1\n", id);
861 id = 0;
863 ok(id == -1, "id = %ld, expected -1\n", id);
864 IDispatchEx_Release(script_disp);
865
866 /* Uninitialized state removes code without SCRIPTTEXT_ISPERSISTENT */
867 SET_EXPECT(OnStateChange_UNINITIALIZED);
868 hr = IActiveScript_SetScriptState(vbscript, SCRIPTSTATE_UNINITIALIZED);
869 ok(hr == S_OK, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08lx\n", hr);
870 CHECK_CALLED(OnStateChange_UNINITIALIZED);
871 test_no_script_dispatch(vbscript);
872
873 SET_EXPECT(GetLCID);
874 SET_EXPECT(OnStateChange_INITIALIZED);
875 hr = IActiveScript_SetScriptSite(vbscript, &ActiveScriptSite);
876 ok(hr == S_OK, "SetScriptSite failed: %08lx\n", hr);
877 CHECK_CALLED(GetLCID);
878 CHECK_CALLED(OnStateChange_INITIALIZED);
879
880 hr = IActiveScriptParse_ParseScriptText(parser, L"var = 20\n", NULL, NULL, NULL, 0, 0, 0, NULL, NULL);
881 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
882
883 SET_EXPECT(OnStateChange_CONNECTED);
884 SET_EXPECT_MULTI(OnEnterScript, 2);
885 SET_EXPECT_MULTI(OnLeaveScript, 2);
886 hr = IActiveScript_SetScriptState(vbscript, SCRIPTSTATE_CONNECTED);
887 ok(hr == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08lx\n", hr);
888 CHECK_CALLED(OnStateChange_CONNECTED);
889 CHECK_CALLED_MULTI(OnEnterScript, 2);
890 CHECK_CALLED_MULTI(OnLeaveScript, 2);
892
894 id = 0;
896 ok(id == -1, "id = %ld, expected -1\n", id);
897 id = 0;
898 get_disp_id(script_disp, L"y", S_OK, &id);
899 ok(id != -1, "id = -1\n");
900 id = 0;
901 get_disp_id(script_disp, L"z", S_OK, &id);
902 ok(id != -1, "id = -1\n");
903 IDispatchEx_Release(script_disp);
904
905 SET_EXPECT(OnEnterScript);
906 SET_EXPECT(OnLeaveScript);
907 hr = IActiveScriptParse_ParseScriptText(parser, L"y", NULL, NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
908 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
909 ok(V_VT(&var) == VT_I2 && V_I2(&var) == 42, "V_VT(y) = %d, V_I2(y) = %d\n", V_VT(&var), V_I2(&var));
910 CHECK_CALLED(OnEnterScript);
911 CHECK_CALLED(OnLeaveScript);
912
913 SET_EXPECT(OnEnterScript);
914 SET_EXPECT(OnLeaveScript);
915 hr = IActiveScriptParse_ParseScriptText(parser, L"var", NULL, NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
916 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
917 ok(V_VT(&var) == VT_I2 && V_I2(&var) == 20, "V_VT(var) = %d, V_I2(var) = %d\n", V_VT(&var), V_I2(&var));
918 CHECK_CALLED(OnEnterScript);
919 CHECK_CALLED(OnLeaveScript);
920
921 /* Uninitialized state does not remove persistent code, even if it was executed */
922 SET_EXPECT(OnStateChange_DISCONNECTED);
923 SET_EXPECT(OnStateChange_INITIALIZED);
924 SET_EXPECT(OnStateChange_UNINITIALIZED);
925 hr = IActiveScript_SetScriptState(vbscript, SCRIPTSTATE_UNINITIALIZED);
926 ok(hr == S_OK, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08lx\n", hr);
927 CHECK_CALLED(OnStateChange_DISCONNECTED);
928 CHECK_CALLED(OnStateChange_INITIALIZED);
929 CHECK_CALLED(OnStateChange_UNINITIALIZED);
930 test_no_script_dispatch(vbscript);
931
932 SET_EXPECT(GetLCID);
933 SET_EXPECT(OnStateChange_INITIALIZED);
934 hr = IActiveScript_SetScriptSite(vbscript, &ActiveScriptSite);
935 ok(hr == S_OK, "SetScriptSite failed: %08lx\n", hr);
936 CHECK_CALLED(GetLCID);
937 CHECK_CALLED(OnStateChange_INITIALIZED);
938
940 id = 0;
942 ok(id == -1, "id = %ld, expected -1\n", id);
943 IDispatchEx_Release(script_disp);
944
945 SET_EXPECT(OnStateChange_CONNECTED);
946 SET_EXPECT(OnEnterScript);
947 SET_EXPECT(OnLeaveScript);
948 hr = IActiveScript_SetScriptState(vbscript, SCRIPTSTATE_CONNECTED);
949 ok(hr == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08lx\n", hr);
950 CHECK_CALLED(OnStateChange_CONNECTED);
951 CHECK_CALLED(OnEnterScript);
952 CHECK_CALLED(OnLeaveScript);
954
956 id = 0;
957 get_disp_id(script_disp, L"z", S_OK, &id);
958 ok(id != -1, "id = -1\n");
959 IDispatchEx_Release(script_disp);
960
961 SET_EXPECT(OnEnterScript);
962 SET_EXPECT(OnLeaveScript);
963 hr = IActiveScriptParse_ParseScriptText(parser, L"y", NULL, NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
964 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
965 ok(V_VT(&var) == VT_I2 && V_I2(&var) == 42, "V_VT(y) = %d, V_I2(y) = %d\n", V_VT(&var), V_I2(&var));
966 CHECK_CALLED(OnEnterScript);
967 CHECK_CALLED(OnLeaveScript);
968
969 SET_EXPECT(OnEnterScript);
970 SET_EXPECT(OnLeaveScript);
971 hr = IActiveScriptParse_ParseScriptText(parser, L"var", NULL, NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
972 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
973 ok(V_VT(&var) == VT_I2 && V_I2(&var) == 10, "V_VT(var) = %d, V_I2(var) = %d\n", V_VT(&var), V_I2(&var));
974 CHECK_CALLED(OnEnterScript);
975 CHECK_CALLED(OnLeaveScript);
976
977 SET_EXPECT(OnStateChange_DISCONNECTED);
978 SET_EXPECT(OnStateChange_INITIALIZED);
979 SET_EXPECT(OnStateChange_UNINITIALIZED);
980 hr = IActiveScript_SetScriptState(vbscript, SCRIPTSTATE_UNINITIALIZED);
981 ok(hr == S_OK, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08lx\n", hr);
982 CHECK_CALLED(OnStateChange_DISCONNECTED);
983 CHECK_CALLED(OnStateChange_INITIALIZED);
984 CHECK_CALLED(OnStateChange_UNINITIALIZED);
985
986 SET_EXPECT(GetLCID);
987 SET_EXPECT(OnStateChange_INITIALIZED);
988 hr = IActiveScript_SetScriptSite(vbscript, &ActiveScriptSite);
989 ok(hr == S_OK, "SetScriptSite failed: %08lx\n", hr);
990 CHECK_CALLED(GetLCID);
991 CHECK_CALLED(OnStateChange_INITIALIZED);
992
993 hr = IActiveScriptParse_ParseScriptText(parser, L"dim y\ny = 2\n", NULL, NULL, NULL, 0, 0, SCRIPTTEXT_ISPERSISTENT, NULL, NULL);
994 ok(hr == S_OK, "ParseScriptText failed: %08lx\n", hr);
995
996 /* Closing the script engine removes all code (even if it's pending and persistent) */
997 SET_EXPECT(OnStateChange_CLOSED);
998 hr = IActiveScript_Close(vbscript);
999 ok(hr == S_OK, "Close failed: %08lx\n", hr);
1000 CHECK_CALLED(OnStateChange_CLOSED);
1001 test_state(vbscript, SCRIPTSTATE_CLOSED);
1002 test_no_script_dispatch(vbscript);
1003
1004 SET_EXPECT(OnStateChange_INITIALIZED);
1005 SET_EXPECT(GetLCID);
1006 hr = IActiveScript_SetScriptSite(vbscript, &ActiveScriptSite);
1007 ok(hr == S_OK, "SetScriptSite failed: %08lx\n", hr);
1008 CHECK_CALLED(OnStateChange_INITIALIZED);
1009 CHECK_CALLED(GetLCID);
1011
1012 SET_EXPECT(OnStateChange_CONNECTED);
1013 hr = IActiveScript_SetScriptState(vbscript, SCRIPTSTATE_CONNECTED);
1014 ok(hr == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08lx\n", hr);
1015 CHECK_CALLED(OnStateChange_CONNECTED);
1017
1019 id = 0;
1021 ok(id == -1, "id = %ld, expected -1\n", id);
1022 id = 0;
1024 ok(id == -1, "id = %ld, expected -1\n", id);
1025 IDispatchEx_Release(script_disp);
1026
1028
1029 SET_EXPECT(OnStateChange_DISCONNECTED);
1030 SET_EXPECT(OnStateChange_INITIALIZED);
1031 SET_EXPECT(OnStateChange_CLOSED);
1032 ref = IActiveScript_Release(vbscript);
1033 ok(!ref, "ref = %ld\n", ref);
1034 CHECK_CALLED(OnStateChange_DISCONNECTED);
1035 CHECK_CALLED(OnStateChange_INITIALIZED);
1036 CHECK_CALLED(OnStateChange_CLOSED);
1037}
1038
1039static void test_script_typeinfo(void)
1040{
1041 static struct
1042 {
1043 const WCHAR *name;
1044 VARTYPE ret_type;
1045 UINT num_args;
1046 } func[] =
1047 {
1048 { L"foobar", VT_VARIANT, 0 },
1049 { L"test", VT_VOID, 0 },
1050 { L"subtract", VT_VARIANT, 2 },
1051 { L"emptyfn", VT_VARIANT, 0 }
1052 };
1053 static struct
1054 {
1055 const WCHAR *name;
1056 } var[] =
1057 {
1058 { L"global_var" },
1059 { L"obj" },
1060 { L"const_var" },
1061 { L"implicit" }
1062 };
1063 ITypeInfo *typeinfo, *typeinfo2;
1064 ITypeComp *typecomp, *typecomp2;
1065 IActiveScriptParse *parser;
1067 IActiveScript *vbscript;
1068 FUNCDESC *funcdesc;
1069 VARDESC *vardesc;
1070 DESCKIND desckind;
1071 INT implTypeFlags;
1072 UINT count, index;
1073 HREFTYPE reftype;
1074 BINDPTR bindptr;
1075 MEMBERID memid;
1076 TYPEATTR *attr;
1077 HRESULT hr;
1078 WCHAR str[64], *names = str;
1079 BSTR bstr, bstrs[5];
1080 void *obj;
1081 int i;
1082
1083 vbscript = create_vbscript();
1084
1085 hr = IActiveScript_QueryInterface(vbscript, &IID_IActiveScriptParse, (void**)&parser);
1086 ok(hr == S_OK, "Could not get IActiveScriptParse iface: %08lx\n", hr);
1087
1088 SET_EXPECT(GetLCID);
1089 hr = IActiveScript_SetScriptSite(vbscript, &ActiveScriptSite);
1090 ok(hr == S_OK, "SetScriptSite failed: %08lx\n", hr);
1091 CHECK_CALLED(GetLCID);
1092
1093 SET_EXPECT(OnStateChange_INITIALIZED);
1095 ok(hr == S_OK, "InitNew failed: %08lx\n", hr);
1096 CHECK_CALLED(OnStateChange_INITIALIZED);
1097
1098 SET_EXPECT(OnStateChange_CONNECTED);
1099 hr = IActiveScript_SetScriptState(vbscript, SCRIPTSTATE_CONNECTED);
1100 ok(hr == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08lx\n", hr);
1101 CHECK_CALLED(OnStateChange_CONNECTED);
1102
1104 L"dim global_var\n"
1105 "const const_var = 1337\n"
1106
1107 "function foobar\n"
1108 " foobar = \"foobar\"\n"
1109 "end function\n"
1110
1111 "sub test\nend sub\n"
1112 "private sub private_sub\nend sub\n"
1113
1114 "function subtract(byref x, byval y)\n"
1115 " subtract = x - y\n"
1116 "end function\n"
1117
1118 "function emptyfn\nend function\n"
1119
1120 "class C\n"
1121 " dim x\n"
1122 " public sub method\nend sub\n"
1123 " private function strret\n"
1124 " strret = \"ret\"\n"
1125 " end function\n"
1126 "end class\n"
1127
1128 "implicit = 10\n"
1129 "dim obj\nset obj = new C\n");
1130
1132 hr = IDispatchEx_QueryInterface(script_disp, &IID_ITypeInfo, (void**)&typeinfo);
1133 ok(hr == E_NOINTERFACE, "QueryInterface(IID_ITypeInfo) returned: %08lx\n", hr);
1134 hr = IDispatchEx_GetTypeInfo(script_disp, 1, LOCALE_USER_DEFAULT, &typeinfo);
1135 ok(hr == DISP_E_BADINDEX, "GetTypeInfo returned: %08lx\n", hr);
1136 hr = IDispatchEx_GetTypeInfo(script_disp, 0, LOCALE_USER_DEFAULT, &typeinfo);
1137 ok(hr == S_OK, "GetTypeInfo failed: %08lx\n", hr);
1138 hr = IDispatchEx_GetTypeInfo(script_disp, 0, LOCALE_USER_DEFAULT, &typeinfo2);
1139 ok(hr == S_OK, "GetTypeInfo failed: %08lx\n", hr);
1140 ok(typeinfo != typeinfo2, "TypeInfo was not supposed to be shared.\n");
1141 ITypeInfo_Release(typeinfo2);
1142
1143 obj = (void*)0xdeadbeef;
1144 hr = ITypeInfo_CreateInstance(typeinfo, NULL, NULL, NULL);
1145 ok(hr == E_INVALIDARG, "CreateInstance returned: %08lx\n", hr);
1146 hr = ITypeInfo_CreateInstance(typeinfo, NULL, NULL, &obj);
1147 ok(hr == TYPE_E_BADMODULEKIND, "CreateInstance returned: %08lx\n", hr);
1148 hr = ITypeInfo_CreateInstance(typeinfo, NULL, &IID_IDispatch, &obj);
1149 ok(hr == TYPE_E_BADMODULEKIND, "CreateInstance returned: %08lx\n", hr);
1150 ok(!obj, "Unexpected non-null obj %p.\n", obj);
1151
1152 hr = ITypeInfo_GetDocumentation(typeinfo, MEMBERID_NIL, &bstr, NULL, NULL, NULL);
1153 ok(hr == S_OK, "GetDocumentation(MEMBERID_NIL) failed: %08lx\n", hr);
1154 ok(!lstrcmpW(bstr, L"VBScriptTypeInfo"), "Unexpected TypeInfo name %s\n", wine_dbgstr_w(bstr));
1155 SysFreeString(bstr);
1156
1157 hr = ITypeInfo_GetTypeAttr(typeinfo, &attr);
1158 ok(hr == S_OK, "GetTypeAttr failed: %08lx\n", hr);
1159 ok(IsEqualGUID(&attr->guid, &IID_IScriptTypeInfo), "Unexpected GUID %s\n", wine_dbgstr_guid(&attr->guid));
1160 ok(attr->lcid == LOCALE_USER_DEFAULT, "Unexpected LCID %lu\n", attr->lcid);
1161 ok(attr->memidConstructor == MEMBERID_NIL, "Unexpected constructor memid %lu\n", attr->memidConstructor);
1162 ok(attr->memidDestructor == MEMBERID_NIL, "Unexpected destructor memid %lu\n", attr->memidDestructor);
1163 ok(attr->cbSizeInstance == 4, "Unexpected cbSizeInstance %lu\n", attr->cbSizeInstance);
1164 ok(attr->typekind == TKIND_DISPATCH, "Unexpected typekind %u\n", attr->typekind);
1165 ok(attr->cFuncs == ARRAY_SIZE(func), "Unexpected cFuncs %u\n", attr->cFuncs);
1166 ok(attr->cVars == ARRAY_SIZE(var), "Unexpected cVars %u\n", attr->cVars);
1167 ok(attr->cImplTypes == 1, "Unexpected cImplTypes %u\n", attr->cImplTypes);
1168 ok(attr->cbSizeVft == sizeof(IDispatchVtbl), "Unexpected cbSizeVft %u\n", attr->cbSizeVft);
1169 ok(attr->cbAlignment == 4, "Unexpected cbAlignment %u\n", attr->cbAlignment);
1170 ok(attr->wTypeFlags == TYPEFLAG_FDISPATCHABLE, "Unexpected wTypeFlags 0x%x\n", attr->wTypeFlags);
1171 ok(attr->tdescAlias.vt == VT_EMPTY, "Unexpected tdescAlias.vt %d\n", attr->tdescAlias.vt);
1172 ok(attr->idldescType.wIDLFlags == IDLFLAG_NONE, "Unexpected idldescType.wIDLFlags 0x%x\n", attr->idldescType.wIDLFlags);
1173 ITypeInfo_ReleaseTypeAttr(typeinfo, attr);
1174
1175 /* The type inherits from IDispatch */
1176 hr = ITypeInfo_GetImplTypeFlags(typeinfo, 0, NULL);
1177 ok(hr == E_INVALIDARG, "GetImplTypeFlags returned: %08lx\n", hr);
1178 hr = ITypeInfo_GetImplTypeFlags(typeinfo, 1, &implTypeFlags);
1179 ok(hr == TYPE_E_ELEMENTNOTFOUND, "GetImplTypeFlags returned: %08lx\n", hr);
1180 hr = ITypeInfo_GetImplTypeFlags(typeinfo, -1, &implTypeFlags);
1181 ok(hr == TYPE_E_ELEMENTNOTFOUND, "GetImplTypeFlags returned: %08lx\n", hr);
1182 hr = ITypeInfo_GetImplTypeFlags(typeinfo, 0, &implTypeFlags);
1183 ok(hr == S_OK, "GetImplTypeFlags failed: %08lx\n", hr);
1184 ok(implTypeFlags == 0, "Unexpected implTypeFlags 0x%x\n", implTypeFlags);
1185
1186 hr = ITypeInfo_GetRefTypeOfImplType(typeinfo, 0, NULL);
1187 ok(hr == E_INVALIDARG, "GetRefTypeOfImplType returned: %08lx\n", hr);
1188 hr = ITypeInfo_GetRefTypeOfImplType(typeinfo, 1, &reftype);
1189 ok(hr == TYPE_E_ELEMENTNOTFOUND, "GetRefTypeOfImplType returned: %08lx\n", hr);
1190 hr = ITypeInfo_GetRefTypeOfImplType(typeinfo, -1, &reftype);
1191 ok(hr == TYPE_E_ELEMENTNOTFOUND, "GetRefTypeOfImplType failed: %08lx\n", hr);
1192 hr = ITypeInfo_GetRefTypeOfImplType(typeinfo, 0, &reftype);
1193 ok(hr == S_OK, "GetRefTypeOfImplType failed: %08lx\n", hr);
1194 ok(reftype == 1, "Unexpected reftype %ld\n", reftype);
1195
1196 hr = ITypeInfo_GetRefTypeInfo(typeinfo, reftype, NULL);
1197 ok(hr == E_INVALIDARG, "GetRefTypeInfo returned: %08lx\n", hr);
1198 hr = ITypeInfo_GetRefTypeInfo(typeinfo, -1, &typeinfo2);
1199 ok(hr == E_INVALIDARG, "GetRefTypeInfo returned: %08lx\n", hr);
1200 hr = ITypeInfo_GetRefTypeInfo(typeinfo, 4, &typeinfo2);
1201 ok(hr == E_FAIL, "GetRefTypeInfo returned: %08lx\n", hr);
1202 hr = ITypeInfo_GetRefTypeInfo(typeinfo, 0, &typeinfo2);
1203 ok(hr == S_OK, "GetRefTypeInfo failed: %08lx\n", hr);
1204 ok(typeinfo == typeinfo2, "Unexpected TypeInfo %p (expected %p)\n", typeinfo2, typeinfo);
1205 ITypeInfo_Release(typeinfo2);
1206 hr = ITypeInfo_GetRefTypeInfo(typeinfo, reftype, &typeinfo2);
1207 ok(hr == S_OK, "GetRefTypeInfo failed: %08lx\n", hr);
1208 hr = ITypeInfo_GetDocumentation(typeinfo2, MEMBERID_NIL, &bstr, NULL, NULL, NULL);
1209 ok(hr == S_OK, "GetDocumentation(MEMBERID_NIL) failed: %08lx\n", hr);
1210 ok(!lstrcmpW(bstr, L"IDispatch"), "Unexpected TypeInfo name %s\n", wine_dbgstr_w(bstr));
1211 ITypeInfo_Release(typeinfo2);
1212 SysFreeString(bstr);
1213
1214 /* GetIDsOfNames looks into the inherited types as well */
1215 wcscpy(str, L"queryinterface");
1216 hr = ITypeInfo_GetIDsOfNames(typeinfo, NULL, 1, &memid);
1217 ok(hr == E_INVALIDARG, "GetIDsOfNames returned: %08lx\n", hr);
1218 hr = ITypeInfo_GetIDsOfNames(typeinfo, &names, 1, NULL);
1219 ok(hr == E_INVALIDARG, "GetIDsOfNames returned: %08lx\n", hr);
1220 hr = ITypeInfo_GetIDsOfNames(typeinfo, &names, 0, &memid);
1221 ok(hr == E_INVALIDARG, "GetIDsOfNames returned: %08lx\n", hr);
1222 hr = ITypeInfo_GetIDsOfNames(typeinfo, &names, 1, &memid);
1223 ok(hr == S_OK, "GetIDsOfNames failed: %08lx\n", hr);
1224 ok(!lstrcmpW(str, L"queryinterface"), "Unexpected string %s\n", wine_dbgstr_w(str));
1225 wcscpy(str, L"C");
1226 hr = ITypeInfo_GetIDsOfNames(typeinfo, &names, 1, &memid);
1227 ok(hr == DISP_E_UNKNOWNNAME, "GetIDsOfNames returned: %08lx\n", hr);
1228 wcscpy(str, L"SUBtract");
1229 hr = ITypeInfo_GetIDsOfNames(typeinfo, &names, 1, &memid);
1230 ok(hr == S_OK, "GetIDsOfNames failed: %08lx\n", hr);
1231 ok(!lstrcmpW(str, L"SUBtract"), "Unexpected string %s\n", wine_dbgstr_w(str));
1232
1233 hr = ITypeInfo_GetNames(typeinfo, memid, NULL, 1, &count);
1234 ok(hr == E_INVALIDARG, "GetNames returned: %08lx\n", hr);
1235 hr = ITypeInfo_GetNames(typeinfo, memid, bstrs, 1, NULL);
1236 ok(hr == E_INVALIDARG, "GetNames returned: %08lx\n", hr);
1237 hr = ITypeInfo_GetNames(typeinfo, memid, bstrs, 0, &count);
1238 ok(hr == S_OK, "GetNames failed: %08lx\n", hr);
1239 ok(count == 0, "Unexpected count %u\n", count);
1240 hr = ITypeInfo_GetNames(typeinfo, memid, bstrs, ARRAY_SIZE(bstrs), &count);
1241 ok(hr == S_OK, "GetNames failed: %08lx\n", hr);
1242 ok(count == 3, "Unexpected count %u\n", count);
1243 ok(!lstrcmpW(bstrs[0], L"subtract"), "Unexpected function name %s\n", wine_dbgstr_w(bstrs[0]));
1244 ok(!lstrcmpW(bstrs[1], L"x"), "Unexpected function first param name %s\n", wine_dbgstr_w(bstrs[1]));
1245 ok(!lstrcmpW(bstrs[2], L"y"), "Unexpected function second param name %s\n", wine_dbgstr_w(bstrs[2]));
1246 for (i = 0; i < count; i++) SysFreeString(bstrs[i]);
1247
1248 hr = ITypeInfo_GetMops(typeinfo, memid, NULL);
1249 ok(hr == E_INVALIDARG, "GetMops returned: %08lx\n", hr);
1250 hr = ITypeInfo_GetMops(typeinfo, memid, &bstr);
1251 ok(hr == S_OK, "GetMops failed: %08lx\n", hr);
1252 ok(!bstr, "Unexpected non-null string %s\n", wine_dbgstr_w(bstr));
1253 hr = ITypeInfo_GetMops(typeinfo, MEMBERID_NIL, &bstr);
1254 ok(hr == S_OK, "GetMops failed: %08lx\n", hr);
1255 ok(!bstr, "Unexpected non-null string %s\n", wine_dbgstr_w(bstr));
1256
1257 /* These always fail */
1258 obj = (void*)0xdeadbeef;
1259 hr = ITypeInfo_AddressOfMember(typeinfo, memid, INVOKE_FUNC, NULL);
1260 ok(hr == E_INVALIDARG, "AddressOfMember returned: %08lx\n", hr);
1261 hr = ITypeInfo_AddressOfMember(typeinfo, memid, INVOKE_FUNC, &obj);
1262 ok(hr == TYPE_E_BADMODULEKIND, "AddressOfMember returned: %08lx\n", hr);
1263 ok(!obj, "Unexpected non-null obj %p.\n", obj);
1264 bstr = (BSTR)0xdeadbeef;
1265 hr = ITypeInfo_GetDllEntry(typeinfo, memid, INVOKE_FUNC, &bstr, NULL, NULL);
1266 ok(hr == TYPE_E_BADMODULEKIND, "GetDllEntry returned: %08lx\n", hr);
1267 ok(!bstr, "Unexpected non-null str %p.\n", bstr);
1268 wcscpy(str, L"Invoke");
1269 hr = ITypeInfo_GetIDsOfNames(typeinfo, &names, 1, &memid);
1270 ok(hr == S_OK, "GetIDsOfNames failed: %08lx\n", hr);
1271 obj = (void*)0xdeadbeef;
1272 hr = ITypeInfo_AddressOfMember(typeinfo, memid, INVOKE_FUNC, &obj);
1273 ok(hr == TYPE_E_BADMODULEKIND, "AddressOfMember returned: %08lx\n", hr);
1274 ok(!obj, "Unexpected non-null obj %p.\n", obj);
1275 bstr = (BSTR)0xdeadbeef;
1276 hr = ITypeInfo_GetDllEntry(typeinfo, memid, INVOKE_FUNC, &bstr, NULL, NULL);
1277 ok(hr == TYPE_E_BADMODULEKIND, "GetDllEntry returned: %08lx\n", hr);
1278 ok(!bstr, "Unexpected non-null str %p.\n", bstr);
1279
1280 /* Check variable descriptions */
1281 hr = ITypeInfo_GetVarDesc(typeinfo, 0, NULL);
1282 ok(hr == E_INVALIDARG, "GetVarDesc returned: %08lx\n", hr);
1283 hr = ITypeInfo_GetVarDesc(typeinfo, 1337, &vardesc);
1284 ok(hr == TYPE_E_ELEMENTNOTFOUND, "GetVarDesc returned: %08lx\n", hr);
1285 for (i = 0; i < ARRAY_SIZE(var); i++)
1286 {
1287 hr = ITypeInfo_GetVarDesc(typeinfo, i, &vardesc);
1288 ok(hr == S_OK, "GetVarDesc(%u) failed: %08lx\n", i, hr);
1289 hr = ITypeInfo_GetDocumentation(typeinfo, vardesc->memid, &bstr, &bstrs[0], NULL, NULL);
1290 ok(hr == S_OK, "[%u] GetDocumentation failed: %08lx\n", i, hr);
1291 ok(!lstrcmpW(bstr, var[i].name), "[%u] Unexpected variable name %s (expected %s)\n",
1293 ok(!bstrs[0], "[%u] Unexpected doc string %s\n", i, wine_dbgstr_w(bstrs[0]));
1294 SysFreeString(bstr);
1295 ok(vardesc->lpstrSchema == NULL, "[%u] Unexpected lpstrSchema %p\n", i, vardesc->lpstrSchema);
1296 ok(vardesc->oInst == 0, "[%u] Unexpected oInst %lu\n", i, vardesc->oInst);
1297 ok(vardesc->varkind == VAR_DISPATCH, "[%u] Unexpected varkind %d\n", i, vardesc->varkind);
1298 ok(vardesc->wVarFlags == 0, "[%u] Unexpected wVarFlags 0x%x\n", i, vardesc->wVarFlags);
1299 ok(vardesc->elemdescVar.tdesc.vt == VT_VARIANT,
1300 "[%u] Unexpected variable type vt %d (expected %d)\n", i, vardesc->elemdescVar.tdesc.vt, 0);
1301 ok(vardesc->elemdescVar.paramdesc.pparamdescex == NULL,
1302 "[%u] Unexpected variable type pparamdescex %p\n", i, vardesc->elemdescVar.paramdesc.pparamdescex);
1303 ok(vardesc->elemdescVar.paramdesc.wParamFlags == PARAMFLAG_NONE,
1304 "[%u] Unexpected variable type wParamFlags 0x%x\n", i, vardesc->elemdescVar.paramdesc.wParamFlags);
1305 ITypeInfo_ReleaseVarDesc(typeinfo, vardesc);
1306 }
1307
1308 /* Check function descriptions */
1309 hr = ITypeInfo_GetFuncDesc(typeinfo, 0, NULL);
1310 ok(hr == E_INVALIDARG, "GetFuncDesc returned: %08lx\n", hr);
1311 hr = ITypeInfo_GetFuncDesc(typeinfo, 1337, &funcdesc);
1312 ok(hr == TYPE_E_ELEMENTNOTFOUND, "GetFuncDesc returned: %08lx\n", hr);
1313 for (i = 0; i < ARRAY_SIZE(func); i++)
1314 {
1315 hr = ITypeInfo_GetFuncDesc(typeinfo, i, &funcdesc);
1316 ok(hr == S_OK, "GetFuncDesc(%u) failed: %08lx\n", i, hr);
1317 hr = ITypeInfo_GetDocumentation(typeinfo, funcdesc->memid, &bstr, &bstrs[0], NULL, NULL);
1318 ok(hr == S_OK, "[%u] GetDocumentation failed: %08lx\n", i, hr);
1319 ok(!lstrcmpW(bstr, func[i].name), "[%u] Unexpected function name %s (expected %s)\n",
1321 ok(!bstrs[0], "[%u] Unexpected doc string %s\n", i, wine_dbgstr_w(bstrs[0]));
1322 SysFreeString(bstr);
1323 ok(funcdesc->lprgscode == NULL, "[%u] Unexpected lprgscode %p\n", i, funcdesc->lprgscode);
1324 ok(func[i].num_args ? (funcdesc->lprgelemdescParam != NULL) : (funcdesc->lprgelemdescParam == NULL),
1325 "[%u] Unexpected lprgelemdescParam %p\n", i, funcdesc->lprgelemdescParam);
1326 ok(funcdesc->funckind == FUNC_DISPATCH, "[%u] Unexpected funckind %u\n", i, funcdesc->funckind);
1327 ok(funcdesc->invkind == INVOKE_FUNC, "[%u] Unexpected invkind %u\n", i, funcdesc->invkind);
1328 ok(funcdesc->callconv == CC_STDCALL, "[%u] Unexpected callconv %u\n", i, funcdesc->callconv);
1329 ok(funcdesc->cParams == func[i].num_args, "[%u] Unexpected cParams %d (expected %d)\n",
1330 i, funcdesc->cParams, func[i].num_args);
1331 ok(funcdesc->cParamsOpt == 0, "[%u] Unexpected cParamsOpt %d\n", i, funcdesc->cParamsOpt);
1332 ok(funcdesc->cScodes == 0, "[%u] Unexpected cScodes %d\n", i, funcdesc->cScodes);
1333 ok(funcdesc->wFuncFlags == 0, "[%u] Unexpected wFuncFlags 0x%x\n", i, funcdesc->wFuncFlags);
1334 ok(funcdesc->elemdescFunc.tdesc.vt == func[i].ret_type,
1335 "[%u] Unexpected return type vt %d (expected %d)\n", i, funcdesc->elemdescFunc.tdesc.vt, func[i].ret_type);
1336 ok(funcdesc->elemdescFunc.paramdesc.pparamdescex == NULL,
1337 "[%u] Unexpected return type pparamdescex %p\n", i, funcdesc->elemdescFunc.paramdesc.pparamdescex);
1338 ok(funcdesc->elemdescFunc.paramdesc.wParamFlags == PARAMFLAG_NONE,
1339 "[%u] Unexpected return type wParamFlags 0x%x\n", i, funcdesc->elemdescFunc.paramdesc.wParamFlags);
1340 if (funcdesc->lprgelemdescParam)
1341 for (index = 0; index < funcdesc->cParams; index++)
1342 {
1343 ok(funcdesc->lprgelemdescParam[index].tdesc.vt == VT_VARIANT,
1344 "[%u] Unexpected parameter %u vt %d\n", i, index, funcdesc->lprgelemdescParam[index].tdesc.vt);
1345 ok(funcdesc->lprgelemdescParam[index].paramdesc.pparamdescex == NULL,
1346 "[%u] Unexpected parameter %u pparamdescex %p\n", i, index, funcdesc->lprgelemdescParam[index].paramdesc.pparamdescex);
1347 ok(funcdesc->lprgelemdescParam[index].paramdesc.wParamFlags == PARAMFLAG_NONE,
1348 "[%u] Unexpected parameter %u wParamFlags 0x%x\n", i, index, funcdesc->lprgelemdescParam[index].paramdesc.wParamFlags);
1349 }
1350 ITypeInfo_ReleaseFuncDesc(typeinfo, funcdesc);
1351 }
1352
1353 /* Test TypeComp Binds */
1354 hr = ITypeInfo_QueryInterface(typeinfo, &IID_ITypeComp, (void**)&typecomp);
1355 ok(hr == S_OK, "QueryInterface(IID_ITypeComp) failed: %08lx\n", hr);
1356 hr = ITypeInfo_GetTypeComp(typeinfo, NULL);
1357 ok(hr == E_INVALIDARG, "GetTypeComp returned: %08lx\n", hr);
1358 hr = ITypeInfo_GetTypeComp(typeinfo, &typecomp2);
1359 ok(hr == S_OK, "GetTypeComp failed: %08lx\n", hr);
1360 ok(typecomp == typecomp2, "QueryInterface(IID_ITypeComp) and GetTypeComp returned different TypeComps\n");
1361 ITypeComp_Release(typecomp2);
1362 wcscpy(str, L"not_found");
1363 hr = ITypeComp_Bind(typecomp, NULL, 0, 0, &typeinfo2, &desckind, &bindptr);
1364 ok(hr == E_INVALIDARG, "Bind returned: %08lx\n", hr);
1365 hr = ITypeComp_Bind(typecomp, str, 0, 0, NULL, &desckind, &bindptr);
1366 ok(hr == E_INVALIDARG, "Bind returned: %08lx\n", hr);
1367 hr = ITypeComp_Bind(typecomp, str, 0, 0, &typeinfo2, NULL, &bindptr);
1368 ok(hr == E_INVALIDARG, "Bind returned: %08lx\n", hr);
1369 hr = ITypeComp_Bind(typecomp, str, 0, 0, &typeinfo2, &desckind, NULL);
1370 ok(hr == E_INVALIDARG, "Bind returned: %08lx\n", hr);
1371
1372 hr = ITypeComp_Bind(typecomp, str, 0, 0, &typeinfo2, &desckind, &bindptr);
1373 ok(hr == S_OK, "Bind failed: %08lx\n", hr);
1374 ok(desckind == DESCKIND_NONE, "Unexpected desckind %u\n", desckind);
1375 wcscpy(str, L"GLOBAL_VAR");
1376 hr = ITypeComp_Bind(typecomp, str, 0, INVOKE_FUNC, &typeinfo2, &desckind, &bindptr);
1377 ok(hr == TYPE_E_TYPEMISMATCH, "Bind returned: %08lx\n", hr);
1378 ok(!lstrcmpW(str, L"GLOBAL_VAR"), "Unexpected string %s\n", wine_dbgstr_w(str));
1379 wcscpy(str, L"C");
1380 hr = ITypeComp_Bind(typecomp, str, 0, 0, &typeinfo2, &desckind, &bindptr);
1381 ok(hr == S_OK, "Bind failed: %08lx\n", hr);
1382 ok(desckind == DESCKIND_NONE, "Unexpected desckind %u\n", desckind);
1383 wcscpy(str, L"addRef");
1384 hr = ITypeComp_Bind(typecomp, str, 0, 0, &typeinfo2, &desckind, &bindptr);
1385 ok(hr == S_OK, "Bind failed: %08lx\n", hr);
1386 ok(desckind == DESCKIND_FUNCDESC, "Unexpected desckind %u\n", desckind);
1387 ok(!lstrcmpW(str, L"addRef"), "Unexpected string %s\n", wine_dbgstr_w(str));
1388 ITypeInfo_ReleaseFuncDesc(typeinfo2, bindptr.lpfuncdesc);
1389 ITypeInfo_Release(typeinfo2);
1390 for (i = 0; i < ARRAY_SIZE(var); i++)
1391 {
1392 wcscpy(str, var[i].name);
1393 hr = ITypeComp_Bind(typecomp, str, 0, INVOKE_PROPERTYGET, &typeinfo2, &desckind, &bindptr);
1394 ok(hr == S_OK, "Bind failed: %08lx\n", hr);
1395 ok(desckind == DESCKIND_VARDESC, "Unexpected desckind %u\n", desckind);
1396 ITypeInfo_ReleaseVarDesc(typeinfo2, bindptr.lpvardesc);
1397 ITypeInfo_Release(typeinfo2);
1398 }
1399 for (i = 0; i < ARRAY_SIZE(func); i++)
1400 {
1401 wcscpy(str, func[i].name);
1402 hr = ITypeComp_Bind(typecomp, str, 0, INVOKE_FUNC, &typeinfo2, &desckind, &bindptr);
1403 ok(hr == S_OK, "Bind failed: %08lx\n", hr);
1404 ok(desckind == DESCKIND_FUNCDESC, "Unexpected desckind %u\n", desckind);
1405 ITypeInfo_ReleaseFuncDesc(typeinfo2, bindptr.lpfuncdesc);
1406 ITypeInfo_Release(typeinfo2);
1407 }
1408 wcscpy(str, L"VBScriptTypeInfo");
1409 hr = ITypeComp_BindType(typecomp, NULL, 0, &typeinfo2, &typecomp2);
1410 ok(hr == E_INVALIDARG, "BindType returned: %08lx\n", hr);
1411 hr = ITypeComp_BindType(typecomp, str, 0, NULL, &typecomp2);
1412 ok(hr == E_INVALIDARG, "BindType returned: %08lx\n", hr);
1413 hr = ITypeComp_BindType(typecomp, str, 0, &typeinfo2, NULL);
1414 ok(hr == E_INVALIDARG, "BindType returned: %08lx\n", hr);
1415 hr = ITypeComp_BindType(typecomp, str, 0, &typeinfo2, &typecomp2);
1416 ok(hr == S_OK, "BindType failed: %08lx\n", hr);
1417 ok(!typeinfo2, "Unexpected TypeInfo %p (expected null)\n", typeinfo2);
1418 ok(!typecomp2, "Unexpected TypeComp %p (expected null)\n", typecomp2);
1419 wcscpy(str, L"C");
1420 hr = ITypeComp_BindType(typecomp, str, 0, &typeinfo2, &typecomp2);
1421 ok(hr == S_OK, "BindType failed: %08lx\n", hr);
1422 ok(!typeinfo2, "Unexpected TypeInfo %p (expected null)\n", typeinfo2);
1423 ok(!typecomp2, "Unexpected TypeComp %p (expected null)\n", typecomp2);
1424 wcscpy(str, L"IDispatch");
1425 hr = ITypeComp_BindType(typecomp, str, 0, &typeinfo2, &typecomp2);
1426 ok(hr == S_OK, "BindType failed: %08lx\n", hr);
1427 ok(!typeinfo2, "Unexpected TypeInfo %p (expected null)\n", typeinfo2);
1428 ok(!typecomp2, "Unexpected TypeComp %p (expected null)\n", typecomp2);
1429
1430 ITypeComp_Release(typecomp);
1431
1432 /* Updating the script won't update the typeinfo obtained before,
1433 but it will be reflected in any typeinfo obtained afterwards. */
1435 L"dim new_var\nnew_var = 10\n"
1436 "sub new_sub\nend sub\n"
1437
1438 /* Replace the function foobar with more args */
1439 "function foobar(x, y, z)\nend function\n");
1440
1441 hr = IDispatchEx_GetTypeInfo(script_disp, 0, LOCALE_USER_DEFAULT, &typeinfo2);
1442 ok(hr == S_OK, "GetTypeInfo failed: %08lx\n", hr);
1443 hr = ITypeInfo_GetTypeAttr(typeinfo, &attr);
1444 ok(hr == S_OK, "GetTypeAttr failed: %08lx\n", hr);
1445 ok(attr->cFuncs == ARRAY_SIZE(func), "Unexpected cFuncs %u\n", attr->cFuncs);
1446 ok(attr->cVars == ARRAY_SIZE(var), "Unexpected cVars %u\n", attr->cVars);
1447 ITypeInfo_ReleaseTypeAttr(typeinfo, attr);
1448 hr = ITypeInfo_GetTypeAttr(typeinfo2, &attr);
1449 ok(hr == S_OK, "GetTypeAttr failed: %08lx\n", hr);
1450 ok(attr->cFuncs == ARRAY_SIZE(func) + 1, "Unexpected cFuncs %u\n", attr->cFuncs);
1451 ok(attr->cVars == ARRAY_SIZE(var) + 1, "Unexpected cVars %u\n", attr->cVars);
1452 ITypeInfo_ReleaseTypeAttr(typeinfo2, attr);
1453 hr = ITypeInfo_GetVarDesc(typeinfo2, ARRAY_SIZE(var), &vardesc);
1454 ok(hr == S_OK, "GetVarDesc failed: %08lx\n", hr);
1455 hr = ITypeInfo_GetDocumentation(typeinfo2, vardesc->memid, &bstr, &bstrs[0], NULL, NULL);
1456 ok(hr == S_OK, "GetDocumentation failed: %08lx\n", hr);
1457 ok(!lstrcmpW(bstr, L"new_var"), "Unexpected variable name %s\n", wine_dbgstr_w(bstr));
1458 ok(!bstrs[0], "Unexpected doc string %s\n", wine_dbgstr_w(bstrs[0]));
1459 ITypeInfo_ReleaseVarDesc(typeinfo2, vardesc);
1460 SysFreeString(bstr);
1461 hr = ITypeInfo_GetFuncDesc(typeinfo, 0, &funcdesc);
1462 ok(hr == S_OK, "GetFuncDesc failed: %08lx\n", hr);
1463 ok(funcdesc->cParams == 0, "Unexpected cParams %d\n", funcdesc->cParams);
1464 ITypeInfo_ReleaseFuncDesc(typeinfo, funcdesc);
1465 hr = ITypeInfo_GetFuncDesc(typeinfo2, 0, &funcdesc);
1466 ok(hr == S_OK, "GetFuncDesc failed: %08lx\n", hr);
1467 ok(funcdesc->cParams == 3, "Unexpected cParams %d\n", funcdesc->cParams);
1468 ITypeInfo_ReleaseFuncDesc(typeinfo2, funcdesc);
1469 ITypeInfo_Release(typeinfo2);
1470
1471 ITypeInfo_Release(typeinfo);
1472 IDispatchEx_Release(script_disp);
1474
1475 SET_EXPECT(OnStateChange_DISCONNECTED);
1476 SET_EXPECT(OnStateChange_INITIALIZED);
1477 SET_EXPECT(OnStateChange_CLOSED);
1478 hr = IActiveScript_Close(vbscript);
1479 ok(hr == S_OK, "Close failed: %08lx\n", hr);
1480 CHECK_CALLED(OnStateChange_DISCONNECTED);
1481 CHECK_CALLED(OnStateChange_INITIALIZED);
1482 CHECK_CALLED(OnStateChange_CLOSED);
1483
1484 IActiveScript_Release(vbscript);
1485}
1486
1487static void test_vbscript(void)
1488{
1489 IActiveScriptParseProcedure2 *parse_proc;
1490 IActiveScriptParse *parser;
1491 IActiveScript *vbscript;
1492 ULONG ref;
1493 HRESULT hres;
1494
1495 vbscript = create_vbscript();
1496
1497 hres = IActiveScript_QueryInterface(vbscript, &IID_IActiveScriptParse, (void**)&parser);
1498 ok(hres == S_OK, "Could not get IActiveScriptParse iface: %08lx\n", hres);
1499
1501 test_safety(vbscript);
1502 test_no_script_dispatch(vbscript);
1503
1504 SET_EXPECT(GetLCID);
1505 hres = IActiveScript_SetScriptSite(vbscript, &ActiveScriptSite);
1506 ok(hres == S_OK, "SetScriptSite failed: %08lx\n", hres);
1507 CHECK_CALLED(GetLCID);
1508
1510
1511 SET_EXPECT(OnStateChange_INITIALIZED);
1513 ok(hres == S_OK, "InitNew failed: %08lx\n", hres);
1514 CHECK_CALLED(OnStateChange_INITIALIZED);
1515
1517
1519 ok(hres == E_UNEXPECTED, "InitNew failed: %08lx, expected E_UNEXPECTED\n", hres);
1520
1521 SET_EXPECT(OnStateChange_CONNECTED);
1522 hres = IActiveScript_SetScriptState(vbscript, SCRIPTSTATE_CONNECTED);
1523 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08lx\n", hres);
1524 CHECK_CALLED(OnStateChange_CONNECTED);
1525
1527
1528 SET_EXPECT(OnStateChange_DISCONNECTED);
1529 SET_EXPECT(OnStateChange_INITIALIZED);
1530 SET_EXPECT(OnStateChange_CLOSED);
1531 hres = IActiveScript_Close(vbscript);
1532 ok(hres == S_OK, "Close failed: %08lx\n", hres);
1533 CHECK_CALLED(OnStateChange_DISCONNECTED);
1534 CHECK_CALLED(OnStateChange_INITIALIZED);
1535 CHECK_CALLED(OnStateChange_CLOSED);
1536
1537 test_state(vbscript, SCRIPTSTATE_CLOSED);
1538 test_no_script_dispatch(vbscript);
1539
1541
1542 hres = IActiveScript_QueryInterface(vbscript, &IID_IActiveScriptParseProcedure, (void**)&parse_proc);
1543 ok(hres == E_NOINTERFACE, "Got IActiveScriptParseProcedure interface, expected E_NOTIMPL\n");
1544
1545 hres = IActiveScript_QueryInterface(vbscript, &IID_IActiveScriptParseProcedure2, (void**)&parse_proc);
1546 ok(hres == S_OK, "Could not get IActiveScriptParseProcedure2 interface\n");
1548
1549 ref = IActiveScript_Release(vbscript);
1550 ok(!ref, "ref = %ld\n", ref);
1551}
1552
1554{
1555 IActiveScriptParse *parse;
1557 IDispatchEx *dispex;
1558 ULONG ref;
1559 HRESULT hres;
1560
1562
1563 hres = IActiveScript_QueryInterface(script, &IID_IActiveScriptParse, (void**)&parse);
1564 ok(hres == S_OK, "Could not get IActiveScriptParse: %08lx\n", hres);
1565
1567
1569 ok(hres == S_OK, "InitNew failed: %08lx\n", hres);
1570
1572
1573 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_STARTED);
1574 ok(hres == E_UNEXPECTED, "SetScriptState(SCRIPTSTATE_STARTED) failed: %08lx\n", hres);
1575 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_INITIALIZED);
1576 ok(hres == E_UNEXPECTED, "SetScriptState(SCRIPTSTATE_INITIALIZED) failed: %08lx\n", hres);
1577
1578 SET_EXPECT(GetLCID);
1579 SET_EXPECT(OnStateChange_INITIALIZED);
1580 hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
1581 ok(hres == S_OK, "SetScriptSite failed: %08lx\n", hres);
1582 CHECK_CALLED(GetLCID);
1583 CHECK_CALLED(OnStateChange_INITIALIZED);
1584
1586
1587 hres = IActiveScriptParse_ParseScriptText(parse, L"Function f\nEnd Function\n", NULL, NULL, NULL, 0, 1, 0x42, NULL, NULL);
1588 ok(hres == S_OK, "ParseScriptText failed: %08lx\n", hres);
1589
1590 hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
1591 ok(hres == E_UNEXPECTED, "SetScriptSite failed: %08lx, expected E_UNEXPECTED\n", hres);
1592
1593 SET_EXPECT(OnStateChange_UNINITIALIZED);
1594 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_UNINITIALIZED);
1595 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08lx\n", hres);
1596 CHECK_CALLED(OnStateChange_UNINITIALIZED);
1597
1599
1600 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_UNINITIALIZED);
1601 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08lx\n", hres);
1602
1603 SET_EXPECT(GetLCID);
1604 SET_EXPECT(OnStateChange_INITIALIZED);
1605 hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
1606 ok(hres == S_OK, "SetScriptSite failed: %08lx\n", hres);
1607 CHECK_CALLED(GetLCID);
1608 CHECK_CALLED(OnStateChange_INITIALIZED);
1609
1610 SET_EXPECT(OnStateChange_CONNECTED);
1611 SET_EXPECT(OnEnterScript);
1612 SET_EXPECT(OnLeaveScript);
1613 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_CONNECTED);
1614 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08lx\n", hres);
1615 CHECK_CALLED(OnStateChange_CONNECTED);
1616 CHECK_CALLED(OnEnterScript);
1617 CHECK_CALLED(OnLeaveScript);
1618
1620
1621 dispex = get_script_dispatch(script, NULL);
1622 ok(dispex != NULL, "dispex == NULL\n");
1623 if(dispex)
1624 IDispatchEx_Release(dispex);
1625
1626 SET_EXPECT(OnStateChange_DISCONNECTED);
1627 SET_EXPECT(OnStateChange_INITIALIZED);
1628 SET_EXPECT(OnStateChange_UNINITIALIZED);
1629 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_UNINITIALIZED);
1630 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08lx\n", hres);
1631 CHECK_CALLED(OnStateChange_DISCONNECTED);
1632 CHECK_CALLED(OnStateChange_INITIALIZED);
1633 CHECK_CALLED(OnStateChange_UNINITIALIZED);
1634
1636
1637 hres = IActiveScript_Close(script);
1638 ok(hres == S_OK, "Close failed: %08lx\n", hres);
1639
1641
1642 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_UNINITIALIZED);
1643 ok(hres == E_UNEXPECTED, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08lx, expected E_UNEXPECTED\n", hres);
1644
1646
1647 SET_EXPECT(GetLCID);
1648 SET_EXPECT(OnStateChange_INITIALIZED);
1649 hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
1650 ok(hres == S_OK, "SetScriptSite failed: %08lx\n", hres);
1651 CHECK_CALLED(GetLCID);
1652 CHECK_CALLED(OnStateChange_INITIALIZED);
1653
1655
1656 SET_EXPECT(OnStateChange_STARTED);
1657 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_STARTED);
1658 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08lx\n", hres);
1659 CHECK_CALLED(OnStateChange_STARTED);
1660
1661 SET_EXPECT(OnStateChange_INITIALIZED);
1662 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_INITIALIZED);
1663 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08lx\n", hres);
1664 CHECK_CALLED(OnStateChange_INITIALIZED);
1665
1666 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_INITIALIZED);
1667 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08lx\n", hres);
1668
1669 SET_EXPECT(OnStateChange_CLOSED);
1670 hres = IActiveScript_Close(script);
1671 ok(hres == S_OK, "Close failed: %08lx\n", hres);
1672 CHECK_CALLED(OnStateChange_CLOSED);
1673
1675
1676 SET_EXPECT(GetLCID);
1677 SET_EXPECT(OnStateChange_INITIALIZED);
1678 hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
1679 ok(hres == S_OK, "SetScriptSite failed: %08lx\n", hres);
1680 CHECK_CALLED(GetLCID);
1681 CHECK_CALLED(OnStateChange_INITIALIZED);
1682
1684
1685 SET_EXPECT(OnStateChange_CLOSED);
1686 hres = IActiveScript_Close(script);
1687 ok(hres == S_OK, "Close failed: %08lx\n", hres);
1688 CHECK_CALLED(OnStateChange_CLOSED);
1689
1691
1693 ok(hres == E_UNEXPECTED, "InitNew failed: %08lx\n", hres);
1694
1695 /* initialize again and use SetScriptState(SCRIPTSTATE_CLOSED) to uninitialize it */
1696
1697 SET_EXPECT(GetLCID);
1698 SET_EXPECT(OnStateChange_INITIALIZED);
1699 hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
1700 ok(hres == S_OK, "SetScriptSite failed: %08lx\n", hres);
1701 CHECK_CALLED(GetLCID);
1702 CHECK_CALLED(OnStateChange_INITIALIZED);
1703
1704 SET_EXPECT(OnStateChange_CONNECTED);
1705 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_CONNECTED);
1706 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08lx\n", hres);
1707 CHECK_CALLED(OnStateChange_CONNECTED);
1708
1709 SET_EXPECT(OnStateChange_DISCONNECTED);
1710 SET_EXPECT(OnStateChange_INITIALIZED);
1711 SET_EXPECT(OnStateChange_CLOSED);
1712 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_CLOSED);
1713 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_CLOSED) failed: %08lx\n", hres);
1714 CHECK_CALLED(OnStateChange_DISCONNECTED);
1715 CHECK_CALLED(OnStateChange_INITIALIZED);
1716 CHECK_CALLED(OnStateChange_CLOSED);
1717
1719
1720 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_CLOSED);
1721 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_CLOSED) failed: %08lx\n", hres);
1722
1723 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_INITIALIZED);
1724 ok(hres == E_UNEXPECTED, "SetScriptState(SCRIPTSTATE_INITIALIZED) failed: %08lx\n", hres);
1725
1726 hres = IActiveScript_Close(script);
1727 ok(hres == S_OK, "Close failed: %08lx\n", hres);
1728
1729 SET_EXPECT(GetLCID);
1730 SET_EXPECT(OnStateChange_INITIALIZED);
1731 hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
1732 ok(hres == S_OK, "SetScriptSite failed: %08lx\n", hres);
1733 CHECK_CALLED(GetLCID);
1734 CHECK_CALLED(OnStateChange_INITIALIZED);
1735
1736 SET_EXPECT(OnStateChange_CONNECTED);
1737 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_CONNECTED);
1738 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08lx\n", hres);
1739 CHECK_CALLED(OnStateChange_CONNECTED);
1740
1741 SET_EXPECT(OnStateChange_DISCONNECTED);
1742 SET_EXPECT(OnStateChange_INITIALIZED);
1743 SET_EXPECT(OnStateChange_CLOSED);
1744 hres = IActiveScript_Close(script);
1745 ok(hres == S_OK, "Close failed: %08lx\n", hres);
1746 CHECK_CALLED(OnStateChange_DISCONNECTED);
1747 CHECK_CALLED(OnStateChange_INITIALIZED);
1748 CHECK_CALLED(OnStateChange_CLOSED);
1749
1751
1752 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_CLOSED);
1753 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_CLOSED) failed: %08lx\n", hres);
1754
1755 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_INITIALIZED);
1756 ok(hres == E_UNEXPECTED, "SetScriptState(SCRIPTSTATE_INITIALIZED) failed: %08lx\n", hres);
1757
1759
1760 ref = IActiveScript_Release(script);
1761 ok(!ref, "ref = %ld\n", ref);
1762
1764
1765 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_CLOSED);
1766 ok(hres == E_UNEXPECTED, "SetScriptState(SCRIPTSTATE_CLOSED) failed: %08lx\n", hres);
1767
1768 ref = IActiveScript_Release(script);
1769 ok(!ref, "ref = %ld\n", ref);
1770}
1771
1772static void test_vbscript_release(void)
1773{
1774 IActiveScriptParse *parser;
1775 IActiveScript *vbscript;
1776 ULONG ref;
1777 HRESULT hres;
1778
1779 vbscript = create_vbscript();
1780
1781 hres = IActiveScript_QueryInterface(vbscript, &IID_IActiveScriptParse, (void**)&parser);
1782 ok(hres == S_OK, "Could not get IActiveScriptParse iface: %08lx\n", hres);
1783
1785 test_safety(vbscript);
1786
1787 SET_EXPECT(GetLCID);
1788 hres = IActiveScript_SetScriptSite(vbscript, &ActiveScriptSite);
1789 ok(hres == S_OK, "SetScriptSite failed: %08lx\n", hres);
1790 CHECK_CALLED(GetLCID);
1791
1793
1794 SET_EXPECT(OnStateChange_INITIALIZED);
1796 ok(hres == S_OK, "InitNew failed: %08lx\n", hres);
1797 CHECK_CALLED(OnStateChange_INITIALIZED);
1798
1800
1801 SET_EXPECT(OnStateChange_CONNECTED);
1802 hres = IActiveScript_SetScriptState(vbscript, SCRIPTSTATE_CONNECTED);
1803 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08lx\n", hres);
1804 CHECK_CALLED(OnStateChange_CONNECTED);
1805
1807
1809
1810 SET_EXPECT(OnStateChange_DISCONNECTED);
1811 SET_EXPECT(OnStateChange_INITIALIZED);
1812 SET_EXPECT(OnStateChange_CLOSED);
1813 ref = IActiveScript_Release(vbscript);
1814 ok(!ref, "ref = %ld\n", ref);
1815 CHECK_CALLED(OnStateChange_DISCONNECTED);
1816 CHECK_CALLED(OnStateChange_INITIALIZED);
1817 CHECK_CALLED(OnStateChange_CLOSED);
1818}
1819
1821{
1823 ULONG ref;
1824 HRESULT hres;
1825
1827
1828 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_UNINITIALIZED);
1829 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08lx\n", hres);
1830
1831 ref = IActiveScript_Release(script);
1832 ok(!ref, "ref = %ld\n", ref);
1833}
1834
1836{
1837 IActiveScriptParse *parse;
1839 ULONG ref;
1840 HRESULT hres;
1841
1843
1844 hres = IActiveScript_QueryInterface(script, &IID_IActiveScriptParse, (void**)&parse);
1845 ok(hres == S_OK, "Could not get IActiveScriptParse: %08lx\n", hres);
1846
1848
1849 SET_EXPECT(GetLCID);
1850 hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
1851 ok(hres == S_OK, "SetScriptSite failed: %08lx\n", hres);
1852 CHECK_CALLED(GetLCID);
1853
1854 SET_EXPECT(OnStateChange_INITIALIZED);
1856 ok(hres == S_OK, "InitNew failed: %08lx\n", hres);
1857 CHECK_CALLED(OnStateChange_INITIALIZED);
1858
1859 hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
1860 ok(hres == E_UNEXPECTED, "SetScriptSite failed: %08lx, expected E_UNEXPECTED\n", hres);
1861
1862 SET_EXPECT(OnStateChange_CLOSED);
1863 hres = IActiveScript_Close(script);
1864 ok(hres == S_OK, "Close failed: %08lx\n", hres);
1865 CHECK_CALLED(OnStateChange_CLOSED);
1866
1868
1870
1871 ref = IActiveScript_Release(script);
1872 ok(!ref, "ref = %ld\n", ref);
1873}
1874
1875static void test_named_items(void)
1876{
1877 static const WCHAR *global_idents[] =
1878 {
1879 L"global_me",
1880 L"globalCode_me",
1881 L"testSub_global",
1882 L"testExplicitVar_global",
1883 L"testVar_global"
1884 };
1885 static const WCHAR *global_code_test[] =
1886 {
1887 L"testSub_global\n",
1888 L"if testExplicitVar_global <> 10 then err.raise 500\n",
1889 L"if testVar_global <> 5 then err.raise 500\n",
1890 L"set x = new testClass_global\n"
1891 };
1892 static const WCHAR *context_idents[] =
1893 {
1894 L"testSub",
1895 L"testExplicitVar",
1896 L"testVar"
1897 };
1898 static const WCHAR *context_code_test[] =
1899 {
1900 L"testSub\n",
1901 L"if testExplicitVar <> 42 then err.raise 500\n",
1902 L"if testVar <> 99 then err.raise 500\n",
1903 L"set x = new testClass\n"
1904 };
1905 IDispatchEx *script_disp, *script_disp2;
1906 IActiveScriptParse *parse;
1908 IDispatch *disp;
1909 VARIANT var;
1910 unsigned i;
1911 DISPID id;
1912 ULONG ref;
1913 BSTR bstr;
1914 HRESULT hres;
1915
1917
1918 hres = IActiveScript_QueryInterface(script, &IID_IActiveScriptParse, (void**)&parse);
1919 ok(hres == S_OK, "Could not get IActiveScriptParse: %08lx\n", hres);
1920
1922
1923 hres = IActiveScript_AddNamedItem(script, L"visibleItem", SCRIPTITEM_ISVISIBLE);
1924 ok(hres == E_UNEXPECTED, "AddNamedItem returned: %08lx\n", hres);
1925 hres = IActiveScript_AddNamedItem(script, L"globalItem", SCRIPTITEM_GLOBALMEMBERS);
1926 ok(hres == E_UNEXPECTED, "AddNamedItem returned: %08lx\n", hres);
1927 hres = IActiveScript_AddNamedItem(script, L"codeOnlyItem", SCRIPTITEM_CODEONLY);
1928 ok(hres == E_UNEXPECTED, "AddNamedItem returned: %08lx\n", hres);
1929 hres = IActiveScript_AddNamedItem(script, L"persistent", SCRIPTITEM_ISPERSISTENT | SCRIPTITEM_CODEONLY);
1930 ok(hres == E_UNEXPECTED, "AddNamedItem returned: %08lx\n", hres);
1931
1932 SET_EXPECT(GetLCID);
1933 hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
1934 ok(hres == S_OK, "SetScriptSite failed: %08lx\n", hres);
1935 CHECK_CALLED(GetLCID);
1936
1937 SET_EXPECT(GetItemInfo_global);
1938 hres = IActiveScript_AddNamedItem(script, L"globalItem", SCRIPTITEM_GLOBALMEMBERS);
1939 ok(hres == S_OK, "AddNamedItem failed: %08lx\n", hres);
1940 CHECK_CALLED(GetItemInfo_global);
1941
1942 hres = IActiveScript_AddNamedItem(script, L"visibleItem", SCRIPTITEM_ISVISIBLE);
1943 ok(hres == S_OK, "AddNamedItem failed: %08lx\n", hres);
1944 hres = IActiveScript_AddNamedItem(script, L"visibleCodeItem", SCRIPTITEM_ISVISIBLE | SCRIPTITEM_CODEONLY);
1945 ok(hres == S_OK, "AddNamedItem failed: %08lx\n", hres);
1946 hres = IActiveScript_AddNamedItem(script, L"codeOnlyItem", SCRIPTITEM_CODEONLY);
1947 ok(hres == S_OK, "AddNamedItem failed: %08lx\n", hres);
1948 hres = IActiveScript_AddNamedItem(script, L"persistent", SCRIPTITEM_ISPERSISTENT | SCRIPTITEM_CODEONLY);
1949 ok(hres == S_OK, "AddNamedItem failed: %08lx\n", hres);
1950
1951 ok(global_named_item_ref > 0, "global_named_item_ref = %lu\n", global_named_item_ref);
1952 ok(visible_named_item_ref == 0, "visible_named_item_ref = %lu\n", visible_named_item_ref);
1953 ok(visible_code_named_item_ref == 0, "visible_code_named_item_ref = %lu\n", visible_code_named_item_ref);
1954 ok(persistent_named_item_ref == 0, "persistent_named_item_ref = %lu\n", persistent_named_item_ref);
1955
1956 hres = IActiveScript_GetScriptDispatch(script, L"noContext", &disp);
1957 ok(hres == E_INVALIDARG, "GetScriptDispatch returned: %08lx\n", hres);
1958
1959 SET_EXPECT(GetItemInfo_global_code);
1960 hres = IActiveScript_AddNamedItem(script, L"globalCodeItem", SCRIPTITEM_GLOBALMEMBERS | SCRIPTITEM_CODEONLY);
1961 ok(hres == S_OK, "AddNamedItem failed: %08lx\n", hres);
1962 CHECK_CALLED(GetItemInfo_global_code);
1963
1965 script_disp2 = get_script_dispatch(script, L"globalItem");
1966 ok(script_disp == script_disp2, "get_script_dispatch returned different dispatch objects.\n");
1967 IDispatchEx_Release(script_disp2);
1968 script_disp2 = get_script_dispatch(script, L"globalCodeItem");
1969 ok(script_disp == script_disp2, "get_script_dispatch returned different dispatch objects.\n");
1970 IDispatchEx_Release(script_disp2);
1971 script_disp2 = get_script_dispatch(script, L"codeONLYitem");
1972 ok(script_disp != script_disp2, "get_script_dispatch returned same dispatch objects.\n");
1973
1974 SET_EXPECT(OnStateChange_INITIALIZED);
1976 ok(hres == S_OK, "InitNew failed: %08lx\n", hres);
1977 CHECK_CALLED(OnStateChange_INITIALIZED);
1978
1979 SET_EXPECT(OnStateChange_CONNECTED);
1980 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_CONNECTED);
1981 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08lx\n", hres);
1982 CHECK_CALLED(OnStateChange_CONNECTED);
1983
1984 SET_EXPECT(testCall);
1985 parse_script(parse, L"testCall\n");
1986 CHECK_CALLED(testCall);
1987
1988 SET_EXPECT(GetItemInfo_visible);
1989 SET_EXPECT(testCall);
1990 parse_script(parse, L"visibleItem.testCall\n");
1991 CHECK_CALLED(GetItemInfo_visible);
1992 CHECK_CALLED(testCall);
1993
1994 SET_EXPECT(OnEnterScript);
1995 SET_EXPECT(OnLeaveScript);
1996 SET_EXPECT(testCall);
1997 hres = IActiveScriptParse_ParseScriptText(parse, L"testCall\n", L"visibleCodeItem", NULL, NULL, 0, 0, 0, NULL, NULL);
1998 ok(hres == S_OK, "ParseScriptText failed: %08lx\n", hres);
1999 CHECK_CALLED(OnEnterScript);
2000 CHECK_CALLED(OnLeaveScript);
2001 CHECK_CALLED(testCall);
2002
2003 SET_EXPECT(OnEnterScript);
2004 SET_EXPECT(GetIDsOfNames);
2005 SET_EXPECT(OnScriptError);
2006 SET_EXPECT(OnLeaveScript);
2007 hres = IActiveScriptParse_ParseScriptText(parse, L"codeOnlyItem\n", L"codeOnlyItem", NULL, NULL, 0, 0, 0, NULL, NULL);
2008 ok(FAILED(hres), "ParseScriptText returned: %08lx\n", hres);
2009 CHECK_CALLED(OnEnterScript);
2010 CHECK_CALLED(GetIDsOfNames);
2011 CHECK_CALLED(OnScriptError);
2012 CHECK_CALLED(OnLeaveScript);
2013
2014 hres = IActiveScript_GetScriptDispatch(script, L"visibleCodeItem", &disp);
2015 ok(hres == S_OK, "GetScriptDispatch returned: %08lx\n", hres);
2016 SET_EXPECT(OnEnterScript);
2017 SET_EXPECT(OnLeaveScript);
2018 hres = IActiveScriptParse_ParseScriptText(parse, L"me", L"visibleCodeItem", NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
2019 ok(hres == S_OK, "ParseScriptText failed: %08lx\n", hres);
2020 ok(V_VT(&var) == VT_DISPATCH && V_DISPATCH(&var) == disp,
2021 "Unexpected 'me': V_VT = %d, V_DISPATCH = %p\n", V_VT(&var), V_DISPATCH(&var));
2022 VariantClear(&var);
2023 CHECK_CALLED(OnEnterScript);
2024 CHECK_CALLED(OnLeaveScript);
2025 IDispatch_Release(disp);
2026
2027 SET_EXPECT(GetItemInfo_visible_code);
2028 SET_EXPECT(testCall);
2029 parse_script(parse, L"visibleCodeItem.testCall\n");
2030 CHECK_CALLED(GetItemInfo_visible_code);
2031 CHECK_CALLED(testCall);
2032
2033 ok(global_named_item_ref > 0, "global_named_item_ref = %lu\n", global_named_item_ref);
2034 ok(visible_named_item_ref == 1, "visible_named_item_ref = %lu\n", visible_named_item_ref);
2035 ok(visible_code_named_item_ref == 1, "visible_code_named_item_ref = %lu\n", visible_code_named_item_ref);
2036 ok(persistent_named_item_ref == 0, "persistent_named_item_ref = %lu\n", persistent_named_item_ref);
2037
2038 SET_EXPECT(testCall);
2039 parse_script(parse, L"visibleItem.testCall\n");
2040 CHECK_CALLED(testCall);
2041
2042 hres = IActiveScriptParse_ParseScriptText(parse, L"sub testSub\nend sub\n", L"noContext", NULL, NULL, 0, 0, 0, NULL, NULL);
2043 ok(hres == E_INVALIDARG, "ParseScriptText returned: %08lx\n", hres);
2044 SET_EXPECT(OnEnterScript);
2045 SET_EXPECT(GetIDsOfNames);
2046 SET_EXPECT(OnLeaveScript);
2048 "dim global_me\nglobal_me = 0\n"
2049 "dim globalCode_me\nglobalCode_me = 0\n"
2050 "sub testSub_global\nend sub\n"
2051 "dim testExplicitVar_global\ntestExplicitVar_global = 10\n"
2052 "testVar_global = 10\n"
2053 "class testClass_global\nend class\n",
2054 NULL, NULL, NULL, 0, 0, SCRIPTTEXT_ISPERSISTENT, NULL, NULL);
2055 ok(hres == S_OK, "ParseScriptText failed: %08lx\n", hres);
2056 CHECK_CALLED(OnEnterScript);
2057 CHECK_CALLED(GetIDsOfNames);
2058 CHECK_CALLED(OnLeaveScript);
2059 SET_EXPECT(OnEnterScript);
2060 SET_EXPECT(OnLeaveScript);
2062 "sub testSub\nend sub\n"
2063 "dim testExplicitVar\ntestExplicitVar = 42\n"
2064 "class testClass\nend class\n",
2065 L"codeOnlyItem", NULL, NULL, 0, 0, 0, NULL, NULL);
2066 ok(hres == S_OK, "ParseScriptText failed: %08lx\n", hres);
2067 CHECK_CALLED(OnEnterScript);
2068 CHECK_CALLED(OnLeaveScript);
2069 SET_EXPECT(OnEnterScript);
2070 SET_EXPECT(GetIDsOfNames);
2071 SET_EXPECT(OnLeaveScript);
2073 "testVar = 99\n"
2074 "testVar_global = 5\n",
2075 L"CodeOnlyITEM", NULL, NULL, 0, 0, SCRIPTTEXT_ISPERSISTENT, NULL, NULL);
2076 ok(hres == S_OK, "ParseScriptText failed: %08lx\n", hres);
2077 CHECK_CALLED(OnEnterScript);
2078 CHECK_CALLED(GetIDsOfNames);
2079 CHECK_CALLED(OnLeaveScript);
2080
2081 SET_EXPECT(OnEnterScript);
2082 SET_EXPECT(GetItemInfo_visible);
2083 SET_EXPECT(GetIDsOfNames_visible);
2084 SET_EXPECT(OnLeaveScript);
2085 hres = IActiveScriptParse_ParseScriptText(parse, L"dim abc\n", L"visibleItem", NULL, NULL, 0, 0, 0, NULL, NULL);
2086 ok(hres == S_OK, "ParseScriptText failed: %08lx\n", hres);
2087 CHECK_CALLED(OnEnterScript);
2088 todo_wine CHECK_CALLED(GetItemInfo_visible);
2089 todo_wine CHECK_CALLED(GetIDsOfNames_visible);
2090 CHECK_CALLED(OnLeaveScript);
2091 SET_EXPECT(OnEnterScript);
2092 SET_EXPECT(OnLeaveScript);
2093 hres = IActiveScriptParse_ParseScriptText(parse, L"abc = 5\n", L"visibleItem", NULL, NULL, 0, 0, 0, NULL, NULL);
2094 ok(hres == S_OK, "ParseScriptText failed: %08lx\n", hres);
2095 CHECK_CALLED(OnEnterScript);
2096 CHECK_CALLED(OnLeaveScript);
2097 SET_EXPECT(OnEnterScript);
2098 SET_EXPECT(GetIDsOfNames_visible);
2099 SET_EXPECT(OnLeaveScript);
2100 hres = IActiveScriptParse_ParseScriptText(parse, L"testVar_global = 5\n", L"visibleItem", NULL, NULL, 0, 0, 0, NULL, NULL);
2101 ok(hres == S_OK, "ParseScriptText failed: %08lx\n", hres);
2102 CHECK_CALLED(OnEnterScript);
2103 CHECK_CALLED(GetIDsOfNames_visible);
2104 CHECK_CALLED(OnLeaveScript);
2105
2106 SET_EXPECT(OnEnterScript);
2107 SET_EXPECT(OnLeaveScript);
2108 hres = IActiveScriptParse_ParseScriptText(parse, L"dim abc\ntestVar_global = 5\n", L"visibleCodeItem", NULL, NULL, 0, 0, 0, NULL, NULL);
2109 ok(hres == S_OK, "ParseScriptText failed: %08lx\n", hres);
2110 CHECK_CALLED(OnEnterScript);
2111 CHECK_CALLED(OnLeaveScript);
2112
2113 SET_EXPECT(OnEnterScript);
2114 SET_EXPECT(OnLeaveScript);
2115 hres = IActiveScriptParse_ParseScriptText(parse, L"set global_me = me\n", L"globalItem", NULL, NULL, 0, 0, SCRIPTTEXT_ISPERSISTENT, NULL, NULL);
2116 ok(hres == S_OK, "ParseScriptText failed: %08lx\n", hres);
2117 CHECK_CALLED(OnEnterScript);
2118 CHECK_CALLED(OnLeaveScript);
2119 SET_EXPECT(OnEnterScript);
2120 SET_EXPECT(OnLeaveScript);
2121 hres = IActiveScriptParse_ParseScriptText(parse, L"set globalCode_me = me\n", L"globalCodeItem", NULL, NULL, 0, 0, SCRIPTTEXT_ISPERSISTENT, NULL, NULL);
2122 ok(hres == S_OK, "ParseScriptText failed: %08lx\n", hres);
2123 CHECK_CALLED(OnEnterScript);
2124 CHECK_CALLED(OnLeaveScript);
2125
2126 for (i = 0; i < ARRAY_SIZE(global_idents); i++)
2127 {
2128 bstr = SysAllocString(global_idents[i]);
2129 id = 0;
2130 hres = IDispatchEx_GetDispID(script_disp, bstr, 0, &id);
2131 ok(hres == S_OK, "GetDispID(%s) returned %08lx\n", wine_dbgstr_w(global_idents[i]), hres);
2132 ok(id != -1, "[%s] id = -1\n", wine_dbgstr_w(global_idents[i]));
2133 id = 0;
2134 hres = IDispatchEx_GetDispID(script_disp2, bstr, 0, &id);
2135 ok(hres == DISP_E_UNKNOWNNAME, "GetDispID(%s) returned %08lx\n", wine_dbgstr_w(global_idents[i]), hres);
2136 ok(id == -1, "[%s] id = %ld, expected -1\n", wine_dbgstr_w(global_idents[i]), id);
2137 SysFreeString(bstr);
2138 }
2139 for (i = 0; i < ARRAY_SIZE(context_idents); i++)
2140 {
2141 bstr = SysAllocString(context_idents[i]);
2142 id = 0;
2143 hres = IDispatchEx_GetDispID(script_disp, bstr, 0, &id);
2144 ok(hres == DISP_E_UNKNOWNNAME, "GetDispID(%s) returned %08lx\n", wine_dbgstr_w(context_idents[i]), hres);
2145 ok(id == -1, "[%s] id = %ld, expected -1\n", wine_dbgstr_w(context_idents[i]), id);
2146 id = 0;
2147 hres = IDispatchEx_GetDispID(script_disp2, bstr, 0, &id);
2148 ok(hres == S_OK, "GetDispID(%s) returned %08lx\n", wine_dbgstr_w(context_idents[i]), hres);
2149 ok(id != -1, "[%s] id = -1\n", wine_dbgstr_w(context_idents[i]));
2150 SysFreeString(bstr);
2151 }
2152
2153 for (i = 0; i < ARRAY_SIZE(global_code_test); i++)
2154 {
2155 SET_EXPECT(OnEnterScript);
2156 SET_EXPECT(OnLeaveScript);
2157 hres = IActiveScriptParse_ParseScriptText(parse, global_code_test[i], NULL, NULL, NULL, 0, 0, 0, NULL, NULL);
2158 ok(hres == S_OK, "ParseScriptText(%s) failed: %08lx\n", wine_dbgstr_w(global_code_test[i]), hres);
2159 CHECK_CALLED(OnEnterScript);
2160 CHECK_CALLED(OnLeaveScript);
2161 SET_EXPECT(OnEnterScript);
2162 SET_EXPECT(GetIDsOfNames);
2163 SET_EXPECT(OnLeaveScript);
2164 hres = IActiveScriptParse_ParseScriptText(parse, global_code_test[i], L"codeOnlyItem", NULL, NULL, 0, 0, 0, NULL, NULL);
2165 ok(hres == S_OK, "ParseScriptText(%s) failed: %08lx\n", wine_dbgstr_w(global_code_test[i]), hres);
2166 CHECK_CALLED(OnEnterScript);
2167 CHECK_CALLED(OnLeaveScript);
2168 }
2169 for (i = 0; i < ARRAY_SIZE(context_code_test); i++)
2170 {
2171 SET_EXPECT(OnEnterScript);
2172 SET_EXPECT(GetIDsOfNames);
2173 SET_EXPECT(OnScriptError);
2174 SET_EXPECT(OnLeaveScript);
2175 hres = IActiveScriptParse_ParseScriptText(parse, context_code_test[i], NULL, NULL, NULL, 0, 0, 0, NULL, NULL);
2176 ok(FAILED(hres), "ParseScriptText(%s) returned: %08lx\n", wine_dbgstr_w(context_code_test[i]), hres);
2177 CHECK_CALLED(OnEnterScript);
2178 CHECK_CALLED(OnScriptError);
2179 CHECK_CALLED(OnLeaveScript);
2180 SET_EXPECT(OnEnterScript);
2181 SET_EXPECT(GetIDsOfNames);
2182 SET_EXPECT(OnLeaveScript);
2183 hres = IActiveScriptParse_ParseScriptText(parse, context_code_test[i], L"codeOnlyItem", NULL, NULL, 0, 0, 0, NULL, NULL);
2184 ok(hres == S_OK, "ParseScriptText(%s) failed: %08lx\n", wine_dbgstr_w(context_code_test[i]), hres);
2185 CHECK_CALLED(OnEnterScript);
2186 CHECK_CALLED(OnLeaveScript);
2187 }
2188 SET_EXPECT(OnScriptError);
2189 SET_EXPECT(OnEnterScript);
2190 SET_EXPECT(OnLeaveScript);
2191 hres = IActiveScriptParse_ParseScriptText(parse, L"testSub_global = 10\n", L"codeOnlyItem", NULL, NULL, 0, 0, 0, NULL, NULL);
2192 ok(FAILED(hres), "ParseScriptText returned: %08lx\n", hres);
2193 CHECK_CALLED(OnScriptError);
2194 CHECK_CALLED(OnEnterScript);
2195 CHECK_CALLED(OnLeaveScript);
2196
2197 SET_EXPECT(OnEnterScript);
2198 SET_EXPECT(OnLeaveScript);
2199 hres = IActiveScriptParse_ParseScriptText(parse, L"me", NULL, NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
2200 ok(hres == S_OK, "ParseScriptText failed: %08lx\n", hres);
2202 "Unexpected 'me': V_VT = %d, V_DISPATCH = %p\n", V_VT(&var), V_DISPATCH(&var));
2203 VariantClear(&var);
2204 CHECK_CALLED(OnEnterScript);
2205 CHECK_CALLED(OnLeaveScript);
2206 SET_EXPECT(OnEnterScript);
2207 SET_EXPECT(OnLeaveScript);
2208 hres = IActiveScriptParse_ParseScriptText(parse, L"me", L"globalItem", NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
2209 ok(hres == S_OK, "ParseScriptText failed: %08lx\n", hres);
2211 "Unexpected 'me': V_VT = %d, V_DISPATCH = %p\n", V_VT(&var), V_DISPATCH(&var));
2212 VariantClear(&var);
2213 CHECK_CALLED(OnEnterScript);
2214 CHECK_CALLED(OnLeaveScript);
2215 SET_EXPECT(OnEnterScript);
2216 SET_EXPECT(OnLeaveScript);
2217 hres = IActiveScriptParse_ParseScriptText(parse, L"me", L"codeOnlyItem", NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
2218 ok(hres == S_OK, "ParseScriptText failed: %08lx\n", hres);
2219 ok(V_VT(&var) == VT_DISPATCH && V_DISPATCH(&var) == (IDispatch*)script_disp2,
2220 "Unexpected 'me': V_VT = %d, V_DISPATCH = %p\n", V_VT(&var), V_DISPATCH(&var));
2221 VariantClear(&var);
2222 CHECK_CALLED(OnEnterScript);
2223 CHECK_CALLED(OnLeaveScript);
2224 SET_EXPECT(OnEnterScript);
2225 SET_EXPECT(OnLeaveScript);
2226 hres = IActiveScriptParse_ParseScriptText(parse, L"globalCode_me", NULL, NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
2227 ok(hres == S_OK, "ParseScriptText failed: %08lx\n", hres);
2229 "Unexpected 'me': V_VT = %d, V_DISPATCH = %p\n", V_VT(&var), V_DISPATCH(&var));
2230 VariantClear(&var);
2231 CHECK_CALLED(OnEnterScript);
2232 CHECK_CALLED(OnLeaveScript);
2233
2234 IDispatchEx_Release(script_disp2);
2235 IDispatchEx_Release(script_disp);
2236
2237 script_disp = get_script_dispatch(script, L"persistent");
2238 SET_EXPECT(OnEnterScript);
2239 SET_EXPECT(OnLeaveScript);
2240 hres = IActiveScriptParse_ParseScriptText(parse, L"me", L"persistent", NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
2241 ok(hres == S_OK, "ParseScriptText failed: %08lx\n", hres);
2243 "Unexpected 'me': V_VT = %d, V_DISPATCH = %p\n", V_VT(&var), V_DISPATCH(&var));
2244 VariantClear(&var);
2245 CHECK_CALLED(OnEnterScript);
2246 CHECK_CALLED(OnLeaveScript);
2247 IDispatchEx_Release(script_disp);
2248
2249 SET_EXPECT(OnEnterScript);
2250 SET_EXPECT(OnLeaveScript);
2251 hres = IActiveScriptParse_ParseScriptText(parse, L"x = 13\n", L"persistent", NULL, NULL, 0, 0, SCRIPTTEXT_ISPERSISTENT, NULL, NULL);
2252 ok(hres == S_OK, "ParseScriptText failed: %08lx\n", hres);
2253 CHECK_CALLED(OnEnterScript);
2254 CHECK_CALLED(OnLeaveScript);
2255 SET_EXPECT(OnEnterScript);
2256 SET_EXPECT(OnLeaveScript);
2257 hres = IActiveScriptParse_ParseScriptText(parse, L"x = 10\n", L"persistent", NULL, NULL, 0, 0, 0, NULL, NULL);
2258 ok(hres == S_OK, "ParseScriptText failed: %08lx\n", hres);
2259 CHECK_CALLED(OnEnterScript);
2260 CHECK_CALLED(OnLeaveScript);
2261 SET_EXPECT(OnEnterScript);
2262 SET_EXPECT(OnLeaveScript);
2263 hres = IActiveScriptParse_ParseScriptText(parse, L"x", L"persistent", NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
2264 ok(hres == S_OK, "ParseScriptText failed: %08lx\n", hres);
2265 ok(V_VT(&var) == VT_I2 && V_I2(&var) == 10, "Unexpected 'x': V_VT = %d, V_I2 = %d\n", V_VT(&var), V_I2(&var));
2266 CHECK_CALLED(OnEnterScript);
2267 CHECK_CALLED(OnLeaveScript);
2268
2269 script_disp = get_script_dispatch(script, L"persistent");
2270
2271 SET_EXPECT(OnStateChange_DISCONNECTED);
2272 SET_EXPECT(OnStateChange_INITIALIZED);
2273 SET_EXPECT(OnStateChange_UNINITIALIZED);
2274 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_UNINITIALIZED);
2275 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08lx\n", hres);
2276 CHECK_CALLED(OnStateChange_DISCONNECTED);
2277 CHECK_CALLED(OnStateChange_INITIALIZED);
2278 CHECK_CALLED(OnStateChange_UNINITIALIZED);
2280
2281 ok(global_named_item_ref == 0, "global_named_item_ref = %lu\n", global_named_item_ref);
2282 ok(visible_named_item_ref == 0, "visible_named_item_ref = %lu\n", visible_named_item_ref);
2283 ok(visible_code_named_item_ref == 0, "visible_code_named_item_ref = %lu\n", visible_code_named_item_ref);
2284 ok(persistent_named_item_ref == 0, "persistent_named_item_ref = %lu\n", persistent_named_item_ref);
2285
2286 hres = IActiveScript_GetScriptDispatch(script, L"codeOnlyItem", &disp);
2287 ok(hres == E_UNEXPECTED, "hres = %08lx, expected E_UNEXPECTED\n", hres);
2288
2289 SET_EXPECT(GetLCID);
2290 SET_EXPECT(OnStateChange_INITIALIZED);
2291 SET_EXPECT(GetItemInfo_persistent);
2292 hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
2293 ok(hres == S_OK, "SetScriptSite failed: %08lx\n", hres);
2294 CHECK_CALLED(GetLCID);
2295 CHECK_CALLED(OnStateChange_INITIALIZED);
2296 CHECK_CALLED(GetItemInfo_persistent);
2297 ok(persistent_named_item_ref > 0, "persistent_named_item_ref = %lu\n", persistent_named_item_ref);
2298
2299 hres = IActiveScript_AddNamedItem(script, L"codeOnlyItem", SCRIPTITEM_CODEONLY);
2300 ok(hres == S_OK, "AddNamedItem failed: %08lx\n", hres);
2301
2302 SET_EXPECT(OnStateChange_CONNECTED);
2303 SET_EXPECT_MULTI(OnEnterScript, 5);
2304 SET_EXPECT_MULTI(OnLeaveScript, 5);
2305 SET_EXPECT(GetIDsOfNames_persistent);
2306 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_CONNECTED);
2307 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08lx\n", hres);
2308 CHECK_CALLED(OnStateChange_CONNECTED);
2309 CHECK_CALLED_MULTI(OnEnterScript, 5);
2310 CHECK_CALLED_MULTI(OnLeaveScript, 5);
2311 CHECK_CALLED(GetIDsOfNames_persistent);
2313
2314 script_disp2 = get_script_dispatch(script, L"persistent");
2315 ok(script_disp != script_disp2, "Same script dispatch returned for \"persistent\" named item\n");
2316 IDispatchEx_Release(script_disp2);
2317 IDispatchEx_Release(script_disp);
2318 SET_EXPECT(OnEnterScript);
2319 SET_EXPECT(OnLeaveScript);
2320 hres = IActiveScriptParse_ParseScriptText(parse, L"x", L"persistent", NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
2321 ok(hres == S_OK, "ParseScriptText failed: %08lx\n", hres);
2322 ok(V_VT(&var) == VT_I2 && V_I2(&var) == 13, "Unexpected 'x': V_VT = %d, V_I2 = %d\n", V_VT(&var), V_I2(&var));
2323 CHECK_CALLED(OnEnterScript);
2324 CHECK_CALLED(OnLeaveScript);
2325
2326 /* This object is set to named item when persistent items are re-initialized, even for CODEONLY items */
2327 SET_EXPECT(OnEnterScript);
2328 SET_EXPECT(OnLeaveScript);
2329 hres = IActiveScriptParse_ParseScriptText(parse, L"me", L"persistent", NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
2330 ok(hres == S_OK, "ParseScriptText failed: %08lx\n", hres);
2332 "Unexpected 'me': V_VT = %d, V_DISPATCH = %p\n", V_VT(&var), V_DISPATCH(&var));
2333 VariantClear(&var);
2334 CHECK_CALLED(OnEnterScript);
2335 CHECK_CALLED(OnLeaveScript);
2336
2337 /* Lookups also query named items */
2338 SET_EXPECT(OnEnterScript);
2339 SET_EXPECT(OnLeaveScript);
2340 SET_EXPECT(GetIDsOfNames_persistent);
2341 hres = IActiveScriptParse_ParseScriptText(parse, L"abc123 = 10\n", L"persistent", NULL, NULL, 0, 0, 0, NULL, NULL);
2342 ok(hres == S_OK, "ParseScriptText failed: %08lx\n", hres);
2343 CHECK_CALLED(OnEnterScript);
2344 CHECK_CALLED(OnLeaveScript);
2345 CHECK_CALLED(GetIDsOfNames_persistent);
2346
2347 SET_EXPECT(OnEnterScript);
2348 SET_EXPECT(OnLeaveScript);
2349 SET_EXPECT(GetIDsOfNames_persistent);
2350 SET_EXPECT(OnScriptError);
2351 hres = IActiveScriptParse_ParseScriptText(parse, L"testCall\n", L"persistent", NULL, NULL, 0, 0, 0, NULL, NULL);
2352 ok(FAILED(hres), "ParseScriptText returned: %08lx\n", hres);
2353 CHECK_CALLED(OnEnterScript);
2354 CHECK_CALLED(OnLeaveScript);
2355 CHECK_CALLED(GetIDsOfNames_persistent);
2356 CHECK_CALLED(OnScriptError);
2357
2359 for (i = 0; i < ARRAY_SIZE(global_idents); i++)
2360 {
2361 bstr = SysAllocString(global_idents[i]);
2362 id = 0;
2363 hres = IDispatchEx_GetDispID(script_disp, bstr, 0, &id);
2364 ok(hres == S_OK, "GetDispID(%s) returned %08lx\n", wine_dbgstr_w(global_idents[i]), hres);
2365 ok(id != -1, "[%s] id = -1\n", wine_dbgstr_w(global_idents[i]));
2366 SysFreeString(bstr);
2367 }
2368 for (i = 0; i < ARRAY_SIZE(context_idents); i++)
2369 {
2370 bstr = SysAllocString(context_idents[i]);
2371 id = 0;
2372 hres = IDispatchEx_GetDispID(script_disp, bstr, 0, &id);
2373 ok(hres == DISP_E_UNKNOWNNAME, "GetDispID(%s) returned %08lx\n", wine_dbgstr_w(context_idents[i]), hres);
2374 ok(id == -1, "[%s] id = %ld, expected -1\n", wine_dbgstr_w(context_idents[i]), id);
2375 SysFreeString(bstr);
2376 }
2377 SET_EXPECT(OnEnterScript);
2378 SET_EXPECT(OnLeaveScript);
2379 hres = IActiveScriptParse_ParseScriptText(parse, L"global_me", NULL, NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
2380 ok(hres == S_OK, "ParseScriptText failed: %08lx\n", hres);
2382 "Unexpected 'me': V_VT = %d, V_DISPATCH = %p\n", V_VT(&var), V_DISPATCH(&var));
2383 VariantClear(&var);
2384 CHECK_CALLED(OnEnterScript);
2385 CHECK_CALLED(OnLeaveScript);
2386 SET_EXPECT(OnEnterScript);
2387 SET_EXPECT(OnLeaveScript);
2388 hres = IActiveScriptParse_ParseScriptText(parse, L"globalCode_me", NULL, NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &var, NULL);
2389 ok(hres == S_OK, "ParseScriptText failed: %08lx\n", hres);
2391 "Unexpected 'me': V_VT = %d, V_DISPATCH = %p\n", V_VT(&var), V_DISPATCH(&var));
2392 VariantClear(&var);
2393 CHECK_CALLED(OnEnterScript);
2394 CHECK_CALLED(OnLeaveScript);
2395 SET_EXPECT(OnEnterScript);
2396 SET_EXPECT(OnLeaveScript);
2397 hres = IActiveScriptParse_ParseScriptText(parse, L"global_me = 0\nglobalCode_me = 0\n", NULL, NULL, NULL, 0, 0, 0, NULL, NULL);
2398 ok(hres == S_OK, "ParseScriptText failed: %08lx\n", hres);
2399 CHECK_CALLED(OnEnterScript);
2400 CHECK_CALLED(OnLeaveScript);
2401 IDispatchEx_Release(script_disp);
2402
2403 script_disp = get_script_dispatch(script, L"codeOnlyItem");
2404 for (i = 0; i < ARRAY_SIZE(global_idents); i++)
2405 {
2406 bstr = SysAllocString(global_idents[i]);
2407 id = 0;
2408 hres = IDispatchEx_GetDispID(script_disp, bstr, 0, &id);
2409 ok(hres == DISP_E_UNKNOWNNAME, "GetDispID(%s) returned %08lx\n", wine_dbgstr_w(global_idents[i]), hres);
2410 ok(id == -1, "[%s] id = %ld, expected -1\n", wine_dbgstr_w(global_idents[i]), id);
2411 SysFreeString(bstr);
2412 }
2413 for (i = 0; i < ARRAY_SIZE(context_idents); i++)
2414 {
2415 bstr = SysAllocString(context_idents[i]);
2416 id = 0;
2417 hres = IDispatchEx_GetDispID(script_disp, bstr, 0, &id);
2418 ok(hres == DISP_E_UNKNOWNNAME, "GetDispID(%s) returned %08lx\n", wine_dbgstr_w(context_idents[i]), hres);
2419 ok(id == -1, "[%s] id = %ld, expected -1\n", wine_dbgstr_w(context_idents[i]), id);
2420 SysFreeString(bstr);
2421 }
2422 IDispatchEx_Release(script_disp);
2423
2424 for (i = 0; i < ARRAY_SIZE(global_code_test); i++)
2425 {
2426 SET_EXPECT(OnEnterScript);
2427 SET_EXPECT(OnLeaveScript);
2428 hres = IActiveScriptParse_ParseScriptText(parse, global_code_test[i], NULL, NULL, NULL, 0, 0, 0, NULL, NULL);
2429 ok(hres == S_OK, "ParseScriptText(%s) failed: %08lx\n", wine_dbgstr_w(global_code_test[i]), hres);
2430 CHECK_CALLED(OnEnterScript);
2431 CHECK_CALLED(OnLeaveScript);
2432 SET_EXPECT(OnEnterScript);
2433 SET_EXPECT(OnLeaveScript);
2434 hres = IActiveScriptParse_ParseScriptText(parse, global_code_test[i], L"codeOnlyItem", NULL, NULL, 0, 0, 0, NULL, NULL);
2435 ok(hres == S_OK, "ParseScriptText(%s) failed: %08lx\n", wine_dbgstr_w(global_code_test[i]), hres);
2436 CHECK_CALLED(OnEnterScript);
2437 CHECK_CALLED(OnLeaveScript);
2438 }
2439 for (i = 0; i < ARRAY_SIZE(context_code_test); i++)
2440 {
2441 SET_EXPECT(OnScriptError);
2442 SET_EXPECT(OnEnterScript);
2443 SET_EXPECT(OnLeaveScript);
2444 hres = IActiveScriptParse_ParseScriptText(parse, context_code_test[i], NULL, NULL, NULL, 0, 0, 0, NULL, NULL);
2445 ok(FAILED(hres), "ParseScriptText(%s) returned: %08lx\n", wine_dbgstr_w(context_code_test[i]), hres);
2446 CHECK_CALLED(OnScriptError);
2447 CHECK_CALLED(OnEnterScript);
2448 CHECK_CALLED(OnLeaveScript);
2449 SET_EXPECT(OnScriptError);
2450 SET_EXPECT(OnEnterScript);
2451 SET_EXPECT(OnLeaveScript);
2452 hres = IActiveScriptParse_ParseScriptText(parse, context_code_test[i], L"codeOnlyItem", NULL, NULL, 0, 0, 0, NULL, NULL);
2453 ok(FAILED(hres), "ParseScriptText(%s) returned: %08lx\n", wine_dbgstr_w(context_code_test[i]), hres);
2454 CHECK_CALLED(OnScriptError);
2455 CHECK_CALLED(OnEnterScript);
2456 CHECK_CALLED(OnLeaveScript);
2457 }
2458
2459 SET_EXPECT(OnStateChange_DISCONNECTED);
2460 SET_EXPECT(OnStateChange_INITIALIZED);
2461 SET_EXPECT(OnStateChange_CLOSED);
2462 hres = IActiveScript_Close(script);
2463 ok(hres == S_OK, "Close failed: %08lx\n", hres);
2464 CHECK_CALLED(OnStateChange_DISCONNECTED);
2465 CHECK_CALLED(OnStateChange_INITIALIZED);
2466 CHECK_CALLED(OnStateChange_CLOSED);
2467
2468 ok(global_named_item_ref == 0, "global_named_item_ref = %lu\n", global_named_item_ref);
2469 ok(visible_named_item_ref == 0, "visible_named_item_ref = %lu\n", visible_named_item_ref);
2470 ok(visible_code_named_item_ref == 0, "visible_code_named_item_ref = %lu\n", visible_code_named_item_ref);
2471 ok(persistent_named_item_ref == 0, "persistent_named_item_ref = %lu\n", persistent_named_item_ref);
2472
2474
2476
2477 ref = IActiveScript_Release(script);
2478 ok(!ref, "ref = %ld\n", ref);
2479}
2480
2481static void test_RegExp(void)
2482{
2483 IRegExp2 *regexp;
2484 IMatchCollection2 *mc;
2485 IMatch2 *match;
2486 ISubMatches *sm;
2487 IEnumVARIANT *ev;
2488 IUnknown *unk;
2489 IDispatch *disp;
2490 HRESULT hres;
2491 BSTR bstr;
2492 LONG count;
2493 VARIANT v;
2494 ULONG fetched;
2495
2497 CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
2498 &IID_IUnknown, (void**)&unk);
2499 if(hres == REGDB_E_CLASSNOTREG) {
2500 win_skip("VBScriptRegExp is not registered\n");
2501 return;
2502 }
2503 ok(hres == S_OK, "CoCreateInstance(CLSID_VBScriptRegExp) failed: %lx\n", hres);
2504
2505 hres = IUnknown_QueryInterface(unk, &IID_IRegExp2, (void**)&regexp);
2506 if(hres == E_NOINTERFACE) {
2507 win_skip("IRegExp2 interface is not available\n");
2508 return;
2509 }
2510 ok(hres == S_OK, "QueryInterface(IID_IRegExp2) failed: %lx\n", hres);
2511 IUnknown_Release(unk);
2512
2513 hres = IRegExp2_QueryInterface(regexp, &IID_IRegExp, (void**)&unk);
2514 ok(hres == S_OK, "QueryInterface(IID_IRegExp) returned %lx\n", hres);
2515 IUnknown_Release(unk);
2516
2517 hres = IRegExp2_QueryInterface(regexp, &IID_IDispatchEx, (void**)&unk);
2518 ok(hres == E_NOINTERFACE, "QueryInterface(IID_IDispatchEx) returned %lx\n", hres);
2519
2520 hres = IRegExp2_get_Pattern(regexp, &bstr);
2521 ok(bstr == NULL, "bstr != NULL\n");
2522 ok(hres == S_OK, "get_Pattern returned %lx, expected S_OK\n", hres);
2523
2524 hres = IRegExp2_get_Pattern(regexp, NULL);
2525 ok(hres == E_POINTER, "get_Pattern returned %lx, expected E_POINTER\n", hres);
2526
2527 hres = IRegExp2_get_IgnoreCase(regexp, NULL);
2528 ok(hres == E_POINTER, "get_IgnoreCase returned %lx, expected E_POINTER\n", hres);
2529
2530 hres = IRegExp2_get_Global(regexp, NULL);
2531 ok(hres == E_POINTER, "get_Global returned %lx, expected E_POINTER\n", hres);
2532
2533 hres = IRegExp2_Execute(regexp, NULL, &disp);
2534 ok(hres == S_OK, "Execute returned %lx, expected S_OK\n", hres);
2535 hres = IDispatch_QueryInterface(disp, &IID_IMatchCollection2, (void**)&mc);
2536 ok(hres == S_OK, "QueryInterface(IID_IMatchCollection2) returned %lx\n", hres);
2537 IDispatch_Release(disp);
2538
2539 hres = IMatchCollection2_QueryInterface(mc, &IID_IMatchCollection, (void**)&unk);
2540 ok(hres == S_OK, "QueryInterface(IID_IMatchCollection) returned %lx\n", hres);
2541 IUnknown_Release(unk);
2542
2543 hres = IMatchCollection2_get_Count(mc, NULL);
2544 ok(hres == E_POINTER, "get_Count returned %lx, expected E_POINTER\n", hres);
2545
2546 hres = IMatchCollection2_get_Count(mc, &count);
2547 ok(hres == S_OK, "get_Count returned %lx, expected S_OK\n", hres);
2548 ok(count == 1, "count = %ld\n", count);
2549
2550 hres = IMatchCollection2_get_Item(mc, 1, &disp);
2551 ok(hres == E_INVALIDARG, "get_Item returned %lx, expected E_INVALIDARG\n", hres);
2552
2553 hres = IMatchCollection2_get_Item(mc, 1, NULL);
2554 ok(hres == E_POINTER, "get_Item returned %lx, expected E_POINTER\n", hres);
2555
2556 hres = IMatchCollection2_get_Item(mc, 0, &disp);
2557 ok(hres == S_OK, "get_Item returned %lx, expected S_OK\n", hres);
2558 hres = IDispatch_QueryInterface(disp, &IID_IMatch2, (void**)&match);
2559 ok(hres == S_OK, "QueryInterface(IID_IMatch2) returned %lx\n", hres);
2560 IDispatch_Release(disp);
2561
2562 hres = IMatch2_QueryInterface(match, &IID_IMatch, (void**)&unk);
2563 ok(hres == S_OK, "QueryInterface(IID_IMatch) returned %lx\n", hres);
2564 IUnknown_Release(unk);
2565
2566 hres = IMatch2_get_Value(match, NULL);
2567 ok(hres == E_POINTER, "get_Value returned %lx, expected E_POINTER\n", hres);
2568
2569 hres = IMatch2_get_FirstIndex(match, NULL);
2570 ok(hres == E_POINTER, "get_FirstIndex returned %lx, expected E_POINTER\n", hres);
2571
2572 hres = IMatch2_get_Length(match, NULL);
2573 ok(hres == E_POINTER, "get_Length returned %lx, expected E_POINTER\n", hres);
2574
2575 hres = IMatch2_get_SubMatches(match, NULL);
2576 ok(hres == E_POINTER, "get_SubMatches returned %lx, expected E_POINTER\n", hres);
2577
2578 hres = IMatch2_get_SubMatches(match, &disp);
2579 ok(hres == S_OK, "get_SubMatches returned %lx, expected S_OK\n", hres);
2580 IMatch2_Release(match);
2581 hres = IDispatch_QueryInterface(disp, &IID_ISubMatches, (void**)&sm);
2582 ok(hres == S_OK, "QueryInterface(IID_ISubMatches) returned %lx\n", hres);
2583 IDispatch_Release(disp);
2584
2585 hres = ISubMatches_get_Item(sm, 0, &v);
2586 ok(hres == E_INVALIDARG, "get_Item returned %lx, expected E_INVALIDARG\n", hres);
2587
2588 hres = ISubMatches_get_Item(sm, 0, NULL);
2589 ok(hres == E_POINTER, "get_Item returned %lx, expected E_POINTER\n", hres);
2590
2591 hres = ISubMatches_get_Count(sm, NULL);
2592 ok(hres == E_POINTER, "get_Count returned %lx, expected E_POINTER\n", hres);
2593 ISubMatches_Release(sm);
2594
2595 hres = IMatchCollection2_get__NewEnum(mc, &unk);
2596 ok(hres == S_OK, "get__NewEnum returned %lx, expected S_OK\n", hres);
2597 hres = IUnknown_QueryInterface(unk, &IID_IEnumVARIANT, (void**)&ev);
2598 ok(hres == S_OK, "QueryInterface(IID_IEnumVARIANT) returned %lx\n", hres);
2599 IUnknown_Release(unk);
2600 IMatchCollection2_Release(mc);
2601
2602 hres = IEnumVARIANT_Skip(ev, 2);
2603 ok(hres == S_OK, "Skip returned %lx\n", hres);
2604
2605 hres = IEnumVARIANT_Next(ev, 1, &v, &fetched);
2606 ok(hres == S_FALSE, "Next returned %lx, expected S_FALSE\n", hres);
2607 ok(fetched == 0, "fetched = %ld\n", fetched);
2608
2609 hres = IEnumVARIANT_Skip(ev, -1);
2610 ok(hres == S_OK, "Skip returned %lx\n", hres);
2611
2612 hres = IEnumVARIANT_Next(ev, 1, &v, &fetched);
2613 ok(hres == S_OK, "Next returned %lx\n", hres);
2614 ok(fetched == 1, "fetched = %ld\n", fetched);
2615 VariantClear(&v);
2616 IEnumVARIANT_Release(ev);
2617
2618 IRegExp2_Release(regexp);
2619}
2620
2621static void test_RegExp_Replace(void)
2622{
2623 static const struct
2624 {
2625 const WCHAR *pattern;
2626 const WCHAR *replace;
2627 const WCHAR *source;
2628 const WCHAR *result;
2629 BOOL global;
2630 } test[] =
2631 {
2632 { L"abc", L"", L"123abc456", L"123456", FALSE },
2633 { L"abc", L"dcba", L"123abc456", L"123dcba456", FALSE },
2634 { L"[\r\n\t\f]+", L" ", L"\nHello\rNew\fWorld\t!", L" Hello\rNew\fWorld\t!", FALSE },
2635 { L"[\r\n\t\f]+", L" ", L"\nHello\rNew\fWorld\t!", L" Hello New World !", TRUE },
2636 };
2637 HRESULT hr;
2638 IRegExp2 *regexp;
2639 VARIANT var;
2640 BSTR str, ret;
2641 int i;
2642
2644 CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER,
2645 &IID_IRegExp2, (void **)&regexp);
2646 if (hr == REGDB_E_CLASSNOTREG)
2647 {
2648 win_skip("VBScriptRegExp is not registered\n");
2649 return;
2650 }
2651 ok(hr == S_OK, "got %#lx\n", hr);
2652
2653 for (i = 0; i < ARRAY_SIZE(test); i++)
2654 {
2655 hr = IRegExp2_put_Global(regexp, test[i].global ? VARIANT_TRUE : VARIANT_FALSE);
2656 ok(hr == S_OK, "got %#lx\n", hr);
2657
2659 hr = IRegExp2_put_Pattern(regexp, str);
2660 ok(hr == S_OK, "got %#lx\n", hr);
2662
2664 V_VT(&var) = VT_BSTR;
2666 hr = IRegExp2_Replace(regexp, str, var, &ret);
2667 ok(hr == S_OK, "got %#lx\n", hr);
2668 ok(!wcscmp(ret, test[i].result), "got %s, expected %s\n", wine_dbgstr_w(ret),
2673 }
2674
2675 IRegExp2_Release(regexp);
2676}
2677
2679{
2680 IActiveScriptParseProcedure2 *vbscript;
2681 HRESULT hres;
2682
2683 hres = CoCreateInstance(&CLSID_VBScript, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
2684 &IID_IActiveScriptParseProcedure2, (void**)&vbscript);
2685 if(SUCCEEDED(hres))
2687
2688 return hres == S_OK;
2689}
2690
2691START_TEST(vbscript)
2692{
2694
2695 if(check_vbscript()) {
2696 test_vbscript();
2706 test_RegExp();
2708 }else {
2709 win_skip("VBScript engine not available or too old\n");
2710 }
2711
2713}
@ 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 ok(value,...)
Definition: atltest.h:57
#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
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
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
unsigned short VARTYPE
Definition: compat.h:2254
@ VT_BSTR
Definition: compat.h:2303
@ VT_VOID
Definition: compat.h:2318
@ VT_VARIANT
Definition: compat.h:2307
@ 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
int global
Definition: ehframes.cpp:22
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
GLubyte * pattern
Definition: glext.h:7787
GLbitfield flags
Definition: glext.h:7161
GLuint64EXT * result
Definition: glext.h:11304
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 wine_dbgstr_w
Definition: kernel32.h:34
#define GUID_NULL
Definition: ks.h:106
#define win_skip
Definition: minitest.h:67
#define todo_wine
Definition: minitest.h:80
const char * var
Definition: shader.c:5666
HRESULT hres
Definition: protocol.c:465
#define parse_script(p, s)
Definition: activex.c:681
static IDispatch * script_disp
Definition: run.c:195
static VARIANTARG static DISPID
Definition: ordinal.c:49
const CLSID CLSID_VBScriptRegExp
static ULONG WINAPI persistent_AddRef(IDispatch *iface)
Definition: vbscript.c:177
#define SET_EXPECT(func)
Definition: vbscript.c:59
static ULONG WINAPI ActiveScriptSite_Release(IActiveScriptSite *iface)
Definition: vbscript.c:324
static HRESULT WINAPI ActiveScriptSite_OnLeaveScript(IActiveScriptSite *iface)
Definition: vbscript.c:426
static const IDispatchVtbl visible_named_item_vtbl
Definition: vbscript.c:268
static void _get_disp_id(unsigned line, IDispatchEx *dispex, const WCHAR *name, HRESULT exhres, DISPID *id)
Definition: vbscript.c:575
static void test_vbscript_release(void)
Definition: vbscript.c:1772
static HRESULT WINAPI Dispatch_GetTypeInfoCount(IDispatch *iface, UINT *pctinfo)
Definition: vbscript.c:187
static void test_vbscript(void)
Definition: vbscript.c:1487
static const IDispatchVtbl global_named_item_vtbl
Definition: vbscript.c:256
static HRESULT WINAPI ActiveScriptSite_OnStateChange(IActiveScriptSite *iface, SCRIPTSTATE ssScriptState)
Definition: vbscript.c:386
static ULONG visible_named_item_ref
Definition: vbscript.c:145
static void test_param_ids(void)
Definition: vbscript.c:744
static IDispatch visible_code_named_item
Definition: vbscript.c:290
static IDispatchEx * get_script_dispatch(IActiveScript *script, const WCHAR *item_name)
Definition: vbscript.c:539
static ULONG WINAPI Dispatch_Release(IDispatch *iface)
Definition: vbscript.c:140
static void test_vbscript_simplecreate(void)
Definition: vbscript.c:1820
static BOOL check_vbscript(void)
Definition: vbscript.c:2678
#define get_disp_id(a, b, c, d)
Definition: vbscript.c:574
static IDispatch dispatch_object
Definition: vbscript.c:254
static void test_RegExp_Replace(void)
Definition: vbscript.c:2621
#define CHECK_EXPECT(func)
Definition: vbscript.c:71
static ULONG WINAPI persistent_Release(IDispatch *iface)
Definition: vbscript.c:182
static HRESULT WINAPI ActiveScriptSite_GetDocVersionString(IActiveScriptSite *iface, BSTR *pbstrVersion)
Definition: vbscript.c:373
static ULONG WINAPI visible_Release(IDispatch *iface)
Definition: vbscript.c:162
static HRESULT WINAPI persistent_GetIDsOfNames(IDispatch *iface, REFIID riid, LPOLESTR *names, UINT name_cnt, LCID lcid, DISPID *ids)
Definition: vbscript.c:224
static void test_scriptdisp(void)
Definition: vbscript.c:616
#define DEFINE_EXPECT(func)
Definition: vbscript.c:56
#define IActiveScriptParse_InitNew
Definition: vbscript.c:46
static void test_code_persistence(void)
Definition: vbscript.c:812
#define IActiveScriptParse_ParseScriptText
Definition: vbscript.c:47
static void test_safety(IActiveScript *script)
Definition: vbscript.c:448
#define IActiveScriptParseProcedure2_Release
Definition: vbscript.c:48
static void test_vbscript_initializing(void)
Definition: vbscript.c:1835
#define IActiveScriptParse_Release
Definition: vbscript.c:45
static void test_named_items(void)
Definition: vbscript.c:1875
static ULONG WINAPI global_Release(IDispatch *iface)
Definition: vbscript.c:152
static void test_vbscript_uninitializing(void)
Definition: vbscript.c:1553
static ULONG visible_code_named_item_ref
Definition: vbscript.c:145
#define test_state(s, ss)
Definition: vbscript.c:112
static HRESULT WINAPI Dispatch_GetIDsOfNames(IDispatch *iface, REFIID riid, LPOLESTR *names, UINT name_cnt, LCID lcid, DISPID *ids)
Definition: vbscript.c:198
static void _test_state(unsigned line, IActiveScript *script, SCRIPTSTATE exstate)
Definition: vbscript.c:113
#define CHECK_EXPECT2(func)
Definition: vbscript.c:65
static void test_script_typeinfo(void)
Definition: vbscript.c:1039
static const IDispatchVtbl dispatch_vtbl
Definition: vbscript.c:244
static HRESULT WINAPI ActiveScriptSite_QueryInterface(IActiveScriptSite *iface, REFIID riid, void **ppv)
Definition: vbscript.c:304
static HRESULT WINAPI Dispatch_GetTypeInfo(IDispatch *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
Definition: vbscript.c:193
static IActiveScript * create_vbscript(void)
Definition: vbscript.c:604
static ULONG WINAPI visible_code_Release(IDispatch *iface)
Definition: vbscript.c:172
static ULONG WINAPI Dispatch_AddRef(IDispatch *iface)
Definition: vbscript.c:135
static const IDispatchVtbl persistent_named_item_vtbl
Definition: vbscript.c:292
static HRESULT WINAPI ActiveScriptSite_OnEnterScript(IActiveScriptSite *iface)
Definition: vbscript.c:420
static ULONG WINAPI visible_AddRef(IDispatch *iface)
Definition: vbscript.c:157
#define CHECK_CALLED(func)
Definition: vbscript.c:77
static ULONG WINAPI ActiveScriptSite_AddRef(IActiveScriptSite *iface)
Definition: vbscript.c:319
static HRESULT WINAPI ActiveScriptSite_OnScriptTerminate(IActiveScriptSite *iface, const VARIANT *pvarResult, const EXCEPINFO *pexcepinfo)
Definition: vbscript.c:379
static HRESULT WINAPI Dispatch_Invoke(IDispatch *iface, DISPID id, REFIID riid, LCID lcid, WORD flags, DISPPARAMS *dp, VARIANT *res, EXCEPINFO *ei, UINT *err)
Definition: vbscript.c:233
static void test_no_script_dispatch(IActiveScript *script)
Definition: vbscript.c:593
static HRESULT WINAPI Dispatch_QueryInterface(IDispatch *iface, REFIID riid, void **ppv)
Definition: vbscript.c:123
static ULONG global_named_item_ref
Definition: vbscript.c:145
static IDispatch visible_named_item
Definition: vbscript.c:278
static ULONG persistent_named_item_ref
Definition: vbscript.c:145
static const IActiveScriptSiteVtbl ActiveScriptSiteVtbl
Definition: vbscript.c:432
#define CHECK_CALLED_MULTI(func, num)
Definition: vbscript.c:83
static void test_RegExp(void)
Definition: vbscript.c:2481
static HRESULT WINAPI visible_GetIDsOfNames(IDispatch *iface, REFIID riid, LPOLESTR *names, UINT name_cnt, LCID lcid, DISPID *ids)
Definition: vbscript.c:211
static const IDispatchVtbl visible_code_named_item_vtbl
Definition: vbscript.c:280
static HRESULT WINAPI ActiveScriptSite_GetLCID(IActiveScriptSite *iface, LCID *plcid)
Definition: vbscript.c:329
static IDispatch global_named_item
Definition: vbscript.c:266
static IActiveScriptSite ActiveScriptSite
Definition: vbscript.c:446
static HRESULT WINAPI ActiveScriptSite_OnScriptError(IActiveScriptSite *iface, IActiveScriptError *pscripterror)
Definition: vbscript.c:414
#define SET_EXPECT_MULTI(func, num)
Definition: vbscript.c:62
static HRESULT WINAPI ActiveScriptSite_GetItemInfo(IActiveScriptSite *iface, LPCOLESTR name, DWORD return_mask, IUnknown **item_unk, ITypeInfo **item_ti)
Definition: vbscript.c:335
static ULONG WINAPI visible_code_AddRef(IDispatch *iface)
Definition: vbscript.c:167
static IDispatch persistent_named_item
Definition: vbscript.c:302
static ULONG WINAPI global_AddRef(IDispatch *iface)
Definition: vbscript.c:147
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_BSTR(A)
Definition: oleauto.h:226
#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
long LONG
Definition: pedump.c:60
#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(...)
INT replace(TCHAR source[MAX_PATH], TCHAR dest[MAX_PATH], DWORD dwFlags, BOOL *doMore)
Definition: replace.c:38
#define test
Definition: rosglue.h:37
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: match.c:28
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
const CLSID CLSID_VBScript
@ TKIND_DISPATCH
Definition: widltypes.h:238
#define WINAPI
Definition: msvc.h:6
#define REGDB_E_CLASSNOTREG
Definition: winerror.h:3801
#define S_FALSE
Definition: winerror.h:3451
#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_TYPEMISMATCH
Definition: winerror.h:3651
#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