Commit 1d099334 authored by Rob Shearman's avatar Rob Shearman Committed by Alexandre Julliard

ole32: Add tests for CoGetObjectContext.

parent 2eb10c2e
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
/* functions that are not present on all versions of Windows */ /* functions that are not present on all versions of Windows */
HRESULT (WINAPI * pCoInitializeEx)(LPVOID lpReserved, DWORD dwCoInit); HRESULT (WINAPI * pCoInitializeEx)(LPVOID lpReserved, DWORD dwCoInit);
HRESULT (WINAPI * pCoGetObjectContext)(REFIID riid, LPVOID *ppv);
#define ok_ole_success(hr, func) ok(hr == S_OK, func " failed with error 0x%08x\n", hr) #define ok_ole_success(hr, func) ok(hr == S_OK, func " failed with error 0x%08x\n", hr)
#define ok_more_than_one_lock() ok(cLocks > 0, "Number of locks should be > 0, but actually is %d\n", cLocks) #define ok_more_than_one_lock() ok(cLocks > 0, "Number of locks should be > 0, but actually is %d\n", cLocks)
...@@ -938,10 +939,65 @@ static void test_CoFreeUnusedLibraries(void) ...@@ -938,10 +939,65 @@ static void test_CoFreeUnusedLibraries(void)
CoUninitialize(); CoUninitialize();
} }
static void test_CoGetObjectContext(void)
{
HRESULT hr;
ULONG refs;
IComThreadingInfo *pComThreadingInfo;
APTTYPE apttype;
THDTYPE thdtype;
if (!pCoGetObjectContext)
{
skip("CoGetObjectContext not present\n");
return;
}
hr = pCoGetObjectContext(&IID_IComThreadingInfo, (void **)&pComThreadingInfo);
ok(hr == CO_E_NOTINITIALIZED, "CoGetObjectContext should have returned CO_E_NOTINITIALIZED instead of 0x%08x\n", hr);
ok(pComThreadingInfo == NULL, "pComThreadingInfo should have been set to NULL\n");
pCoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
hr = pCoGetObjectContext(&IID_IComThreadingInfo, (void **)&pComThreadingInfo);
ok_ole_success(hr, "CoGetObjectContext");
hr = IComThreadingInfo_GetCurrentApartmentType(pComThreadingInfo, &apttype);
ok_ole_success(hr, "IComThreadingInfo_GetCurrentApartmentType");
ok(apttype == APTTYPE_MAINSTA, "apartment type should be APTTYPE_MAINSTA instead of %d\n", apttype);
hr = IComThreadingInfo_GetCurrentThreadType(pComThreadingInfo, &thdtype);
ok_ole_success(hr, "IComThreadingInfo_GetCurrentThreadType");
ok(thdtype == THDTYPE_PROCESSMESSAGES, "thread type should be THDTYPE_PROCESSMESSAGES instead of %d\n", thdtype);
refs = IComThreadingInfo_Release(pComThreadingInfo);
ok(refs == 0, "pComThreadingInfo should have 0 refs instead of %d refs\n", refs);
CoUninitialize();
pCoInitializeEx(NULL, COINIT_MULTITHREADED);
hr = pCoGetObjectContext(&IID_IComThreadingInfo, (void **)&pComThreadingInfo);
ok_ole_success(hr, "CoGetObjectContext");
hr = IComThreadingInfo_GetCurrentApartmentType(pComThreadingInfo, &apttype);
ok_ole_success(hr, "IComThreadingInfo_GetCurrentApartmentType");
ok(apttype == APTTYPE_MTA, "apartment type should be APTTYPE_MTA instead of %d\n", apttype);
hr = IComThreadingInfo_GetCurrentThreadType(pComThreadingInfo, &thdtype);
ok_ole_success(hr, "IComThreadingInfo_GetCurrentThreadType");
ok(thdtype == THDTYPE_BLOCKMESSAGES, "thread type should be THDTYPE_BLOCKMESSAGES instead of %d\n", thdtype);
refs = IComThreadingInfo_Release(pComThreadingInfo);
ok(refs == 0, "pComThreadingInfo should have 0 refs instead of %d refs\n", refs);
CoUninitialize();
}
START_TEST(compobj) START_TEST(compobj)
{ {
HMODULE hOle32 = GetModuleHandle("ole32"); HMODULE hOle32 = GetModuleHandle("ole32");
pCoGetObjectContext = (void*)GetProcAddress(hOle32, "CoGetObjectContext");
if (!(pCoInitializeEx = (void*)GetProcAddress(hOle32, "CoInitializeEx"))) if (!(pCoInitializeEx = (void*)GetProcAddress(hOle32, "CoInitializeEx")))
{ {
trace("You need DCOM95 installed to run this test\n"); trace("You need DCOM95 installed to run this test\n");
...@@ -964,4 +1020,5 @@ START_TEST(compobj) ...@@ -964,4 +1020,5 @@ START_TEST(compobj)
test_CoRegisterClassObject(); test_CoRegisterClassObject();
test_registered_object_thread_affinity(); test_registered_object_thread_affinity();
test_CoFreeUnusedLibraries(); test_CoFreeUnusedLibraries();
test_CoGetObjectContext();
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment