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