Jacek Caban : scrobj/tests: Add property element tests.

Alexandre Julliard julliard at winehq.org
Wed Sep 25 16:45:19 CDT 2019


Module: wine
Branch: master
Commit: 3013d5d1e7dec454077b95f680e6d4507c70226f
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=3013d5d1e7dec454077b95f680e6d4507c70226f

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Sep 25 19:22:40 2019 +0200

scrobj/tests: Add property element tests.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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[




More information about the wine-cvs mailing list