Zebediah Figura : comsvcs/tests: Add tests for implicit MTA creation in RegisterDispenser().
Alexandre Julliard
julliard at winehq.org
Mon Feb 11 16:12:09 CST 2019
Module: wine
Branch: master
Commit: 62d67bdebe8c45faf611ae76a55ecf5e663a85af
URL: https://source.winehq.org/git/wine.git/?a=commit;h=62d67bdebe8c45faf611ae76a55ecf5e663a85af
Author: Zebediah Figura <z.figura12 at gmail.com>
Date: Thu Feb 7 12:21:33 2019 -0600
comsvcs/tests: Add tests for implicit MTA creation in RegisterDispenser().
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/comsvcs/tests/dispenser.c | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/dlls/comsvcs/tests/dispenser.c b/dlls/comsvcs/tests/dispenser.c
index 187800e..6fae802 100644
--- a/dlls/comsvcs/tests/dispenser.c
+++ b/dlls/comsvcs/tests/dispenser.c
@@ -24,6 +24,7 @@
#include "winbase.h"
#include "ole2.h"
#include "comsvcs.h"
+#include "msxml.h"
#include "wine/test.h"
@@ -141,6 +142,17 @@ static const struct IDispenserDriverVtbl driver_vtbl =
static IDispenserDriver DispenserDriver = { &driver_vtbl };
+static DWORD WINAPI com_thread(void *arg)
+{
+ IUnknown *unk;
+ HRESULT hr;
+
+ hr = CoCreateInstance(&CLSID_XMLDocument, NULL, CLSCTX_INPROC_SERVER, &IID_IUnknown, (void **)&unk);
+ if (hr == S_OK) IUnknown_Release(unk);
+
+ return hr;
+}
+
static void create_dispenser(void)
{
static const WCHAR pool0[] = {'S','C','.','P','o','o','l',' ','0',' ','0',0};
@@ -149,7 +161,9 @@ static void create_dispenser(void)
HRESULT hr;
IDispenserManager *dispenser = NULL;
IHolder *holder1 = NULL, *holder2 = NULL, *holder3 = NULL;
+ HANDLE thread;
RESID resid;
+ DWORD ret;
BSTR str;
hr = CoCreateInstance( &CLSID_DispenserManager, NULL, CLSCTX_ALL, &IID_IDispenserManager, (void**)&dispenser);
@@ -160,9 +174,23 @@ static void create_dispenser(void)
return;
}
+ thread = CreateThread(NULL, 0, com_thread, NULL, 0, NULL);
+ ok(!WaitForSingleObject(thread, 1000), "wait failed\n");
+ GetExitCodeThread(thread, &ret);
+ ok(ret == CO_E_NOTINITIALIZED, "got unexpected hr %#x\n", ret);
+
hr = IDispenserManager_RegisterDispenser(dispenser, &DispenserDriver, pool0, &holder1);
ok(hr == S_OK, "got 0x%08x\n", hr);
+ /* The above call creates an MTA thread, but we need to wait for it to
+ * actually initialize. */
+ Sleep(200);
+ thread = CreateThread(NULL, 0, com_thread, NULL, 0, NULL);
+ ok(!WaitForSingleObject(thread, 1000), "wait failed\n");
+ GetExitCodeThread(thread, &ret);
+todo_wine
+ ok(ret == S_OK, "got unexpected hr %#x\n", ret);
+
hr = IDispenserManager_RegisterDispenser(dispenser, &DispenserDriver, pool0, &holder2);
ok(hr == S_OK, "got 0x%08x\n", hr);
ok(holder1 != holder2, "same holder object returned\n");
More information about the wine-cvs
mailing list