Huw Davies : oleaut32: Tests for more 'syntax 2' dispinterfaces.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri May 18 13:56:08 CDT 2007
Module: wine
Branch: master
Commit: 04a76cf561fcd231d04cdd271e251a7a8741a444
URL: http://source.winehq.org/git/wine.git/?a=commit;h=04a76cf561fcd231d04cdd271e251a7a8741a444
Author: Huw Davies <huw at codeweavers.com>
Date: Thu May 17 11:47:16 2007 +0100
oleaut32: Tests for more 'syntax 2' dispinterfaces.
---
dlls/oleaut32/tests/tmarshal.idl | 39 +++++++++++++++++++++
dlls/oleaut32/tests/typelib.c | 70 ++++++++++++++++++++++++++++++++++++++
2 files changed, 109 insertions(+), 0 deletions(-)
diff --git a/dlls/oleaut32/tests/tmarshal.idl b/dlls/oleaut32/tests/tmarshal.idl
index 24cc83b..2d1a9bc 100644
--- a/dlls/oleaut32/tests/tmarshal.idl
+++ b/dlls/oleaut32/tests/tmarshal.idl
@@ -228,4 +228,43 @@ library TestTypelib
{
[id(0x1236)] HRESULT fn6([in] int a);
}
+
+ [
+ odl,
+ uuid(bdfa260b-ef40-43d3-b071-cddec919f132)
+ ]
+ interface ItestIF8
+ {
+ HRESULT fn1([in] int x);
+ HRESULT fn2([out,retval] int *x);
+ }
+
+ [
+ odl,
+ uuid(51033a23-dc37-4f19-aa34-4d8a670458a0)
+
+ ]
+ interface ItestIF9 : ItestIF8
+ {
+ HRESULT fn3([in] int y);
+ }
+
+ [
+ odl,
+ uuid(2e8f14fe-0bce-42f0-8b7d-3af8393c7967)
+ ]
+ dispinterface ItestIF10
+ {
+ interface ItestIF9;
+ }
+
+ [
+ odl,
+ uuid(7d9e9371-482e-4944-9b19-511fc705236f)
+ ]
+ dispinterface ItestIF11
+ {
+ interface ItestIF7;
+ }
+
};
diff --git a/dlls/oleaut32/tests/typelib.c b/dlls/oleaut32/tests/typelib.c
index 49c1261..cb85f3c 100644
--- a/dlls/oleaut32/tests/typelib.c
+++ b/dlls/oleaut32/tests/typelib.c
@@ -720,6 +720,76 @@ if(use_midl_tlb) {
ITypeInfo_ReleaseFuncDesc(pTI, pFD);
ITypeInfo_Release(pTI);
+ /* ItestIF10 is a syntax 2 dispinterface which doesn't derive from IUnknown */
+ hr = ITypeLib_GetTypeInfoOfGuid(pTL, &DIID_ItestIF10, &pTI);
+ ok(hr == S_OK, "hr %08x\n", hr);
+
+ hr = ITypeInfo_GetTypeAttr(pTI, &pTA);
+ ok(hr == S_OK, "hr %08x\n", hr);
+ ok(pTA->typekind == TKIND_DISPATCH, "kind %04x\n", pTA->typekind);
+ ok(pTA->cbSizeVft == 28, "sizevft %d\n", pTA->cbSizeVft);
+ ok(pTA->wTypeFlags == TYPEFLAG_FDISPATCHABLE, "typeflags %x\n", pTA->wTypeFlags);
+if(use_midl_tlb) {
+ ok(pTA->cFuncs == 3, "cfuncs %d\n", pTA->cFuncs);
+ ok(pTA->cImplTypes == 1, "cimpltypes %d\n", pTA->cImplTypes);
+ ITypeInfo_ReleaseTypeAttr(pTI, pTA);
+
+ hr = ITypeInfo_GetRefTypeOfImplType(pTI, -1, &href);
+ ok(hr == TYPE_E_ELEMENTNOTFOUND, "hr %08x\n", hr);
+ hr = ITypeInfo_GetRefTypeOfImplType(pTI, 0, &href);
+ ok(hr == S_OK, "hr %08x\n", hr);
+ hr = ITypeInfo_GetRefTypeInfo(pTI, href, &pTI_p);
+ ok(hr == S_OK, "hr %08x\n", hr);
+ hr = ITypeInfo_GetTypeAttr(pTI_p, &pTA);
+ ok(IsEqualGUID(&pTA->guid, &IID_IDispatch), "guid {%08x-....\n", pTA->guid.Data1);
+ ITypeInfo_ReleaseTypeAttr(pTI_p, pTA);
+ ITypeInfo_Release(pTI_p);
+
+ /* Should have three methods */
+ hr = ITypeInfo_GetFuncDesc(pTI, 3, &pFD);
+ ok(hr == TYPE_E_ELEMENTNOTFOUND, "hr %08x\n", hr);
+ hr = ITypeInfo_GetFuncDesc(pTI, 2, &pFD);
+ ok(hr == S_OK, "hr %08x\n", hr);
+ ok(pFD->memid == 0x60010000, "memid %08x\n", pFD->memid);
+ ok(pFD->oVft == 8, "oVft %d\n", pFD->oVft);
+ ITypeInfo_ReleaseFuncDesc(pTI, pFD);
+}
+ ITypeInfo_Release(pTI);
+
+ /* ItestIF11 is a syntax 2 dispinterface which derives from IDispatch */
+ hr = ITypeLib_GetTypeInfoOfGuid(pTL, &DIID_ItestIF11, &pTI);
+ ok(hr == S_OK, "hr %08x\n", hr);
+
+ hr = ITypeInfo_GetTypeAttr(pTI, &pTA);
+ ok(hr == S_OK, "hr %08x\n", hr);
+ ok(pTA->typekind == TKIND_DISPATCH, "kind %04x\n", pTA->typekind);
+ ok(pTA->cbSizeVft == 28, "sizevft %d\n", pTA->cbSizeVft);
+ ok(pTA->wTypeFlags == TYPEFLAG_FDISPATCHABLE, "typeflags %x\n", pTA->wTypeFlags);
+if(use_midl_tlb) {
+ ok(pTA->cFuncs == 10, "cfuncs %d\n", pTA->cFuncs);
+ ok(pTA->cImplTypes == 1, "cimpltypes %d\n", pTA->cImplTypes);
+ ITypeInfo_ReleaseTypeAttr(pTI, pTA);
+
+ hr = ITypeInfo_GetRefTypeOfImplType(pTI, 0, &href);
+ ok(hr == S_OK, "hr %08x\n", hr);
+ hr = ITypeInfo_GetRefTypeInfo(pTI, href, &pTI_p);
+ ok(hr == S_OK, "hr %08x\n", hr);
+ hr = ITypeInfo_GetTypeAttr(pTI_p, &pTA);
+ ok(IsEqualGUID(&pTA->guid, &IID_IDispatch), "guid {%08x-....\n", pTA->guid.Data1);
+ ITypeInfo_ReleaseTypeAttr(pTI_p, pTA);
+ ITypeInfo_Release(pTI_p);
+
+ /* Should have ten methods */
+ hr = ITypeInfo_GetFuncDesc(pTI, 10, &pFD);
+ ok(hr == TYPE_E_ELEMENTNOTFOUND, "hr %08x\n", hr);
+ hr = ITypeInfo_GetFuncDesc(pTI, 9, &pFD);
+ ok(hr == S_OK, "hr %08x\n", hr);
+ ok(pFD->memid == 0x1236, "memid %08x\n", pFD->memid);
+ ok(pFD->oVft == 36, "oVft %d\n", pFD->oVft);
+ ITypeInfo_ReleaseFuncDesc(pTI, pFD);
+}
+ ITypeInfo_Release(pTI);
+
ITypeLib_Release(pTL);
return;
More information about the wine-cvs
mailing list