Module: wine Branch: master Commit: c28244a92ed52649a876180115c817a590c324ca URL: http://source.winehq.org/git/wine.git/?a=commit;h=c28244a92ed52649a876180115...
Author: Dmitry Timoshkov dmitry@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