Dmitry Timoshkov : oleaut32/tests: Add a test for calling a varargs method using typelib marshaller.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Sep 4 07:03:43 CDT 2015


Module: wine
Branch: master
Commit: c28244a92ed52649a876180115c817a590c324ca
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=c28244a92ed52649a876180115c817a590c324ca

Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date:   Fri Sep  4 15:24:34 2015 +0800

oleaut32/tests: Add a test for calling a varargs method using typelib marshaller.

---

 dlls/oleaut32/tests/tmarshal.c         | 29 +++++++++++++++++++++++++++--
 dlls/oleaut32/tests/tmarshal.idl       |  3 +++
 dlls/oleaut32/tests/tmarshal_dispids.h |  1 +
 3 files changed, 31 insertions(+), 2 deletions(-)

diff --git a/dlls/oleaut32/tests/tmarshal.c b/dlls/oleaut32/tests/tmarshal.c
index e8d5e64..1893534 100644
--- a/dlls/oleaut32/tests/tmarshal.c
+++ b/dlls/oleaut32/tests/tmarshal.c
@@ -839,6 +839,13 @@ static HRESULT WINAPI Widget_neg_restrict(IWidget* iface, INT *i)
     return S_OK;
 }
 
+static HRESULT WINAPI Widget_VarArg_Run(
+    IWidget *iface, BSTR name, SAFEARRAY *params, VARIANT *result)
+{
+    trace("VarArg_Run(%p,%p,%p)\n", name, params, result);
+    return S_OK;
+}
+
 static const struct IWidgetVtbl Widget_VTable =
 {
     Widget_QueryInterface,
@@ -876,7 +883,8 @@ static const struct IWidgetVtbl Widget_VTable =
     Widget_put_prop_opt_arg,
     Widget_put_prop_req_arg,
     Widget_pos_restrict,
-    Widget_neg_restrict
+    Widget_neg_restrict,
+    Widget_VarArg_Run
 };
 
 static HRESULT WINAPI StaticWidget_QueryInterface(IStaticWidget *iface, REFIID riid, void **ppvObject)
@@ -1492,7 +1500,7 @@ static void test_typelibmarshal(void)
     dispparams.rgdispidNamedArgs = NULL;
     dispparams.rgvarg = vararg;
     hr = IDispatch_Invoke(pDispatch, DISPID_TM_VARARG, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_METHOD, &dispparams, NULL, NULL, NULL);
-    ok_ole_success(hr, ITypeInfo_Invoke);
+    ok_ole_success(hr, IDispatch_Invoke);
 
     /* call VarArg, even one (non-optional, non-safearray) named argument is not allowed */
     dispidNamed = 0;
@@ -1502,6 +1510,23 @@ static void test_typelibmarshal(void)
     ok(hr == DISP_E_NONAMEDARGS, "IDispatch_Invoke should have returned DISP_E_NONAMEDARGS instead of 0x%08x\n", hr);
     dispidNamed = DISPID_PROPERTYPUT;
 
+    /* call VarArg_Run */
+    VariantInit(&vararg[1]);
+    V_VT(&vararg[1]) = VT_BSTR;
+    V_BSTR(&vararg[1]) = SysAllocString(szCat);
+    VariantInit(&vararg[0]);
+    V_VT(&vararg[0]) = VT_BSTR;
+    V_BSTR(&vararg[0]) = SysAllocString(NULL);
+    dispparams.cNamedArgs = 0;
+    dispparams.cArgs = 2;
+    dispparams.rgdispidNamedArgs = NULL;
+    dispparams.rgvarg = vararg;
+    hr = IDispatch_Invoke(pDispatch, DISPID_TM_VARARG_RUN, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_METHOD, &dispparams, NULL, NULL, NULL);
+todo_wine
+    ok_ole_success(hr, IDispatch_Invoke);
+    SysFreeString(V_BSTR(&vararg[1]));
+    SysFreeString(V_BSTR(&vararg[0]));
+
     /* call Error */
     dispparams.cNamedArgs = 0;
     dispparams.cArgs = 0;
diff --git a/dlls/oleaut32/tests/tmarshal.idl b/dlls/oleaut32/tests/tmarshal.idl
index 33a4df9..ff9cac3 100644
--- a/dlls/oleaut32/tests/tmarshal.idl
+++ b/dlls/oleaut32/tests/tmarshal.idl
@@ -179,6 +179,9 @@ library TestTypelib
 
         [id(DISPID_TM_NEG_RESTRICTED), restricted]
         HRESULT neg_restrict([out, retval] INT *i);
+
+        [id(DISPID_TM_VARARG_RUN), vararg]
+        HRESULT VarArg_Run([in] BSTR name, [in] SAFEARRAY(VARIANT) params, [out, retval] VARIANT *result);
     }
 
     [
diff --git a/dlls/oleaut32/tests/tmarshal_dispids.h b/dlls/oleaut32/tests/tmarshal_dispids.h
index 879d974..d603a56 100644
--- a/dlls/oleaut32/tests/tmarshal_dispids.h
+++ b/dlls/oleaut32/tests/tmarshal_dispids.h
@@ -44,6 +44,7 @@
 #define DISPID_TM_RESTRICTED 25
 #define DISPID_TM_NEG_RESTRICTED -26
 #define DISPID_TM_TESTSECONDIFACE 27
+#define DISPID_TM_VARARG_RUN 28
 
 #define DISPID_NOA_BSTRRET 1
 #define DISPID_NOA_ERROR 2




More information about the wine-cvs mailing list