From 9ebebc0ecc06a0579a93c73117a5b3ab622a7195 Mon Sep 17 00:00:00 2001 From: Rob Shearman Date: Mon, 28 Apr 2008 19:42:11 +0100 Subject: [PATCH] ole32: Add tests for registering a moniker more than once in the ROT and then using it. --- dlls/ole32/tests/moniker.c | 47 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/dlls/ole32/tests/moniker.c b/dlls/ole32/tests/moniker.c index 3f3579ae765..91f7946203a 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();