From 05c970c484f1379e33135afef2f28a075d965c7b Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Thu, 6 Mar 2014 12:16:03 +0400 Subject: [PATCH] oleaut32/tests: Some tests for propputref invocation. --- dlls/oleaut32/tests/test_reg.idl | 4 +++ dlls/oleaut32/tests/typelib.c | 59 ++++++++++++++++++++++++++++++-- 2 files changed, 60 insertions(+), 3 deletions(-) diff --git a/dlls/oleaut32/tests/test_reg.idl b/dlls/oleaut32/tests/test_reg.idl index 385ac600715..ff32a1c508d 100644 --- a/dlls/oleaut32/tests/test_reg.idl +++ b/dlls/oleaut32/tests/test_reg.idl @@ -137,5 +137,9 @@ library register_test { [propget, id(DISPID_VALUE)] LONG test([in] LONG i); + [propputref, id(1)] + LONG testprop([in] LONG *i); + [propputref, id(2)] + LONG testprop2([in] IUnknown *i); } } diff --git a/dlls/oleaut32/tests/typelib.c b/dlls/oleaut32/tests/typelib.c index f27a67f9014..a7e7c960f26 100644 --- a/dlls/oleaut32/tests/typelib.c +++ b/dlls/oleaut32/tests/typelib.c @@ -136,6 +136,16 @@ static LONG WINAPI invoketest_get_test(IInvokeTest *iface, LONG i) return i+1; } +static LONG WINAPI invoketest_putref_testprop(IInvokeTest *iface, LONG *i) +{ + return *i+2; +} + +static LONG WINAPI invoketest_putref_testprop2(IInvokeTest *iface, IUnknown *i) +{ + return 6; +} + static const IInvokeTestVtbl invoketestvtbl = { invoketest_QueryInterface, invoketest_AddRef, @@ -144,7 +154,9 @@ static const IInvokeTestVtbl invoketestvtbl = { invoketest_GetTypeInfo, invoketest_GetIDsOfNames, invoketest_Invoke, - invoketest_get_test + invoketest_get_test, + invoketest_putref_testprop, + invoketest_putref_testprop2 }; static IInvokeTest invoketest = { &invoketestvtbl }; @@ -672,6 +684,7 @@ static void test_TypeInfo(void) const char *filenameA; WCHAR filename[MAX_PATH]; TYPEATTR *attr; + LONG l; hr = LoadTypeLib(wszStdOle2, &pTypeLib); ok_ole_success(hr, LoadTypeLib); @@ -866,8 +879,6 @@ static void test_TypeInfo(void) V_VT(&args[0]) = VT_I4; V_I4(&args[0]) = 0; - V_VT(&res) = VT_EMPTY; - i = 0; V_VT(&res) = VT_EMPTY; V_I4(&res) = 0; @@ -893,6 +904,48 @@ static void test_TypeInfo(void) ok(V_VT(&res) == VT_I4, "got %d\n", V_VT(&res)); ok(V_I4(&res) == 1, "got %d\n", V_I4(&res)); + /* DISPATCH_PROPERTYPUTREF */ + l = 1; + V_VT(&args[0]) = VT_I4|VT_BYREF; + V_I4REF(&args[0]) = &l; + + dispidMember = DISPID_PROPERTYPUT; + dispparams.cArgs = 1; + dispparams.cNamedArgs = 1; + dispparams.rgdispidNamedArgs = &dispidMember; + dispparams.rgvarg = args; + + i = 0; + V_VT(&res) = VT_EMPTY; + V_I4(&res) = 0; + hr = ITypeInfo_Invoke(pTypeInfo, &invoketest, 1, DISPATCH_PROPERTYPUTREF, &dispparams, &res, NULL, &i); + ok(hr == S_OK, "got 0x%08x, %d\n", hr, i); + ok(V_VT(&res) == VT_I4, "got %d\n", V_VT(&res)); + ok(V_I4(&res) == 3, "got %d\n", V_I4(&res)); + + i = 0; + V_VT(&res) = VT_EMPTY; + V_I4(&res) = 0; + hr = ITypeInfo_Invoke(pTypeInfo, &invoketest, 1, DISPATCH_PROPERTYPUT, &dispparams, &res, NULL, &i); + ok(hr == DISP_E_MEMBERNOTFOUND, "got 0x%08x, %d\n", hr, i); + + i = 0; + V_VT(&args[0]) = VT_UNKNOWN; + V_UNKNOWN(&args[0]) = NULL; + + V_VT(&res) = VT_EMPTY; + V_I4(&res) = 0; + hr = ITypeInfo_Invoke(pTypeInfo, &invoketest, 2, DISPATCH_PROPERTYPUTREF, &dispparams, &res, NULL, &i); + ok(hr == S_OK, "got 0x%08x, %d\n", hr, i); + ok(V_VT(&res) == VT_I4, "got %d\n", V_VT(&res)); + ok(V_I4(&res) == 6, "got %d\n", V_I4(&res)); + + i = 0; + V_VT(&res) = VT_EMPTY; + V_I4(&res) = 0; + hr = ITypeInfo_Invoke(pTypeInfo, &invoketest, 2, DISPATCH_PROPERTYPUT, &dispparams, &res, NULL, &i); + ok(hr == DISP_E_MEMBERNOTFOUND, "got 0x%08x, %d\n", hr, i); + ITypeInfo_Release(pTypeInfo); ITypeLib_Release(pTypeLib); DeleteFileA(filenameA);