Huw Davies : ole32/tests: Add tests to show that CoLockObjectExternal() calls ReleaseConnection() with the appropriate value for fLastReleaseCloses.
Alexandre Julliard
julliard at winehq.org
Fri Oct 18 14:24:17 CDT 2013
Module: wine
Branch: master
Commit: 29c6e10fd8a25ed413d1b6cc5794a80c4b001e16
URL: http://source.winehq.org/git/wine.git/?a=commit;h=29c6e10fd8a25ed413d1b6cc5794a80c4b001e16
Author: Huw Davies <huw at codeweavers.com>
Date: Fri Oct 18 12:52:46 2013 +0100
ole32/tests: Add tests to show that CoLockObjectExternal() calls ReleaseConnection() with the appropriate value for fLastReleaseCloses.
---
dlls/ole32/tests/marshal.c | 59 ++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 59 insertions(+), 0 deletions(-)
diff --git a/dlls/ole32/tests/marshal.c b/dlls/ole32/tests/marshal.c
index 09ba030..95dae0a 100644
--- a/dlls/ole32/tests/marshal.c
+++ b/dlls/ole32/tests/marshal.c
@@ -106,6 +106,52 @@ static void UnlockModule(void)
InterlockedDecrement(&cLocks);
}
+static BOOL with_external_conn;
+static DWORD external_connections;
+static BOOL last_release_closes;
+
+static HRESULT WINAPI ExternalConnection_QueryInterface(IExternalConnection *iface, REFIID riid, void **ppv)
+{
+ ok(0, "unxpected call\n");
+ *ppv = NULL;
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI ExternalConnection_AddRef(IExternalConnection *iface)
+{
+ return 2;
+}
+
+static ULONG WINAPI ExternalConnection_Release(IExternalConnection *iface)
+{
+ return 1;
+}
+
+static DWORD WINAPI ExternalConnection_AddConnection(IExternalConnection *iface, DWORD extconn, DWORD reserved)
+{
+ trace("add connection\n");
+ return ++external_connections;
+}
+
+
+static DWORD WINAPI ExternalConnection_ReleaseConnection(IExternalConnection *iface, DWORD extconn,
+ DWORD reserved, BOOL fLastReleaseCloses)
+{
+ trace("release connection %d\n", fLastReleaseCloses);
+ last_release_closes = fLastReleaseCloses;
+ return --external_connections;
+}
+
+static const IExternalConnectionVtbl ExternalConnectionVtbl = {
+ ExternalConnection_QueryInterface,
+ ExternalConnection_AddRef,
+ ExternalConnection_Release,
+ ExternalConnection_AddConnection,
+ ExternalConnection_ReleaseConnection
+};
+
+static IExternalConnection ExternalConnection = { &ExternalConnectionVtbl };
+
static HRESULT WINAPI Test_IUnknown_QueryInterface(
LPUNKNOWN iface,
@@ -164,6 +210,12 @@ static HRESULT WINAPI Test_IClassFactory_QueryInterface(
return S_OK;
}
+ if (with_external_conn && IsEqualGUID(riid, &IID_IExternalConnection))
+ {
+ *ppvObj = &ExternalConnection;
+ return S_OK;
+ }
+
*ppvObj = NULL;
return E_NOINTERFACE;
}
@@ -1232,6 +1284,7 @@ static void test_lock_object_external(void)
IStream *pStream = NULL;
cLocks = 0;
+ with_external_conn = TRUE;
/* test the stub manager creation aspect of CoLockObjectExternal when the
* object hasn't been marshaled yet */
@@ -1270,6 +1323,7 @@ static void test_lock_object_external(void)
CoLockObjectExternal((IUnknown*)&Test_ClassFactory, FALSE, TRUE);
ok_no_locks();
+ ok(last_release_closes, "last_release_closes FALSE\n");
/* test CoLockObjectExternal releases reference to object with
* fLastUnlockReleases as TRUE and there are only strong references on
@@ -1281,6 +1335,8 @@ static void test_lock_object_external(void)
CoLockObjectExternal((IUnknown*)&Test_ClassFactory, FALSE, FALSE);
ok_no_locks();
+todo_wine
+ ok(!last_release_closes, "last_release_closes TRUE\n");
/* test CoLockObjectExternal doesn't release the last reference to an
* object with fLastUnlockReleases as TRUE and there is a weak reference
@@ -1301,8 +1357,11 @@ static void test_lock_object_external(void)
CoDisconnectObject((IUnknown*)&Test_ClassFactory, 0);
ok_no_locks();
+todo_wine
+ ok(!last_release_closes, "last_release_closes TRUE\n");
IStream_Release(pStream);
+ with_external_conn = FALSE;
}
/* tests disconnecting stubs */
More information about the wine-cvs
mailing list