Module: wine Branch: master Commit: 3013d5d1e7dec454077b95f680e6d4507c70226f URL: https://source.winehq.org/git/wine.git/?a=commit;h=3013d5d1e7dec454077b95f68...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Sep 25 19:22:40 2019 +0200
scrobj/tests: Add property element tests.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/scrobj/tests/scrobj.c | 125 +++++++++++++++++++++++++++++++++++++++---- dlls/scrobj/tests/scrobj.wsc | 8 +-- 2 files changed, 119 insertions(+), 14 deletions(-)
diff --git a/dlls/scrobj/tests/scrobj.c b/dlls/scrobj/tests/scrobj.c index 709f005080..e0a3ace708 100644 --- a/dlls/scrobj/tests/scrobj.c +++ b/dlls/scrobj/tests/scrobj.c @@ -106,9 +106,15 @@ DEFINE_EXPECT(Clone); DEFINE_EXPECT(GetScriptDispatch); DEFINE_EXPECT(GetDispID_vbAddOne); DEFINE_EXPECT(GetDispID_wtTest); +DEFINE_EXPECT(GetDispID_get_gsProp); +DEFINE_EXPECT(GetDispID_put_gsProp); DEFINE_EXPECT(InvokeEx); +DEFINE_EXPECT(InvokeEx_get_gsProp); +DEFINE_EXPECT(InvokeEx_put_gsProp);
-#define DISPID_WTTEST 100 +#define DISPID_WTTEST 100 +#define DISPID_GET_GSPROP 101 +#define DISPID_PUT_GSPROP 102
static DWORD parse_flags; static BOOL support_clone; @@ -182,6 +188,20 @@ static HRESULT WINAPI DispatchEx_GetDispID(IDispatchEx *iface, BSTR name, DWORD *pid = DISPID_WTTEST; return S_OK; } + if (!wcscmp(name, L"get_gsProp")) + { + CHECK_EXPECT(GetDispID_get_gsProp); + ok(!grfdex, "grfdex = %x\n", grfdex); + *pid = DISPID_GET_GSPROP; + return S_OK; + } + if (!wcscmp(name, L"put_gsProp")) + { + CHECK_EXPECT(GetDispID_put_gsProp); + ok(!grfdex, "grfdex = %x\n", grfdex); + *pid = DISPID_PUT_GSPROP; + return S_OK; + } ok(0, "unexpected name %s\n", wine_dbgstr_w(name)); return DISP_E_UNKNOWNNAME; } @@ -189,14 +209,35 @@ static HRESULT WINAPI DispatchEx_GetDispID(IDispatchEx *iface, BSTR name, DWORD static HRESULT WINAPI DispatchEx_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid, WORD flags, DISPPARAMS *pdp, VARIANT *res, EXCEPINFO *pei, IServiceProvider *caller) { - CHECK_EXPECT(InvokeEx); - ok(id == DISPID_WTTEST, "id = %u\n", id); - ok(lcid == 0x100, "lcid = %x\n", lcid); - ok(flags == DISPATCH_METHOD, "flags = %x\n", flags); - ok(caller == (void*)0xdeadbeef, "called = %p\n", caller); - V_VT(res) = VT_BOOL; - V_BOOL(res) = VARIANT_TRUE; - return S_OK; + switch (id) + { + case DISPID_WTTEST: + CHECK_EXPECT(InvokeEx); + ok(lcid == 0x100, "lcid = %x\n", lcid); + ok(flags == DISPATCH_METHOD, "flags = %x\n", flags); + ok(caller == (void*)0xdeadbeef, "called = %p\n", caller); + V_VT(res) = VT_BOOL; + V_BOOL(res) = VARIANT_TRUE; + return S_OK; + case DISPID_GET_GSPROP: + CHECK_EXPECT(InvokeEx_get_gsProp); + ok(flags == DISPATCH_METHOD, "flags = %x\n", flags); + ok(pdp->cArgs == 1, "cArgs = %d\n", pdp->cArgs); + V_VT(res) = VT_BOOL; + V_BOOL(res) = VARIANT_TRUE; + return S_OK; + case DISPID_PUT_GSPROP: + CHECK_EXPECT(InvokeEx_put_gsProp); + ok(flags == DISPATCH_METHOD, "flags = %x\n", flags); + ok(pdp->cArgs == 1, "cArgs = %d\n", pdp->cArgs); + ok(pdp->cNamedArgs == 0, "cNamedArgs = %d\n", pdp->cNamedArgs); + V_VT(res) = VT_BOOL; + V_BOOL(res) = VARIANT_FALSE; + return S_OK; + } + + ok(0, "unexpected id %u\n", id); + return E_FAIL; }
static HRESULT WINAPI DispatchEx_DeleteMemberByName(IDispatchEx *iface, BSTR name, DWORD grfdex) @@ -530,6 +571,8 @@ static HRESULT WINAPI ActiveScript_Clone(IActiveScript *iface, IActiveScript **p SET_EXPECT(GetScriptDispatch); SET_EXPECT(GetDispID_vbAddOne); SET_EXPECT(GetDispID_wtTest); + SET_EXPECT(GetDispID_get_gsProp); + SET_EXPECT(GetDispID_put_gsProp); SET_EXPECT(SetScriptState_STARTED); SET_EXPECT(ParseScriptText);
@@ -746,7 +789,8 @@ static void register_script_object(BOOL do_register, const WCHAR *file_name)
static void test_create_object(void) { - DISPID vb_add_one_id, js_add_two_id, wt_test_id, id; + DISPID vb_add_one_id, js_add_two_id, wt_test_id, wt_gsprop_id, id; + DISPID id_propput = DISPID_PROPERTYPUT; IDispatchEx *dispex; IClassFactory *cf; IDispatch *disp; @@ -791,6 +835,10 @@ static void test_create_object(void) CHECK_CALLED(GetDispID_vbAddOne); todo_wine CHECK_CALLED(GetDispID_wtTest); + todo_wine + CHECK_CALLED(GetDispID_get_gsProp); + todo_wine + CHECK_CALLED(GetDispID_put_gsProp); CHECK_CALLED(SetScriptState_STARTED); CHECK_CALLED(ParseScriptText);
@@ -820,6 +868,12 @@ static void test_create_object(void) ok(hres == S_OK, "Could not get wtTest id: %08x\n", hres); SysFreeString(str);
+ str = SysAllocString(L"gsProp"); + hres = IDispatchEx_GetDispID(dispex, str, fdexNameCaseSensitive, &wt_gsprop_id); + todo_wine + ok(hres == S_OK, "Could not get wtTest id: %08x\n", hres); + SysFreeString(str); + str = SysAllocString(L"vbaddone"); hres = IDispatchEx_GetDispID(dispex, str, fdexNameCaseSensitive, &id); todo_wine @@ -902,6 +956,44 @@ static void test_create_object(void) todo_wine ok(V_BOOL(&r) == VARIANT_TRUE, "V_I4(r) = %d\n", V_I4(&r));
+ memset(&ei, 0, sizeof(ei)); + memset(&dp, 0, sizeof(dp)); + V_VT(&v) = VT_I4; + V_I4(&v) = 4; + V_VT(&r) = VT_ERROR; + dp.cArgs = 1; + dp.rgvarg = &v; + SET_EXPECT(InvokeEx_get_gsProp); + hres = IDispatchEx_InvokeEx(dispex, wt_gsprop_id, 0, DISPATCH_PROPERTYGET|DISPATCH_METHOD, &dp, &r, &ei, NULL); + todo_wine + ok(hres == S_OK, "InvokeEx failed: %08x\n", hres); + todo_wine + CHECK_CALLED(InvokeEx_get_gsProp); + todo_wine + ok(V_VT(&r) == VT_BOOL, "V_VT(r) = %d\n", V_VT(&r)); + todo_wine + ok(V_BOOL(&r) == VARIANT_TRUE, "V_I4(r) = %d\n", V_I4(&r)); + + memset(&ei, 0, sizeof(ei)); + memset(&dp, 0, sizeof(dp)); + V_VT(&v) = VT_I4; + V_I4(&v) = 4; + V_VT(&r) = VT_ERROR; + dp.cArgs = 1; + dp.rgdispidNamedArgs = &id_propput; + dp.rgvarg = &v; + dp.cNamedArgs = 1; + SET_EXPECT(InvokeEx_put_gsProp); + hres = IDispatchEx_InvokeEx(dispex, wt_gsprop_id, 0, DISPATCH_PROPERTYPUT, &dp, &r, &ei, NULL); + todo_wine + ok(hres == S_OK, "InvokeEx failed: %08x\n", hres); + todo_wine + CHECK_CALLED(InvokeEx_put_gsProp); + todo_wine + ok(V_VT(&r) == VT_BOOL, "V_VT(r) = %d\n", V_VT(&r)); + todo_wine + ok(V_BOOL(&r) == VARIANT_FALSE, "V_I4(r) = %d\n", V_I4(&r)); + hres = IDispatchEx_InvokeEx(dispex, wt_test_id, 0x100, DISPATCH_PROPERTYGET, &dp, &r, &ei, (void*)0xdeadbeef); ok(hres == DISP_E_MEMBERNOTFOUND, "InvokeEx returned: %08x\n", hres);
@@ -914,7 +1006,6 @@ static void test_create_object(void) IDispatchEx_Release(dispex);
SET_EXPECT(SetScriptState_UNINITIALIZED); - todo_wine SET_EXPECT(Close); IUnknown_Release(unk); CHECK_CALLED(SetScriptState_UNINITIALIZED); @@ -932,6 +1023,8 @@ static void test_create_object(void) SET_EXPECT(GetScriptDispatch); SET_EXPECT(GetDispID_vbAddOne); SET_EXPECT(GetDispID_wtTest); + SET_EXPECT(GetDispID_get_gsProp); + SET_EXPECT(GetDispID_put_gsProp); SET_EXPECT(SetScriptState_STARTED); SET_EXPECT(ParseScriptText); hres = IClassFactory_CreateInstance(cf, NULL, &IID_IUnknown, (void**)&unk); @@ -949,6 +1042,10 @@ static void test_create_object(void) CHECK_CALLED(GetDispID_vbAddOne); todo_wine CHECK_CALLED(GetDispID_wtTest); + todo_wine + CHECK_CALLED(GetDispID_get_gsProp); + todo_wine + CHECK_CALLED(GetDispID_put_gsProp); CHECK_CALLED(SetScriptState_STARTED); CHECK_CALLED(ParseScriptText);
@@ -967,6 +1064,8 @@ static void test_create_object(void) SET_EXPECT(GetScriptDispatch); SET_EXPECT(GetDispID_vbAddOne); SET_EXPECT(GetDispID_wtTest); + SET_EXPECT(GetDispID_get_gsProp); + SET_EXPECT(GetDispID_put_gsProp); SET_EXPECT(SetScriptState_STARTED); hres = IClassFactory_CreateInstance(cf, NULL, &IID_IUnknown, (void**)&unk); ok(hres == S_OK, "Could not create scriptlet instance: %08x\n", hres); @@ -981,6 +1080,10 @@ static void test_create_object(void) CHECK_CALLED(GetDispID_vbAddOne); todo_wine CHECK_CALLED(GetDispID_wtTest); + todo_wine + CHECK_CALLED(GetDispID_get_gsProp); + todo_wine + CHECK_CALLED(GetDispID_put_gsProp); CHECK_CALLED(SetScriptState_STARTED);
SET_EXPECT(SetScriptState_UNINITIALIZED); diff --git a/dlls/scrobj/tests/scrobj.wsc b/dlls/scrobj/tests/scrobj.wsc index 41c7626cee..4cc4224dd7 100644 --- a/dlls/scrobj/tests/scrobj.wsc +++ b/dlls/scrobj/tests/scrobj.wsc @@ -6,12 +6,14 @@ <method name="vbAddOne"> <PARAMETER name="n"></PARAMETER> </method> - <method name="jsAddTwo"> - <Parameter name="n"/> - </method> + <method name="jsAddTwo" /> <method name="wtTest"> <Parameter name="i"/> </method> + <property name="gsProp"> + <get /> + <put> </put> + </property> </public> <script language="VBScript"> <![CDATA[