[1/3] oleaut32/tests: Add another test for calling a varargs method.

Dmitry Timoshkov dmitry at baikal.ru
Tue Sep 8 00:01:43 CDT 2015


This time with passing SAFEARRAY as a reference.
---
 dlls/oleaut32/tests/tmarshal.c         | 55 +++++++++++++++++++++++++++++++++-
 dlls/oleaut32/tests/tmarshal.idl       |  3 ++
 dlls/oleaut32/tests/tmarshal_dispids.h |  1 +
 3 files changed, 58 insertions(+), 1 deletion(-)

diff --git a/dlls/oleaut32/tests/tmarshal.c b/dlls/oleaut32/tests/tmarshal.c
index f18aecc..c4f5739 100644
--- a/dlls/oleaut32/tests/tmarshal.c
+++ b/dlls/oleaut32/tests/tmarshal.c
@@ -874,6 +874,41 @@ static HRESULT WINAPI Widget_VarArg_Run(
     return S_OK;
 }
 
+static HRESULT WINAPI Widget_VarArg_Ref_Run(
+    IWidget *iface, BSTR name, SAFEARRAY **params, VARIANT *result)
+{
+    static const WCHAR catW[] = { 'C','a','t',0 };
+    static const WCHAR supermanW[] = { 'S','u','p','e','r','m','a','n',0 };
+    LONG bound;
+    VARIANT *var;
+    BSTR bstr;
+    HRESULT hr;
+
+    trace("VarArg_Ref_Run(%p,%p,%p)\n", name, params, result);
+
+    ok(!lstrcmpW(name, catW), "got %s\n", wine_dbgstr_w(name));
+
+    hr = SafeArrayGetLBound(*params, 1, &bound);
+    ok(hr == S_OK, "SafeArrayGetLBound error %#x\n", hr);
+    ok(bound == 0, "expected 0, got %d\n", bound);
+
+    hr = SafeArrayGetUBound(*params, 1, &bound);
+    ok(hr == S_OK, "SafeArrayGetUBound error %#x\n", hr);
+    ok(bound == 0, "expected 0, got %d\n", bound);
+
+    hr = SafeArrayAccessData(*params, (void **)&var);
+    ok(hr == S_OK, "SafeArrayAccessData error %#x\n", hr);
+
+    ok(V_VT(&var[0]) == VT_BSTR, "expected VT_BSTR, got %d\n", V_VT(&var[0]));
+    bstr = V_BSTR(&var[0]);
+    ok(!lstrcmpW(bstr, supermanW), "got %s\n", wine_dbgstr_w(bstr));
+
+    hr = SafeArrayUnaccessData(*params);
+    ok(hr == S_OK, "SafeArrayUnaccessData error %#x\n", hr);
+
+    return S_OK;
+}
+
 static const struct IWidgetVtbl Widget_VTable =
 {
     Widget_QueryInterface,
@@ -912,7 +947,8 @@ static const struct IWidgetVtbl Widget_VTable =
     Widget_put_prop_req_arg,
     Widget_pos_restrict,
     Widget_neg_restrict,
-    Widget_VarArg_Run
+    Widget_VarArg_Run,
+    Widget_VarArg_Ref_Run
 };
 
 static HRESULT WINAPI StaticWidget_QueryInterface(IStaticWidget *iface, REFIID riid, void **ppvObject)
@@ -1554,6 +1590,23 @@ static void test_typelibmarshal(void)
     SysFreeString(V_BSTR(&vararg[1]));
     SysFreeString(V_BSTR(&vararg[0]));
 
+    /* call VarArg_Ref_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(szSuperman);
+    dispparams.cNamedArgs = 0;
+    dispparams.cArgs = 2;
+    dispparams.rgdispidNamedArgs = NULL;
+    dispparams.rgvarg = vararg;
+    hr = IDispatch_Invoke(pDispatch, DISPID_TM_VARARG_REF_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 ff9cac3..680f4b4 100644
--- a/dlls/oleaut32/tests/tmarshal.idl
+++ b/dlls/oleaut32/tests/tmarshal.idl
@@ -182,6 +182,9 @@ library TestTypelib
 
         [id(DISPID_TM_VARARG_RUN), vararg]
         HRESULT VarArg_Run([in] BSTR name, [in] SAFEARRAY(VARIANT) params, [out, retval] VARIANT *result);
+
+        [id(DISPID_TM_VARARG_REF_RUN), vararg]
+        HRESULT VarArg_Ref_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 d603a56..dfca216 100644
--- a/dlls/oleaut32/tests/tmarshal_dispids.h
+++ b/dlls/oleaut32/tests/tmarshal_dispids.h
@@ -45,6 +45,7 @@
 #define DISPID_TM_NEG_RESTRICTED -26
 #define DISPID_TM_TESTSECONDIFACE 27
 #define DISPID_TM_VARARG_RUN 28
+#define DISPID_TM_VARARG_REF_RUN 29
 
 #define DISPID_NOA_BSTRRET 1
 #define DISPID_NOA_ERROR 2
-- 
2.4.8




More information about the wine-patches mailing list