Module: wine Branch: stable Commit: 4aa135340969b8afe85a70e6420f6f74d6a122e9 URL: http://source.winehq.org/git/wine.git/?a=commit;h=4aa135340969b8afe85a70e642...
Author: Piotr Caban piotr@codeweavers.com Date: Wed Mar 15 12:06:29 2017 +0100
msvcp140/tests: Add _TaskEventLogger tests.
Signed-off-by: Piotr Caban piotr@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org (cherry picked from commit 17b34a2e08b3ebd6195ed1f9c250ccf230b643f8) Signed-off-by: Michael Stefaniuc mstefani@winehq.org
---
dlls/msvcp140/tests/msvcp140.c | 101 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+)
diff --git a/dlls/msvcp140/tests/msvcp140.c b/dlls/msvcp140/tests/msvcp140.c index 99ab8a3..dca8d0a 100644 --- a/dlls/msvcp140/tests/msvcp140.c +++ b/dlls/msvcp140/tests/msvcp140.c @@ -119,6 +119,12 @@ typedef struct { void *this; } function_void_cdecl_void;
+typedef struct { + void *task; + MSVCP_bool scheduled; + MSVCP_bool started; +} _TaskEventLogger; + static unsigned int (__cdecl *p__Thrd_id)(void); static task_continuation_context* (__thiscall *p_task_continuation_context_ctor)(task_continuation_context*); static void (__thiscall *p__ContextCallback__Assign)(_ContextCallback*, void*); @@ -126,6 +132,12 @@ static void (__thiscall *p__ContextCallback__CallInContext)(const _ContextCallba static void (__thiscall *p__ContextCallback__Capture)(_ContextCallback*); static void (__thiscall *p__ContextCallback__Reset)(_ContextCallback*); static MSVCP_bool (__cdecl *p__ContextCallback__IsCurrentOriginSTA)(_ContextCallback*); +static void (__thiscall *p__TaskEventLogger__LogCancelTask)(_TaskEventLogger*); +static void (__thiscall *p__TaskEventLogger__LogScheduleTask)(_TaskEventLogger*, MSVCP_bool); +static void (__thiscall *p__TaskEventLogger__LogTaskCompleted)(_TaskEventLogger*); +static void (__thiscall *p__TaskEventLogger__LogTaskExecutionCompleted)(_TaskEventLogger*); +static void (__thiscall *p__TaskEventLogger__LogWorkItemCompleted)(_TaskEventLogger*); +static void (__thiscall *p__TaskEventLogger__LogWorkItemStarted)(_TaskEventLogger*);
static HMODULE msvcp; #define SETNOFAIL(x,y) x = (void*)GetProcAddress(msvcp,y) @@ -148,6 +160,12 @@ static BOOL init(void) SET(p__ContextCallback__CallInContext, "?_CallInContext@_ContextCallback@details@Concurrency@@QEBAXV?$function@$$A6AXXZ@std@@_N@Z"); SET(p__ContextCallback__Capture, "?_Capture@_ContextCallback@details@Concurrency@@AEAAXXZ"); SET(p__ContextCallback__Reset, "?_Reset@_ContextCallback@details@Concurrency@@AEAAXXZ"); + SET(p__TaskEventLogger__LogCancelTask, "?_LogCancelTask@_TaskEventLogger@details@Concurrency@@QEAAXXZ"); + SET(p__TaskEventLogger__LogScheduleTask, "?_LogScheduleTask@_TaskEventLogger@details@Concurrency@@QEAAX_N@Z"); + SET(p__TaskEventLogger__LogTaskCompleted, "?_LogTaskCompleted@_TaskEventLogger@details@Concurrency@@QEAAXXZ"); + SET(p__TaskEventLogger__LogTaskExecutionCompleted, "?_LogTaskExecutionCompleted@_TaskEventLogger@details@Concurrency@@QEAAXXZ"); + SET(p__TaskEventLogger__LogWorkItemCompleted, "?_LogWorkItemCompleted@_TaskEventLogger@details@Concurrency@@QEAAXXZ"); + SET(p__TaskEventLogger__LogWorkItemStarted, "?_LogWorkItemStarted@_TaskEventLogger@details@Concurrency@@QEAAXXZ"); } else { #ifdef __arm__ SET(p_task_continuation_context_ctor, "??0task_continuation_context@Concurrency@@AAA@XZ"); @@ -155,12 +173,24 @@ static BOOL init(void) SET(p__ContextCallback__CallInContext, "?_CallInContext@_ContextCallback@details@Concurrency@@QBAXV?$function@$$A6AXXZ@std@@_N@Z"); SET(p__ContextCallback__Capture, "?_Capture@_ContextCallback@details@Concurrency@@AAAXXZ"); SET(p__ContextCallback__Reset, "?_Reset@_ContextCallback@details@Concurrency@@AAAXXZ"); + SET(p__TaskEventLogger__LogCancelTask, "?_LogCancelTask@_TaskEventLogger@details@Concurrency@@QAAXXZ"); + SET(p__TaskEventLogger__LogScheduleTask, "?_LogScheduleTask@_TaskEventLogger@details@Concurrency@@QAEX_N@Z"); + SET(p__TaskEventLogger__LogTaskCompleted, "?_LogTaskCompleted@_TaskEventLogger@details@Concurrency@@QAAXXZ"); + SET(p__TaskEventLogger__LogTaskExecutionCompleted, "?_LogTaskExecutionCompleted@_TaskEventLogger@details@Concurrency@@QAAXXZ"); + SET(p__TaskEventLogger__LogWorkItemCompleted, "?_LogWorkItemCompleted@_TaskEventLogger@details@Concurrency@@QAAXXZ"); + SET(p__TaskEventLogger__LogWorkItemStarted, "?_LogWorkItemStarted@_TaskEventLogger@details@Concurrency@@QAAXXZ"); #else SET(p_task_continuation_context_ctor, "??0task_continuation_context@Concurrency@@AAE@XZ"); SET(p__ContextCallback__Assign, "?_Assign@_ContextCallback@details@Concurrency@@AAEXPAX@Z"); SET(p__ContextCallback__CallInContext, "?_CallInContext@_ContextCallback@details@Concurrency@@QBEXV?$function@$$A6AXXZ@std@@_N@Z"); SET(p__ContextCallback__Capture, "?_Capture@_ContextCallback@details@Concurrency@@AAEXXZ"); SET(p__ContextCallback__Reset, "?_Reset@_ContextCallback@details@Concurrency@@AAEXXZ"); + SET(p__TaskEventLogger__LogCancelTask, "?_LogCancelTask@_TaskEventLogger@details@Concurrency@@QAEXXZ"); + SET(p__TaskEventLogger__LogScheduleTask, "?_LogScheduleTask@_TaskEventLogger@details@Concurrency@@QAEX_N@Z"); + SET(p__TaskEventLogger__LogTaskCompleted, "?_LogTaskCompleted@_TaskEventLogger@details@Concurrency@@QAEXXZ"); + SET(p__TaskEventLogger__LogTaskExecutionCompleted, "?_LogTaskExecutionCompleted@_TaskEventLogger@details@Concurrency@@QAEXXZ"); + SET(p__TaskEventLogger__LogWorkItemCompleted, "?_LogWorkItemCompleted@_TaskEventLogger@details@Concurrency@@QAEXXZ"); + SET(p__TaskEventLogger__LogWorkItemStarted, "?_LogWorkItemStarted@_TaskEventLogger@details@Concurrency@@QAEXXZ"); #endif }
@@ -295,6 +325,76 @@ static void test__ContextCallback(void) #endif }
+static void test__TaskEventLogger(void) +{ + _TaskEventLogger logger; + memset(&logger, 0, sizeof(logger)); + + call_func1(p__TaskEventLogger__LogCancelTask, &logger); + ok(!logger.task, "logger.task = %p\n", logger.task); + ok(!logger.scheduled, "logger.scheduled = %x\n", logger.scheduled); + ok(!logger.started, "logger.started = %x\n", logger.started); + + call_func2(p__TaskEventLogger__LogScheduleTask, &logger, FALSE); + ok(!logger.task, "logger.task = %p\n", logger.task); + ok(!logger.scheduled, "logger.scheduled = %x\n", logger.scheduled); + ok(!logger.started, "logger.started = %x\n", logger.started); + + call_func1(p__TaskEventLogger__LogTaskCompleted, &logger); + ok(!logger.task, "logger.task = %p\n", logger.task); + ok(!logger.scheduled, "logger.scheduled = %x\n", logger.scheduled); + ok(!logger.started, "logger.started = %x\n", logger.started); + + call_func1(p__TaskEventLogger__LogTaskExecutionCompleted, &logger); + ok(!logger.task, "logger.task = %p\n", logger.task); + ok(!logger.scheduled, "logger.scheduled = %x\n", logger.scheduled); + ok(!logger.started, "logger.started = %x\n", logger.started); + + call_func1(p__TaskEventLogger__LogWorkItemCompleted, &logger); + ok(!logger.task, "logger.task = %p\n", logger.task); + ok(!logger.scheduled, "logger.scheduled = %x\n", logger.scheduled); + ok(!logger.started, "logger.started = %x\n", logger.started); + + call_func1(p__TaskEventLogger__LogWorkItemStarted, &logger); + ok(!logger.task, "logger.task = %p\n", logger.task); + ok(!logger.scheduled, "logger.scheduled = %x\n", logger.scheduled); + ok(!logger.started, "logger.started = %x\n", logger.started); + + logger.task = (void*)0xdeadbeef; + logger.scheduled = TRUE; + logger.started = TRUE; + + call_func1(p__TaskEventLogger__LogCancelTask, &logger); + ok(logger.task == (void*)0xdeadbeef, "logger.task = %p\n", logger.task); + ok(logger.scheduled, "logger.scheduled = FALSE\n"); + ok(logger.started, "logger.started = FALSE\n"); + + call_func2(p__TaskEventLogger__LogScheduleTask, &logger, FALSE); + ok(logger.task == (void*)0xdeadbeef, "logger.task = %p\n", logger.task); + ok(logger.scheduled, "logger.scheduled = FALSE\n"); + ok(logger.started, "logger.started = FALSE\n"); + + call_func1(p__TaskEventLogger__LogTaskCompleted, &logger); + ok(logger.task == (void*)0xdeadbeef, "logger.task = %p\n", logger.task); + ok(logger.scheduled, "logger.scheduled = FALSE\n"); + ok(logger.started, "logger.started = FALSE\n"); + + call_func1(p__TaskEventLogger__LogTaskExecutionCompleted, &logger); + ok(logger.task == (void*)0xdeadbeef, "logger.task = %p\n", logger.task); + ok(logger.scheduled, "logger.scheduled = FALSE\n"); + ok(logger.started, "logger.started = FALSE\n"); + + call_func1(p__TaskEventLogger__LogWorkItemCompleted, &logger); + ok(logger.task == (void*)0xdeadbeef, "logger.task = %p\n", logger.task); + ok(logger.scheduled, "logger.scheduled = FALSE\n"); + ok(logger.started, "logger.started = FALSE\n"); + + call_func1(p__TaskEventLogger__LogWorkItemStarted, &logger); + ok(logger.task == (void*)0xdeadbeef, "logger.task = %p\n", logger.task); + ok(logger.scheduled, "logger.scheduled = FALSE\n"); + ok(logger.started, "logger.started = FALSE\n"); +} + START_TEST(msvcp140) { if(!init()) return; @@ -302,5 +402,6 @@ START_TEST(msvcp140) test_vbtable_size_exports(); test_task_continuation_context(); test__ContextCallback(); + test__TaskEventLogger(); FreeLibrary(msvcp); }