Module: wine Branch: master Commit: c751389df48b874a6ece45db98d733e8b215449d URL: http://source.winehq.org/git/wine.git/?a=commit;h=c751389df48b874a6ece45db98...
Author: Jacek Caban jacek@codeweavers.com Date: Thu Jan 24 12:27:25 2013 +0100
vbscript: Added GetObject tests.
---
dlls/vbscript/tests/createobj.c | 96 +++++++++++++++++++++++++++++++++++++-- 1 files changed, 92 insertions(+), 4 deletions(-)
diff --git a/dlls/vbscript/tests/createobj.c b/dlls/vbscript/tests/createobj.c index 9dafe1c..4ae4208 100644 --- a/dlls/vbscript/tests/createobj.c +++ b/dlls/vbscript/tests/createobj.c @@ -36,6 +36,7 @@ #define IActiveScriptParse_Release IActiveScriptParse64_Release #define IActiveScriptParse_InitNew IActiveScriptParse64_InitNew #define IActiveScriptParse_ParseScriptText IActiveScriptParse64_ParseScriptText +#define IActiveScriptParseProcedure2_Release IActiveScriptParseProcedure2_64_Release
#else
@@ -43,6 +44,7 @@ #define IActiveScriptParse_Release IActiveScriptParse32_Release #define IActiveScriptParse_InitNew IActiveScriptParse32_InitNew #define IActiveScriptParse_ParseScriptText IActiveScriptParse32_ParseScriptText +#define IActiveScriptParseProcedure2_Release IActiveScriptParseProcedure2_32_Release
#endif
@@ -72,6 +74,9 @@ extern const CLSID CLSID_VBScript; expect_ ## func = called_ ## func = FALSE; \ }while(0)
+#define CLEAR_CALLED(func) \ + expect_ ## func = called_ ## func = FALSE + DEFINE_EXPECT(CreateInstance); DEFINE_EXPECT(ProcessUrlAction); DEFINE_EXPECT(QueryCustomPolicy); @@ -91,12 +96,16 @@ static HRESULT QueryCustomPolicy_hres; static DWORD QueryCustomPolicy_psize; static DWORD QueryCustomPolicy_policy; static HRESULT QI_IDispatch_hres; +static HRESULT QI_IObjectWithSite_hres; static HRESULT SetSite_hres;
-#define TESTOBJ_CLSID "{178fc163-f585-4e24-9c13-4bb7faf80646}" +#define TESTOBJ_CLSID "{178fc163-f585-4e24-9c13-4bb7faf80646}" +#define TESTOBJINST_CLSID "{178fc163-f585-4e24-9c13-4bb7faf80647}"
static const GUID CLSID_TestObj = {0x178fc163,0xf585,0x4e24,{0x9c,0x13,0x4b,0xb7,0xfa,0xf8,0x06,0x46}}; +static const GUID CLSID_TestObjInst = + {0x178fc163,0xf585,0x4e24,{0x9c,0x13,0x4b,0xb7,0xfa,0xf8,0x06,0x47}};
/* Defined as extern in urlmon.idl, but not exported by uuid.lib */ const GUID GUID_CUSTOM_CONFIRMOBJECTSAFETY = @@ -201,6 +210,8 @@ static HRESULT WINAPI DispatchEx_QueryInterface(IDispatchEx *iface, REFIID riid, *ppv = iface; }else if(IsEqualGUID(&IID_IObjectWithSite, riid)) { CHECK_EXPECT(QI_IObjectWithSite); + if(FAILED(QI_IObjectWithSite_hres)) + return QI_IObjectWithSite_hres; *ppv = object_with_site; }else if(IsEqualGUID(&IID_IObjectSafety, riid)) { ok(0, "Unexpected IID_IObjectSafety query\n"); @@ -740,6 +751,7 @@ static IActiveScriptParse *create_script(BOOL use_sec_mgr) QueryCustomPolicy_psize = sizeof(DWORD); QueryCustomPolicy_policy = URLPOLICY_ALLOW; QI_IDispatch_hres = S_OK; + QI_IObjectWithSite_hres = S_OK; SetSite_hres = S_OK;
hres = CoCreateInstance(&CLSID_VBScript, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER, @@ -971,6 +983,59 @@ static void test_CreateObject(void) IActiveScriptParse_Release(parser); }
+static void test_GetObject(void) +{ + IActiveScriptParse *parser; + HRESULT hres; + + /* Never allowed with security manager */ + parser = create_script(TRUE); + hres = parse_script_ae(parser, "Call GetObject("clsid:" TESTOBJINST_CLSID "").reportSuccess()"); + ok(hres == VB_E_CANNOT_CREATE_OBJ, "hres = %08x\n", hres); + IActiveScriptParse_Release(parser); + + parser = create_script(FALSE); + + SET_EXPECT(QI_IObjectWithSite); + SET_EXPECT(SetSite); + SET_EXPECT(reportSuccess); + hres = parse_script_ae(parser, "Call GetObject("clsid:" TESTOBJINST_CLSID "").reportSuccess()"); + if(hres == 0x8007007e) { /* Workaround for broken win2k */ + win_skip("got unexpected error %08x\n", hres); + CLEAR_CALLED(QI_IObjectWithSite); + CLEAR_CALLED(SetSite); + CLEAR_CALLED(reportSuccess); + IActiveScriptParse_Release(parser); + return; + } + CHECK_CALLED(QI_IObjectWithSite); + CHECK_CALLED(SetSite); + CHECK_CALLED(reportSuccess); + + SetSite_hres = E_FAIL; + SET_EXPECT(QI_IObjectWithSite); + SET_EXPECT(SetSite); + hres = parse_script_ae(parser, "Call GetObject("clsid:" TESTOBJINST_CLSID "").reportSuccess()"); + ok(hres == E_FAIL, "hres = %08x\n", hres); + CHECK_CALLED(QI_IObjectWithSite); + CHECK_CALLED(SetSite); + + QI_IObjectWithSite_hres = E_NOINTERFACE; + SET_EXPECT(QI_IObjectWithSite); + SET_EXPECT(reportSuccess); + parse_script_a(parser, "Call GetObject("clsid:" TESTOBJINST_CLSID "").reportSuccess()"); + CHECK_CALLED(QI_IObjectWithSite); + CHECK_CALLED(reportSuccess); + + IActiveScriptParse_Release(parser); + + /* Invalid moniker */ + parser = create_script(FALSE); + hres = parse_script_ae(parser, "Call GetObject("nonexistent:test").reportSuccess()"); + ok(hres == MK_E_SYNTAX, "hres = %08x\n", hres); + IActiveScriptParse_Release(parser); +} + static BOOL init_key(const char *key_name, const char *def_value, BOOL init) { HKEY hkey; @@ -1012,18 +1077,41 @@ static BOOL register_activex(void) CLSCTX_INPROC_SERVER, REGCLS_MULTIPLEUSE, ®id); ok(hres == S_OK, "Could not register script engine: %08x\n", hres);
+ hres = CoRegisterClassObject(&CLSID_TestObjInst, (IUnknown *)&testObj, + CLSCTX_INPROC_SERVER, REGCLS_MULTIPLEUSE, ®id); + ok(hres == S_OK, "Could not register script engine: %08x\n", hres); + return TRUE; }
+static BOOL check_vbscript(void) +{ + IActiveScriptParseProcedure2 *vbscript; + HRESULT hres; + + hres = CoCreateInstance(&CLSID_VBScript, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER, + &IID_IActiveScriptParseProcedure2, (void**)&vbscript); + if(SUCCEEDED(hres)) + IActiveScriptParseProcedure2_Release(vbscript); + + return hres == S_OK; +} + + START_TEST(createobj) { CoInitialize(NULL);
- register_activex(); + if(check_vbscript()) { + register_activex();
- test_CreateObject(); + test_CreateObject(); + test_GetObject();
- init_registry(FALSE); + init_registry(FALSE); + }else { + win_skip("Broken engine, probably too old\n"); + }
CoUninitialize(); }