-- v2: mfplat/tests: Run tests modifying process state in separate processes.
From: Nikolay Sivov nsivov@codeweavers.com
--- dlls/rtworkq/queue.c | 9 ++++----- dlls/rtworkq/tests/rtworkq.c | 7 +++++-- 2 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/dlls/rtworkq/queue.c b/dlls/rtworkq/queue.c index 031da94ca43..144feb98c55 100644 --- a/dlls/rtworkq/queue.c +++ b/dlls/rtworkq/queue.c @@ -307,14 +307,13 @@ static struct queue system_queues[SYS_QUEUE_COUNT];
static struct queue *get_system_queue(DWORD queue_id) { + if (RTWQ_CALLBACK_QUEUE_PRIVATE_MASK & queue_id) + return NULL; + switch (queue_id) { default: - if (!(RTWQ_CALLBACK_QUEUE_PRIVATE_MASK & queue_id)) - return NULL; - /* fall through */ - case RTWQ_CALLBACK_QUEUE_UNDEFINED: - /* Works in native Windows. Undocumented, but seems to use standard. */ + /* Use standard queue for undefined system queue id's. */ queue_id = RTWQ_CALLBACK_QUEUE_STANDARD; /* fall through */ case RTWQ_CALLBACK_QUEUE_STANDARD: diff --git a/dlls/rtworkq/tests/rtworkq.c b/dlls/rtworkq/tests/rtworkq.c index e6930083e8f..7655275d721 100644 --- a/dlls/rtworkq/tests/rtworkq.c +++ b/dlls/rtworkq/tests/rtworkq.c @@ -270,18 +270,21 @@ static void test_undefined_queue_id(void) ok(res == 0, "got %#lx\n", res); ok(callback_result == result, "Expected result %p, got %p.\n", result, callback_result);
- hr = RtwqPutWorkItem(RTWQ_CALLBACK_QUEUE_PRIVATE_MASK, 0, result); + hr = RtwqPutWorkItem(0xffff, 0, result); ok(hr == S_OK, "got %#lx\n", hr); res = wait_async_callback_result(&test_callback->IRtwqAsyncCallback_iface, 100, &callback_result); ok(res == 0, "got %#lx\n", res); ok(callback_result == result, "Expected result %p, got %p.\n", result, callback_result);
- hr = RtwqPutWorkItem(RTWQ_CALLBACK_QUEUE_PRIVATE_MASK & (RTWQ_CALLBACK_QUEUE_PRIVATE_MASK - 1), 0, result); + hr = RtwqPutWorkItem(0x4000, 0, result); ok(hr == S_OK, "got %#lx\n", hr); res = wait_async_callback_result(&test_callback->IRtwqAsyncCallback_iface, 100, &callback_result); ok(res == 0, "got %#lx\n", res); ok(callback_result == result, "Expected result %p, got %p.\n", result, callback_result);
+ hr = RtwqPutWorkItem(0x10000, 0, result); + ok(hr == RTWQ_E_INVALID_WORKQUEUE, "got %#lx\n", hr); + IRtwqAsyncResult_Release(result);
IRtwqAsyncCallback_Release(&test_callback->IRtwqAsyncCallback_iface);
From: Nikolay Sivov nsivov@codeweavers.com
--- dlls/mfplat/tests/mfplat.c | 41 +++++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 7 deletions(-)
diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c index 6bd6bb74d68..7fd864bc2cb 100644 --- a/dlls/mfplat/tests/mfplat.c +++ b/dlls/mfplat/tests/mfplat.c @@ -61,6 +61,25 @@ #include "wmcodecdsp.h" #include "dvdmedia.h"
+static void run_child_test(const char *name) +{ + char path_name[MAX_PATH]; + PROCESS_INFORMATION info; + STARTUPINFOA startup; + char **argv; + + winetest_get_mainargs(&argv); + + memset(&startup, 0, sizeof(startup)); + startup.cb = sizeof(startup); + sprintf(path_name, "%s mfplat %s", argv[0], name); + ok(CreateProcessA( NULL, path_name, NULL, NULL, FALSE, 0, NULL, NULL, &startup, &info), + "CreateProcess failed.\n" ); + wait_child_process(info.hProcess); + CloseHandle(info.hProcess); + CloseHandle(info.hThread); +} + DEFINE_GUID(DUMMY_CLSID, 0x12345678,0x1234,0x1234,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19); DEFINE_GUID(DUMMY_GUID1, 0x12345678,0x1234,0x1234,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21); DEFINE_GUID(DUMMY_GUID2, 0x12345678,0x1234,0x1234,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22); @@ -13532,19 +13551,20 @@ static void test_undefined_queue_id(void) ok(res == 0, "got %#lx\n", res); IMFAsyncResult_Release(result);
- hr = MFPutWorkItem(MFASYNC_CALLBACK_QUEUE_PRIVATE_MASK, &callback->IMFAsyncCallback_iface, NULL); + hr = MFPutWorkItem(0xffff, &callback->IMFAsyncCallback_iface, NULL); ok(hr == S_OK, "got %#lx\n", hr); res = wait_async_callback_result(&callback->IMFAsyncCallback_iface, 100, &result); ok(res == 0, "got %#lx\n", res); IMFAsyncResult_Release(result);
- hr = MFPutWorkItem(MFASYNC_CALLBACK_QUEUE_PRIVATE_MASK & (MFASYNC_CALLBACK_QUEUE_PRIVATE_MASK - 1), - &callback->IMFAsyncCallback_iface, NULL); + hr = MFPutWorkItem(0x4000, &callback->IMFAsyncCallback_iface, NULL); ok(hr == S_OK, "got %#lx\n", hr); res = wait_async_callback_result(&callback->IMFAsyncCallback_iface, 100, &result); ok(res == 0, "got %#lx\n", res); IMFAsyncResult_Release(result);
+ hr = MFPutWorkItem(0x10000, &callback->IMFAsyncCallback_iface, NULL); + ok(hr == MF_E_INVALID_WORKQUEUE, "got %#lx\n", hr); IMFAsyncCallback_Release(&callback->IMFAsyncCallback_iface);
hr = MFShutdown(); @@ -13561,7 +13581,14 @@ START_TEST(mfplat) argc = winetest_get_mainargs(&argv); if (argc >= 3) { - test_queue_com_state(argv[2]); + if (!strcmp(argv[2], "startup")) + test_startup(); + else if (!strcmp(argv[2], "startup_counts")) + test_startup_counts(); + else if (!strcmp(argv[2], "undefined_queue_id")) + test_undefined_queue_id(); + else + test_queue_com_state(argv[2]); return; }
@@ -13573,8 +13600,9 @@ START_TEST(mfplat)
CoInitialize(NULL);
- test_startup(); - test_startup_counts(); + run_child_test("startup"); + run_child_test("startup_counts"); + run_child_test("undefined_queue_id"); test_register(); test_media_type(); test_MFCreateMediaEvent(); @@ -13646,7 +13674,6 @@ START_TEST(mfplat) test_MFInitMediaTypeFromAMMediaType(); test_MFCreatePathFromURL(); test_2dbuffer_copy(); - test_undefined_queue_id();
CoUninitialize(); }