Jacek Caban : ole32/tests: Added tests for external connections stored in ROT.

Alexandre Julliard julliard at winehq.org
Thu Jun 27 13:39:09 CDT 2013


Module: wine
Branch: master
Commit: a2aefe917e3655bca31e5f79347732769616555f
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=a2aefe917e3655bca31e5f79347732769616555f

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Jun 27 13:07:58 2013 +0200

ole32/tests: Added tests for external connections stored in ROT.

---

 dlls/ole32/tests/moniker.c |   59 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 59 insertions(+), 0 deletions(-)

diff --git a/dlls/ole32/tests/moniker.c b/dlls/ole32/tests/moniker.c
index 2e5a603..1ff7159 100644
--- a/dlls/ole32/tests/moniker.c
+++ b/dlls/ole32/tests/moniker.c
@@ -97,6 +97,55 @@ static SIZE_T round_global_size(SIZE_T size)
     return ((size + global_size_alignment - 1) & ~(global_size_alignment - 1));
 }
 
+static DWORD external_connections;
+
+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");
+
+    ok(extconn == EXTCONN_STRONG, "extconn = %d\n", extconn);
+    ok(!reserved, "reserved = %x\n", reserved);
+    return ++external_connections;
+}
+
+static DWORD WINAPI ExternalConnection_ReleaseConnection(IExternalConnection *iface, DWORD extconn,
+        DWORD reserved, BOOL fLastReleaseCloses)
+{
+    trace("release connection\n");
+
+    ok(extconn == EXTCONN_STRONG, "extconn = %d\n", extconn);
+    ok(!reserved, "reserved = %x\n", reserved);
+
+    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_IClassFactory_QueryInterface(
     LPCLASSFACTORY iface,
     REFIID riid,
@@ -112,6 +161,11 @@ static HRESULT WINAPI Test_IClassFactory_QueryInterface(
         return S_OK;
     }
 
+    if(IsEqualGUID(riid, &IID_IExternalConnection)) {
+        *ppvObj = &ExternalConnection;
+        return S_OK;
+    }
+
     *ppvObj = NULL;
     return E_NOINTERFACE;
 }
@@ -588,11 +642,13 @@ static void test_ROT(void)
     ok_ole_success(hr, GetRunningObjectTable);
 
     expected_method_list = methods_register_no_ROTData;
+    external_connections = 0;
     /* try with our own moniker that doesn't support IROTData */
     hr = IRunningObjectTable_Register(pROT, ROTFLAGS_REGISTRATIONKEEPSALIVE,
         (IUnknown*)&Test_ClassFactory, &MonikerNoROTData, &dwCookie);
     ok_ole_success(hr, IRunningObjectTable_Register);
     ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list);
+    ok(external_connections == 1, "external_connections = %d\n", external_connections);
 
     ok_more_than_one_lock();
 
@@ -603,6 +659,7 @@ static void test_ROT(void)
 
     hr = IRunningObjectTable_Revoke(pROT, dwCookie);
     ok_ole_success(hr, IRunningObjectTable_Revoke);
+    ok(external_connections == 0, "external_connections = %d\n", external_connections);
 
     ok_no_locks();
 
@@ -629,9 +686,11 @@ static void test_ROT(void)
     ok_ole_success(hr, CreateClassMoniker);
 
     /* test flags: 0 */
+    external_connections = 0;
     hr = IRunningObjectTable_Register(pROT, 0, (IUnknown*)&Test_ClassFactory,
                                       pMoniker, &dwCookie);
     ok_ole_success(hr, IRunningObjectTable_Register);
+    ok(external_connections == 0, "external_connections = %d\n", external_connections);
 
     ok_more_than_one_lock();
 




More information about the wine-cvs mailing list