2 * Copyright 2016 Nikolay Sivov 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
31 #include "wine/test.h"
33 #define TESTSCRIPT_CLSID "{178fc164-f585-4e24-9c13-4bb7faf80746}"
34 static const GUID CLSID_TestScript
=
35 {0x178fc164,0xf585,0x4e24,{0x9c,0x13,0x4b,0xb7,0xfa,0xf8,0x07,0x46}};
36 static const WCHAR vbW
[] = {'V','B','S','c','r','i','p','t',0};
40 #define CTXARG_T DWORDLONG
41 #define IActiveScriptParseVtbl IActiveScriptParse64Vtbl
42 #define IActiveScriptSiteDebug_Release IActiveScriptSiteDebug64_Release
46 #define CTXARG_T DWORD
47 #define IActiveScriptParseVtbl IActiveScriptParse32Vtbl
48 #define IActiveScriptSiteDebug_Release IActiveScriptSiteDebug32_Release
52 #define DEFINE_EXPECT(func) \
53 static BOOL expect_ ## func = FALSE, called_ ## func = FALSE
55 #define SET_EXPECT(func) \
56 do { called_ ## func = FALSE; expect_ ## func = TRUE; } while(0)
58 #define CHECK_EXPECT2(func) \
60 ok(expect_ ##func, "unexpected call " #func "\n"); \
61 called_ ## func = TRUE; \
64 #define CHECK_EXPECT(func) \
66 CHECK_EXPECT2(func); \
67 expect_ ## func = FALSE; \
70 #define CHECK_CALLED(func) \
72 ok(called_ ## func, "expected " #func "\n"); \
73 expect_ ## func = called_ ## func = FALSE; \
76 #define CHECK_CALLED_BROKEN(func) \
78 ok(called_ ## func || broken(!called_ ## func), "expected " #func "\n"); \
79 expect_ ## func = called_ ## func = FALSE; \
82 #define CHECK_NOT_CALLED(func) \
84 ok(!called_ ## func, "unexpected " #func "\n"); \
85 expect_ ## func = called_ ## func = FALSE; \
88 #define CLEAR_CALLED(func) \
89 expect_ ## func = called_ ## func = FALSE
91 DEFINE_EXPECT(CreateInstance
);
92 DEFINE_EXPECT(SetInterfaceSafetyOptions
);
93 DEFINE_EXPECT(InitNew
);
95 DEFINE_EXPECT(SetScriptSite
);
96 DEFINE_EXPECT(QI_IActiveScriptParse
);
97 DEFINE_EXPECT(SetScriptState_INITIALIZED
);
98 DEFINE_EXPECT(AddNamedItem
);
100 #define EXPECT_REF(obj,ref) _expect_ref((IUnknown*)obj, ref, __LINE__)
101 static void _expect_ref(IUnknown
* obj
, ULONG ref
, int line
)
104 IUnknown_AddRef(obj
);
105 rc
= IUnknown_Release(obj
);
106 ok_(__FILE__
,line
)(rc
== ref
, "expected refcount %d, got %d\n", ref
, rc
);
109 static IActiveScriptSite
*site
;
110 static SCRIPTSTATE state
;
112 static HRESULT WINAPI
ActiveScriptParse_QueryInterface(IActiveScriptParse
*iface
, REFIID riid
, void **ppv
)
115 ok(0, "unexpected call\n");
116 return E_NOINTERFACE
;
119 static ULONG WINAPI
ActiveScriptParse_AddRef(IActiveScriptParse
*iface
)
124 static ULONG WINAPI
ActiveScriptParse_Release(IActiveScriptParse
*iface
)
129 static HRESULT WINAPI
ActiveScriptParse_InitNew(IActiveScriptParse
*iface
)
131 CHECK_EXPECT(InitNew
);
135 static HRESULT WINAPI
ActiveScriptParse_AddScriptlet(IActiveScriptParse
*iface
,
136 LPCOLESTR pstrDefaultName
, LPCOLESTR pstrCode
, LPCOLESTR pstrItemName
,
137 LPCOLESTR pstrSubItemName
, LPCOLESTR pstrEventName
, LPCOLESTR pstrDelimiter
,
138 CTXARG_T dwSourceContextCookie
, ULONG ulStartingLineNumber
, DWORD dwFlags
,
139 BSTR
*pbstrName
, EXCEPINFO
*pexcepinfo
)
141 ok(0, "unexpected call\n");
145 static HRESULT WINAPI
ActiveScriptParse_ParseScriptText(IActiveScriptParse
*iface
,
146 LPCOLESTR pstrCode
, LPCOLESTR pstrItemName
, IUnknown
*punkContext
,
147 LPCOLESTR pstrDelimiter
, CTXARG_T dwSourceContextCookie
, ULONG ulStartingLine
,
148 DWORD dwFlags
, VARIANT
*pvarResult
, EXCEPINFO
*pexcepinfo
)
150 ok(0, "unexpected call\n");
154 static const IActiveScriptParseVtbl ActiveScriptParseVtbl
= {
155 ActiveScriptParse_QueryInterface
,
156 ActiveScriptParse_AddRef
,
157 ActiveScriptParse_Release
,
158 ActiveScriptParse_InitNew
,
159 ActiveScriptParse_AddScriptlet
,
160 ActiveScriptParse_ParseScriptText
163 static IActiveScriptParse ActiveScriptParse
= { &ActiveScriptParseVtbl
};
165 static HRESULT WINAPI
ObjectSafety_QueryInterface(IObjectSafety
*iface
, REFIID riid
, void **ppv
)
168 ok(0, "unexpected call %s\n", wine_dbgstr_guid(riid
));
169 return E_NOINTERFACE
;
172 static ULONG WINAPI
ObjectSafety_AddRef(IObjectSafety
*iface
)
177 static ULONG WINAPI
ObjectSafety_Release(IObjectSafety
*iface
)
182 static HRESULT WINAPI
ObjectSafety_GetInterfaceSafetyOptions(IObjectSafety
*iface
, REFIID riid
,
183 DWORD
*pdwSupportedOptions
, DWORD
*pdwEnabledOptions
)
185 ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid
));
189 static HRESULT WINAPI
ObjectSafety_SetInterfaceSafetyOptions(IObjectSafety
*iface
, REFIID riid
,
190 DWORD mask
, DWORD options
)
192 CHECK_EXPECT(SetInterfaceSafetyOptions
);
194 ok(IsEqualGUID(&IID_IActiveScriptParse
, riid
), "unexpected riid %s\n", wine_dbgstr_guid(riid
));
196 ok(mask
== INTERFACESAFE_FOR_UNTRUSTED_DATA
, "option mask = %x\n", mask
);
197 ok(options
== 0, "options = %x\n", options
);
202 static const IObjectSafetyVtbl ObjectSafetyVtbl
= {
203 ObjectSafety_QueryInterface
,
205 ObjectSafety_Release
,
206 ObjectSafety_GetInterfaceSafetyOptions
,
207 ObjectSafety_SetInterfaceSafetyOptions
210 static IObjectSafety ObjectSafety
= { &ObjectSafetyVtbl
};
212 static HRESULT WINAPI
ActiveScript_QueryInterface(IActiveScript
*iface
, REFIID riid
, void **ppv
)
216 if(IsEqualGUID(&IID_IUnknown
, riid
) || IsEqualGUID(&IID_IActiveScript
, riid
)) {
221 if(IsEqualGUID(&IID_IObjectSafety
, riid
)) {
222 *ppv
= &ObjectSafety
;
226 if(IsEqualGUID(&IID_IActiveScriptParse
, riid
)) {
227 CHECK_EXPECT(QI_IActiveScriptParse
);
228 *ppv
= &ActiveScriptParse
;
232 if(IsEqualGUID(&IID_IActiveScriptGarbageCollector
, riid
))
233 return E_NOINTERFACE
;
235 ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid
));
236 return E_NOINTERFACE
;
239 static ULONG WINAPI
ActiveScript_AddRef(IActiveScript
*iface
)
244 static ULONG WINAPI
ActiveScript_Release(IActiveScript
*iface
)
249 static HRESULT WINAPI
ActiveScript_SetScriptSite(IActiveScript
*iface
, IActiveScriptSite
*pass
)
251 IActiveScriptSiteInterruptPoll
*poll
;
252 IActiveScriptSiteWindow
*window
;
253 IActiveScriptSiteDebug
*debug
;
254 IServiceProvider
*service
;
255 ICanHandleException
*canexpection
;
259 CHECK_EXPECT(SetScriptSite
);
261 ok(pass
!= NULL
, "pass == NULL\n");
263 hres
= IActiveScriptSite_QueryInterface(pass
, &IID_IActiveScriptSiteInterruptPoll
, (void**)&poll
);
264 ok(hres
== E_NOINTERFACE
, "Got IActiveScriptSiteInterruptPoll interface: %08x\n", hres
);
266 hres
= IActiveScriptSite_GetLCID(pass
, &lcid
);
267 ok(hres
== S_OK
, "GetLCID failed: %08x\n", hres
);
269 hres
= IActiveScriptSite_OnStateChange(pass
, (state
= SCRIPTSTATE_INITIALIZED
));
270 ok(hres
== E_NOTIMPL
, "OnStateChange failed: %08x\n", hres
);
272 hres
= IActiveScriptSite_QueryInterface(pass
, &IID_IActiveScriptSiteDebug
, (void**)&debug
);
273 ok(hres
== E_NOINTERFACE
, "Got IActiveScriptSiteDebug interface: %08x\n", hres
);
275 hres
= IActiveScriptSite_QueryInterface(pass
, &IID_ICanHandleException
, (void**)&canexpection
);
276 ok(hres
== E_NOINTERFACE
, "Got IID_ICanHandleException interface: %08x\n", hres
);
278 hres
= IActiveScriptSite_QueryInterface(pass
, &IID_IServiceProvider
, (void**)&service
);
279 ok(hres
== S_OK
, "Could not get IServiceProvider interface: %08x\n", hres
);
280 IServiceProvider_Release(service
);
282 hres
= IActiveScriptSite_QueryInterface(pass
, &IID_IActiveScriptSiteWindow
, (void**)&window
);
283 ok(hres
== S_OK
, "Could not get IActiveScriptSiteWindow interface: %08x\n", hres
);
284 IActiveScriptSiteWindow_Release(window
);
287 IActiveScriptSite_AddRef(site
);
291 static HRESULT WINAPI
ActiveScript_GetScriptSite(IActiveScript
*iface
, REFIID riid
,
294 ok(0, "unexpected call\n");
298 static HRESULT WINAPI
ActiveScript_SetScriptState(IActiveScript
*iface
, SCRIPTSTATE ss
)
300 if (ss
== SCRIPTSTATE_INITIALIZED
) {
301 CHECK_EXPECT(SetScriptState_INITIALIZED
);
305 ok(0, "unexpected call, state %u\n", ss
);
310 static HRESULT WINAPI
ActiveScript_GetScriptState(IActiveScript
*iface
, SCRIPTSTATE
*pssState
)
312 ok(0, "unexpected call\n");
316 static HRESULT WINAPI
ActiveScript_Close(IActiveScript
*iface
)
322 static HRESULT WINAPI
ActiveScript_AddNamedItem(IActiveScript
*iface
, LPCOLESTR name
, DWORD flags
)
324 static const WCHAR oW
[] = {'o',0};
325 CHECK_EXPECT(AddNamedItem
);
326 ok(!lstrcmpW(name
, oW
), "got name %s\n", wine_dbgstr_w(name
));
327 ok(flags
== (SCRIPTITEM_ISVISIBLE
|SCRIPTITEM_ISSOURCE
|SCRIPTITEM_GLOBALMEMBERS
), "got flags %#x\n", flags
);
331 static HRESULT WINAPI
ActiveScript_AddTypeLib(IActiveScript
*iface
, REFGUID rguidTypeLib
,
332 DWORD dwMajor
, DWORD dwMinor
, DWORD dwFlags
)
334 ok(0, "unexpected call\n");
338 static HRESULT WINAPI
ActiveScript_GetScriptDispatch(IActiveScript
*iface
, LPCOLESTR pstrItemName
,
341 ok(0, "unexpected call\n");
345 static HRESULT WINAPI
ActiveScript_GetCurrentScriptThreadID(IActiveScript
*iface
,
346 SCRIPTTHREADID
*pstridThread
)
348 ok(0, "unexpected call\n");
352 static HRESULT WINAPI
ActiveScript_GetScriptThreadID(IActiveScript
*iface
,
353 DWORD dwWin32ThreadId
, SCRIPTTHREADID
*pstidThread
)
355 ok(0, "unexpected call\n");
359 static HRESULT WINAPI
ActiveScript_GetScriptThreadState(IActiveScript
*iface
,
360 SCRIPTTHREADID stidThread
, SCRIPTTHREADSTATE
*pstsState
)
362 ok(0, "unexpected call\n");
366 static HRESULT WINAPI
ActiveScript_InterruptScriptThread(IActiveScript
*iface
,
367 SCRIPTTHREADID stidThread
, const EXCEPINFO
*pexcepinfo
, DWORD dwFlags
)
369 ok(0, "unexpected call\n");
373 static HRESULT WINAPI
ActiveScript_Clone(IActiveScript
*iface
, IActiveScript
**ppscript
)
375 ok(0, "unexpected call\n");
379 static const IActiveScriptVtbl ActiveScriptVtbl
= {
380 ActiveScript_QueryInterface
,
382 ActiveScript_Release
,
383 ActiveScript_SetScriptSite
,
384 ActiveScript_GetScriptSite
,
385 ActiveScript_SetScriptState
,
386 ActiveScript_GetScriptState
,
388 ActiveScript_AddNamedItem
,
389 ActiveScript_AddTypeLib
,
390 ActiveScript_GetScriptDispatch
,
391 ActiveScript_GetCurrentScriptThreadID
,
392 ActiveScript_GetScriptThreadID
,
393 ActiveScript_GetScriptThreadState
,
394 ActiveScript_InterruptScriptThread
,
398 static IActiveScript ActiveScript
= { &ActiveScriptVtbl
};
400 static HRESULT WINAPI
ClassFactory_QueryInterface(IClassFactory
*iface
, REFIID riid
, void **ppv
)
404 if(IsEqualGUID(&IID_IUnknown
, riid
) || IsEqualGUID(&IID_IClassFactory
, riid
)) {
409 if(IsEqualGUID(&IID_IMarshal
, riid
))
410 return E_NOINTERFACE
;
412 ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid
));
413 return E_NOINTERFACE
;
416 static ULONG WINAPI
ClassFactory_AddRef(IClassFactory
*iface
)
421 static ULONG WINAPI
ClassFactory_Release(IClassFactory
*iface
)
426 static HRESULT WINAPI
ClassFactory_CreateInstance(IClassFactory
*iface
, IUnknown
*outer
, REFIID riid
, void **ppv
)
428 CHECK_EXPECT(CreateInstance
);
430 ok(!outer
, "outer = %p\n", outer
);
431 ok(IsEqualGUID(&IID_IActiveScript
, riid
), "unexpected riid %s\n", wine_dbgstr_guid(riid
));
432 *ppv
= &ActiveScript
;
436 static HRESULT WINAPI
ClassFactory_LockServer(IClassFactory
*iface
, BOOL dolock
)
438 ok(0, "unexpected call\n");
442 static const IClassFactoryVtbl ClassFactoryVtbl
= {
443 ClassFactory_QueryInterface
,
445 ClassFactory_Release
,
446 ClassFactory_CreateInstance
,
447 ClassFactory_LockServer
450 static IClassFactory script_cf
= { &ClassFactoryVtbl
};
452 static BOOL
init_key(const char *key_name
, const char *def_value
, BOOL init
)
458 RegDeleteKeyA(HKEY_CLASSES_ROOT
, key_name
);
462 res
= RegCreateKeyA(HKEY_CLASSES_ROOT
, key_name
, &hkey
);
463 if(res
!= ERROR_SUCCESS
)
467 res
= RegSetValueA(hkey
, NULL
, REG_SZ
, def_value
, strlen(def_value
));
471 return res
== ERROR_SUCCESS
;
474 static BOOL
init_registry(BOOL init
)
476 return init_key("TestScript\\CLSID", TESTSCRIPT_CLSID
, init
)
477 && init_key("CLSID\\"TESTSCRIPT_CLSID
"\\Implemented Categories\\{F0B7A1A1-9847-11CF-8F20-00805F2CD064}",
479 && init_key("CLSID\\"TESTSCRIPT_CLSID
"\\Implemented Categories\\{F0B7A1A2-9847-11CF-8F20-00805F2CD064}",
483 static BOOL
register_script_engine(void)
488 if(!init_registry(TRUE
)) {
489 init_registry(FALSE
);
493 hres
= CoRegisterClassObject(&CLSID_TestScript
, (IUnknown
*)&script_cf
,
494 CLSCTX_INPROC_SERVER
, REGCLS_MULTIPLEUSE
, ®id
);
495 ok(hres
== S_OK
, "Could not register script engine: %08x\n", hres
);
500 static HRESULT WINAPI
OleClientSite_QueryInterface(IOleClientSite
*iface
, REFIID riid
, void **obj
)
502 if (IsEqualIID(riid
, &IID_IOleClientSite
) || IsEqualIID(riid
, &IID_IUnknown
))
505 IOleClientSite_AddRef(iface
);
510 return E_NOINTERFACE
;
513 static ULONG WINAPI
OleClientSite_AddRef(IOleClientSite
*iface
)
518 static ULONG WINAPI
OleClientSite_Release(IOleClientSite
*iface
)
523 static HRESULT WINAPI
OleClientSite_SaveObject(IOleClientSite
*iface
)
528 static HRESULT WINAPI
OleClientSite_GetMoniker(IOleClientSite
*iface
, DWORD assign
,
529 DWORD which
, IMoniker
**moniker
)
534 static HRESULT WINAPI
OleClientSite_GetContainer(IOleClientSite
*iface
, IOleContainer
**container
)
539 static HRESULT WINAPI
OleClientSite_ShowObject(IOleClientSite
*iface
)
544 static HRESULT WINAPI
OleClientSite_OnShowWindow(IOleClientSite
*iface
, BOOL show
)
549 static HRESULT WINAPI
OleClientSite_RequestNewObjectLayout(IOleClientSite
*iface
)
554 static const IOleClientSiteVtbl OleClientSiteVtbl
= {
555 OleClientSite_QueryInterface
,
556 OleClientSite_AddRef
,
557 OleClientSite_Release
,
558 OleClientSite_SaveObject
,
559 OleClientSite_GetMoniker
,
560 OleClientSite_GetContainer
,
561 OleClientSite_ShowObject
,
562 OleClientSite_OnShowWindow
,
563 OleClientSite_RequestNewObjectLayout
566 static IOleClientSite testclientsite
= { &OleClientSiteVtbl
};
568 static void test_oleobject(void)
570 DWORD status
, dpi_x
, dpi_y
;
571 IOleClientSite
*site
;
577 hr
= CoCreateInstance(&CLSID_ScriptControl
, NULL
, CLSCTX_INPROC_SERVER
|CLSCTX_INPROC_HANDLER
,
578 &IID_IOleObject
, (void**)&obj
);
579 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
581 if (0) /* crashes on w2k3 */
582 hr
= IOleObject_GetMiscStatus(obj
, DVASPECT_CONTENT
, NULL
);
585 hr
= IOleObject_GetMiscStatus(obj
, DVASPECT_CONTENT
, &status
);
586 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
587 ok(status
!= 0, "got 0x%08x\n", status
);
589 hr
= IOleObject_SetClientSite(obj
, &testclientsite
);
590 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
592 if (0) /* crashes on w2k3 */
593 hr
= IOleObject_GetClientSite(obj
, NULL
);
595 hr
= IOleObject_GetClientSite(obj
, &site
);
596 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
597 ok(site
== &testclientsite
, "got %p, %p\n", site
, &testclientsite
);
598 IOleClientSite_Release(site
);
600 hr
= IOleObject_SetClientSite(obj
, NULL
);
601 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
603 hr
= IOleObject_GetClientSite(obj
, &site
);
604 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
605 ok(site
== NULL
, "got %p\n", site
);
609 dpi_x
= GetDeviceCaps(hdc
, LOGPIXELSX
);
610 dpi_y
= GetDeviceCaps(hdc
, LOGPIXELSY
);
613 memset(&extent
, 0, sizeof(extent
));
614 hr
= IOleObject_GetExtent(obj
, DVASPECT_CONTENT
, &extent
);
615 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
616 ok(extent
.cx
== MulDiv(38, 2540, dpi_x
), "got %d\n", extent
.cx
);
617 ok(extent
.cy
== MulDiv(38, 2540, dpi_y
), "got %d\n", extent
.cy
);
619 extent
.cx
= extent
.cy
= 0xdeadbeef;
620 hr
= IOleObject_GetExtent(obj
, DVASPECT_THUMBNAIL
, &extent
);
621 ok(hr
== DV_E_DVASPECT
, "got 0x%08x\n", hr
);
622 ok(extent
.cx
== 0xdeadbeef, "got %d\n", extent
.cx
);
623 ok(extent
.cy
== 0xdeadbeef, "got %d\n", extent
.cy
);
625 extent
.cx
= extent
.cy
= 0xdeadbeef;
626 hr
= IOleObject_GetExtent(obj
, DVASPECT_ICON
, &extent
);
627 ok(hr
== DV_E_DVASPECT
, "got 0x%08x\n", hr
);
628 ok(extent
.cx
== 0xdeadbeef, "got %d\n", extent
.cx
);
629 ok(extent
.cy
== 0xdeadbeef, "got %d\n", extent
.cy
);
631 extent
.cx
= extent
.cy
= 0xdeadbeef;
632 hr
= IOleObject_GetExtent(obj
, DVASPECT_DOCPRINT
, &extent
);
633 ok(hr
== DV_E_DVASPECT
, "got 0x%08x\n", hr
);
634 ok(extent
.cx
== 0xdeadbeef, "got %d\n", extent
.cx
);
635 ok(extent
.cy
== 0xdeadbeef, "got %d\n", extent
.cy
);
637 IOleObject_Release(obj
);
640 static void test_persiststreaminit(void)
642 IPersistStreamInit
*init
;
645 hr
= CoCreateInstance(&CLSID_ScriptControl
, NULL
, CLSCTX_INPROC_SERVER
|CLSCTX_INPROC_HANDLER
,
646 &IID_IPersistStreamInit
, (void**)&init
);
647 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
649 IPersistStreamInit_Release(init
);
652 static void test_olecontrol(void)
654 IOleControl
*olecontrol
;
658 hr
= CoCreateInstance(&CLSID_ScriptControl
, NULL
, CLSCTX_INPROC_SERVER
|CLSCTX_INPROC_HANDLER
,
659 &IID_IOleControl
, (void**)&olecontrol
);
660 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
662 memset(&info
, 0xab, sizeof(info
));
663 info
.cb
= sizeof(info
);
664 hr
= IOleControl_GetControlInfo(olecontrol
, &info
);
665 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
666 ok(info
.hAccel
== NULL
, "got %p\n", info
.hAccel
);
667 ok(info
.cAccel
== 0, "got %d\n", info
.cAccel
);
668 ok(info
.dwFlags
== 0xabababab, "got %x\n", info
.dwFlags
);
670 memset(&info
, 0xab, sizeof(info
));
671 info
.cb
= sizeof(info
) - 1;
672 hr
= IOleControl_GetControlInfo(olecontrol
, &info
);
673 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
674 ok(info
.hAccel
== NULL
, "got %p\n", info
.hAccel
);
675 ok(info
.cAccel
== 0, "got %d\n", info
.cAccel
);
676 ok(info
.dwFlags
== 0xabababab, "got %x\n", info
.dwFlags
);
678 if (0) /* crashes on win2k3 */
680 hr
= IOleControl_GetControlInfo(olecontrol
, NULL
);
681 ok(hr
== E_POINTER
, "got 0x%08x\n", hr
);
684 IOleControl_Release(olecontrol
);
687 static void test_Language(void)
689 static const WCHAR jsW
[] = {'J','S','c','r','i','p','t',0};
690 static const WCHAR vb2W
[] = {'v','B','s','c','r','i','p','t',0};
691 static const WCHAR dummyW
[] = {'d','u','m','m','y',0};
696 hr
= CoCreateInstance(&CLSID_ScriptControl
, NULL
, CLSCTX_INPROC_SERVER
|CLSCTX_INPROC_HANDLER
,
697 &IID_IScriptControl
, (void**)&sc
);
698 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
700 hr
= IScriptControl_get_Language(sc
, NULL
);
701 ok(hr
== E_POINTER
, "got 0x%08x\n", hr
);
703 str
= (BSTR
)0xdeadbeef;
704 hr
= IScriptControl_get_Language(sc
, &str
);
705 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
706 ok(str
== NULL
, "got %s\n", wine_dbgstr_w(str
));
708 str
= SysAllocString(vbW
);
709 hr
= IScriptControl_put_Language(sc
, str
);
710 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
713 str
= SysAllocString(vb2W
);
714 hr
= IScriptControl_put_Language(sc
, str
);
715 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
718 hr
= IScriptControl_get_Language(sc
, &str
);
719 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
720 ok(!lstrcmpW(str
, vbW
), "got %s\n", wine_dbgstr_w(str
));
723 str
= SysAllocString(dummyW
);
724 hr
= IScriptControl_put_Language(sc
, str
);
725 ok(hr
== CTL_E_INVALIDPROPERTYVALUE
, "got 0x%08x\n", hr
);
728 hr
= IScriptControl_get_Language(sc
, &str
);
729 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
730 ok(!lstrcmpW(str
, vbW
), "got %s\n", wine_dbgstr_w(str
));
733 str
= SysAllocString(jsW
);
734 hr
= IScriptControl_put_Language(sc
, str
);
735 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
738 hr
= IScriptControl_get_Language(sc
, &str
);
739 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
740 ok(!lstrcmpW(str
, jsW
), "got %s\n", wine_dbgstr_w(str
));
743 hr
= IScriptControl_put_Language(sc
, NULL
);
744 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
746 hr
= IScriptControl_get_Language(sc
, &str
);
747 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
748 ok(str
== NULL
, "got %s\n", wine_dbgstr_w(str
));
750 IScriptControl_Release(sc
);
752 /* custom script engine */
753 if (register_script_engine()) {
754 static const WCHAR testscriptW
[] = {'t','e','s','t','s','c','r','i','p','t',0};
756 hr
= CoCreateInstance(&CLSID_ScriptControl
, NULL
, CLSCTX_INPROC_SERVER
|CLSCTX_INPROC_HANDLER
,
757 &IID_IScriptControl
, (void**)&sc
);
758 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
760 SET_EXPECT(CreateInstance
);
761 SET_EXPECT(SetInterfaceSafetyOptions
);
762 SET_EXPECT(SetScriptSite
);
763 SET_EXPECT(QI_IActiveScriptParse
);
766 str
= SysAllocString(testscriptW
);
767 hr
= IScriptControl_put_Language(sc
, str
);
768 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
771 CHECK_CALLED(CreateInstance
);
772 CHECK_CALLED(SetInterfaceSafetyOptions
);
773 CHECK_CALLED(SetScriptSite
);
774 CHECK_CALLED(QI_IActiveScriptParse
);
775 CHECK_CALLED(InitNew
);
776 hr
= IScriptControl_get_Language(sc
, &str
);
778 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
780 ok(!lstrcmpW(testscriptW
, str
), "%s\n", wine_dbgstr_w(str
));
783 init_registry(FALSE
);
787 IScriptControl_Release(sc
);
792 skip("Could not register TestScript engine\n");
795 static void test_connectionpoints(void)
797 IConnectionPointContainer
*container
, *container2
;
798 IConnectionPoint
*cp
;
803 hr
= CoCreateInstance(&CLSID_ScriptControl
, NULL
, CLSCTX_INPROC_SERVER
|CLSCTX_INPROC_HANDLER
,
804 &IID_IScriptControl
, (void**)&sc
);
805 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
808 hr
= IScriptControl_QueryInterface(sc
, &IID_IConnectionPointContainer
, (void**)&container
);
809 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
811 EXPECT_REF(container
, 2);
813 hr
= IConnectionPointContainer_FindConnectionPoint(container
, &IID_IPropertyNotifySink
, &cp
);
814 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
816 if (0) /* crashes on win2k3 */
818 hr
= IConnectionPoint_GetConnectionPointContainer(cp
, NULL
);
819 ok(hr
== E_POINTER
, "got 0x%08x\n", hr
);
822 hr
= IConnectionPoint_GetConnectionInterface(cp
, &iid
);
823 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
824 ok(IsEqualIID(&iid
, &IID_IPropertyNotifySink
), "got %s\n", wine_dbgstr_guid(&iid
));
826 hr
= IConnectionPoint_GetConnectionPointContainer(cp
, &container2
);
827 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
828 ok(container2
== container
, "got %p, expected %p\n", container2
, container
);
829 IConnectionPointContainer_Release(container2
);
831 IConnectionPoint_Release(cp
);
833 hr
= IConnectionPointContainer_FindConnectionPoint(container
, &DIID_DScriptControlSource
, &cp
);
834 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
836 if (0) /* crashes on win2k3 */
838 hr
= IConnectionPoint_GetConnectionPointContainer(cp
, NULL
);
839 ok(hr
== E_POINTER
, "got 0x%08x\n", hr
);
842 hr
= IConnectionPoint_GetConnectionInterface(cp
, &iid
);
843 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
844 ok(IsEqualIID(&iid
, &DIID_DScriptControlSource
), "got %s\n", wine_dbgstr_guid(&iid
));
846 hr
= IConnectionPoint_GetConnectionPointContainer(cp
, &container2
);
847 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
848 ok(container2
== container
, "got %p, expected %p\n", container2
, container
);
849 IConnectionPointContainer_Release(container2
);
851 IConnectionPoint_Release(cp
);
853 IConnectionPointContainer_Release(container
);
854 IScriptControl_Release(sc
);
857 static void test_quickactivate(void)
863 hr
= CoCreateInstance(&CLSID_ScriptControl
, NULL
, CLSCTX_INPROC_SERVER
|CLSCTX_INPROC_HANDLER
,
864 &IID_IScriptControl
, (void**)&sc
);
865 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
867 hr
= IScriptControl_QueryInterface(sc
, &IID_IQuickActivate
, (void**)&qa
);
868 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
870 IQuickActivate_Release(qa
);
871 IScriptControl_Release(sc
);
874 static void test_viewobject(void)
876 DWORD status
, aspect
, flags
;
877 IViewObjectEx
*viewex
;
883 hr
= CoCreateInstance(&CLSID_ScriptControl
, NULL
, CLSCTX_INPROC_SERVER
|CLSCTX_INPROC_HANDLER
,
884 &IID_IScriptControl
, (void**)&sc
);
885 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
887 hr
= IScriptControl_QueryInterface(sc
, &IID_IViewObject
, (void**)&view
);
888 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
889 IViewObject_Release(view
);
891 hr
= IScriptControl_QueryInterface(sc
, &IID_IViewObject2
, (void**)&view
);
892 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
894 sink
= (IAdviseSink
*)0xdeadbeef;
895 hr
= IViewObject_GetAdvise(view
, &aspect
, &flags
, &sink
);
896 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
897 ok(aspect
== DVASPECT_CONTENT
, "got %u\n", aspect
);
898 ok(flags
== 0, "got %#x\n", flags
);
899 ok(sink
== NULL
, "got %p\n", sink
);
901 hr
= IViewObject_SetAdvise(view
, DVASPECT_CONTENT
, 0, NULL
);
902 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
904 hr
= IViewObject_SetAdvise(view
, DVASPECT_THUMBNAIL
, 0, NULL
);
905 ok(hr
== DV_E_DVASPECT
, "got 0x%08x\n", hr
);
907 hr
= IViewObject_SetAdvise(view
, DVASPECT_ICON
, 0, NULL
);
908 ok(hr
== DV_E_DVASPECT
, "got 0x%08x\n", hr
);
910 hr
= IViewObject_SetAdvise(view
, DVASPECT_DOCPRINT
, 0, NULL
);
911 ok(hr
== DV_E_DVASPECT
, "got 0x%08x\n", hr
);
913 sink
= (IAdviseSink
*)0xdeadbeef;
914 hr
= IViewObject_GetAdvise(view
, &aspect
, &flags
, &sink
);
915 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
916 ok(aspect
== DVASPECT_CONTENT
, "got %u\n", aspect
);
917 ok(flags
== 0, "got %#x\n", flags
);
918 ok(sink
== NULL
, "got %p\n", sink
);
920 IViewObject_Release(view
);
922 hr
= IScriptControl_QueryInterface(sc
, &IID_IViewObjectEx
, (void**)&viewex
);
923 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
926 hr
= IViewObjectEx_GetViewStatus(viewex
, NULL
);
929 hr
= IViewObjectEx_GetViewStatus(viewex
, &status
);
930 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
931 ok(status
== VIEWSTATUS_OPAQUE
, "got %#x\n", status
);
933 IViewObjectEx_Release(viewex
);
935 IScriptControl_Release(sc
);
938 static void test_pointerinactive(void)
940 IPointerInactive
*pi
;
945 hr
= CoCreateInstance(&CLSID_ScriptControl
, NULL
, CLSCTX_INPROC_SERVER
|CLSCTX_INPROC_HANDLER
,
946 &IID_IScriptControl
, (void**)&sc
);
947 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
949 hr
= IScriptControl_QueryInterface(sc
, &IID_IPointerInactive
, (void**)&pi
);
950 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
952 if (0) /* crashes w2k3 */
953 hr
= IPointerInactive_GetActivationPolicy(pi
, NULL
);
956 hr
= IPointerInactive_GetActivationPolicy(pi
, &policy
);
957 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
958 ok(policy
== 0, "got %#x\n", policy
);
960 IPointerInactive_Release(pi
);
961 IScriptControl_Release(sc
);
964 static void test_timeout(void)
971 hr
= CoCreateInstance(&CLSID_ScriptControl
, NULL
, CLSCTX_INPROC_SERVER
|CLSCTX_INPROC_HANDLER
,
972 &IID_IScriptControl
, (void**)&sc
);
973 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
975 hr
= IScriptControl_get_Timeout(sc
, NULL
);
976 ok(hr
== E_POINTER
, "got 0x%08x\n", hr
);
979 hr
= IScriptControl_get_Timeout(sc
, &val
);
980 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
981 ok(val
== 10000, "got %d\n", val
);
983 hr
= IScriptControl_put_Timeout(sc
, -1);
984 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
987 hr
= IScriptControl_get_Timeout(sc
, &val
);
988 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
989 ok(val
== -1, "got %d\n", val
);
991 hr
= IScriptControl_put_Timeout(sc
, -2);
992 ok(hr
== CTL_E_INVALIDPROPERTYVALUE
, "got 0x%08x\n", hr
);
995 hr
= IScriptControl_get_Timeout(sc
, &val
);
996 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
997 ok(val
== -1, "got %d\n", val
);
999 hr
= IScriptControl_put_Timeout(sc
, 0);
1000 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1003 hr
= IScriptControl_get_Timeout(sc
, &val
);
1004 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1005 ok(val
== 0, "got %d\n", val
);
1007 str
= SysAllocString(vbW
);
1008 hr
= IScriptControl_put_Language(sc
, str
);
1009 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1013 hr
= IScriptControl_get_Timeout(sc
, &val
);
1014 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1015 ok(val
== 0, "got %d\n", val
);
1017 hr
= IScriptControl_put_Timeout(sc
, 10000);
1018 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1020 IScriptControl_Release(sc
);
1023 static void test_Reset(void)
1029 hr
= CoCreateInstance(&CLSID_ScriptControl
, NULL
, CLSCTX_INPROC_SERVER
|CLSCTX_INPROC_HANDLER
,
1030 &IID_IScriptControl
, (void**)&sc
);
1031 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1033 hr
= IScriptControl_Reset(sc
);
1034 ok(hr
== E_FAIL
, "got 0x%08x\n", hr
);
1036 str
= SysAllocString(vbW
);
1037 hr
= IScriptControl_put_Language(sc
, str
);
1038 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1041 hr
= IScriptControl_Reset(sc
);
1042 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1044 hr
= IScriptControl_get_Language(sc
, &str
);
1045 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1046 ok(!lstrcmpW(str
, vbW
), "got %s\n", wine_dbgstr_w(str
));
1049 IScriptControl_Release(sc
);
1051 /* custom script engine */
1052 if (register_script_engine()) {
1053 static const WCHAR testscriptW
[] = {'t','e','s','t','s','c','r','i','p','t',0};
1055 hr
= CoCreateInstance(&CLSID_ScriptControl
, NULL
, CLSCTX_INPROC_SERVER
|CLSCTX_INPROC_HANDLER
,
1056 &IID_IScriptControl
, (void**)&sc
);
1057 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1059 SET_EXPECT(CreateInstance
);
1060 SET_EXPECT(SetInterfaceSafetyOptions
);
1061 SET_EXPECT(SetScriptSite
);
1062 SET_EXPECT(QI_IActiveScriptParse
);
1063 SET_EXPECT(InitNew
);
1065 str
= SysAllocString(testscriptW
);
1066 hr
= IScriptControl_put_Language(sc
, str
);
1067 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1070 SET_EXPECT(SetScriptState_INITIALIZED
);
1071 hr
= IScriptControl_Reset(sc
);
1072 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1073 CHECK_CALLED(SetScriptState_INITIALIZED
);
1075 SET_EXPECT(SetScriptState_INITIALIZED
);
1076 hr
= IScriptControl_Reset(sc
);
1077 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1078 CHECK_CALLED(SetScriptState_INITIALIZED
);
1080 init_registry(FALSE
);
1084 IScriptControl_Release(sc
);
1086 CHECK_CALLED(Close
);
1089 skip("Could not register TestScript engine\n");
1092 static HRESULT WINAPI
disp_QI(IDispatch
*iface
, REFIID riid
, void **obj
)
1094 if (IsEqualIID(riid
, &IID_IDispatch
) || IsEqualIID(riid
, &IID_IUnknown
)) {
1096 IDispatch_AddRef(iface
);
1101 return E_NOINTERFACE
;
1104 static ULONG WINAPI
disp_AddRef(IDispatch
*iface
)
1109 static ULONG WINAPI
disp_Release(IDispatch
*iface
)
1114 static HRESULT WINAPI
disp_GetTypeInfoCount(IDispatch
*iface
, UINT
*count
)
1116 ok(0, "unexpected call\n");
1120 static HRESULT WINAPI
disp_GetTypeInfo(IDispatch
*iface
, UINT index
, LCID lcid
, ITypeInfo
**ti
)
1122 ok(0, "unexpected call\n");
1126 static HRESULT WINAPI
disp_GetIDsOfNames(IDispatch
*iface
, REFIID riid
, LPOLESTR
*names
,
1127 UINT cnames
, LCID lcid
, DISPID
*dispid
)
1129 ok(0, "unexpected call\n");
1133 static HRESULT WINAPI
disp_Invoke(IDispatch
*iface
, DISPID dispid
, REFIID riid
, LCID lcid
,
1134 WORD flags
, DISPPARAMS
*dispparams
, VARIANT
*result
, EXCEPINFO
*ei
, UINT
*arg_err
)
1136 ok(0, "unexpected call\n");
1140 static const IDispatchVtbl dispvtbl
= {
1144 disp_GetTypeInfoCount
,
1150 static IDispatch testdisp
= { &dispvtbl
};
1152 static void test_AddObject(void)
1154 static const WCHAR oW
[] = {'o',0};
1159 hr
= CoCreateInstance(&CLSID_ScriptControl
, NULL
, CLSCTX_INPROC_SERVER
|CLSCTX_INPROC_HANDLER
,
1160 &IID_IScriptControl
, (void**)&sc
);
1161 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1163 objname
= SysAllocString(oW
);
1164 hr
= IScriptControl_AddObject(sc
, objname
, NULL
, VARIANT_FALSE
);
1165 ok(hr
== E_INVALIDARG
, "got 0x%08x\n", hr
);
1167 hr
= IScriptControl_AddObject(sc
, objname
, &testdisp
, VARIANT_FALSE
);
1168 ok(hr
== E_FAIL
, "got 0x%08x\n", hr
);
1170 str
= SysAllocString(vbW
);
1171 hr
= IScriptControl_put_Language(sc
, str
);
1172 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1175 hr
= IScriptControl_AddObject(sc
, objname
, &testdisp
, VARIANT_TRUE
);
1176 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1178 hr
= IScriptControl_Reset(sc
);
1179 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1181 hr
= IScriptControl_AddObject(sc
, objname
, &testdisp
, VARIANT_TRUE
);
1182 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1184 IScriptControl_Release(sc
);
1186 /* custom script engine */
1187 if (register_script_engine()) {
1188 static const WCHAR testscriptW
[] = {'t','e','s','t','s','c','r','i','p','t',0};
1190 hr
= CoCreateInstance(&CLSID_ScriptControl
, NULL
, CLSCTX_INPROC_SERVER
|CLSCTX_INPROC_HANDLER
,
1191 &IID_IScriptControl
, (void**)&sc
);
1192 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1194 SET_EXPECT(CreateInstance
);
1195 SET_EXPECT(SetInterfaceSafetyOptions
);
1196 SET_EXPECT(SetScriptSite
);
1197 SET_EXPECT(QI_IActiveScriptParse
);
1198 SET_EXPECT(InitNew
);
1200 str
= SysAllocString(testscriptW
);
1201 hr
= IScriptControl_put_Language(sc
, str
);
1202 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1205 hr
= IScriptControl_AddObject(sc
, objname
, NULL
, VARIANT_FALSE
);
1206 ok(hr
== E_INVALIDARG
, "got 0x%08x\n", hr
);
1208 SET_EXPECT(AddNamedItem
);
1209 hr
= IScriptControl_AddObject(sc
, objname
, &testdisp
, VARIANT_TRUE
);
1210 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1211 CHECK_CALLED(AddNamedItem
);
1213 hr
= IScriptControl_AddObject(sc
, objname
, &testdisp
, VARIANT_TRUE
);
1214 ok(hr
== E_INVALIDARG
, "got 0x%08x\n", hr
);
1216 init_registry(FALSE
);
1220 IScriptControl_Release(sc
);
1222 CHECK_CALLED(Close
);
1225 skip("Could not register TestScript engine\n");
1227 SysFreeString(objname
);
1230 static void test_AllowUI(void)
1236 hr
= CoCreateInstance(&CLSID_ScriptControl
, NULL
, CLSCTX_INPROC_SERVER
|CLSCTX_INPROC_HANDLER
,
1237 &IID_IScriptControl
, (void**)&sc
);
1238 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1240 hr
= IScriptControl_get_AllowUI(sc
, NULL
);
1241 ok(hr
== E_POINTER
, "got 0x%08x\n", hr
);
1243 hr
= IScriptControl_get_AllowUI(sc
, &allow
);
1244 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1245 ok(allow
== VARIANT_TRUE
, "got %d\n", allow
);
1247 hr
= IScriptControl_put_AllowUI(sc
, VARIANT_FALSE
);
1248 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1250 hr
= IScriptControl_get_AllowUI(sc
, &allow
);
1251 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1252 ok(allow
== VARIANT_FALSE
, "got %d\n", allow
);
1254 IScriptControl_Release(sc
);
1257 static void test_UseSafeSubset(void)
1260 VARIANT_BOOL use_safe_subset
;
1264 hr
= CoCreateInstance(&CLSID_ScriptControl
, NULL
, CLSCTX_INPROC_SERVER
|CLSCTX_INPROC_HANDLER
,
1265 &IID_IScriptControl
, (void**)&sc
);
1266 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1268 hr
= IScriptControl_get_UseSafeSubset(sc
, NULL
);
1269 ok(hr
== E_POINTER
, "got 0x%08x\n", hr
);
1271 hr
= IScriptControl_get_UseSafeSubset(sc
, &use_safe_subset
);
1272 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1273 ok(use_safe_subset
== VARIANT_FALSE
, "got %d\n", use_safe_subset
);
1275 hr
= IScriptControl_put_UseSafeSubset(sc
, VARIANT_TRUE
);
1276 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1278 hr
= IScriptControl_get_UseSafeSubset(sc
, &use_safe_subset
);
1279 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1280 ok(use_safe_subset
== VARIANT_TRUE
, "got %d\n", use_safe_subset
);
1282 str
= SysAllocString(vbW
);
1283 hr
= IScriptControl_put_Language(sc
, str
);
1284 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1287 hr
= IScriptControl_get_UseSafeSubset(sc
, &use_safe_subset
);
1288 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1289 ok(use_safe_subset
== VARIANT_TRUE
, "got %d\n", use_safe_subset
);
1291 IScriptControl_Release(sc
);
1294 static void test_State(void)
1297 ScriptControlStates state
;
1301 hr
= CoCreateInstance(&CLSID_ScriptControl
, NULL
, CLSCTX_INPROC_SERVER
|CLSCTX_INPROC_HANDLER
,
1302 &IID_IScriptControl
, (void**)&sc
);
1303 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1305 hr
= IScriptControl_get_State(sc
, NULL
);
1306 ok(hr
== E_POINTER
, "got 0x%08x\n", hr
);
1308 hr
= IScriptControl_get_State(sc
, &state
);
1309 ok(hr
== E_FAIL
, "got 0x%08x\n", hr
);
1311 hr
= IScriptControl_put_State(sc
, Connected
);
1312 ok(hr
== E_FAIL
, "got 0x%08x\n", hr
);
1314 str
= SysAllocString(vbW
);
1315 hr
= IScriptControl_put_Language(sc
, str
);
1316 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1319 hr
= IScriptControl_get_State(sc
, &state
);
1320 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1321 ok(state
== Initialized
, "got %d\n", state
);
1323 hr
= IScriptControl_put_State(sc
, Connected
);
1324 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1326 hr
= IScriptControl_get_State(sc
, &state
);
1327 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1328 ok(state
== Connected
, "got %d\n", state
);
1330 hr
= IScriptControl_put_State(sc
, 2);
1331 ok(hr
== CTL_E_INVALIDPROPERTYVALUE
, "got 0x%08x\n", hr
);
1333 hr
= IScriptControl_get_State(sc
, &state
);
1334 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1335 ok(state
== Connected
, "got %d\n", state
);
1337 hr
= IScriptControl_put_State(sc
, -1);
1338 ok(hr
== CTL_E_INVALIDPROPERTYVALUE
, "got 0x%08x\n", hr
);
1340 hr
= IScriptControl_get_State(sc
, &state
);
1341 ok(hr
== S_OK
, "got 0x%08x\n", hr
);
1342 ok(state
== Connected
, "got %d\n", state
);
1344 IScriptControl_Release(sc
);
1347 START_TEST(msscript
)
1354 hr
= CoCreateInstance(&CLSID_ScriptControl
, NULL
, CLSCTX_INPROC_SERVER
|CLSCTX_INPROC_HANDLER
,
1355 &IID_IUnknown
, (void**)&unk
);
1357 win_skip("Could not create ScriptControl object: %08x\n", hr
);
1360 IUnknown_Release(unk
);
1363 test_persiststreaminit();
1366 test_connectionpoints();
1367 test_quickactivate();
1369 test_pointerinactive();
1374 test_UseSafeSubset();