Rob Shearman : ole32: Add tests for registering a moniker more than once in the ROT and then using it .

Alexandre Julliard julliard at winehq.org
Tue Apr 29 08:54:18 CDT 2008


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

Author: Rob Shearman <rob at codeweavers.com>
Date:   Mon Apr 28 19:42:11 2008 +0100

ole32: Add tests for registering a moniker more than once in the ROT and then using it.

---

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

diff --git a/dlls/ole32/tests/moniker.c b/dlls/ole32/tests/moniker.c
index 3f3579a..91f7946 100644
--- a/dlls/ole32/tests/moniker.c
+++ b/dlls/ole32/tests/moniker.c
@@ -657,6 +657,7 @@ static void test_ROT(void)
     todo_wine {
     ok(hr == CO_E_WRONG_SERVER_IDENTITY, "IRunningObjectTable_Register should have returned CO_E_WRONG_SERVER_IDENTITY instead of 0x%08x\n", hr);
     }
+    if (hr == S_OK) IRunningObjectTable_Revoke(pROT, dwCookie);
 
     hr = IRunningObjectTable_Register(pROT, 0xdeadbeef,
         (IUnknown*)&Test_ClassFactory, pMoniker, &dwCookie);
@@ -667,6 +668,51 @@ static void test_ROT(void)
     IRunningObjectTable_Release(pROT);
 }
 
+static void test_ROT_multiple_entries(void)
+{
+    HRESULT hr;
+    IMoniker *pMoniker = NULL;
+    IRunningObjectTable *pROT = NULL;
+    DWORD dwCookie1, dwCookie2;
+    IUnknown *pObject = NULL;
+    static const WCHAR moniker_path[] =
+        {'\\', 'w','i','n','d','o','w','s','\\','s','y','s','t','e','m','\\','t','e','s','t','1','.','d','o','c',0};
+
+    hr = GetRunningObjectTable(0, &pROT);
+    ok_ole_success(hr, GetRunningObjectTable);
+
+    hr = CreateFileMoniker(moniker_path, &pMoniker);
+    ok_ole_success(hr, CreateFileMoniker);
+
+    hr = IRunningObjectTable_Register(pROT, 0, (IUnknown *)&Test_ClassFactory, pMoniker, &dwCookie1);
+    ok_ole_success(hr, IRunningObjectTable_Register);
+
+    hr = IRunningObjectTable_Register(pROT, 0, (IUnknown *)&Test_ClassFactory, pMoniker, &dwCookie2);
+    ok(hr == MK_S_MONIKERALREADYREGISTERED, "IRunningObjectTable_Register should have returned MK_S_MONIKERALREADYREGISTERED instead of 0x%08x\n", hr);
+
+    todo_wine
+    ok(dwCookie1 != dwCookie2, "cookie returned for registering duplicate object shouldn't match cookie of original object (0x%x)\n", dwCookie1);
+
+    hr = IRunningObjectTable_GetObject(pROT, pMoniker, &pObject);
+    ok_ole_success(hr, IRunningObjectTable_GetObject);
+    IUnknown_Release(pObject);
+
+    hr = IRunningObjectTable_Revoke(pROT, dwCookie1);
+    ok_ole_success(hr, IRunningObjectTable_Revoke);
+
+    hr = IRunningObjectTable_GetObject(pROT, pMoniker, &pObject);
+    todo_wine
+    ok_ole_success(hr, IRunningObjectTable_GetObject);
+    if (pObject) IUnknown_Release(pObject);
+
+    hr = IRunningObjectTable_Revoke(pROT, dwCookie2);
+    ok_ole_success(hr, IRunningObjectTable_Revoke);
+
+    IMoniker_Release(pMoniker);
+
+    IRunningObjectTable_Release(pROT);
+}
+
 static HRESULT WINAPI ParseDisplayName_QueryInterface(IParseDisplayName *iface, REFIID riid, void **ppv)
 {
     if (IsEqualIID(riid, &IID_IUnknown) ||
@@ -1801,6 +1847,7 @@ START_TEST(moniker)
     CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
 
     test_ROT();
+    test_ROT_multiple_entries();
     test_MkParseDisplayName();
     test_class_moniker();
     test_file_monikers();




More information about the wine-cvs mailing list