Module: wine Branch: master Commit: 05c970c484f1379e33135afef2f28a075d965c7b URL: http://source.winehq.org/git/wine.git/?a=commit;h=05c970c484f1379e33135afef2...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Thu Mar 6 12:16:03 2014 +0400
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 385ac60..ff32a1c 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 f27a67f..a7e7c96 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);