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