Piotr Caban : msvcp140/tests: Add _TaskEventLogger tests.
Module: wine Branch: stable Commit: 4aa135340969b8afe85a70e6420f6f74d6a122e9 URL: http://source.winehq.org/git/wine.git/?a=commit;h=4aa135340969b8afe85a70e642... Author: Piotr Caban <piotr(a)codeweavers.com> Date: Wed Mar 15 12:06:29 2017 +0100 msvcp140/tests: Add _TaskEventLogger tests. Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> (cherry picked from commit 17b34a2e08b3ebd6195ed1f9c250ccf230b643f8) Signed-off-by: Michael Stefaniuc <mstefani(a)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(a)_ContextCallback@details(a)Concurrency@@QEBAXV?$function@$$A6AXXZ(a)std@@_N(a)Z"); SET(p__ContextCallback__Capture, "?_Capture(a)_ContextCallback@details(a)Concurrency@@AEAAXXZ"); SET(p__ContextCallback__Reset, "?_Reset(a)_ContextCallback@details(a)Concurrency@@AEAAXXZ"); + SET(p__TaskEventLogger__LogCancelTask, "?_LogCancelTask(a)_TaskEventLogger@details(a)Concurrency@@QEAAXXZ"); + SET(p__TaskEventLogger__LogScheduleTask, "?_LogScheduleTask(a)_TaskEventLogger@details(a)Concurrency@@QEAAX_N(a)Z"); + SET(p__TaskEventLogger__LogTaskCompleted, "?_LogTaskCompleted(a)_TaskEventLogger@details(a)Concurrency@@QEAAXXZ"); + SET(p__TaskEventLogger__LogTaskExecutionCompleted, "?_LogTaskExecutionCompleted(a)_TaskEventLogger@details(a)Concurrency@@QEAAXXZ"); + SET(p__TaskEventLogger__LogWorkItemCompleted, "?_LogWorkItemCompleted(a)_TaskEventLogger@details(a)Concurrency@@QEAAXXZ"); + SET(p__TaskEventLogger__LogWorkItemStarted, "?_LogWorkItemStarted(a)_TaskEventLogger@details(a)Concurrency@@QEAAXXZ"); } else { #ifdef __arm__ SET(p_task_continuation_context_ctor, "??0task_continuation_context(a)Concurrency@@AAA(a)XZ"); @@ -155,12 +173,24 @@ static BOOL init(void) SET(p__ContextCallback__CallInContext, "?_CallInContext(a)_ContextCallback@details(a)Concurrency@@QBAXV?$function@$$A6AXXZ(a)std@@_N(a)Z"); SET(p__ContextCallback__Capture, "?_Capture(a)_ContextCallback@details(a)Concurrency@@AAAXXZ"); SET(p__ContextCallback__Reset, "?_Reset(a)_ContextCallback@details(a)Concurrency@@AAAXXZ"); + SET(p__TaskEventLogger__LogCancelTask, "?_LogCancelTask(a)_TaskEventLogger@details(a)Concurrency@@QAAXXZ"); + SET(p__TaskEventLogger__LogScheduleTask, "?_LogScheduleTask(a)_TaskEventLogger@details(a)Concurrency@@QAEX_N(a)Z"); + SET(p__TaskEventLogger__LogTaskCompleted, "?_LogTaskCompleted(a)_TaskEventLogger@details(a)Concurrency@@QAAXXZ"); + SET(p__TaskEventLogger__LogTaskExecutionCompleted, "?_LogTaskExecutionCompleted(a)_TaskEventLogger@details(a)Concurrency@@QAAXXZ"); + SET(p__TaskEventLogger__LogWorkItemCompleted, "?_LogWorkItemCompleted(a)_TaskEventLogger@details(a)Concurrency@@QAAXXZ"); + SET(p__TaskEventLogger__LogWorkItemStarted, "?_LogWorkItemStarted(a)_TaskEventLogger@details(a)Concurrency@@QAAXXZ"); #else SET(p_task_continuation_context_ctor, "??0task_continuation_context(a)Concurrency@@AAE(a)XZ"); SET(p__ContextCallback__Assign, "?_Assign(a)_ContextCallback@details(a)Concurrency@@AAEXPAX(a)Z"); SET(p__ContextCallback__CallInContext, "?_CallInContext(a)_ContextCallback@details(a)Concurrency@@QBEXV?$function@$$A6AXXZ(a)std@@_N(a)Z"); SET(p__ContextCallback__Capture, "?_Capture(a)_ContextCallback@details(a)Concurrency@@AAEXXZ"); SET(p__ContextCallback__Reset, "?_Reset(a)_ContextCallback@details(a)Concurrency@@AAEXXZ"); + SET(p__TaskEventLogger__LogCancelTask, "?_LogCancelTask(a)_TaskEventLogger@details(a)Concurrency@@QAEXXZ"); + SET(p__TaskEventLogger__LogScheduleTask, "?_LogScheduleTask(a)_TaskEventLogger@details(a)Concurrency@@QAEX_N(a)Z"); + SET(p__TaskEventLogger__LogTaskCompleted, "?_LogTaskCompleted(a)_TaskEventLogger@details(a)Concurrency@@QAEXXZ"); + SET(p__TaskEventLogger__LogTaskExecutionCompleted, "?_LogTaskExecutionCompleted(a)_TaskEventLogger@details(a)Concurrency@@QAEXXZ"); + SET(p__TaskEventLogger__LogWorkItemCompleted, "?_LogWorkItemCompleted(a)_TaskEventLogger@details(a)Concurrency@@QAEXXZ"); + SET(p__TaskEventLogger__LogWorkItemStarted, "?_LogWorkItemStarted(a)_TaskEventLogger@details(a)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); }
participants (1)
-
Alexandre Julliard