From: Fabian Maurer dark.shadow4@web.de
--- dlls/oleaut32/tests/test_reg.idl | 16 +++ dlls/oleaut32/tests/typelib.c | 206 ++++++++++++++++++++++++++++++- 2 files changed, 220 insertions(+), 2 deletions(-)
diff --git a/dlls/oleaut32/tests/test_reg.idl b/dlls/oleaut32/tests/test_reg.idl index 2092e36effe..2ab7638f2fc 100644 --- a/dlls/oleaut32/tests/test_reg.idl +++ b/dlls/oleaut32/tests/test_reg.idl @@ -155,6 +155,22 @@ library register_test HRESULT testfunc([in] int i, [out, retval] int *p); [propget, id(4)] HRESULT testget([out, retval] ICollection **p); + [propget, id(5)] + HRESULT testget2([out, retval] int *value); + [propget, id(6)] + int testget3(); + [propget, id(7)] + int testget4([in] int value); + [propget, id(8)] + int testget5([out,retval] int *value1, [in] int value2); + [propget, id(9)] + int testget6([in] int value1, [in] int value2); + [propget, id(10)] + void testget7([in] int value1, [in] int value2); + [propget, id(11)] + void testget8([out, retval] int* value); + [propput, id(11)] + void testput8([in] int value); }
/* uuid is same as for test_struct2 in test_tlb.idl, fields are different */ diff --git a/dlls/oleaut32/tests/typelib.c b/dlls/oleaut32/tests/typelib.c index f8606bcfe68..ce60e99aa9d 100644 --- a/dlls/oleaut32/tests/typelib.c +++ b/dlls/oleaut32/tests/typelib.c @@ -278,6 +278,44 @@ static HRESULT WINAPI invoketest_testget(IInvokeTest *iface, ICollection **p) return S_OK; }
+static LONG WINAPI invoketest_get_testget2(IInvokeTest *iface, int *value) +{ + *value = 4; + return S_OK; +} + +static int WINAPI invoketest_get_testget3(IInvokeTest *iface) +{ + return 4; +} + +static int WINAPI invoketest_get_testget4(IInvokeTest *iface, int value) +{ + return 4; +} + +static int WINAPI invoketest_get_testget5(IInvokeTest *iface, int *value1, int value2) +{ + return 4; +} + +static int WINAPI invoketest_get_testget6(IInvokeTest *iface, int value1, int value2) +{ + return 4; +} + +static void WINAPI invoketest_get_testget7(IInvokeTest *iface, int value1, int value2) +{ +} + +static void WINAPI invoketest_get_testget8(IInvokeTest *iface, int* value) +{ +} + +static void WINAPI invoketest_get_testput8(IInvokeTest *iface, int value) +{ +} + static const IInvokeTestVtbl invoketestvtbl = { invoketest_QueryInterface, invoketest_AddRef, @@ -290,7 +328,15 @@ static const IInvokeTestVtbl invoketestvtbl = { invoketest_putref_testprop, invoketest_putref_testprop2, invoketest_testfunc, - invoketest_testget + invoketest_testget, + invoketest_get_testget2, + invoketest_get_testget3, + invoketest_get_testget4, + invoketest_get_testget5, + invoketest_get_testget6, + invoketest_get_testget7, + invoketest_get_testget8, + invoketest_get_testput8, };
static IInvokeTest invoketest = { &invoketestvtbl }; @@ -850,7 +896,7 @@ static void test_TypeInfo(void) DISPPARAMS dispparams; GUID bogusguid = {0x806afb4f,0x13f7,0x42d2,{0x89,0x2c,0x6c,0x97,0xc3,0x6a,0x36,0xc1}}; static const GUID moduleTestGetDllEntryGuid = {0xf073cd92,0xa199,0x11ea,{0xbb,0x37,0x02,0x42,0xac,0x13,0x00,0x02}}; - VARIANT var, res, args[2]; + VARIANT var, res, args[3]; UINT count, i; TYPEKIND kind; const WCHAR *filename; @@ -1177,6 +1223,162 @@ static void test_TypeInfo(void) hr = ITypeInfo_Invoke(pTypeInfo, &invoketest, 2, DISPATCH_PROPERTYPUT, &dispparams, &res, NULL, &i); ok(hr == DISP_E_MEMBERNOTFOUND, "got 0x%08lx, %d\n", hr, i);
+ V_VT(&res) = VT_I4; + V_I4(&res) = 42; + V_VT(&args[0]) = VT_I4; + V_I4(&args[0]) = 1; + V_VT(&args[1]) = VT_I4; + V_I4(&args[1]) = 1; + V_VT(&args[2]) = VT_I4; + V_I4(&args[2]) = 1; + dispparams.cNamedArgs = 0; + + /* call propget with DISPATCH_PROPERTYPUT (missing member id) */ + dispparams.cArgs = 1; + hr = ITypeInfo_Invoke(pTypeInfo, &invoketest, 0xdeadbeef, DISPATCH_PROPERTYPUT, &dispparams, &res, NULL, &i); + ok(hr == DISP_E_MEMBERNOTFOUND, "got 0x%08lx\n", hr); + + /* call propget with DISPATCH_PROPERTYPUT on HRESULT func(out int) - 0 params */ + dispparams.cArgs = 0; + hr = ITypeInfo_Invoke(pTypeInfo, &invoketest, 5, DISPATCH_PROPERTYPUT, &dispparams, &res, NULL, &i); + todo_wine + ok(hr == DISP_E_BADPARAMCOUNT, "got 0x%08lx\n", hr); + + /* call propget with DISPATCH_PROPERTYPUT on HRESULT func(out int) - 1 param */ + dispparams.cArgs = 1; + hr = ITypeInfo_Invoke(pTypeInfo, &invoketest, 5, DISPATCH_PROPERTYPUT, &dispparams, &res, NULL, &i); + todo_wine + ok(hr == DISP_E_BADPARAMCOUNT, "got 0x%08lx\n", hr); + + /* call propget with DISPATCH_PROPERTYPUT on HRESULT func(out int) - 0 params - NULL result passed */ + dispparams.cArgs = 0; + hr = ITypeInfo_Invoke(pTypeInfo, &invoketest, 5, DISPATCH_PROPERTYPUT, &dispparams, NULL, NULL, &i); + todo_wine + ok(hr == DISP_E_BADPARAMCOUNT, "got 0x%08lx\n", hr); + + /* call propget with DISPATCH_PROPERTYPUT on on HRESULT func(out int) - 1 params - NULL result passed */ + dispparams.cArgs = 1; + hr = ITypeInfo_Invoke(pTypeInfo, &invoketest, 5, DISPATCH_PROPERTYPUT, &dispparams, NULL, NULL, &i); + todo_wine + ok(hr == DISP_E_BADPARAMCOUNT, "got 0x%08lx\n", hr); + + /* call propget with DISPATCH_PROPERTYPUT on int func() - 0 params */ + dispparams.cArgs = 0; + hr = ITypeInfo_Invoke(pTypeInfo, &invoketest, 6, DISPATCH_PROPERTYPUT, &dispparams, &res, NULL, &i); + todo_wine + ok(hr == DISP_E_BADPARAMCOUNT, "got 0x%08lx\n", hr); + + /* call propget with DISPATCH_PROPERTYPUT on int func() - 1 params */ + dispparams.cArgs = 1; + hr = ITypeInfo_Invoke(pTypeInfo, &invoketest, 6, DISPATCH_PROPERTYPUT, &dispparams, &res, NULL, &i); + todo_wine + ok(hr == DISP_E_BADPARAMCOUNT, "got 0x%08lx\n", hr); + + /* call propget with DISPATCH_PROPERTYPUT on int func() - 0 params - NULL result passed */ + dispparams.cArgs = 0; + hr = ITypeInfo_Invoke(pTypeInfo, &invoketest, 6, DISPATCH_PROPERTYPUT, &dispparams, NULL, NULL, &i); + todo_wine + ok(hr == DISP_E_BADPARAMCOUNT, "got 0x%08lx\n", hr); + + /* call propget with DISPATCH_PROPERTYPUT on int func() - 1 param - NULL result passed */ + dispparams.cArgs = 1; + hr = ITypeInfo_Invoke(pTypeInfo, &invoketest, 6, DISPATCH_PROPERTYPUT, &dispparams, NULL, NULL, &i); + todo_wine + ok(hr == DISP_E_BADPARAMCOUNT, "got 0x%08lx\n", hr); + + /* call propget with DISPATCH_PROPERTYPUT on int func(int) - 0 param - NULL result passed */ + dispparams.cArgs = 0; + hr = ITypeInfo_Invoke(pTypeInfo, &invoketest, 7, DISPATCH_PROPERTYPUT, &dispparams, NULL, NULL, &i); + ok(hr == DISP_E_MEMBERNOTFOUND, "got 0x%08lx\n", hr); + + /* call propget with DISPATCH_PROPERTYPUT on int func(int) - 1 param - NULL result passed */ + dispparams.cArgs = 1; + hr = ITypeInfo_Invoke(pTypeInfo, &invoketest, 7, DISPATCH_PROPERTYPUT, &dispparams, NULL, NULL, &i); + ok(hr == DISP_E_MEMBERNOTFOUND, "got 0x%08lx\n", hr); + + /* call propget with DISPATCH_PROPERTYPUT on int func(int) - 2 params - NULL result passed */ + dispparams.cArgs = 2; + hr = ITypeInfo_Invoke(pTypeInfo, &invoketest, 7, DISPATCH_PROPERTYPUT, &dispparams, NULL, NULL, &i); + todo_wine + ok(hr == DISP_E_BADPARAMCOUNT, "got 0x%08lx\n", hr); + + /* call propget with DISPATCH_PROPERTYPUT on int func(int) - 3 params - NULL result passed */ + dispparams.cArgs = 3; + hr = ITypeInfo_Invoke(pTypeInfo, &invoketest, 7, DISPATCH_PROPERTYPUT, &dispparams, NULL, NULL, &i); + ok(hr == DISP_E_MEMBERNOTFOUND, "got 0x%08lx\n", hr); + + /* call propget with DISPATCH_PROPERTYPUT on HRESULT func(out int, int) - 0 param - NULL result passed */ + dispparams.cArgs = 0; + hr = ITypeInfo_Invoke(pTypeInfo, &invoketest, 8, DISPATCH_PROPERTYPUT, &dispparams, NULL, NULL, &i); + ok(hr == DISP_E_MEMBERNOTFOUND, "got 0x%08lx\n", hr); + + /* call propget with DISPATCH_PROPERTYPUT on HRESULT func(out int, int) - 1 param - NULL result passed */ + dispparams.cArgs = 1; + hr = ITypeInfo_Invoke(pTypeInfo, &invoketest, 8, DISPATCH_PROPERTYPUT, &dispparams, NULL, NULL, &i); + ok(hr == DISP_E_MEMBERNOTFOUND, "got 0x%08lx\n", hr); + + /* call propget with DISPATCH_PROPERTYPUT on HRESULT func(out int, int) - 2 params - NULL result passed */ + dispparams.cArgs = 2; + hr = ITypeInfo_Invoke(pTypeInfo, &invoketest, 8, DISPATCH_PROPERTYPUT, &dispparams, NULL, NULL, &i); + todo_wine + ok(hr == DISP_E_BADPARAMCOUNT, "got 0x%08lx\n", hr); + + /* call propget with DISPATCH_PROPERTYPUT on HRESULT func(out int, int) - 3 params - NULL result passed */ + dispparams.cArgs = 3; + hr = ITypeInfo_Invoke(pTypeInfo, &invoketest, 8, DISPATCH_PROPERTYPUT, &dispparams, NULL, NULL, &i); + ok(hr == DISP_E_MEMBERNOTFOUND, "got 0x%08lx\n", hr); + + /* call propget with DISPATCH_PROPERTYPUT on int func(int, int) - 0 params - NULL result passed */ + dispparams.cArgs = 0; + hr = ITypeInfo_Invoke(pTypeInfo, &invoketest, 9, DISPATCH_PROPERTYPUT, &dispparams, NULL, NULL, &i); + ok(hr == DISP_E_MEMBERNOTFOUND, "got 0x%08lx\n", hr); + + /* call propget with DISPATCH_PROPERTYPUT on int func(int, int) - 1 params - NULL result passed */ + dispparams.cArgs = 1; + hr = ITypeInfo_Invoke(pTypeInfo, &invoketest, 9, DISPATCH_PROPERTYPUT, &dispparams, NULL, NULL, &i); + ok(hr == DISP_E_MEMBERNOTFOUND, "got 0x%08lx\n", hr); + + /* call propget with DISPATCH_PROPERTYPUT on int func(int, int) - 2 params - NULL result passed */ + dispparams.cArgs = 2; + hr = ITypeInfo_Invoke(pTypeInfo, &invoketest, 9, DISPATCH_PROPERTYPUT, &dispparams, NULL, NULL, &i); + ok(hr == DISP_E_MEMBERNOTFOUND, "got 0x%08lx\n", hr); + + /* call propget with DISPATCH_PROPERTYPUT on int func(int, int) - 3 params - NULL result passed */ + dispparams.cArgs = 3; + hr = ITypeInfo_Invoke(pTypeInfo, &invoketest, 9, DISPATCH_PROPERTYPUT, &dispparams, NULL, NULL, &i); + todo_wine + ok(hr == DISP_E_BADPARAMCOUNT, "got 0x%08lx\n", hr); + + /* call propget with DISPATCH_PROPERTYPUT on void func(int, int) - 0 params - NULL result passed */ + dispparams.cArgs = 0; + hr = ITypeInfo_Invoke(pTypeInfo, &invoketest, 10, DISPATCH_PROPERTYPUT, &dispparams, NULL, NULL, &i); + ok(hr == DISP_E_MEMBERNOTFOUND, "got 0x%08lx\n", hr); + + /* call propget with DISPATCH_PROPERTYPUT on void func(int, int) - 1 params - NULL result passed */ + dispparams.cArgs = 1; + hr = ITypeInfo_Invoke(pTypeInfo, &invoketest, 10, DISPATCH_PROPERTYPUT, &dispparams, NULL, NULL, &i); + ok(hr == DISP_E_MEMBERNOTFOUND, "got 0x%08lx\n", hr); + + /* call propget with DISPATCH_PROPERTYPUT on void func(int, int) - 2 params - NULL result passed */ + dispparams.cArgs = 2; + hr = ITypeInfo_Invoke(pTypeInfo, &invoketest, 10, DISPATCH_PROPERTYPUT, &dispparams, NULL, NULL, &i); + ok(hr == DISP_E_MEMBERNOTFOUND, "got 0x%08lx\n", hr); + + /* call propget with DISPATCH_PROPERTYPUT on void func(int, int) - 3 params - NULL result passed */ + dispparams.cArgs = 3; + hr = ITypeInfo_Invoke(pTypeInfo, &invoketest, 10, DISPATCH_PROPERTYPUT, &dispparams, NULL, NULL, &i); + todo_wine + ok(hr == DISP_E_BADPARAMCOUNT, "got 0x%08lx\n", hr); + + /* If there's get and put, the put must work */ + /* call propput with DISPATCH_PROPERTYPUT on int func(int) */ + dispidMember = DISPID_PROPERTYPUT; + dispparams.cArgs = 1; + dispparams.cNamedArgs = 1; + dispparams.rgdispidNamedArgs = &dispidMember; + hr = ITypeInfo_Invoke(pTypeInfo, &invoketest, 11, DISPATCH_PROPERTYPUT, &dispparams, NULL, NULL, &i); + ok(hr == S_OK, "got 0x%08lx\n", hr); + test_invoke_func(pTypeInfo);
ITypeInfo_Release(pTypeInfo);