[2/4] taskschd/tests: Add some ITaskDefinition tests.
Dmitry Timoshkov
dmitry at baikal.ru
Tue Feb 11 01:19:47 CST 2014
---
dlls/taskschd/tests/scheduler.c | 282 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 282 insertions(+)
diff --git a/dlls/taskschd/tests/scheduler.c b/dlls/taskschd/tests/scheduler.c
index 8ecd98a..60f5e43 100644
--- a/dlls/taskschd/tests/scheduler.c
+++ b/dlls/taskschd/tests/scheduler.c
@@ -853,6 +853,287 @@ failed:
ITaskService_Release(service);
}
+struct settings
+{
+ WCHAR restart_interval[20];
+ WCHAR execution_time_limit[20];
+ WCHAR delete_expired_task_after[20];
+ int restart_count;
+ int priority;
+ TASK_INSTANCES_POLICY policy;
+ TASK_COMPATIBILITY compatibility;
+ VARIANT_BOOL allow_on_demand_start;
+ VARIANT_BOOL stop_if_going_on_batteries;
+ VARIANT_BOOL disallow_start_if_on_batteries;
+ VARIANT_BOOL allow_hard_terminate;
+ VARIANT_BOOL start_when_available;
+ VARIANT_BOOL run_only_if_network_available;
+ VARIANT_BOOL enabled;
+ VARIANT_BOOL hidden;
+ VARIANT_BOOL run_only_if_idle;
+ VARIANT_BOOL wake_to_run;
+};
+
+/* test the version 1 compatibility settings */
+static void test_settings_v1(ITaskDefinition *taskdef, struct settings *test, struct settings *def)
+{
+ HRESULT hr;
+ ITaskSettings *set;
+ int vint;
+ VARIANT_BOOL vbool;
+ BSTR bstr;
+ TASK_INSTANCES_POLICY policy;
+ TASK_COMPATIBILITY compat;
+
+ hr = ITaskDefinition_get_Settings(taskdef, &set);
+todo_wine
+ ok(hr == S_OK, "get_Settings error %#x\n", hr);
+ /* FIXME: Remove once implemented */
+ if (hr != S_OK) return;
+
+ hr = ITaskSettings_get_AllowDemandStart(set, &vbool);
+ ok(hr == S_OK, "expected S_OK, got %#x\n", hr);
+ ok(vbool == def->allow_on_demand_start, "expected %d, got %d\n", def->allow_on_demand_start, vbool);
+
+ hr = ITaskSettings_get_RestartInterval(set, &bstr);
+ ok(hr == S_OK, "expected S_OK, got %#x\n", hr);
+ if (!def->restart_interval[0])
+ ok(bstr == NULL, "expected NULL, got %s\n", wine_dbgstr_w(bstr));
+ else
+ ok(!lstrcmpW(bstr, def->restart_interval), "expected %s, got %s\n", wine_dbgstr_w(def->restart_interval), wine_dbgstr_w(bstr));
+
+ hr = ITaskSettings_get_RestartCount(set, &vint);
+ ok(hr == S_OK, "expected S_OK, got %#x\n", hr);
+ ok(vint == def->restart_count, "expected %d, got %d\n", def->restart_count, vint);
+
+ hr = ITaskSettings_get_MultipleInstances(set, &policy);
+ ok(hr == S_OK, "expected S_OK, got %#x\n", hr);
+ ok(policy == def->policy, "expected %d, got %d\n", def->policy, policy);
+
+ hr = ITaskSettings_get_StopIfGoingOnBatteries(set, &vbool);
+ ok(hr == S_OK, "expected S_OK, got %#x\n", hr);
+ ok(vbool == test->stop_if_going_on_batteries, "expected %d, got %d\n", test->stop_if_going_on_batteries, vbool);
+
+ hr = ITaskSettings_get_DisallowStartIfOnBatteries(set, &vbool);
+ ok(hr == S_OK, "expected S_OK, got %#x\n", hr);
+ ok(vbool == test->disallow_start_if_on_batteries, "expected %d, got %d\n", test->disallow_start_if_on_batteries, vbool);
+
+ hr = ITaskSettings_get_AllowHardTerminate(set, &vbool);
+ ok(hr == S_OK, "expected S_OK, got %#x\n", hr);
+ ok(vbool == def->allow_hard_terminate, "expected %d, got %d\n", def->allow_hard_terminate, vbool);
+
+ hr = ITaskSettings_get_StartWhenAvailable(set, &vbool);
+ ok(hr == S_OK, "expected S_OK, got %#x\n", hr);
+ ok(vbool == def->start_when_available, "expected %d, got %d\n", def->start_when_available, vbool);
+
+ hr = ITaskSettings_get_RunOnlyIfNetworkAvailable(set, &vbool);
+ ok(hr == S_OK, "expected S_OK, got %#x\n", hr);
+ ok(vbool == def->run_only_if_network_available, "expected %d, got %d\n", def->run_only_if_network_available, vbool);
+
+ hr = ITaskSettings_get_ExecutionTimeLimit(set, &bstr);
+ ok(hr == S_OK, "expected S_OK, got %#x\n", hr);
+ if (!test->execution_time_limit[0])
+ ok(bstr == NULL, "expected NULL, got %s\n", wine_dbgstr_w(bstr));
+ else
+ ok(!lstrcmpW(bstr, test->execution_time_limit), "expected %s, got %s\n", wine_dbgstr_w(test->execution_time_limit), wine_dbgstr_w(bstr));
+
+ hr = ITaskSettings_get_Enabled(set, &vbool);
+ ok(hr == S_OK, "expected S_OK, got %#x\n", hr);
+ ok(vbool == test->enabled, "expected %d, got %d\n", test->enabled, vbool);
+
+ hr = ITaskSettings_get_DeleteExpiredTaskAfter(set, &bstr);
+ ok(hr == S_OK, "expected S_OK, got %#x\n", hr);
+ if (!test->delete_expired_task_after[0])
+ ok(bstr == NULL, "expected NULL, got %s\n", wine_dbgstr_w(bstr));
+ else
+ ok(!lstrcmpW(bstr, test->delete_expired_task_after), "expected %s, got %s\n", wine_dbgstr_w(test->delete_expired_task_after), wine_dbgstr_w(bstr));
+
+ hr = ITaskSettings_get_Priority(set, &vint);
+ ok(hr == S_OK, "expected S_OK, got %#x\n", hr);
+ ok(vint == test->priority, "expected %d, got %d\n", test->priority, vint);
+
+ hr = ITaskSettings_get_Compatibility(set, &compat);
+ ok(hr == S_OK, "expected S_OK, got %#x\n", hr);
+ ok(compat == test->compatibility, "expected %d, got %d\n", test->compatibility, compat);
+
+ hr = ITaskSettings_get_Hidden(set, &vbool);
+ ok(hr == S_OK, "expected S_OK, got %#x\n", hr);
+ ok(vbool == test->hidden, "expected %d, got %d\n", test->hidden, vbool);
+
+ hr = ITaskSettings_get_RunOnlyIfIdle(set, &vbool);
+ ok(hr == S_OK, "expected S_OK, got %#x\n", hr);
+ ok(vbool == test->run_only_if_idle, "expected %d, got %d\n", test->run_only_if_idle, vbool);
+
+ hr = ITaskSettings_get_WakeToRun(set, &vbool);
+ ok(hr == S_OK, "expected S_OK, got %#x\n", hr);
+ ok(vbool == test->wake_to_run, "expected %d, got %d\n", test->wake_to_run, vbool);
+
+ /* FIXME: test IIdleSettings and INetworkSettings */
+
+ ITaskSettings_Release(set);
+}
+
+static void change_settings(ITaskDefinition *taskdef, struct settings *test)
+{
+ HRESULT hr;
+ ITaskSettings *set;
+
+ hr = ITaskDefinition_get_Settings(taskdef, &set);
+todo_wine
+ ok(hr == S_OK, "get_Settings error %#x\n", hr);
+ /* FIXME: Remove once implemented */
+ if (hr != S_OK) return;
+
+ if (!test->restart_interval[0])
+ hr = ITaskSettings_put_RestartInterval(set, NULL);
+ else
+ hr = ITaskSettings_put_RestartInterval(set, test->restart_interval);
+ ok(hr == S_OK, "expected S_OK, got %#x\n", hr);
+
+ hr = ITaskSettings_put_RestartCount(set, test->restart_count);
+ ok(hr == S_OK, "expected S_OK, got %#x\n", hr);
+
+ hr = ITaskSettings_put_MultipleInstances(set, test->policy);
+ ok(hr == S_OK, "expected S_OK, got %#x\n", hr);
+
+ hr = ITaskSettings_put_StopIfGoingOnBatteries(set, test->stop_if_going_on_batteries);
+ ok(hr == S_OK, "expected S_OK, got %#x\n", hr);
+
+ hr = ITaskSettings_put_DisallowStartIfOnBatteries(set, test->disallow_start_if_on_batteries);
+ ok(hr == S_OK, "expected S_OK, got %#x\n", hr);
+
+ hr = ITaskSettings_put_AllowHardTerminate(set, test->allow_hard_terminate);
+ ok(hr == S_OK, "expected S_OK, got %#x\n", hr);
+
+ hr = ITaskSettings_put_StartWhenAvailable(set, test->start_when_available);
+ ok(hr == S_OK, "expected S_OK, got %#x\n", hr);
+
+ hr = ITaskSettings_put_RunOnlyIfNetworkAvailable(set, test->run_only_if_network_available);
+ ok(hr == S_OK, "expected S_OK, got %#x\n", hr);
+
+ if (!test->execution_time_limit[0])
+ hr = ITaskSettings_put_ExecutionTimeLimit(set, NULL);
+ else
+ hr = ITaskSettings_put_ExecutionTimeLimit(set, test->execution_time_limit);
+ ok(hr == S_OK, "expected S_OK, got %#x\n", hr);
+
+ hr = ITaskSettings_put_Enabled(set, test->enabled);
+ ok(hr == S_OK, "expected S_OK, got %#x\n", hr);
+
+ if (!test->delete_expired_task_after[0])
+ hr = ITaskSettings_put_DeleteExpiredTaskAfter(set, NULL);
+ else
+ hr = ITaskSettings_put_DeleteExpiredTaskAfter(set, test->delete_expired_task_after);
+ ok(hr == S_OK, "expected S_OK, got %#x\n", hr);
+
+ hr = ITaskSettings_put_Priority(set, test->priority);
+ ok(hr == S_OK, "expected S_OK, got %#x\n", hr);
+
+ hr = ITaskSettings_put_Compatibility(set, test->compatibility);
+ ok(hr == S_OK, "expected S_OK, got %#x\n", hr);
+
+ hr = ITaskSettings_put_Hidden(set, test->hidden);
+ ok(hr == S_OK, "expected S_OK, got %#x\n", hr);
+
+ hr = ITaskSettings_put_RunOnlyIfIdle(set, test->run_only_if_idle);
+ ok(hr == S_OK, "expected S_OK, got %#x\n", hr);
+
+ hr = ITaskSettings_put_WakeToRun(set, test->wake_to_run);
+ ok(hr == S_OK, "expected S_OK, got %#x\n", hr);
+
+ hr = ITaskSettings_put_AllowDemandStart(set, test->allow_on_demand_start);
+ ok(hr == S_OK, "expected S_OK, got %#x\n", hr);
+
+ /* FIXME: set IIdleSettings and INetworkSettings */
+
+ ITaskSettings_Release(set);
+}
+
+static void create_action(ITaskDefinition *taskdef)
+{
+ static WCHAR task1_exe[] = { 't','a','s','k','1','.','e','x','e',0 };
+ HRESULT hr;
+ IActionCollection *actions;
+ IAction *action;
+ IExecAction *exec_action;
+
+ hr = ITaskDefinition_get_Actions(taskdef, &actions);
+todo_wine
+ ok(hr == S_OK, "get_Actions error %#x\n", hr);
+ /* FIXME: Remove once implemented */
+ if (hr != S_OK) return;
+
+ hr = IActionCollection_Create(actions, TASK_ACTION_EXEC, &action);
+ ok(hr == S_OK, "Create action error %#x\n", hr);
+
+ hr = IAction_QueryInterface(action, &IID_IExecAction, (void **)&exec_action);
+ ok(hr == S_OK, "QueryInterface error %#x\n", hr);
+
+ hr = IExecAction_put_Path(exec_action, task1_exe);
+ ok(hr == S_OK, "put_Path error %#x\n", hr);
+
+ IExecAction_Release(exec_action);
+ IAction_Release(action);
+ IActionCollection_Release(actions);
+}
+
+static void test_TaskDefinition(void)
+{
+ static struct settings def_settings = { { 0 }, { 'P','T','7','2','H',0 }, { 0 },
+ 0, 7, TASK_INSTANCES_IGNORE_NEW, TASK_COMPATIBILITY_V2, VARIANT_TRUE, VARIANT_TRUE,
+ VARIANT_TRUE, VARIANT_TRUE, VARIANT_FALSE, VARIANT_FALSE, VARIANT_TRUE, VARIANT_FALSE,
+ VARIANT_FALSE, VARIANT_FALSE };
+ static struct settings new_settings = { { 'P','1','Y',0 }, { 'P','T','1','0','M',0 }, { 0 },
+ 100, 1, TASK_INSTANCES_STOP_EXISTING, TASK_COMPATIBILITY_V1, VARIANT_FALSE, VARIANT_FALSE,
+ VARIANT_FALSE, VARIANT_FALSE, VARIANT_TRUE, VARIANT_TRUE, VARIANT_FALSE, VARIANT_TRUE,
+ VARIANT_TRUE, VARIANT_TRUE };
+ HRESULT hr;
+ VARIANT v_null;
+ ITaskService *service;
+ ITaskDefinition *taskdef;
+ BSTR xml;
+
+ hr = CoCreateInstance(&CLSID_TaskScheduler, NULL, CLSCTX_INPROC_SERVER, &IID_ITaskService, (void **)&service);
+ if (hr != S_OK)
+ {
+ win_skip("CoCreateInstance(CLSID_TaskScheduler) error %#x\n", hr);
+ return;
+ }
+
+ V_VT(&v_null) = VT_NULL;
+
+ hr = ITaskService_Connect(service, v_null, v_null, v_null, v_null);
+ ok(hr == S_OK, "Connect error %#x\n", hr);
+
+ hr = ITaskService_NewTask(service, 0, &taskdef);
+ ok(hr == S_OK, "NewTask error %#x\n", hr);
+
+ test_settings_v1(taskdef, &def_settings, &def_settings);
+ change_settings(taskdef, &new_settings);
+
+ /* Action is mandatory for v1 compatibility */
+ create_action(taskdef);
+
+ hr = ITaskDefinition_get_XmlText(taskdef, &xml);
+todo_wine
+ ok(hr == S_OK, "get_XmlText error %#x\n", hr);
+
+ ITaskDefinition_Release(taskdef);
+
+ hr = ITaskService_NewTask(service, 0, &taskdef);
+ ok(hr == S_OK, "NewTask error %#x\n", hr);
+
+ hr = ITaskDefinition_put_XmlText(taskdef, xml);
+todo_wine
+ ok(hr == S_OK, "put_XmlText error %#x\n", hr);
+ SysFreeString(xml);
+
+ test_settings_v1(taskdef, &new_settings, &def_settings);
+
+ ITaskDefinition_Release(taskdef);
+ ITaskService_Release(service);
+}
+
START_TEST(scheduler)
{
OleInitialize(NULL);
@@ -861,6 +1142,7 @@ START_TEST(scheduler)
test_GetFolder();
test_FolderCollection();
test_GetTask();
+ test_TaskDefinition();
OleUninitialize();
}
--
1.8.5.3
More information about the wine-patches
mailing list