2 * Copyright 2011 Jacek Caban for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
28 #include "wine/test.h"
32 #define IActiveScriptParse_QueryInterface IActiveScriptParse64_QueryInterface
33 #define IActiveScriptParse_Release IActiveScriptParse64_Release
34 #define IActiveScriptParse_InitNew IActiveScriptParse64_InitNew
35 #define IActiveScriptParse_ParseScriptText IActiveScriptParse64_ParseScriptText
39 #define IActiveScriptParse_QueryInterface IActiveScriptParse32_QueryInterface
40 #define IActiveScriptParse_Release IActiveScriptParse32_Release
41 #define IActiveScriptParse_InitNew IActiveScriptParse32_InitNew
42 #define IActiveScriptParse_ParseScriptText IActiveScriptParse32_ParseScriptText
46 DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
48 #define DEFINE_EXPECT(func) \
49 static BOOL expect_ ## func = FALSE, called_ ## func = FALSE
51 #define SET_EXPECT(func) \
52 expect_ ## func = TRUE
54 #define CHECK_EXPECT2(func) \
56 ok(expect_ ##func, "unexpected call " #func "\n"); \
57 called_ ## func = TRUE; \
60 #define CHECK_EXPECT(func) \
62 CHECK_EXPECT2(func); \
63 expect_ ## func = FALSE; \
66 #define CHECK_CALLED(func) \
68 ok(called_ ## func, "expected " #func "\n"); \
69 expect_ ## func = called_ ## func = FALSE; \
72 DEFINE_EXPECT(GetLCID);
73 DEFINE_EXPECT(OnStateChange_UNINITIALIZED);
74 DEFINE_EXPECT(OnStateChange_STARTED);
75 DEFINE_EXPECT(OnStateChange_CONNECTED);
76 DEFINE_EXPECT(OnStateChange_DISCONNECTED);
77 DEFINE_EXPECT(OnStateChange_CLOSED);
78 DEFINE_EXPECT(OnStateChange_INITIALIZED);
79 DEFINE_EXPECT(OnEnterScript);
80 DEFINE_EXPECT(OnLeaveScript);
82 DEFINE_GUID(CLSID_VBScript, 0xb54f3741, 0x5b07, 0x11cf, 0xa4,0xb0, 0x00,0xaa,0x00,0x4a,0x55,0xe8);
84 #define test_state(s,ss) _test_state(__LINE__,s,ss)
85 static void _test_state(unsigned line, IActiveScript *script, SCRIPTSTATE exstate)
87 SCRIPTSTATE state = -1;
90 hres = IActiveScript_GetScriptState(script, &state);
91 ok_(__FILE__,line) (hres == S_OK, "GetScriptState failed: %08x\n", hres);
92 ok_(__FILE__,line) (state == exstate, "state=%d, expected %d\n", state, exstate);
95 static HRESULT WINAPI ActiveScriptSite_QueryInterface(IActiveScriptSite *iface, REFIID riid, void **ppv)
99 if(IsEqualGUID(&IID_IUnknown, riid))
101 else if(IsEqualGUID(&IID_IActiveScriptSite, riid))
104 return E_NOINTERFACE;
106 IUnknown_AddRef((IUnknown*)*ppv);
110 static ULONG WINAPI ActiveScriptSite_AddRef(IActiveScriptSite *iface)
115 static ULONG WINAPI ActiveScriptSite_Release(IActiveScriptSite *iface)
120 static HRESULT WINAPI ActiveScriptSite_GetLCID(IActiveScriptSite *iface, LCID *plcid)
122 CHECK_EXPECT(GetLCID);
126 static HRESULT WINAPI ActiveScriptSite_GetItemInfo(IActiveScriptSite *iface, LPCOLESTR pstrName,
127 DWORD dwReturnMask, IUnknown **ppiunkItem, ITypeInfo **ppti)
129 ok(0, "unexpected call\n");
133 static HRESULT WINAPI ActiveScriptSite_GetDocVersionString(IActiveScriptSite *iface, BSTR *pbstrVersion)
135 ok(0, "unexpected call\n");
139 static HRESULT WINAPI ActiveScriptSite_OnScriptTerminate(IActiveScriptSite *iface,
140 const VARIANT *pvarResult, const EXCEPINFO *pexcepinfo)
142 ok(0, "unexpected call\n");
146 static HRESULT WINAPI ActiveScriptSite_OnStateChange(IActiveScriptSite *iface, SCRIPTSTATE ssScriptState)
148 switch(ssScriptState) {
149 case SCRIPTSTATE_UNINITIALIZED:
150 CHECK_EXPECT(OnStateChange_UNINITIALIZED);
152 case SCRIPTSTATE_STARTED:
153 CHECK_EXPECT(OnStateChange_STARTED);
155 case SCRIPTSTATE_CONNECTED:
156 CHECK_EXPECT(OnStateChange_CONNECTED);
158 case SCRIPTSTATE_DISCONNECTED:
159 CHECK_EXPECT(OnStateChange_DISCONNECTED);
161 case SCRIPTSTATE_CLOSED:
162 CHECK_EXPECT(OnStateChange_CLOSED);
164 case SCRIPTSTATE_INITIALIZED:
165 CHECK_EXPECT(OnStateChange_INITIALIZED);
168 ok(0, "unexpected call %d\n", ssScriptState);
174 static HRESULT WINAPI ActiveScriptSite_OnScriptError(IActiveScriptSite *iface, IActiveScriptError *pscripterror)
176 ok(0, "unexpected call\n");
180 static HRESULT WINAPI ActiveScriptSite_OnEnterScript(IActiveScriptSite *iface)
182 CHECK_EXPECT(OnEnterScript);
186 static HRESULT WINAPI ActiveScriptSite_OnLeaveScript(IActiveScriptSite *iface)
188 CHECK_EXPECT(OnLeaveScript);
192 static const IActiveScriptSiteVtbl ActiveScriptSiteVtbl = {
193 ActiveScriptSite_QueryInterface,
194 ActiveScriptSite_AddRef,
195 ActiveScriptSite_Release,
196 ActiveScriptSite_GetLCID,
197 ActiveScriptSite_GetItemInfo,
198 ActiveScriptSite_GetDocVersionString,
199 ActiveScriptSite_OnScriptTerminate,
200 ActiveScriptSite_OnStateChange,
201 ActiveScriptSite_OnScriptError,
202 ActiveScriptSite_OnEnterScript,
203 ActiveScriptSite_OnLeaveScript
206 static IActiveScriptSite ActiveScriptSite = { &ActiveScriptSiteVtbl };
208 static void test_safety(IActiveScript *script)
210 IObjectSafety *safety;
211 DWORD supported, enabled;
214 hres = IActiveScript_QueryInterface(script, &IID_IObjectSafety, (void**)&safety);
215 ok(hres == S_OK, "Could not get IObjectSafety: %08x\n", hres);
219 hres = IObjectSafety_GetInterfaceSafetyOptions(safety, &IID_NULL, &supported, NULL);
220 ok(hres == E_POINTER, "GetInterfaceSafetyOptions failed: %08x, expected E_POINTER\n", hres);
221 hres = IObjectSafety_GetInterfaceSafetyOptions(safety, &IID_NULL, NULL, &enabled);
222 ok(hres == E_POINTER, "GetInterfaceSafetyOptions failed: %08x, expected E_POINTER\n", hres);
224 supported = enabled = 0xdeadbeef;
225 hres = IObjectSafety_GetInterfaceSafetyOptions(safety, &IID_NULL, &supported, &enabled);
226 ok(hres == S_OK, "GetInterfaceSafetyOptions failed: %08x\n", hres);
227 ok(supported == (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER),
228 "supported=%x\n", supported);
229 ok(enabled == INTERFACE_USES_DISPEX, "enabled=%x\n", enabled);
231 supported = enabled = 0xdeadbeef;
232 hres = IObjectSafety_GetInterfaceSafetyOptions(safety, &IID_IActiveScript, &supported, &enabled);
233 ok(hres == S_OK, "GetInterfaceSafetyOptions failed: %08x\n", hres);
234 ok(supported == (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER),
235 "supported=%x\n", supported);
236 ok(enabled == INTERFACE_USES_DISPEX, "enabled=%x\n", enabled);
238 supported = enabled = 0xdeadbeef;
239 hres = IObjectSafety_GetInterfaceSafetyOptions(safety, &IID_IActiveScriptParse, &supported, &enabled);
240 ok(hres == S_OK, "GetInterfaceSafetyOptions failed: %08x\n", hres);
241 ok(supported == (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER),
242 "supported=%x\n", supported);
243 ok(enabled == INTERFACE_USES_DISPEX, "enabled=%x\n", enabled);
245 hres = IObjectSafety_SetInterfaceSafetyOptions(safety, &IID_IActiveScriptParse,
246 INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER
247 |INTERFACESAFE_FOR_UNTRUSTED_CALLER,
248 INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER);
249 ok(hres == E_FAIL, "SetInterfaceSafetyOptions failed: %08x, expected E_FAIL\n", hres);
251 hres = IObjectSafety_SetInterfaceSafetyOptions(safety, &IID_IActiveScriptParse,
252 INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER,
253 INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER);
254 ok(hres == S_OK, "SetInterfaceSafetyOptions failed: %08x\n", hres);
256 supported = enabled = 0xdeadbeef;
257 hres = IObjectSafety_GetInterfaceSafetyOptions(safety, &IID_IActiveScriptParse, &supported, &enabled);
258 ok(hres == S_OK, "GetInterfaceSafetyOptions failed: %08x\n", hres);
259 ok(supported == (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER),
260 "supported=%x\n", supported);
261 ok(enabled == (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER),
262 "enabled=%x\n", enabled);
264 hres = IObjectSafety_SetInterfaceSafetyOptions(safety, &IID_IActiveScriptParse, INTERFACESAFE_FOR_UNTRUSTED_DATA, 0);
265 ok(hres == S_OK, "SetInterfaceSafetyOptions failed: %08x\n", hres);
267 supported = enabled = 0xdeadbeef;
268 hres = IObjectSafety_GetInterfaceSafetyOptions(safety, &IID_IActiveScriptParse, &supported, &enabled);
269 ok(hres == S_OK, "GetInterfaceSafetyOptions failed: %08x\n", hres);
270 ok(supported == (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER),
271 "supported=%x\n", supported);
272 ok(enabled == (INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER), "enabled=%x\n", enabled);
274 hres = IObjectSafety_SetInterfaceSafetyOptions(safety, &IID_IActiveScriptParse,
275 INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER, 0);
276 ok(hres == S_OK, "SetInterfaceSafetyOptions failed: %08x\n", hres);
278 supported = enabled = 0xdeadbeef;
279 hres = IObjectSafety_GetInterfaceSafetyOptions(safety, &IID_IActiveScriptParse, &supported, &enabled);
280 ok(hres == S_OK, "GetInterfaceSafetyOptions failed: %08x\n", hres);
281 ok(supported == (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER),
282 "supported=%x\n", supported);
283 ok(enabled == INTERFACE_USES_DISPEX, "enabled=%x\n", enabled);
285 hres = IObjectSafety_SetInterfaceSafetyOptions(safety, &IID_IActiveScriptParse,
286 INTERFACE_USES_DISPEX, 0);
287 ok(hres == S_OK, "SetInterfaceSafetyOptions failed: %08x\n", hres);
289 supported = enabled = 0xdeadbeef;
290 hres = IObjectSafety_GetInterfaceSafetyOptions(safety, &IID_IActiveScriptParse, &supported, &enabled);
291 ok(hres == S_OK, "GetInterfaceSafetyOptions failed: %08x\n", hres);
292 ok(supported == (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER),
293 "supported=%x\n", supported);
294 ok(enabled == INTERFACE_USES_DISPEX, "enabled=%x\n", enabled);
296 IObjectSafety_Release(safety);
299 static IDispatchEx *get_script_dispatch(IActiveScript *script)
305 disp = (void*)0xdeadbeef;
306 hres = IActiveScript_GetScriptDispatch(script, NULL, &disp);
307 ok(hres == S_OK, "GetScriptDispatch failed: %08x\n", hres);
311 hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex);
312 IDispatch_Release(disp);
313 ok(hres == S_OK, "Could not get IDispatchEx iface: %08x\n", hres);
317 static void test_no_script_dispatch(IActiveScript *script)
322 disp = (void*)0xdeadbeef;
323 hres = IActiveScript_GetScriptDispatch(script, NULL, &disp);
324 ok(hres == E_UNEXPECTED, "hres = %08x, expected E_UNEXPECTED\n", hres);
325 ok(!disp, "disp != NULL\n");
328 static IActiveScript *create_vbscript(void)
333 hres = CoCreateInstance(&CLSID_VBScript, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
334 &IID_IActiveScript, (void**)&ret);
335 ok(hres == S_OK, "CoCreateInstance failed: %08x\n", hres);
340 static void test_vbscript(void)
342 IActiveScriptParse *parser;
343 IActiveScript *vbscript;
347 vbscript = create_vbscript();
349 hres = IActiveScript_QueryInterface(vbscript, &IID_IActiveScriptParse, (void**)&parser);
350 ok(hres == S_OK, "Could not get IActiveScriptParse iface: %08x\n", hres);
352 test_state(vbscript, SCRIPTSTATE_UNINITIALIZED);
353 test_safety(vbscript);
356 hres = IActiveScript_SetScriptSite(vbscript, &ActiveScriptSite);
357 ok(hres == S_OK, "SetScriptSite failed: %08x\n", hres);
358 CHECK_CALLED(GetLCID);
360 test_state(vbscript, SCRIPTSTATE_UNINITIALIZED);
362 SET_EXPECT(OnStateChange_INITIALIZED);
363 hres = IActiveScriptParse_InitNew(parser);
364 ok(hres == S_OK, "InitNew failed: %08x\n", hres);
365 CHECK_CALLED(OnStateChange_INITIALIZED);
367 test_state(vbscript, SCRIPTSTATE_INITIALIZED);
369 hres = IActiveScriptParse_InitNew(parser);
370 ok(hres == E_UNEXPECTED, "InitNew failed: %08x, expected E_UNEXPECTED\n", hres);
372 SET_EXPECT(OnStateChange_CONNECTED);
373 hres = IActiveScript_SetScriptState(vbscript, SCRIPTSTATE_CONNECTED);
374 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08x\n", hres);
375 CHECK_CALLED(OnStateChange_CONNECTED);
377 test_state(vbscript, SCRIPTSTATE_CONNECTED);
379 SET_EXPECT(OnStateChange_DISCONNECTED);
380 SET_EXPECT(OnStateChange_INITIALIZED);
381 SET_EXPECT(OnStateChange_CLOSED);
382 hres = IActiveScript_Close(vbscript);
383 ok(hres == S_OK, "Close failed: %08x\n", hres);
384 CHECK_CALLED(OnStateChange_DISCONNECTED);
385 CHECK_CALLED(OnStateChange_INITIALIZED);
386 CHECK_CALLED(OnStateChange_CLOSED);
388 test_state(vbscript, SCRIPTSTATE_CLOSED);
389 test_no_script_dispatch(vbscript);
391 IActiveScriptParse_Release(parser);
393 ref = IActiveScript_Release(vbscript);
394 ok(!ref, "ref = %d\n", ref);
397 static void test_vbscript_uninitializing(void)
399 IActiveScriptParse *parse;
400 IActiveScript *script;
405 static const WCHAR script_textW[] =
406 {'F','u','n','c','t','i','o','n',' ','f','\n','E','n','d',' ','F','u','n','c','t','i','o','n','\n',0};
408 script = create_vbscript();
410 hres = IActiveScript_QueryInterface(script, &IID_IActiveScriptParse, (void**)&parse);
411 ok(hres == S_OK, "Could not get IActiveScriptParse: %08x\n", hres);
413 test_state(script, SCRIPTSTATE_UNINITIALIZED);
415 hres = IActiveScriptParse_InitNew(parse);
416 ok(hres == S_OK, "InitNew failed: %08x\n", hres);
419 SET_EXPECT(OnStateChange_INITIALIZED);
420 hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
421 ok(hres == S_OK, "SetScriptSite failed: %08x\n", hres);
422 CHECK_CALLED(GetLCID);
423 CHECK_CALLED(OnStateChange_INITIALIZED);
425 test_state(script, SCRIPTSTATE_INITIALIZED);
427 hres = IActiveScriptParse_ParseScriptText(parse, script_textW, NULL, NULL, NULL, 0, 1, 0x42, NULL, NULL);
428 ok(hres == S_OK, "ParseScriptText failed: %08x\n", hres);
430 hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
431 ok(hres == E_UNEXPECTED, "SetScriptSite failed: %08x, expected E_UNEXPECTED\n", hres);
433 SET_EXPECT(OnStateChange_UNINITIALIZED);
434 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_UNINITIALIZED);
435 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08x\n", hres);
436 CHECK_CALLED(OnStateChange_UNINITIALIZED);
438 test_state(script, SCRIPTSTATE_UNINITIALIZED);
440 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_UNINITIALIZED);
441 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08x\n", hres);
444 SET_EXPECT(OnStateChange_INITIALIZED);
445 hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
446 ok(hres == S_OK, "SetScriptSite failed: %08x\n", hres);
447 CHECK_CALLED(GetLCID);
448 CHECK_CALLED(OnStateChange_INITIALIZED);
450 SET_EXPECT(OnStateChange_CONNECTED);
451 SET_EXPECT(OnEnterScript);
452 SET_EXPECT(OnLeaveScript);
453 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_CONNECTED);
454 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08x\n", hres);
455 CHECK_CALLED(OnStateChange_CONNECTED);
456 CHECK_CALLED(OnEnterScript);
457 CHECK_CALLED(OnLeaveScript);
459 test_state(script, SCRIPTSTATE_CONNECTED);
461 dispex = get_script_dispatch(script);
462 ok(dispex != NULL, "dispex == NULL\n");
464 IDispatchEx_Release(dispex);
466 SET_EXPECT(OnStateChange_DISCONNECTED);
467 SET_EXPECT(OnStateChange_INITIALIZED);
468 SET_EXPECT(OnStateChange_UNINITIALIZED);
469 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_UNINITIALIZED);
470 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08x\n", hres);
471 CHECK_CALLED(OnStateChange_DISCONNECTED);
472 CHECK_CALLED(OnStateChange_INITIALIZED);
473 CHECK_CALLED(OnStateChange_UNINITIALIZED);
475 test_state(script, SCRIPTSTATE_UNINITIALIZED);
477 hres = IActiveScript_Close(script);
478 ok(hres == S_OK, "Close failed: %08x\n", hres);
480 test_state(script, SCRIPTSTATE_CLOSED);
482 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_UNINITIALIZED);
483 ok(hres == E_UNEXPECTED, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08x, expected E_UNEXPECTED\n", hres);
485 test_state(script, SCRIPTSTATE_CLOSED);
488 SET_EXPECT(OnStateChange_INITIALIZED);
489 hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
490 ok(hres == S_OK, "SetScriptSite failed: %08x\n", hres);
491 CHECK_CALLED(GetLCID);
492 CHECK_CALLED(OnStateChange_INITIALIZED);
494 test_state(script, SCRIPTSTATE_INITIALIZED);
496 SET_EXPECT(OnStateChange_CLOSED);
497 hres = IActiveScript_Close(script);
498 ok(hres == S_OK, "Close failed: %08x\n", hres);
499 CHECK_CALLED(OnStateChange_CLOSED);
501 test_state(script, SCRIPTSTATE_CLOSED);
503 IActiveScriptParse_Release(parse);
505 ref = IActiveScript_Release(script);
506 ok(!ref, "ref = %d\n", ref);
509 static void test_vbscript_release(void)
511 IActiveScriptParse *parser;
512 IActiveScript *vbscript;
516 vbscript = create_vbscript();
518 hres = IActiveScript_QueryInterface(vbscript, &IID_IActiveScriptParse, (void**)&parser);
519 ok(hres == S_OK, "Could not get IActiveScriptParse iface: %08x\n", hres);
521 test_state(vbscript, SCRIPTSTATE_UNINITIALIZED);
522 test_safety(vbscript);
525 hres = IActiveScript_SetScriptSite(vbscript, &ActiveScriptSite);
526 ok(hres == S_OK, "SetScriptSite failed: %08x\n", hres);
527 CHECK_CALLED(GetLCID);
529 test_state(vbscript, SCRIPTSTATE_UNINITIALIZED);
531 SET_EXPECT(OnStateChange_INITIALIZED);
532 hres = IActiveScriptParse_InitNew(parser);
533 ok(hres == S_OK, "InitNew failed: %08x\n", hres);
534 CHECK_CALLED(OnStateChange_INITIALIZED);
536 test_state(vbscript, SCRIPTSTATE_INITIALIZED);
538 SET_EXPECT(OnStateChange_CONNECTED);
539 hres = IActiveScript_SetScriptState(vbscript, SCRIPTSTATE_CONNECTED);
540 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08x\n", hres);
541 CHECK_CALLED(OnStateChange_CONNECTED);
543 test_state(vbscript, SCRIPTSTATE_CONNECTED);
545 IActiveScriptParse_Release(parser);
547 SET_EXPECT(OnStateChange_DISCONNECTED);
548 SET_EXPECT(OnStateChange_INITIALIZED);
549 SET_EXPECT(OnStateChange_CLOSED);
550 ref = IActiveScript_Release(vbscript);
551 ok(!ref, "ref = %d\n", ref);
552 CHECK_CALLED(OnStateChange_DISCONNECTED);
553 CHECK_CALLED(OnStateChange_INITIALIZED);
554 CHECK_CALLED(OnStateChange_CLOSED);
557 static void test_vbscript_simplecreate(void)
559 IActiveScript *script;
563 script = create_vbscript();
565 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_UNINITIALIZED);
566 ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08x\n", hres);
568 ref = IActiveScript_Release(script);
569 ok(!ref, "ref = %d\n", ref);
572 static void test_vbscript_initializing(void)
574 IActiveScriptParse *parse;
575 IActiveScript *script;
579 script = create_vbscript();
581 hres = IActiveScript_QueryInterface(script, &IID_IActiveScriptParse, (void**)&parse);
582 ok(hres == S_OK, "Could not get IActiveScriptParse: %08x\n", hres);
584 test_state(script, SCRIPTSTATE_UNINITIALIZED);
587 hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
588 ok(hres == S_OK, "SetScriptSite failed: %08x\n", hres);
589 CHECK_CALLED(GetLCID);
591 SET_EXPECT(OnStateChange_INITIALIZED);
592 hres = IActiveScriptParse_InitNew(parse);
593 ok(hres == S_OK, "InitNew failed: %08x\n", hres);
594 CHECK_CALLED(OnStateChange_INITIALIZED);
596 hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
597 ok(hres == E_UNEXPECTED, "SetScriptSite failed: %08x, expected E_UNEXPECTED\n", hres);
599 SET_EXPECT(OnStateChange_CLOSED);
600 hres = IActiveScript_Close(script);
601 ok(hres == S_OK, "Close failed: %08x\n", hres);
602 CHECK_CALLED(OnStateChange_CLOSED);
604 test_state(script, SCRIPTSTATE_CLOSED);
606 IActiveScriptParse_Release(parse);
608 ref = IActiveScript_Release(script);
609 ok(!ref, "ref = %d\n", ref);
612 static BOOL check_vbscript(void)
614 IActiveScript *vbscript;
617 hres = CoCreateInstance(&CLSID_VBScript, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
618 &IID_IActiveScript, (void**)&vbscript);
620 IActiveScript_Release(vbscript);
629 if(check_vbscript()) {
631 test_vbscript_uninitializing();
632 test_vbscript_release();
633 test_vbscript_simplecreate();
634 test_vbscript_initializing();
636 win_skip("VBScript engine not available\n");