Module: wine Branch: master Commit: 0fe003435e90dc32dd405a62af8fbcc20afc925d URL: https://source.winehq.org/git/wine.git/?a=commit;h=0fe003435e90dc32dd405a62a...
Author: Jacek Caban jacek@codeweavers.com Date: Thu Oct 17 22:47:07 2019 +0200
vbscript/tests: Added Err object IDispatch tests.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/vbscript/tests/api.vbs | 5 +++ dlls/vbscript/tests/run.c | 86 ++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 90 insertions(+), 1 deletion(-)
diff --git a/dlls/vbscript/tests/api.vbs b/dlls/vbscript/tests/api.vbs index 12e9f475f5..49dd4959f7 100644 --- a/dlls/vbscript/tests/api.vbs +++ b/dlls/vbscript/tests/api.vbs @@ -1607,6 +1607,11 @@ sub testErrRaise() call ok(err.description = "", "err.description = " & err.description) call ok(err.helpfile = "", "err.helpfile = " & err.helpfile) call ok(err.helpcontext = 0, "err.helpcontext = " & err.helpcontext) + + dim e + e = err + call ok(getVT(e) = "VT_I4*", "getVT(e) = " & getVT(e)) + call ok(e = 0, "e = " & e) end sub call testErrRaise()
diff --git a/dlls/vbscript/tests/run.c b/dlls/vbscript/tests/run.c index f323a1ec85..2d34a8c80f 100644 --- a/dlls/vbscript/tests/run.c +++ b/dlls/vbscript/tests/run.c @@ -105,6 +105,7 @@ DEFINE_EXPECT(global_propargput_i); DEFINE_EXPECT(global_propargput1_d); DEFINE_EXPECT(global_propargput1_i); DEFINE_EXPECT(global_testoptionalarg_i); +DEFINE_EXPECT(global_testerrorobject_i); DEFINE_EXPECT(collectionobj_newenum_i); DEFINE_EXPECT(Next); DEFINE_EXPECT(GetWindow); @@ -136,7 +137,8 @@ DEFINE_EXPECT(OnLeaveScript); #define DISPID_GLOBAL_SETOBJ 1019 #define DISPID_GLOBAL_TODO_WINE_OK 1020 #define DISPID_GLOBAL_WEEKSTARTDAY 1021 -#define DISPID_GLOBAL_GLOBALCALLBACK 1022 +#define DISPID_GLOBAL_GLOBALCALLBACK 1022 +#define DISPID_GLOBAL_TESTERROROBJECT 1023
#define DISPID_TESTOBJ_PROPGET 2000 #define DISPID_TESTOBJ_PROPPUT 2001 @@ -1197,6 +1199,11 @@ static HRESULT WINAPI Global_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD *pid = DISPID_GLOBAL_TESTOPTIONALARG; return S_OK; } + if(!strcmp_wa(bstrName, "testErrorObject")) { + test_grfdex(grfdex, fdexNameCaseInsensitive); + *pid = DISPID_GLOBAL_TESTERROROBJECT; + return S_OK; + }
if(strict_dispid_check && strcmp_wa(bstrName, "x")) ok(0, "unexpected call %s %x\n", wine_dbgstr_w(bstrName), grfdex); @@ -1620,6 +1627,70 @@ static HRESULT WINAPI Global_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid, SET_EXPECT(OnLeaveScript); return S_OK; } + case DISPID_GLOBAL_TESTERROROBJECT: { + ITypeInfo *typeinfo; + IDispatchEx *dispex; + DISPPARAMS dp; + VARIANT v, r; + EXCEPINFO ei; + IDispatch *disp; + WCHAR *names[1]; + UINT count, i; + DISPID id; + HRESULT hres; + + static WCHAR props[][32] = { L"clear", L"description", L"helpcontext", L"helpFILE", L"number", L"raise", L"source" }; + + CHECK_EXPECT(global_testerrorobject_i); + + ok(wFlags == INVOKE_FUNC, "wFlags = %x\n", wFlags); + ok(pdp != NULL, "pdp == NULL\n"); + ok(pdp->rgvarg != NULL, "rgvarg == NULL\n"); + ok(!pdp->rgdispidNamedArgs, "rgdispidNamedArgs != NULL\n"); + ok(pdp->cArgs == 1, "cArgs = %d\n", pdp->cArgs); + ok(!pdp->cNamedArgs, "cNamedArgs = %d\n", pdp->cNamedArgs); + ok(!pvarRes, "pvarRes != NULL\n"); + ok(pei != NULL, "pei == NULL\n"); + + ok(V_VT(pdp->rgvarg) == VT_DISPATCH, "V_VT(pdp->rgvarg) = %d\n", V_VT(pdp->rgvarg)); + disp = V_DISPATCH(pdp->rgvarg); + hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex); + ok(hres == E_NOINTERFACE, "Could not get IDispatchEx iface: %08x\n", hres); + + hres = IDispatch_GetTypeInfoCount(disp, &count); + ok(hres == S_OK, "GetTypeInfoCount returned: %08x\n", hres); + ok(count == 0, "count = %u\n", count); + + hres = IDispatch_GetTypeInfo(disp, 0, 0, &typeinfo); + ok(hres == DISP_E_BADINDEX, "GetTypeInfo returned: %08x\n", hres); + + for(i = 0; i < ARRAY_SIZE(props); i++) { + names[0] = props[i]; + hres = IDispatch_GetIDsOfNames(disp, &IID_NULL, names, 1, 0, &id); + ok(hres == S_OK, "GetIDsOfNames failed: %08x\n", hres); + ok(id == i + 1, "%s id = %u\n", wine_dbgstr_w(props[i]), id); + } + + memset(&dp, 0, sizeof(dp)); + memset(&ei, 0, sizeof(ei)); + V_VT(&v) = VT_ERROR; + hres = IDispatch_Invoke(disp, 5, &IID_NULL, 0, DISPATCH_PROPERTYGET, &dp, &v, &ei, NULL); + ok(hres == S_OK, "Invoke failed: %08x\n", hres); + ok(V_VT(&v) == VT_I4, "V_VT(v) = %d\n", V_VT(&v)); + ok(V_I4(&v) == 1, "V_I4(v) = %d\n", V_I4(&v)); + hres = IDispatch_Invoke(disp, DISPID_VALUE, &IID_NULL, 0, DISPATCH_PROPERTYGET, &dp, &v, &ei, NULL); + ok(hres == S_OK, "Invoke failed: %08x\n", hres); + ok(V_VT(&v) == VT_I4, "V_VT(v) = %d\n", V_VT(&v)); + ok(V_I4(&v) == 1, "V_I4(v) = %d\n", V_I4(&v)); + + dp.rgvarg = &v; + V_VT(&v) = VT_I4; + V_I4(&v) = 6; + V_VT(&r) = VT_EMPTY; + hres = IDispatch_Invoke(disp, DISPID_VALUE, &IID_NULL, 6, DISPATCH_METHOD|DISPATCH_PROPERTYGET, &dp, &r, &ei, NULL); + ok(hres == S_OK, "Invoke failed: %08x\n", hres); + return S_OK; + } }
ok(0, "unexpected call %d\n", id); @@ -2279,6 +2350,19 @@ static void test_callbacks(void) CHECK_CALLED(OnLeaveScript); CHECK_CALLED(OnScriptError);
+ SET_EXPECT(OnEnterScript); + SET_EXPECT(global_testerrorobject_i); + SET_EXPECT(OnLeaveScript); + hres = IActiveScriptParse_ParseScriptText(parser, + L"on error resume next\n" + L"err.raise 1\n" + L"testErrorObject err\n", + NULL, NULL, NULL, 0, 0, 0, NULL, NULL); + ok(hres == S_OK, "ParseScriptText failed: %08x\n", hres); + CHECK_CALLED(OnEnterScript); + CHECK_CALLED(global_testerrorobject_i); + CHECK_CALLED(OnLeaveScript); + IDispatchEx_Release(dispex);
IActiveScriptParse_Release(parser);