Module: wine Branch: master Commit: 2d7a3bb4827533ee102497de12c61b850be59c9b URL: http://source.winehq.org/git/wine.git/?a=commit;h=2d7a3bb4827533ee102497de12...
Author: Jacek Caban jacek@codeweavers.com Date: Mon Dec 17 13:36:44 2012 +0100
jscript: Fixed deleting properties by name from IDispatchEx interface.
---
dlls/jscript/dispex.c | 3 ++- dlls/jscript/tests/run.c | 29 +++++++++++++++++++++-------- 2 files changed, 23 insertions(+), 9 deletions(-)
diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c index 78809ee..0ecd20a 100644 --- a/dlls/jscript/dispex.c +++ b/dlls/jscript/dispex.c @@ -1535,7 +1535,8 @@ HRESULT disp_delete_name(script_ctx_t *ctx, IDispatch *disp, jsstr_t *name, BOOL if(bstr) { hres = IDispatchEx_DeleteMemberByName(dispex, bstr, make_grfdex(ctx, fdexNameCaseSensitive)); SysFreeString(bstr); - *ret = TRUE; + if(SUCCEEDED(hres)) + *ret = hres == S_OK; }else { hres = E_OUTOFMEMORY; } diff --git a/dlls/jscript/tests/run.c b/dlls/jscript/tests/run.c index 46f519a..52fee57 100644 --- a/dlls/jscript/tests/run.c +++ b/dlls/jscript/tests/run.c @@ -89,7 +89,8 @@ DEFINE_EXPECT(global_propargput_i); DEFINE_EXPECT(global_testargtypes_i); DEFINE_EXPECT(puredisp_prop_d); DEFINE_EXPECT(puredisp_noprop_d); -DEFINE_EXPECT(testobj_delete); +DEFINE_EXPECT(testobj_delete_test); +DEFINE_EXPECT(testobj_delete_nodelete); DEFINE_EXPECT(testobj_value); DEFINE_EXPECT(testobj_prop_d); DEFINE_EXPECT(testobj_withprop_d); @@ -402,11 +403,19 @@ static HRESULT WINAPI testObj_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid,
static HRESULT WINAPI testObj_DeleteMemberByName(IDispatchEx *iface, BSTR bstrName, DWORD grfdex) { - CHECK_EXPECT(testobj_delete); + if(!strcmp_wa(bstrName, "deleteTest")) { + CHECK_EXPECT(testobj_delete_test); + test_grfdex(grfdex, fdexNameCaseSensitive); + return S_OK; + } + if(!strcmp_wa(bstrName, "noDeleteTest")) { + CHECK_EXPECT(testobj_delete_nodelete); + test_grfdex(grfdex, fdexNameCaseSensitive); + return S_FALSE; + }
- ok(!strcmp_wa(bstrName, "deleteTest"), "unexpected name %s\n", wine_dbgstr_w(bstrName)); - test_grfdex(grfdex, fdexNameCaseSensitive); - return S_OK; + ok(0, "unexpected name %s\n", wine_dbgstr_w(bstrName)); + return E_FAIL; }
static IDispatchExVtbl testObjVtbl = { @@ -1836,9 +1845,13 @@ static BOOL run_tests(void) CHECK_CALLED(global_success_d); CHECK_CALLED(global_success_i);
- SET_EXPECT(testobj_delete); - parse_script_a("delete testObj.deleteTest;"); - CHECK_CALLED(testobj_delete); + SET_EXPECT(testobj_delete_test); + parse_script_a("ok((delete testObj.deleteTest) === true, 'delete testObj.deleteTest did not return true');"); + CHECK_CALLED(testobj_delete_test); + + SET_EXPECT(testobj_delete_nodelete); + parse_script_a("ok((delete testObj.noDeleteTest) === false, 'delete testObj.noDeleteTest did not return false');"); + CHECK_CALLED(testobj_delete_nodelete);
SET_EXPECT(global_propdelete_d); SET_EXPECT(DeleteMemberByDispID);