From ffa1fa76dcf52843f14d3e86e2d7c8e6877bf8ff Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Mon, 23 Sep 2013 11:34:12 +0000 Subject: [PATCH] [MSTASK_WINETEST] * Sync with Wine 1.7.1. CORE-7469 svn path=/trunk/; revision=60335 --- rostests/winetests/mstask/CMakeLists.txt | 5 +- rostests/winetests/mstask/task_scheduler.c | 104 +++++++++++++++++++++ rostests/winetests/mstask/task_trigger.c | 3 +- 3 files changed, 107 insertions(+), 5 deletions(-) diff --git a/rostests/winetests/mstask/CMakeLists.txt b/rostests/winetests/mstask/CMakeLists.txt index 0dc1d19a4b3..13b0a4a5c7b 100644 --- a/rostests/winetests/mstask/CMakeLists.txt +++ b/rostests/winetests/mstask/CMakeLists.txt @@ -1,6 +1,4 @@ -add_definitions(-D__ROS_LONG64__) - list(APPEND SOURCE task.c task_scheduler.c @@ -8,7 +6,6 @@ list(APPEND SOURCE testlist.c) add_executable(mstask_winetest ${SOURCE}) -target_link_libraries(mstask_winetest wine) set_module_type(mstask_winetest win32cui) -add_importlibs(mstask_winetest ole32 msvcrt kernel32 ntdll) +add_importlibs(mstask_winetest ole32 user32 msvcrt kernel32) add_cd_file(TARGET mstask_winetest DESTINATION reactos/bin FOR all) diff --git a/rostests/winetests/mstask/task_scheduler.c b/rostests/winetests/mstask/task_scheduler.c index 2de0e160496..576d2d6087f 100644 --- a/rostests/winetests/mstask/task_scheduler.c +++ b/rostests/winetests/mstask/task_scheduler.c @@ -28,6 +28,8 @@ static ITaskScheduler *test_task_scheduler; +static const WCHAR does_not_existW[] = {'\\','\\','d','o','e','s','_','n','o','t','_','e','x','i','s','t',0}; + static void test_NewWorkItem(void) { HRESULT hres; @@ -102,10 +104,112 @@ static void test_Activate(void) return; } +static void test_GetTargetComputer(void) +{ + HRESULT hres; + WCHAR *oldname; + + /* Create TaskScheduler */ + hres = CoCreateInstance(&CLSID_CTaskScheduler, NULL, CLSCTX_INPROC_SERVER, + &IID_ITaskScheduler, (void **) &test_task_scheduler); + ok(hres == S_OK, "CTaskScheduler CoCreateInstance failed: %08x\n", hres); + if (hres != S_OK) + { + skip("Failed to create task scheduler.\n"); + return; + } + + if (0) + { + /* This crashes on w2k */ + hres = ITaskScheduler_GetTargetComputer(test_task_scheduler, NULL); + ok(hres == E_INVALIDARG, "got 0x%x (expected E_INVALIDARG)\n", hres); + } + + hres = ITaskScheduler_GetTargetComputer(test_task_scheduler, &oldname); + ok((hres == S_OK) && oldname && oldname[0] == '\\' && oldname[1] == '\\' && oldname[2], + "got 0x%x and %s (expected S_OK and an unc name)\n", hres, wine_dbgstr_w(oldname)); + + CoTaskMemFree(oldname); + + ITaskScheduler_Release(test_task_scheduler); + return; +} + +static void test_SetTargetComputer(void) +{ + WCHAR buffer[MAX_COMPUTERNAME_LENGTH + 3]; /* extra space for two '\' and a zero */ + DWORD len = MAX_COMPUTERNAME_LENGTH + 1; /* extra space for a zero */ + WCHAR *oldname = NULL; + WCHAR *name = NULL; + HRESULT hres; + + + buffer[0] = '\\'; + buffer[1] = '\\'; + if (!GetComputerNameW(buffer + 2, &len)) + return; + + /* Create TaskScheduler */ + hres = CoCreateInstance(&CLSID_CTaskScheduler, NULL, CLSCTX_INPROC_SERVER, + &IID_ITaskScheduler, (void **) &test_task_scheduler); + ok(hres == S_OK, "CTaskScheduler CoCreateInstance failed: %08x\n", hres); + if (hres != S_OK) + { + skip("Failed to create task scheduler. Skipping tests.\n"); + return; + } + + hres = ITaskScheduler_GetTargetComputer(test_task_scheduler, &oldname); + ok(hres == S_OK, "got 0x%x and %s (expected S_OK)\n", hres, wine_dbgstr_w(oldname)); + + /* NULL is an alias for the local computer */ + hres = ITaskScheduler_SetTargetComputer(test_task_scheduler, NULL); + ok(hres == S_OK, "got 0x%x (expected S_OK)\n", hres); + hres = ITaskScheduler_GetTargetComputer(test_task_scheduler, &name); + ok((hres == S_OK && !lstrcmpiW(name, buffer)), + "got 0x%x with %s (expected S_OK and %s)\n", + hres, wine_dbgstr_w(name), wine_dbgstr_w(buffer)); + CoTaskMemFree(name); + + /* The name must be valid */ + hres = ITaskScheduler_SetTargetComputer(test_task_scheduler, does_not_existW); + ok(hres == HRESULT_FROM_WIN32(ERROR_BAD_NETPATH), "got 0x%x (expected 0x80070035)\n", hres); + /* the name of the target computer is unchanged */ + hres = ITaskScheduler_GetTargetComputer(test_task_scheduler, &name); + ok((hres == S_OK && !lstrcmpiW(name, buffer)), + "got 0x%x with %s (expected S_OK and %s)\n", + hres, wine_dbgstr_w(name), wine_dbgstr_w(buffer)); + CoTaskMemFree(name); + + /* the two backslash are optional */ + hres = ITaskScheduler_SetTargetComputer(test_task_scheduler, oldname + 2); + ok(hres == S_OK, "got 0x%x (expected S_OK)\n", hres); + + /* the case is ignored */ + CharUpperW(buffer); + hres = ITaskScheduler_SetTargetComputer(test_task_scheduler, buffer); + ok(hres == S_OK, "got 0x%x (expected S_OK)\n", hres); + CharLowerW(buffer); + hres = ITaskScheduler_SetTargetComputer(test_task_scheduler, buffer); + ok(hres == S_OK, "got 0x%x (expected S_OK)\n", hres); + + /* cleanup */ + hres = ITaskScheduler_SetTargetComputer(test_task_scheduler, oldname); + ok(hres == S_OK, "got 0x%x (expected S_OK)\n", hres); + + CoTaskMemFree(oldname); + ITaskScheduler_Release(test_task_scheduler); + return; +} + + START_TEST(task_scheduler) { CoInitialize(NULL); test_NewWorkItem(); test_Activate(); + test_GetTargetComputer(); + test_SetTargetComputer(); CoUninitialize(); } diff --git a/rostests/winetests/mstask/task_trigger.c b/rostests/winetests/mstask/task_trigger.c index c64e1c535f1..0b642115105 100644 --- a/rostests/winetests/mstask/task_trigger.c +++ b/rostests/winetests/mstask/task_trigger.c @@ -303,7 +303,8 @@ static void test_SetTrigger_GetTrigger(void) ok(hres == E_INVALIDARG, "Expected E_INVALIDARG: 0x%08x\n", hres); normal_trigger_state.MinutesDuration = 5; normal_trigger_state.MinutesInterval = 0; - ok(hres == E_INVALIDARG, "Expected E_INVALIDARG: 0x%08x\n", hres); + hres = ITaskTrigger_SetTrigger(test_trigger, &normal_trigger_state); + ok(hres == S_OK, "Failed to set trigger: 0x%08x\n", hres); normal_trigger_state.MinutesDuration = 0; normal_trigger_state.MinutesInterval = 0;