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 "vbsregexp55.h"
30 #include "wine/test.h"
34 #define IActiveScriptParse_QueryInterface IActiveScriptParse64_QueryInterface
35 #define IActiveScriptParse_Release IActiveScriptParse64_Release
36 #define IActiveScriptParse_InitNew IActiveScriptParse64_InitNew
37 #define IActiveScriptParse_ParseScriptText IActiveScriptParse64_ParseScriptText
38 #define IActiveScriptParseProcedure2_Release \
39 IActiveScriptParseProcedure2_64_Release
43 #define IActiveScriptParse_QueryInterface IActiveScriptParse32_QueryInterface
44 #define IActiveScriptParse_Release IActiveScriptParse32_Release
45 #define IActiveScriptParse_InitNew IActiveScriptParse32_InitNew
46 #define IActiveScriptParse_ParseScriptText IActiveScriptParse32_ParseScriptText
47 #define IActiveScriptParseProcedure2_Release \
48 IActiveScriptParseProcedure2_32_Release
52 DEFINE_GUID(GUID_NULL
,0,0,0,0,0,0,0,0,0,0,0);
54 #define DEFINE_EXPECT(func) \
55 static BOOL expect_ ## func = FALSE, called_ ## func = FALSE
57 #define SET_EXPECT(func) \
58 expect_ ## func = TRUE
60 #define CHECK_EXPECT2(func) \
62 ok(expect_ ##func, "unexpected call " #func "\n"); \
63 called_ ## func = TRUE; \
66 #define CHECK_EXPECT(func) \
68 CHECK_EXPECT2(func); \
69 expect_ ## func = FALSE; \
72 #define CHECK_CALLED(func) \
74 ok(called_ ## func, "expected " #func "\n"); \
75 expect_ ## func = called_ ## func = FALSE; \
78 DEFINE_EXPECT(GetLCID
);
79 DEFINE_EXPECT(OnStateChange_UNINITIALIZED
);
80 DEFINE_EXPECT(OnStateChange_STARTED
);
81 DEFINE_EXPECT(OnStateChange_CONNECTED
);
82 DEFINE_EXPECT(OnStateChange_DISCONNECTED
);
83 DEFINE_EXPECT(OnStateChange_CLOSED
);
84 DEFINE_EXPECT(OnStateChange_INITIALIZED
);
85 DEFINE_EXPECT(OnEnterScript
);
86 DEFINE_EXPECT(OnLeaveScript
);
87 DEFINE_EXPECT(GetItemInfo_global
);
88 DEFINE_EXPECT(GetItemInfo_visible
);
89 DEFINE_EXPECT(testCall
);
91 DEFINE_GUID(CLSID_VBScript
, 0xb54f3741, 0x5b07, 0x11cf, 0xa4,0xb0, 0x00,0xaa,0x00,0x4a,0x55,0xe8);
92 DEFINE_GUID(CLSID_VBScriptRegExp
, 0x3f4daca4, 0x160d, 0x11d2, 0xa8,0xe9, 0x00,0x10,0x4b,0x36,0x5c,0x9f);
94 static BSTR
a2bstr(const char *str
)
99 len
= MultiByteToWideChar(CP_ACP
, 0, str
, -1, NULL
, 0);
100 ret
= SysAllocStringLen(NULL
, len
-1);
101 MultiByteToWideChar(CP_ACP
, 0, str
, -1, ret
, len
);
106 #define test_state(s,ss) _test_state(__LINE__,s,ss)
107 static void _test_state(unsigned line
, IActiveScript
*script
, SCRIPTSTATE exstate
)
109 SCRIPTSTATE state
= -1;
112 hres
= IActiveScript_GetScriptState(script
, &state
);
113 ok_(__FILE__
,line
) (hres
== S_OK
, "GetScriptState failed: %08x\n", hres
);
114 ok_(__FILE__
,line
) (state
== exstate
, "state=%d, expected %d\n", state
, exstate
);
117 static HRESULT WINAPI
Dispatch_QueryInterface(IDispatch
*iface
, REFIID riid
, void **ppv
)
119 if(IsEqualGUID(&IID_IUnknown
, riid
) || IsEqualGUID(&IID_IDispatch
, riid
)) {
121 IDispatch_AddRef(iface
);
126 return E_NOINTERFACE
;
129 static ULONG global_named_item_ref
, visible_named_item_ref
;
131 static ULONG WINAPI
global_AddRef(IDispatch
*iface
)
133 return ++global_named_item_ref
;
136 static ULONG WINAPI
global_Release(IDispatch
*iface
)
138 return --global_named_item_ref
;
141 static ULONG WINAPI
visible_AddRef(IDispatch
*iface
)
143 return ++visible_named_item_ref
;
146 static ULONG WINAPI
visible_Release(IDispatch
*iface
)
148 return --visible_named_item_ref
;
151 static HRESULT WINAPI
Dispatch_GetTypeInfoCount(IDispatch
*iface
, UINT
*pctinfo
)
153 ok(0, "unexpected call\n");
157 static HRESULT WINAPI
Dispatch_GetTypeInfo(IDispatch
*iface
, UINT iTInfo
, LCID lcid
, ITypeInfo
**ppTInfo
)
159 return DISP_E_BADINDEX
;
162 static HRESULT WINAPI
Dispatch_GetIDsOfNames(IDispatch
*iface
, REFIID riid
, LPOLESTR
*names
, UINT name_cnt
,
163 LCID lcid
, DISPID
*ids
)
165 ok(name_cnt
== 1, "name_cnt = %u\n", name_cnt
);
166 ok(!wcscmp(names
[0], L
"testCall"), "names[0] = %s\n", wine_dbgstr_w(names
[0]));
171 static HRESULT WINAPI
Dispatch_Invoke(IDispatch
*iface
, DISPID id
, REFIID riid
, LCID lcid
, WORD flags
,
172 DISPPARAMS
*dp
, VARIANT
*res
, EXCEPINFO
*ei
, UINT
*err
)
174 CHECK_EXPECT(testCall
);
175 ok(id
== 1, "id = %u\n", id
);
176 ok(flags
== DISPATCH_METHOD
, "flags = %x\n", flags
);
177 ok(!dp
->cArgs
, "cArgs = %u\n", dp
->cArgs
);
178 ok(!res
, "res = %p\n", res
);
182 static const IDispatchVtbl global_named_item_vtbl
= {
183 Dispatch_QueryInterface
,
186 Dispatch_GetTypeInfoCount
,
187 Dispatch_GetTypeInfo
,
188 Dispatch_GetIDsOfNames
,
192 static IDispatch global_named_item
= { &global_named_item_vtbl
};
194 static const IDispatchVtbl visible_named_item_vtbl
= {
195 Dispatch_QueryInterface
,
198 Dispatch_GetTypeInfoCount
,
199 Dispatch_GetTypeInfo
,
200 Dispatch_GetIDsOfNames
,
204 static IDispatch visible_named_item
= { &visible_named_item_vtbl
};
206 static HRESULT WINAPI
ActiveScriptSite_QueryInterface(IActiveScriptSite
*iface
, REFIID riid
, void **ppv
)
210 if(IsEqualGUID(&IID_IUnknown
, riid
))
212 else if(IsEqualGUID(&IID_IActiveScriptSite
, riid
))
215 return E_NOINTERFACE
;
217 IUnknown_AddRef((IUnknown
*)*ppv
);
221 static ULONG WINAPI
ActiveScriptSite_AddRef(IActiveScriptSite
*iface
)
226 static ULONG WINAPI
ActiveScriptSite_Release(IActiveScriptSite
*iface
)
231 static HRESULT WINAPI
ActiveScriptSite_GetLCID(IActiveScriptSite
*iface
, LCID
*plcid
)
233 CHECK_EXPECT(GetLCID
);
237 static HRESULT WINAPI
ActiveScriptSite_GetItemInfo(IActiveScriptSite
*iface
, LPCOLESTR name
,
238 DWORD return_mask
, IUnknown
**item_unk
, ITypeInfo
**item_ti
)
240 ok(return_mask
== SCRIPTINFO_IUNKNOWN
, "return_mask = %x\n", return_mask
);
241 if(!wcscmp(name
, L
"globalItem")) {
242 CHECK_EXPECT(GetItemInfo_global
);
243 IDispatch_AddRef(&global_named_item
);
244 *item_unk
= (IUnknown
*)&global_named_item
;
247 if(!wcscmp(name
, L
"visibleItem")) {
248 CHECK_EXPECT(GetItemInfo_visible
);
249 IDispatch_AddRef(&visible_named_item
);
250 *item_unk
= (IUnknown
*)&visible_named_item
;
253 ok(0, "unexpected call %s\n", wine_dbgstr_w(name
));
257 static HRESULT WINAPI
ActiveScriptSite_GetDocVersionString(IActiveScriptSite
*iface
, BSTR
*pbstrVersion
)
259 ok(0, "unexpected call\n");
263 static HRESULT WINAPI
ActiveScriptSite_OnScriptTerminate(IActiveScriptSite
*iface
,
264 const VARIANT
*pvarResult
, const EXCEPINFO
*pexcepinfo
)
266 ok(0, "unexpected call\n");
270 static HRESULT WINAPI
ActiveScriptSite_OnStateChange(IActiveScriptSite
*iface
, SCRIPTSTATE ssScriptState
)
272 switch(ssScriptState
) {
273 case SCRIPTSTATE_UNINITIALIZED
:
274 CHECK_EXPECT(OnStateChange_UNINITIALIZED
);
276 case SCRIPTSTATE_STARTED
:
277 CHECK_EXPECT(OnStateChange_STARTED
);
279 case SCRIPTSTATE_CONNECTED
:
280 CHECK_EXPECT(OnStateChange_CONNECTED
);
282 case SCRIPTSTATE_DISCONNECTED
:
283 CHECK_EXPECT(OnStateChange_DISCONNECTED
);
285 case SCRIPTSTATE_CLOSED
:
286 CHECK_EXPECT(OnStateChange_CLOSED
);
288 case SCRIPTSTATE_INITIALIZED
:
289 CHECK_EXPECT(OnStateChange_INITIALIZED
);
292 ok(0, "unexpected call %d\n", ssScriptState
);
298 static HRESULT WINAPI
ActiveScriptSite_OnScriptError(IActiveScriptSite
*iface
, IActiveScriptError
*pscripterror
)
300 ok(0, "unexpected call\n");
304 static HRESULT WINAPI
ActiveScriptSite_OnEnterScript(IActiveScriptSite
*iface
)
306 CHECK_EXPECT(OnEnterScript
);
310 static HRESULT WINAPI
ActiveScriptSite_OnLeaveScript(IActiveScriptSite
*iface
)
312 CHECK_EXPECT(OnLeaveScript
);
316 static const IActiveScriptSiteVtbl ActiveScriptSiteVtbl
= {
317 ActiveScriptSite_QueryInterface
,
318 ActiveScriptSite_AddRef
,
319 ActiveScriptSite_Release
,
320 ActiveScriptSite_GetLCID
,
321 ActiveScriptSite_GetItemInfo
,
322 ActiveScriptSite_GetDocVersionString
,
323 ActiveScriptSite_OnScriptTerminate
,
324 ActiveScriptSite_OnStateChange
,
325 ActiveScriptSite_OnScriptError
,
326 ActiveScriptSite_OnEnterScript
,
327 ActiveScriptSite_OnLeaveScript
330 static IActiveScriptSite ActiveScriptSite
= { &ActiveScriptSiteVtbl
};
332 static void test_safety(IActiveScript
*script
)
334 IObjectSafety
*safety
;
335 DWORD supported
, enabled
;
338 hres
= IActiveScript_QueryInterface(script
, &IID_IObjectSafety
, (void**)&safety
);
339 ok(hres
== S_OK
, "Could not get IObjectSafety: %08x\n", hres
);
343 hres
= IObjectSafety_GetInterfaceSafetyOptions(safety
, &IID_NULL
, &supported
, NULL
);
344 ok(hres
== E_POINTER
, "GetInterfaceSafetyOptions failed: %08x, expected E_POINTER\n", hres
);
345 hres
= IObjectSafety_GetInterfaceSafetyOptions(safety
, &IID_NULL
, NULL
, &enabled
);
346 ok(hres
== E_POINTER
, "GetInterfaceSafetyOptions failed: %08x, expected E_POINTER\n", hres
);
348 supported
= enabled
= 0xdeadbeef;
349 hres
= IObjectSafety_GetInterfaceSafetyOptions(safety
, &IID_NULL
, &supported
, &enabled
);
350 ok(hres
== S_OK
, "GetInterfaceSafetyOptions failed: %08x\n", hres
);
351 ok(supported
== (INTERFACESAFE_FOR_UNTRUSTED_DATA
|INTERFACE_USES_DISPEX
|INTERFACE_USES_SECURITY_MANAGER
),
352 "supported=%x\n", supported
);
353 ok(enabled
== INTERFACE_USES_DISPEX
, "enabled=%x\n", enabled
);
355 supported
= enabled
= 0xdeadbeef;
356 hres
= IObjectSafety_GetInterfaceSafetyOptions(safety
, &IID_IActiveScript
, &supported
, &enabled
);
357 ok(hres
== S_OK
, "GetInterfaceSafetyOptions failed: %08x\n", hres
);
358 ok(supported
== (INTERFACESAFE_FOR_UNTRUSTED_DATA
|INTERFACE_USES_DISPEX
|INTERFACE_USES_SECURITY_MANAGER
),
359 "supported=%x\n", supported
);
360 ok(enabled
== INTERFACE_USES_DISPEX
, "enabled=%x\n", enabled
);
362 supported
= enabled
= 0xdeadbeef;
363 hres
= IObjectSafety_GetInterfaceSafetyOptions(safety
, &IID_IActiveScriptParse
, &supported
, &enabled
);
364 ok(hres
== S_OK
, "GetInterfaceSafetyOptions failed: %08x\n", hres
);
365 ok(supported
== (INTERFACESAFE_FOR_UNTRUSTED_DATA
|INTERFACE_USES_DISPEX
|INTERFACE_USES_SECURITY_MANAGER
),
366 "supported=%x\n", supported
);
367 ok(enabled
== INTERFACE_USES_DISPEX
, "enabled=%x\n", enabled
);
369 hres
= IObjectSafety_SetInterfaceSafetyOptions(safety
, &IID_IActiveScriptParse
,
370 INTERFACESAFE_FOR_UNTRUSTED_DATA
|INTERFACE_USES_DISPEX
|INTERFACE_USES_SECURITY_MANAGER
371 |INTERFACESAFE_FOR_UNTRUSTED_CALLER
,
372 INTERFACESAFE_FOR_UNTRUSTED_DATA
|INTERFACE_USES_DISPEX
|INTERFACE_USES_SECURITY_MANAGER
);
373 ok(hres
== E_FAIL
, "SetInterfaceSafetyOptions failed: %08x, expected E_FAIL\n", hres
);
375 hres
= IObjectSafety_SetInterfaceSafetyOptions(safety
, &IID_IActiveScriptParse
,
376 INTERFACESAFE_FOR_UNTRUSTED_DATA
|INTERFACE_USES_DISPEX
|INTERFACE_USES_SECURITY_MANAGER
,
377 INTERFACESAFE_FOR_UNTRUSTED_DATA
|INTERFACE_USES_DISPEX
|INTERFACE_USES_SECURITY_MANAGER
);
378 ok(hres
== S_OK
, "SetInterfaceSafetyOptions failed: %08x\n", hres
);
380 supported
= enabled
= 0xdeadbeef;
381 hres
= IObjectSafety_GetInterfaceSafetyOptions(safety
, &IID_IActiveScriptParse
, &supported
, &enabled
);
382 ok(hres
== S_OK
, "GetInterfaceSafetyOptions failed: %08x\n", hres
);
383 ok(supported
== (INTERFACESAFE_FOR_UNTRUSTED_DATA
|INTERFACE_USES_DISPEX
|INTERFACE_USES_SECURITY_MANAGER
),
384 "supported=%x\n", supported
);
385 ok(enabled
== (INTERFACESAFE_FOR_UNTRUSTED_DATA
|INTERFACE_USES_DISPEX
|INTERFACE_USES_SECURITY_MANAGER
),
386 "enabled=%x\n", enabled
);
388 hres
= IObjectSafety_SetInterfaceSafetyOptions(safety
, &IID_IActiveScriptParse
, INTERFACESAFE_FOR_UNTRUSTED_DATA
, 0);
389 ok(hres
== S_OK
, "SetInterfaceSafetyOptions failed: %08x\n", hres
);
391 supported
= enabled
= 0xdeadbeef;
392 hres
= IObjectSafety_GetInterfaceSafetyOptions(safety
, &IID_IActiveScriptParse
, &supported
, &enabled
);
393 ok(hres
== S_OK
, "GetInterfaceSafetyOptions failed: %08x\n", hres
);
394 ok(supported
== (INTERFACESAFE_FOR_UNTRUSTED_DATA
|INTERFACE_USES_DISPEX
|INTERFACE_USES_SECURITY_MANAGER
),
395 "supported=%x\n", supported
);
396 ok(enabled
== (INTERFACE_USES_DISPEX
|INTERFACE_USES_SECURITY_MANAGER
), "enabled=%x\n", enabled
);
398 hres
= IObjectSafety_SetInterfaceSafetyOptions(safety
, &IID_IActiveScriptParse
,
399 INTERFACESAFE_FOR_UNTRUSTED_DATA
|INTERFACE_USES_DISPEX
|INTERFACE_USES_SECURITY_MANAGER
, 0);
400 ok(hres
== S_OK
, "SetInterfaceSafetyOptions failed: %08x\n", hres
);
402 supported
= enabled
= 0xdeadbeef;
403 hres
= IObjectSafety_GetInterfaceSafetyOptions(safety
, &IID_IActiveScriptParse
, &supported
, &enabled
);
404 ok(hres
== S_OK
, "GetInterfaceSafetyOptions failed: %08x\n", hres
);
405 ok(supported
== (INTERFACESAFE_FOR_UNTRUSTED_DATA
|INTERFACE_USES_DISPEX
|INTERFACE_USES_SECURITY_MANAGER
),
406 "supported=%x\n", supported
);
407 ok(enabled
== INTERFACE_USES_DISPEX
, "enabled=%x\n", enabled
);
409 hres
= IObjectSafety_SetInterfaceSafetyOptions(safety
, &IID_IActiveScriptParse
,
410 INTERFACE_USES_DISPEX
, 0);
411 ok(hres
== S_OK
, "SetInterfaceSafetyOptions failed: %08x\n", hres
);
413 supported
= enabled
= 0xdeadbeef;
414 hres
= IObjectSafety_GetInterfaceSafetyOptions(safety
, &IID_IActiveScriptParse
, &supported
, &enabled
);
415 ok(hres
== S_OK
, "GetInterfaceSafetyOptions failed: %08x\n", hres
);
416 ok(supported
== (INTERFACESAFE_FOR_UNTRUSTED_DATA
|INTERFACE_USES_DISPEX
|INTERFACE_USES_SECURITY_MANAGER
),
417 "supported=%x\n", supported
);
418 ok(enabled
== INTERFACE_USES_DISPEX
, "enabled=%x\n", enabled
);
420 IObjectSafety_Release(safety
);
423 static IDispatchEx
*get_script_dispatch(IActiveScript
*script
)
429 disp
= (void*)0xdeadbeef;
430 hres
= IActiveScript_GetScriptDispatch(script
, NULL
, &disp
);
431 ok(hres
== S_OK
, "GetScriptDispatch failed: %08x\n", hres
);
435 hres
= IDispatch_QueryInterface(disp
, &IID_IDispatchEx
, (void**)&dispex
);
436 IDispatch_Release(disp
);
437 ok(hres
== S_OK
, "Could not get IDispatchEx iface: %08x\n", hres
);
441 static void parse_script(IActiveScriptParse
*parse
, const char *src
)
446 SET_EXPECT(OnEnterScript
);
447 SET_EXPECT(OnLeaveScript
);
450 hres
= IActiveScriptParse_ParseScriptText(parse
, str
, NULL
, NULL
, NULL
, 0, 0, 0, NULL
, NULL
);
452 ok(hres
== S_OK
, "ParseScriptText failed: %08x\n", hres
);
454 CHECK_CALLED(OnEnterScript
);
455 CHECK_CALLED(OnLeaveScript
);
458 #define get_disp_id(a,b,c,d) _get_disp_id(__LINE__,a,b,c,d)
459 static void _get_disp_id(unsigned line
, IDispatchEx
*dispex
, const char *name
, HRESULT exhres
, DISPID
*id
)
466 hres
= IDispatchEx_GetDispID(dispex
, str
, 0, id
);
467 ok_(__FILE__
,line
)(hres
== exhres
, "GetDispID(%s) returned %08x, expected %08x\n", name
, hres
, exhres
);
469 hres
= IDispatchEx_GetIDsOfNames(dispex
, &IID_NULL
, &str
, 1, 0, &id2
);
471 ok_(__FILE__
,line
)(hres
== exhres
, "GetIDsOfNames(%s) returned %08x, expected %08x\n", name
, hres
, exhres
);
472 ok_(__FILE__
,line
)(*id
== id2
, "GetIDsOfNames(%s) id != id2\n", name
);
475 static void test_no_script_dispatch(IActiveScript
*script
)
480 disp
= (void*)0xdeadbeef;
481 hres
= IActiveScript_GetScriptDispatch(script
, NULL
, &disp
);
482 ok(hres
== E_UNEXPECTED
, "hres = %08x, expected E_UNEXPECTED\n", hres
);
483 ok(!disp
, "disp != NULL\n");
486 static IActiveScript
*create_vbscript(void)
491 hres
= CoCreateInstance(&CLSID_VBScript
, NULL
, CLSCTX_INPROC_SERVER
|CLSCTX_INPROC_HANDLER
,
492 &IID_IActiveScript
, (void**)&ret
);
493 ok(hres
== S_OK
, "CoCreateInstance failed: %08x\n", hres
);
498 static void test_scriptdisp(void)
500 IDispatchEx
*script_disp
, *script_disp2
;
501 IActiveScriptParse
*parser
;
502 IActiveScript
*vbscript
;
510 vbscript
= create_vbscript();
512 hres
= IActiveScript_QueryInterface(vbscript
, &IID_IActiveScriptParse
, (void**)&parser
);
513 ok(hres
== S_OK
, "Could not get IActiveScriptParse iface: %08x\n", hres
);
515 test_state(vbscript
, SCRIPTSTATE_UNINITIALIZED
);
516 test_safety(vbscript
);
519 hres
= IActiveScript_SetScriptSite(vbscript
, &ActiveScriptSite
);
520 ok(hres
== S_OK
, "SetScriptSite failed: %08x\n", hres
);
521 CHECK_CALLED(GetLCID
);
523 script_disp2
= get_script_dispatch(vbscript
);
525 test_state(vbscript
, SCRIPTSTATE_UNINITIALIZED
);
527 SET_EXPECT(OnStateChange_INITIALIZED
);
528 hres
= IActiveScriptParse_InitNew(parser
);
529 ok(hres
== S_OK
, "InitNew failed: %08x\n", hres
);
530 CHECK_CALLED(OnStateChange_INITIALIZED
);
532 test_state(vbscript
, SCRIPTSTATE_INITIALIZED
);
534 SET_EXPECT(OnStateChange_CONNECTED
);
535 hres
= IActiveScript_SetScriptState(vbscript
, SCRIPTSTATE_CONNECTED
);
536 ok(hres
== S_OK
, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08x\n", hres
);
537 CHECK_CALLED(OnStateChange_CONNECTED
);
539 test_state(vbscript
, SCRIPTSTATE_CONNECTED
);
541 script_disp
= get_script_dispatch(vbscript
);
542 ok(script_disp
== script_disp2
, "script_disp != script_disp2\n");
543 IDispatchEx_Release(script_disp2
);
546 get_disp_id(script_disp
, "LCase", DISP_E_UNKNOWNNAME
, &id
);
547 ok(id
== -1, "id = %d, expected -1\n", id
);
549 get_disp_id(script_disp
, "globalVariable", DISP_E_UNKNOWNNAME
, &id
);
550 parse_script(parser
, "dim globalVariable\nglobalVariable = 3");
551 get_disp_id(script_disp
, "globalVariable", S_OK
, &id
);
553 memset(&dp
, 0, sizeof(dp
));
554 memset(&ei
, 0, sizeof(ei
));
556 hres
= IDispatchEx_InvokeEx(script_disp
, id
, 0, DISPATCH_PROPERTYGET
|DISPATCH_METHOD
, &dp
, &v
, &ei
, NULL
);
557 ok(hres
== S_OK
, "InvokeEx failed: %08x\n", hres
);
558 ok(V_VT(&v
) == VT_I2
, "V_VT(v) = %d\n", V_VT(&v
));
559 ok(V_I2(&v
) == 3, "V_I2(v) = %d\n", V_I2(&v
));
561 get_disp_id(script_disp
, "globalVariable2", DISP_E_UNKNOWNNAME
, &id
);
562 parse_script(parser
, "globalVariable2 = 4");
563 get_disp_id(script_disp
, "globalVariable2", S_OK
, &id
);
565 get_disp_id(script_disp
, "globalFunction", DISP_E_UNKNOWNNAME
, &id
);
566 parse_script(parser
, "function globalFunction()\nglobalFunction=5\nend function");
567 get_disp_id(script_disp
, "globalFunction", S_OK
, &id
);
569 SET_EXPECT(OnEnterScript
);
570 SET_EXPECT(OnLeaveScript
);
572 memset(&dp
, 0, sizeof(dp
));
573 memset(&ei
, 0, sizeof(ei
));
575 hres
= IDispatchEx_InvokeEx(script_disp
, id
, 0, DISPATCH_PROPERTYGET
|DISPATCH_METHOD
, &dp
, &v
, &ei
, NULL
);
576 ok(hres
== S_OK
, "InvokeEx failed: %08x\n", hres
);
577 ok(V_VT(&v
) == VT_I2
, "V_VT(v) = %d\n", V_VT(&v
));
578 ok(V_I2(&v
) == 5, "V_I2(v) = %d\n", V_I2(&v
));
580 CHECK_CALLED(OnEnterScript
);
581 CHECK_CALLED(OnLeaveScript
);
583 SET_EXPECT(OnEnterScript
);
584 SET_EXPECT(OnLeaveScript
);
586 memset(&dp
, 0, sizeof(dp
));
587 memset(&ei
, 0, sizeof(ei
));
589 hres
= IDispatchEx_Invoke(script_disp
, id
, &IID_NULL
, 0, DISPATCH_PROPERTYGET
|DISPATCH_METHOD
, &dp
, &v
, &ei
, NULL
);
590 ok(hres
== S_OK
, "InvokeEx failed: %08x\n", hres
);
591 ok(V_VT(&v
) == VT_I2
, "V_VT(v) = %d\n", V_VT(&v
));
592 ok(V_I2(&v
) == 5, "V_I2(v) = %d\n", V_I2(&v
));
594 CHECK_CALLED(OnEnterScript
);
595 CHECK_CALLED(OnLeaveScript
);
597 get_disp_id(script_disp
, "globalSub", DISP_E_UNKNOWNNAME
, &id
);
598 parse_script(parser
, "sub globalSub()\nend sub");
599 get_disp_id(script_disp
, "globalSub", S_OK
, &id
);
600 get_disp_id(script_disp
, "globalSub", S_OK
, &id2
);
601 ok(id
== id2
, "id != id2\n");
603 get_disp_id(script_disp
, "constVariable", DISP_E_UNKNOWNNAME
, &id
);
604 parse_script(parser
, "const constVariable = 6");
605 get_disp_id(script_disp
, "ConstVariable", S_OK
, &id
);
606 get_disp_id(script_disp
, "Constvariable", S_OK
, &id2
);
607 ok(id
== id2
, "id != id2\n");
609 IDispatchEx_Release(script_disp
);
611 IActiveScriptParse_Release(parser
);
613 SET_EXPECT(OnStateChange_DISCONNECTED
);
614 SET_EXPECT(OnStateChange_INITIALIZED
);
615 SET_EXPECT(OnStateChange_CLOSED
);
616 hres
= IActiveScript_Close(vbscript
);
617 ok(hres
== S_OK
, "Close failed: %08x\n", hres
);
618 CHECK_CALLED(OnStateChange_DISCONNECTED
);
619 CHECK_CALLED(OnStateChange_INITIALIZED
);
620 CHECK_CALLED(OnStateChange_CLOSED
);
622 ref
= IActiveScript_Release(vbscript
);
623 ok(!ref
, "ref = %d\n", ref
);
626 static void test_vbscript(void)
628 IActiveScriptParseProcedure2
*parse_proc
;
629 IActiveScriptParse
*parser
;
630 IActiveScript
*vbscript
;
634 vbscript
= create_vbscript();
636 hres
= IActiveScript_QueryInterface(vbscript
, &IID_IActiveScriptParse
, (void**)&parser
);
637 ok(hres
== S_OK
, "Could not get IActiveScriptParse iface: %08x\n", hres
);
639 test_state(vbscript
, SCRIPTSTATE_UNINITIALIZED
);
640 test_safety(vbscript
);
641 test_no_script_dispatch(vbscript
);
644 hres
= IActiveScript_SetScriptSite(vbscript
, &ActiveScriptSite
);
645 ok(hres
== S_OK
, "SetScriptSite failed: %08x\n", hres
);
646 CHECK_CALLED(GetLCID
);
648 test_state(vbscript
, SCRIPTSTATE_UNINITIALIZED
);
650 SET_EXPECT(OnStateChange_INITIALIZED
);
651 hres
= IActiveScriptParse_InitNew(parser
);
652 ok(hres
== S_OK
, "InitNew failed: %08x\n", hres
);
653 CHECK_CALLED(OnStateChange_INITIALIZED
);
655 test_state(vbscript
, SCRIPTSTATE_INITIALIZED
);
657 hres
= IActiveScriptParse_InitNew(parser
);
658 ok(hres
== E_UNEXPECTED
, "InitNew failed: %08x, expected E_UNEXPECTED\n", hres
);
660 SET_EXPECT(OnStateChange_CONNECTED
);
661 hres
= IActiveScript_SetScriptState(vbscript
, SCRIPTSTATE_CONNECTED
);
662 ok(hres
== S_OK
, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08x\n", hres
);
663 CHECK_CALLED(OnStateChange_CONNECTED
);
665 test_state(vbscript
, SCRIPTSTATE_CONNECTED
);
667 SET_EXPECT(OnStateChange_DISCONNECTED
);
668 SET_EXPECT(OnStateChange_INITIALIZED
);
669 SET_EXPECT(OnStateChange_CLOSED
);
670 hres
= IActiveScript_Close(vbscript
);
671 ok(hres
== S_OK
, "Close failed: %08x\n", hres
);
672 CHECK_CALLED(OnStateChange_DISCONNECTED
);
673 CHECK_CALLED(OnStateChange_INITIALIZED
);
674 CHECK_CALLED(OnStateChange_CLOSED
);
676 test_state(vbscript
, SCRIPTSTATE_CLOSED
);
677 test_no_script_dispatch(vbscript
);
679 IActiveScriptParse_Release(parser
);
681 hres
= IActiveScript_QueryInterface(vbscript
, &IID_IActiveScriptParseProcedure
, (void**)&parse_proc
);
682 ok(hres
== E_NOINTERFACE
, "Got IActiveScriptParseProcedure interface, expected E_NOTIMPL\n");
684 hres
= IActiveScript_QueryInterface(vbscript
, &IID_IActiveScriptParseProcedure2
, (void**)&parse_proc
);
685 ok(hres
== S_OK
, "Could not get IActiveScriptParseProcedure2 interface\n");
686 IActiveScriptParseProcedure2_Release(parse_proc
);
688 ref
= IActiveScript_Release(vbscript
);
689 ok(!ref
, "ref = %d\n", ref
);
692 static void test_vbscript_uninitializing(void)
694 IActiveScriptParse
*parse
;
695 IActiveScript
*script
;
700 static const WCHAR script_textW
[] =
701 {'F','u','n','c','t','i','o','n',' ','f','\n','E','n','d',' ','F','u','n','c','t','i','o','n','\n',0};
703 script
= create_vbscript();
705 hres
= IActiveScript_QueryInterface(script
, &IID_IActiveScriptParse
, (void**)&parse
);
706 ok(hres
== S_OK
, "Could not get IActiveScriptParse: %08x\n", hres
);
708 test_state(script
, SCRIPTSTATE_UNINITIALIZED
);
710 hres
= IActiveScriptParse_InitNew(parse
);
711 ok(hres
== S_OK
, "InitNew failed: %08x\n", hres
);
713 test_no_script_dispatch(script
);
716 SET_EXPECT(OnStateChange_INITIALIZED
);
717 hres
= IActiveScript_SetScriptSite(script
, &ActiveScriptSite
);
718 ok(hres
== S_OK
, "SetScriptSite failed: %08x\n", hres
);
719 CHECK_CALLED(GetLCID
);
720 CHECK_CALLED(OnStateChange_INITIALIZED
);
722 test_state(script
, SCRIPTSTATE_INITIALIZED
);
724 hres
= IActiveScriptParse_ParseScriptText(parse
, script_textW
, NULL
, NULL
, NULL
, 0, 1, 0x42, NULL
, NULL
);
725 ok(hres
== S_OK
, "ParseScriptText failed: %08x\n", hres
);
727 hres
= IActiveScript_SetScriptSite(script
, &ActiveScriptSite
);
728 ok(hres
== E_UNEXPECTED
, "SetScriptSite failed: %08x, expected E_UNEXPECTED\n", hres
);
730 SET_EXPECT(OnStateChange_UNINITIALIZED
);
731 hres
= IActiveScript_SetScriptState(script
, SCRIPTSTATE_UNINITIALIZED
);
732 ok(hres
== S_OK
, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08x\n", hres
);
733 CHECK_CALLED(OnStateChange_UNINITIALIZED
);
735 test_state(script
, SCRIPTSTATE_UNINITIALIZED
);
737 hres
= IActiveScript_SetScriptState(script
, SCRIPTSTATE_UNINITIALIZED
);
738 ok(hres
== S_OK
, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08x\n", hres
);
741 SET_EXPECT(OnStateChange_INITIALIZED
);
742 hres
= IActiveScript_SetScriptSite(script
, &ActiveScriptSite
);
743 ok(hres
== S_OK
, "SetScriptSite failed: %08x\n", hres
);
744 CHECK_CALLED(GetLCID
);
745 CHECK_CALLED(OnStateChange_INITIALIZED
);
747 SET_EXPECT(OnStateChange_CONNECTED
);
748 SET_EXPECT(OnEnterScript
);
749 SET_EXPECT(OnLeaveScript
);
750 hres
= IActiveScript_SetScriptState(script
, SCRIPTSTATE_CONNECTED
);
751 ok(hres
== S_OK
, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08x\n", hres
);
752 CHECK_CALLED(OnStateChange_CONNECTED
);
753 CHECK_CALLED(OnEnterScript
);
754 CHECK_CALLED(OnLeaveScript
);
756 test_state(script
, SCRIPTSTATE_CONNECTED
);
758 dispex
= get_script_dispatch(script
);
759 ok(dispex
!= NULL
, "dispex == NULL\n");
761 IDispatchEx_Release(dispex
);
763 SET_EXPECT(OnStateChange_DISCONNECTED
);
764 SET_EXPECT(OnStateChange_INITIALIZED
);
765 SET_EXPECT(OnStateChange_UNINITIALIZED
);
766 hres
= IActiveScript_SetScriptState(script
, SCRIPTSTATE_UNINITIALIZED
);
767 ok(hres
== S_OK
, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08x\n", hres
);
768 CHECK_CALLED(OnStateChange_DISCONNECTED
);
769 CHECK_CALLED(OnStateChange_INITIALIZED
);
770 CHECK_CALLED(OnStateChange_UNINITIALIZED
);
772 test_state(script
, SCRIPTSTATE_UNINITIALIZED
);
774 hres
= IActiveScript_Close(script
);
775 ok(hres
== S_OK
, "Close failed: %08x\n", hres
);
777 test_state(script
, SCRIPTSTATE_CLOSED
);
779 hres
= IActiveScript_SetScriptState(script
, SCRIPTSTATE_UNINITIALIZED
);
780 ok(hres
== E_UNEXPECTED
, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08x, expected E_UNEXPECTED\n", hres
);
782 test_state(script
, SCRIPTSTATE_CLOSED
);
785 SET_EXPECT(OnStateChange_INITIALIZED
);
786 hres
= IActiveScript_SetScriptSite(script
, &ActiveScriptSite
);
787 ok(hres
== S_OK
, "SetScriptSite failed: %08x\n", hres
);
788 CHECK_CALLED(GetLCID
);
789 CHECK_CALLED(OnStateChange_INITIALIZED
);
791 test_state(script
, SCRIPTSTATE_INITIALIZED
);
793 SET_EXPECT(OnStateChange_CLOSED
);
794 hres
= IActiveScript_Close(script
);
795 ok(hres
== S_OK
, "Close failed: %08x\n", hres
);
796 CHECK_CALLED(OnStateChange_CLOSED
);
798 test_state(script
, SCRIPTSTATE_CLOSED
);
800 hres
= IActiveScriptParse_InitNew(parse
);
801 ok(hres
== E_UNEXPECTED
, "InitNew failed: %08x\n", hres
);
803 IActiveScriptParse_Release(parse
);
805 ref
= IActiveScript_Release(script
);
806 ok(!ref
, "ref = %d\n", ref
);
809 static void test_vbscript_release(void)
811 IActiveScriptParse
*parser
;
812 IActiveScript
*vbscript
;
816 vbscript
= create_vbscript();
818 hres
= IActiveScript_QueryInterface(vbscript
, &IID_IActiveScriptParse
, (void**)&parser
);
819 ok(hres
== S_OK
, "Could not get IActiveScriptParse iface: %08x\n", hres
);
821 test_state(vbscript
, SCRIPTSTATE_UNINITIALIZED
);
822 test_safety(vbscript
);
825 hres
= IActiveScript_SetScriptSite(vbscript
, &ActiveScriptSite
);
826 ok(hres
== S_OK
, "SetScriptSite failed: %08x\n", hres
);
827 CHECK_CALLED(GetLCID
);
829 test_state(vbscript
, SCRIPTSTATE_UNINITIALIZED
);
831 SET_EXPECT(OnStateChange_INITIALIZED
);
832 hres
= IActiveScriptParse_InitNew(parser
);
833 ok(hres
== S_OK
, "InitNew failed: %08x\n", hres
);
834 CHECK_CALLED(OnStateChange_INITIALIZED
);
836 test_state(vbscript
, SCRIPTSTATE_INITIALIZED
);
838 SET_EXPECT(OnStateChange_CONNECTED
);
839 hres
= IActiveScript_SetScriptState(vbscript
, SCRIPTSTATE_CONNECTED
);
840 ok(hres
== S_OK
, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08x\n", hres
);
841 CHECK_CALLED(OnStateChange_CONNECTED
);
843 test_state(vbscript
, SCRIPTSTATE_CONNECTED
);
845 IActiveScriptParse_Release(parser
);
847 SET_EXPECT(OnStateChange_DISCONNECTED
);
848 SET_EXPECT(OnStateChange_INITIALIZED
);
849 SET_EXPECT(OnStateChange_CLOSED
);
850 ref
= IActiveScript_Release(vbscript
);
851 ok(!ref
, "ref = %d\n", ref
);
852 CHECK_CALLED(OnStateChange_DISCONNECTED
);
853 CHECK_CALLED(OnStateChange_INITIALIZED
);
854 CHECK_CALLED(OnStateChange_CLOSED
);
857 static void test_vbscript_simplecreate(void)
859 IActiveScript
*script
;
863 script
= create_vbscript();
865 hres
= IActiveScript_SetScriptState(script
, SCRIPTSTATE_UNINITIALIZED
);
866 ok(hres
== S_OK
, "SetScriptState(SCRIPTSTATE_UNINITIALIZED) failed: %08x\n", hres
);
868 ref
= IActiveScript_Release(script
);
869 ok(!ref
, "ref = %d\n", ref
);
872 static void test_vbscript_initializing(void)
874 IActiveScriptParse
*parse
;
875 IActiveScript
*script
;
879 script
= create_vbscript();
881 hres
= IActiveScript_QueryInterface(script
, &IID_IActiveScriptParse
, (void**)&parse
);
882 ok(hres
== S_OK
, "Could not get IActiveScriptParse: %08x\n", hres
);
884 test_state(script
, SCRIPTSTATE_UNINITIALIZED
);
887 hres
= IActiveScript_SetScriptSite(script
, &ActiveScriptSite
);
888 ok(hres
== S_OK
, "SetScriptSite failed: %08x\n", hres
);
889 CHECK_CALLED(GetLCID
);
891 SET_EXPECT(OnStateChange_INITIALIZED
);
892 hres
= IActiveScriptParse_InitNew(parse
);
893 ok(hres
== S_OK
, "InitNew failed: %08x\n", hres
);
894 CHECK_CALLED(OnStateChange_INITIALIZED
);
896 hres
= IActiveScript_SetScriptSite(script
, &ActiveScriptSite
);
897 ok(hres
== E_UNEXPECTED
, "SetScriptSite failed: %08x, expected E_UNEXPECTED\n", hres
);
899 SET_EXPECT(OnStateChange_CLOSED
);
900 hres
= IActiveScript_Close(script
);
901 ok(hres
== S_OK
, "Close failed: %08x\n", hres
);
902 CHECK_CALLED(OnStateChange_CLOSED
);
904 test_state(script
, SCRIPTSTATE_CLOSED
);
906 IActiveScriptParse_Release(parse
);
908 ref
= IActiveScript_Release(script
);
909 ok(!ref
, "ref = %d\n", ref
);
912 static void test_named_items(void)
914 IActiveScriptParse
*parse
;
915 IActiveScript
*script
;
919 script
= create_vbscript();
921 hres
= IActiveScript_QueryInterface(script
, &IID_IActiveScriptParse
, (void**)&parse
);
922 ok(hres
== S_OK
, "Could not get IActiveScriptParse: %08x\n", hres
);
924 test_state(script
, SCRIPTSTATE_UNINITIALIZED
);
926 hres
= IActiveScript_AddNamedItem(script
, L
"visibleItem", SCRIPTITEM_ISVISIBLE
);
927 ok(hres
== E_UNEXPECTED
, "AddNamedItem returned: %08x\n", hres
);
928 hres
= IActiveScript_AddNamedItem(script
, L
"globalItem", SCRIPTITEM_GLOBALMEMBERS
);
929 ok(hres
== E_UNEXPECTED
, "AddNamedItem returned: %08x\n", hres
);
932 hres
= IActiveScript_SetScriptSite(script
, &ActiveScriptSite
);
933 ok(hres
== S_OK
, "SetScriptSite failed: %08x\n", hres
);
934 CHECK_CALLED(GetLCID
);
936 SET_EXPECT(GetItemInfo_global
);
937 hres
= IActiveScript_AddNamedItem(script
, L
"globalItem", SCRIPTITEM_GLOBALMEMBERS
);
938 ok(hres
== S_OK
, "AddNamedItem failed: %08x\n", hres
);
939 CHECK_CALLED(GetItemInfo_global
);
941 hres
= IActiveScript_AddNamedItem(script
, L
"visibleItem", SCRIPTITEM_ISVISIBLE
);
942 ok(hres
== S_OK
, "AddNamedItem failed: %08x\n", hres
);
944 ok(global_named_item_ref
> 0, "global_named_item_ref = %u\n", global_named_item_ref
);
945 ok(visible_named_item_ref
== 0, "visible_named_item_ref = %u\n", visible_named_item_ref
);
947 SET_EXPECT(OnStateChange_INITIALIZED
);
948 hres
= IActiveScriptParse_InitNew(parse
);
949 ok(hres
== S_OK
, "InitNew failed: %08x\n", hres
);
950 CHECK_CALLED(OnStateChange_INITIALIZED
);
952 SET_EXPECT(OnStateChange_CONNECTED
);
953 hres
= IActiveScript_SetScriptState(script
, SCRIPTSTATE_CONNECTED
);
954 ok(hres
== S_OK
, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08x\n", hres
);
955 CHECK_CALLED(OnStateChange_CONNECTED
);
957 SET_EXPECT(testCall
);
958 parse_script(parse
, "testCall\n");
959 CHECK_CALLED(testCall
);
961 SET_EXPECT(GetItemInfo_visible
);
962 SET_EXPECT(testCall
);
963 parse_script(parse
, "visibleItem.testCall\n");
964 CHECK_CALLED(GetItemInfo_visible
);
965 CHECK_CALLED(testCall
);
967 ok(global_named_item_ref
> 0, "global_named_item_ref = %u\n", global_named_item_ref
);
968 ok(visible_named_item_ref
== 1, "visible_named_item_ref = %u\n", visible_named_item_ref
);
970 SET_EXPECT(testCall
);
971 parse_script(parse
, "visibleItem.testCall\n");
972 CHECK_CALLED(testCall
);
974 SET_EXPECT(OnStateChange_DISCONNECTED
);
975 SET_EXPECT(OnStateChange_INITIALIZED
);
976 SET_EXPECT(OnStateChange_CLOSED
);
977 hres
= IActiveScript_Close(script
);
978 ok(hres
== S_OK
, "Close failed: %08x\n", hres
);
979 CHECK_CALLED(OnStateChange_DISCONNECTED
);
980 CHECK_CALLED(OnStateChange_INITIALIZED
);
981 CHECK_CALLED(OnStateChange_CLOSED
);
983 ok(global_named_item_ref
== 0, "global_named_item_ref = %u\n", global_named_item_ref
);
984 ok(visible_named_item_ref
== 0, "visible_named_item_ref = %u\n", visible_named_item_ref
);
986 test_state(script
, SCRIPTSTATE_CLOSED
);
988 IActiveScriptParse_Release(parse
);
990 ref
= IActiveScript_Release(script
);
991 ok(!ref
, "ref = %d\n", ref
);
994 static void test_RegExp(void)
997 IMatchCollection2
*mc
;
1009 hres
= CoCreateInstance(&CLSID_VBScriptRegExp
, NULL
,
1010 CLSCTX_INPROC_SERVER
|CLSCTX_INPROC_HANDLER
,
1011 &IID_IUnknown
, (void**)&unk
);
1012 if(hres
== REGDB_E_CLASSNOTREG
) {
1013 win_skip("VBScriptRegExp is not registered\n");
1016 ok(hres
== S_OK
, "CoCreateInstance(CLSID_VBScriptRegExp) failed: %x\n", hres
);
1018 hres
= IUnknown_QueryInterface(unk
, &IID_IRegExp2
, (void**)®exp
);
1019 if(hres
== E_NOINTERFACE
) {
1020 win_skip("IRegExp2 interface is not available\n");
1023 ok(hres
== S_OK
, "QueryInterface(IID_IRegExp2) failed: %x\n", hres
);
1024 IUnknown_Release(unk
);
1026 hres
= IRegExp2_QueryInterface(regexp
, &IID_IRegExp
, (void**)&unk
);
1027 ok(hres
== S_OK
, "QueryInterface(IID_IRegExp) returned %x\n", hres
);
1028 IUnknown_Release(unk
);
1030 hres
= IRegExp2_QueryInterface(regexp
, &IID_IDispatchEx
, (void**)&unk
);
1031 ok(hres
== E_NOINTERFACE
, "QueryInterface(IID_IDispatchEx) returned %x\n", hres
);
1033 hres
= IRegExp2_get_Pattern(regexp
, &bstr
);
1034 ok(bstr
== NULL
, "bstr != NULL\n");
1035 ok(hres
== S_OK
, "get_Pattern returned %x, expected S_OK\n", hres
);
1037 hres
= IRegExp2_get_Pattern(regexp
, NULL
);
1038 ok(hres
== E_POINTER
, "get_Pattern returned %x, expected E_POINTER\n", hres
);
1040 hres
= IRegExp2_get_IgnoreCase(regexp
, NULL
);
1041 ok(hres
== E_POINTER
, "get_IgnoreCase returned %x, expected E_POINTER\n", hres
);
1043 hres
= IRegExp2_get_Global(regexp
, NULL
);
1044 ok(hres
== E_POINTER
, "get_Global returned %x, expected E_POINTER\n", hres
);
1046 hres
= IRegExp2_Execute(regexp
, NULL
, &disp
);
1047 ok(hres
== S_OK
, "Execute returned %x, expected S_OK\n", hres
);
1048 hres
= IDispatch_QueryInterface(disp
, &IID_IMatchCollection2
, (void**)&mc
);
1049 ok(hres
== S_OK
, "QueryInterface(IID_IMatchCollection2) returned %x\n", hres
);
1050 IDispatch_Release(disp
);
1052 hres
= IMatchCollection2_QueryInterface(mc
, &IID_IMatchCollection
, (void**)&unk
);
1053 ok(hres
== S_OK
, "QueryInterface(IID_IMatchCollection) returned %x\n", hres
);
1054 IUnknown_Release(unk
);
1056 hres
= IMatchCollection2_get_Count(mc
, NULL
);
1057 ok(hres
== E_POINTER
, "get_Count returned %x, expected E_POINTER\n", hres
);
1059 hres
= IMatchCollection2_get_Count(mc
, &count
);
1060 ok(hres
== S_OK
, "get_Count returned %x, expected S_OK\n", hres
);
1061 ok(count
== 1, "count = %d\n", count
);
1063 hres
= IMatchCollection2_get_Item(mc
, 1, &disp
);
1064 ok(hres
== E_INVALIDARG
, "get_Item returned %x, expected E_INVALIDARG\n", hres
);
1066 hres
= IMatchCollection2_get_Item(mc
, 1, NULL
);
1067 ok(hres
== E_POINTER
, "get_Item returned %x, expected E_POINTER\n", hres
);
1069 hres
= IMatchCollection2_get_Item(mc
, 0, &disp
);
1070 ok(hres
== S_OK
, "get_Item returned %x, expected S_OK\n", hres
);
1071 hres
= IDispatch_QueryInterface(disp
, &IID_IMatch2
, (void**)&match
);
1072 ok(hres
== S_OK
, "QueryInterface(IID_IMatch2) returned %x\n", hres
);
1073 IDispatch_Release(disp
);
1075 hres
= IMatch2_QueryInterface(match
, &IID_IMatch
, (void**)&unk
);
1076 ok(hres
== S_OK
, "QueryInterface(IID_IMatch) returned %x\n", hres
);
1077 IUnknown_Release(unk
);
1079 hres
= IMatch2_get_Value(match
, NULL
);
1080 ok(hres
== E_POINTER
, "get_Value returned %x, expected E_POINTER\n", hres
);
1082 hres
= IMatch2_get_FirstIndex(match
, NULL
);
1083 ok(hres
== E_POINTER
, "get_FirstIndex returned %x, expected E_POINTER\n", hres
);
1085 hres
= IMatch2_get_Length(match
, NULL
);
1086 ok(hres
== E_POINTER
, "get_Length returned %x, expected E_POINTER\n", hres
);
1088 hres
= IMatch2_get_SubMatches(match
, NULL
);
1089 ok(hres
== E_POINTER
, "get_SubMatches returned %x, expected E_POINTER\n", hres
);
1091 hres
= IMatch2_get_SubMatches(match
, &disp
);
1092 ok(hres
== S_OK
, "get_SubMatches returned %x, expected S_OK\n", hres
);
1093 IMatch2_Release(match
);
1094 hres
= IDispatch_QueryInterface(disp
, &IID_ISubMatches
, (void**)&sm
);
1095 ok(hres
== S_OK
, "QueryInterface(IID_ISubMatches) returned %x\n", hres
);
1096 IDispatch_Release(disp
);
1098 hres
= ISubMatches_get_Item(sm
, 0, &v
);
1099 ok(hres
== E_INVALIDARG
, "get_Item returned %x, expected E_INVALIDARG\n", hres
);
1101 hres
= ISubMatches_get_Item(sm
, 0, NULL
);
1102 ok(hres
== E_POINTER
, "get_Item returned %x, expected E_POINTER\n", hres
);
1104 hres
= ISubMatches_get_Count(sm
, NULL
);
1105 ok(hres
== E_POINTER
, "get_Count returned %x, expected E_POINTER\n", hres
);
1106 ISubMatches_Release(sm
);
1108 hres
= IMatchCollection2_get__NewEnum(mc
, &unk
);
1109 ok(hres
== S_OK
, "get__NewEnum returned %x, expected S_OK\n", hres
);
1110 hres
= IUnknown_QueryInterface(unk
, &IID_IEnumVARIANT
, (void**)&ev
);
1111 ok(hres
== S_OK
, "QueryInterface(IID_IEnumVARIANT) returned %x\n", hres
);
1112 IUnknown_Release(unk
);
1113 IMatchCollection2_Release(mc
);
1115 hres
= IEnumVARIANT_Skip(ev
, 2);
1116 ok(hres
== S_OK
, "Skip returned %x\n", hres
);
1118 hres
= IEnumVARIANT_Next(ev
, 1, &v
, &fetched
);
1119 ok(hres
== S_FALSE
, "Next returned %x, expected S_FALSE\n", hres
);
1120 ok(fetched
== 0, "fetched = %d\n", fetched
);
1122 hres
= IEnumVARIANT_Skip(ev
, -1);
1123 ok(hres
== S_OK
, "Skip returned %x\n", hres
);
1125 hres
= IEnumVARIANT_Next(ev
, 1, &v
, &fetched
);
1126 ok(hres
== S_OK
, "Next returned %x\n", hres
);
1127 ok(fetched
== 1, "fetched = %d\n", fetched
);
1129 IEnumVARIANT_Release(ev
);
1131 IRegExp2_Release(regexp
);
1134 static BOOL
check_vbscript(void)
1136 IActiveScriptParseProcedure2
*vbscript
;
1139 hres
= CoCreateInstance(&CLSID_VBScript
, NULL
, CLSCTX_INPROC_SERVER
|CLSCTX_INPROC_HANDLER
,
1140 &IID_IActiveScriptParseProcedure2
, (void**)&vbscript
);
1142 IActiveScriptParseProcedure2_Release(vbscript
);
1144 return hres
== S_OK
;
1147 START_TEST(vbscript
)
1151 if(check_vbscript()) {
1153 test_vbscript_uninitializing();
1154 test_vbscript_release();
1155 test_vbscript_simplecreate();
1156 test_vbscript_initializing();
1161 win_skip("VBScript engine not available or too old\n");