On Tue, Jan 13, 2009 at 2:20 AM, Paul Vriens <paul.vriens.w...@gmail.com> wrote:
> Austin English wrote:
>>
>> On Tue, Jan 13, 2009 at 1:28 AM, Paul Vriens <paul.vriens.w...@gmail.com>
>> wrote:
>>>
>>> Austin English wrote:
>>>>
>>>> Pointed out by Anastasius in bug 13011. Tested on XP SP2 & 2K SP4 (and
>>>> Wine, of course).
>>>>
>>>>
>>>>
>>>> ------------------------------------------------------------------------
>>>>
>>>>
>>> Hi Austin,
>>>
>>> The test case that is pointed out in bug 13011 is different though:
>>>
>>> hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
>>> ok(hr == S_OK, "CoInitializeEx failed with error 0x%08x\n", hr);
>>> hr = OleInitialize(NULL);
>>> ok(hr == S_OK, "OleInitialize failed with error 0x%08x\n", hr);
>>>
>>> The above succeeds on W2K3 but fails on Wine.
>>>
>>> --
>>> Cheers,
>>>
>>> Paul.
>>>
>>
>> I was referring to this comment:
>> "Calling OleInitialize() for the first time should yield S_OK - even with
>> apartment already initialized by previous CoInitialize(Ex) calls.
>> Calling OleInitialize() more than once yields S_FALSE for the second and
>> following calls."
>>
>> Though that testcase should probably be added as well, in a todo_wine of
>> course.
>>
>>
>>
> So maybe we should do
>
> hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
> ok(hr == S_OK, "CoInitializeEx failed with error 0x%08x\n", hr);
> hr = OleInitialize(NULL);
> todo_wine
> ok(hr == S_OK, "OleInitialize failed with error 0x%08x\n", hr);
> hr = OleInitialize(NULL);
> ok(hr == S_FALSE, "Expected S_FALSE, hr = 0x%08x\n", hr);
>
> and move that to a separate test function? (Maybe in compobj.c?) I mean it's
> a ole32 basic thing that's wrong, not something that should be in a specific
> test I guess?
>
> --
> Cheers,
>
> Paul.
>

How's this?

-- 
-Austin
diff --git a/dlls/ole32/tests/compobj.c b/dlls/ole32/tests/compobj.c
index 02dc080..4793bd6 100644
--- a/dlls/ole32/tests/compobj.c
+++ b/dlls/ole32/tests/compobj.c
@@ -1017,6 +1017,23 @@ static void test_CoGetObjectContext(void)
     CoUninitialize();
 }
 
+static void test_CoInitializeEx(void)
+{
+    HRESULT hr;
+
+    hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
+    ok(hr == S_OK, "CoInitializeEx failed with error 0x%08x\n", hr);
+
+    /* Calling OleInitialize for the first time should yield S_OK even with
+     * apartment already initialized by previous CoInitialize(Ex) calls. */
+    hr = OleInitialize(NULL);
+    todo_wine ok(hr == S_OK, "OleInitialize failed with error 0x%08x\n", hr);
+
+    /* Subsequent calls to OleInitialize should return S_FALSE */
+    hr = OleInitialize(NULL);
+    ok(hr == S_FALSE, "Expected S_FALSE, hr = 0x%08x\n", hr);
+}
+
 START_TEST(compobj)
 {
     HMODULE hOle32 = GetModuleHandle("ole32");
@@ -1045,4 +1062,5 @@ START_TEST(compobj)
     test_registered_object_thread_affinity();
     test_CoFreeUnusedLibraries();
     test_CoGetObjectContext();
+    test_CoInitializeEx();
 }



Reply via email to