Nikolay Sivov : oleaut32/tests: Some tests for propputref invocation.
Alexandre Julliard
julliard at winehq.org
Thu Mar 6 13:40:51 CST 2014
Module: wine
Branch: master
Commit: 05c970c484f1379e33135afef2f28a075d965c7b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=05c970c484f1379e33135afef2f28a075d965c7b
Author: Nikolay Sivov <nsivov at 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);
More information about the wine-cvs
mailing list