Jacek Caban : jscript: Added to_primitive on hosting objects test.
Alexandre Julliard
julliard at winehq.org
Wed Sep 2 09:30:50 CDT 2009
Module: wine
Branch: master
Commit: 00644c5449e1ba1307c1435068292427d236da27
URL: http://source.winehq.org/git/wine.git/?a=commit;h=00644c5449e1ba1307c1435068292427d236da27
Author: Jacek Caban <jacek at codeweavers.com>
Date: Wed Sep 2 12:25:21 2009 +0200
jscript: Added to_primitive on hosting objects test.
---
dlls/jscript/jsutils.c | 4 +++-
dlls/jscript/tests/run.c | 32 ++++++++++++++++++++++++++++----
2 files changed, 31 insertions(+), 5 deletions(-)
diff --git a/dlls/jscript/jsutils.c b/dlls/jscript/jsutils.c
index a93fb65..5d56661 100644
--- a/dlls/jscript/jsutils.c
+++ b/dlls/jscript/jsutils.c
@@ -199,8 +199,10 @@ HRESULT to_primitive(script_ctx_t *ctx, VARIANT *v, jsexcept_t *ei, VARIANT *ret
static const WCHAR valueOfW[] = {'v','a','l','u','e','O','f',0};
jsdisp = iface_to_jsdisp((IUnknown*)V_DISPATCH(v));
- if(!jsdisp)
+ if(!jsdisp) {
+ V_VT(ret) = VT_EMPTY;
return disp_propget(V_DISPATCH(v), DISPID_VALUE, ctx->lcid, ret, ei, NULL /*FIXME*/);
+ }
if(hint == NO_HINT)
hint = is_class(jsdisp, JSCLASS_DATE) ? HINT_STRING : HINT_NUMBER;
diff --git a/dlls/jscript/tests/run.c b/dlls/jscript/tests/run.c
index 0afb180..fe8274f 100644
--- a/dlls/jscript/tests/run.c
+++ b/dlls/jscript/tests/run.c
@@ -65,6 +65,7 @@ DEFINE_EXPECT(global_success_d);
DEFINE_EXPECT(global_success_i);
DEFINE_EXPECT(global_notexists_d);
DEFINE_EXPECT(testobj_delete);
+DEFINE_EXPECT(testobj_value);
DEFINE_EXPECT(GetItemInfo_testVal);
#define DISPID_GLOBAL_TESTPROPGET 0x1000
@@ -198,11 +199,30 @@ static HRESULT WINAPI DispatchEx_GetDispID(IDispatchEx *iface, BSTR bstrName, DW
return E_NOTIMPL;
}
-static HRESULT WINAPI DispatchEx_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp,
+static HRESULT WINAPI testObj_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp,
VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
{
- ok(0, "unexpected call\n");
- return E_NOTIMPL;
+ switch(id) {
+ case DISPID_VALUE:
+ CHECK_EXPECT(testobj_value);
+
+ ok(wFlags == INVOKE_PROPERTYGET, "wFlags = %x\n", wFlags);
+ ok(pdp != NULL, "pdp == NULL\n");
+ ok(!pdp->rgvarg, "rgvarg != NULL\n");
+ ok(!pdp->rgdispidNamedArgs, "rgdispidNamedArgs != NULL\n");
+ ok(!pdp->cArgs, "cArgs = %d\n", pdp->cArgs);
+ ok(!pdp->cNamedArgs, "cNamedArgs = %d\n", pdp->cNamedArgs);
+ ok(pvarRes != NULL, "pvarRes == NULL\n");
+ ok(V_VT(pvarRes) == VT_EMPTY, "V_VT(pvarRes) = %d\n", V_VT(pvarRes));
+ ok(pei != NULL, "pei == NULL\n");
+
+ V_VT(pvarRes) = VT_I4;
+ V_I4(pvarRes) = 1;
+ return S_OK;
+ }
+
+ ok(0, "unexpected call %x\n", id);
+ return DISP_E_MEMBERNOTFOUND;
}
static HRESULT WINAPI testObj_DeleteMemberByName(IDispatchEx *iface, BSTR bstrName, DWORD grfdex)
@@ -223,7 +243,7 @@ static IDispatchExVtbl testObjVtbl = {
DispatchEx_GetIDsOfNames,
DispatchEx_Invoke,
DispatchEx_GetDispID,
- DispatchEx_InvokeEx,
+ testObj_InvokeEx,
testObj_DeleteMemberByName,
DispatchEx_DeleteMemberByDispID,
DispatchEx_GetMemberProperties,
@@ -844,6 +864,10 @@ static void run_tests(void)
parse_script_a("ok((testObj instanceof Object) === false, 'testObj is instance of Object');");
+ SET_EXPECT(testobj_value);
+ parse_script_a("ok(String(testObj) === '1', 'wrong testObj value');");
+ CHECK_CALLED(testobj_value);
+
run_from_res("lang.js");
run_from_res("api.js");
run_from_res("regexp.js");
More information about the wine-cvs
mailing list