-- v4: taskschd: Implement IDailyTrigger_get_EndBoundary. taskschd: Implement IDailyTrigger_put_EndBoundary.
From: Vijay Kiran Kamuju infyquest@gmail.com
--- dlls/taskschd/task.c | 14 ++++++++++++-- dlls/taskschd/tests/scheduler.c | 23 ++++++++++++++++------- 2 files changed, 28 insertions(+), 9 deletions(-)
diff --git a/dlls/taskschd/task.c b/dlls/taskschd/task.c index 76cba042164..4b9cfb8b296 100644 --- a/dlls/taskschd/task.c +++ b/dlls/taskschd/task.c @@ -39,6 +39,7 @@ typedef struct { LONG ref; short interval; WCHAR *start_boundary; + WCHAR *end_boundary; BOOL enabled; } DailyTrigger;
@@ -92,6 +93,7 @@ static ULONG WINAPI DailyTrigger_Release(IDailyTrigger *iface) { TRACE("destroying %p\n", iface); free(This->start_boundary); + free(This->end_boundary); free(This); }
@@ -216,8 +218,15 @@ static HRESULT WINAPI DailyTrigger_get_EndBoundary(IDailyTrigger *iface, BSTR *e static HRESULT WINAPI DailyTrigger_put_EndBoundary(IDailyTrigger *iface, BSTR end) { DailyTrigger *This = impl_from_IDailyTrigger(iface); - FIXME("(%p)->(%s)\n", This, debugstr_w(end)); - return E_NOTIMPL; + WCHAR *str = NULL; + + TRACE("(%p)->(%s)\n", This, debugstr_w(end)); + + if (end && !(str = wcsdup(end))) return E_OUTOFMEMORY; + free(This->end_boundary); + This->end_boundary = str; + + return S_OK; }
static HRESULT WINAPI DailyTrigger_get_Enabled(IDailyTrigger *iface, VARIANT_BOOL *enabled) @@ -318,6 +327,7 @@ static HRESULT DailyTrigger_create(ITrigger **trigger) daily_trigger->ref = 1; daily_trigger->interval = 1; daily_trigger->start_boundary = NULL; + daily_trigger->end_boundary = NULL; daily_trigger->enabled = TRUE;
*trigger = (ITrigger*)&daily_trigger->IDailyTrigger_iface; diff --git a/dlls/taskschd/tests/scheduler.c b/dlls/taskschd/tests/scheduler.c index 31e9878a48a..ea571f71ff2 100644 --- a/dlls/taskschd/tests/scheduler.c +++ b/dlls/taskschd/tests/scheduler.c @@ -1319,19 +1319,20 @@ static void test_daily_trigger(ITrigger *trigger) static const struct { const WCHAR *str; + const WCHAR *end; HRESULT hr; } start_test[] = { - {L"2004-01-01T00:00:00", S_OK}, - {L"2004-01-01T00:00:00Z", S_OK}, - {L"2004-01-01T00:00:00+01:00", S_OK}, - {L"2004.01.01T00.00.00", S_OK}, - {L"9999-99-99T99:99:99", S_OK}, - {L"invalid", S_OK}, + {L"2004-01-01T00:00:00", L"2004-01-02T00:00:00", S_OK}, + {L"2004-01-01T00:00:00Z", L"2004-01-02T00:00:00Z", S_OK}, + {L"2004-01-01T00:00:00+01:00", L"2004-01-02T00:00:00+01:00", S_OK}, + {L"2004.01.01T00.00.00", L"2004.01.02T00.00.00", S_OK}, + {L"9999-99-99T99:99:99", L"9999-99-99T99:99:99", S_OK}, + {L"invalid", L"invalid", S_OK}, }; IDailyTrigger *daily_trigger; - BSTR start_boundary; + BSTR start_boundary, end_boundary; VARIANT_BOOL enabled; short interval; HRESULT hr; @@ -1387,12 +1388,20 @@ static void test_daily_trigger(ITrigger *trigger) ok(!lstrcmpW(start_boundary, start_test[i].str), "got %s\n", wine_dbgstr_w(start_boundary)); SysFreeString(start_boundary); } + + end_boundary = SysAllocString(start_test[i].end); + hr = IDailyTrigger_put_EndBoundary(daily_trigger, end_boundary); + ok(hr == start_test[i].hr, "got %08lx expected %08lx\n", hr, start_test[i].hr); + SysFreeString(end_boundary); winetest_pop_context(); }
hr = IDailyTrigger_put_StartBoundary(daily_trigger, NULL); ok(hr == S_OK, "put_StartBoundary failed: %08lx\n", hr);
+ hr = IDailyTrigger_put_EndBoundary(daily_trigger, NULL); + ok(hr == S_OK, "put_EndBoundary failed: %08lx\n", hr); + hr = IDailyTrigger_get_Enabled(daily_trigger, NULL); ok(hr == E_POINTER, "get_Enabled failed: %08lx\n", hr);
From: Vijay Kiran Kamuju infyquest@gmail.com
--- dlls/taskschd/task.c | 11 +++++++++-- dlls/taskschd/tests/scheduler.c | 17 +++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-)
diff --git a/dlls/taskschd/task.c b/dlls/taskschd/task.c index 4b9cfb8b296..a3378a99117 100644 --- a/dlls/taskschd/task.c +++ b/dlls/taskschd/task.c @@ -211,8 +211,15 @@ static HRESULT WINAPI DailyTrigger_put_StartBoundary(IDailyTrigger *iface, BSTR static HRESULT WINAPI DailyTrigger_get_EndBoundary(IDailyTrigger *iface, BSTR *end) { DailyTrigger *This = impl_from_IDailyTrigger(iface); - FIXME("(%p)->(%p)\n", This, end); - return E_NOTIMPL; + + TRACE("(%p)->(%p)\n", This, end); + + if (!end) return E_POINTER; + + if (!This->end_boundary) *end = NULL; + else if (!(*end = SysAllocString(This->end_boundary))) return E_OUTOFMEMORY; + + return S_OK; }
static HRESULT WINAPI DailyTrigger_put_EndBoundary(IDailyTrigger *iface, BSTR end) diff --git a/dlls/taskschd/tests/scheduler.c b/dlls/taskschd/tests/scheduler.c index ea571f71ff2..f9c209f1d84 100644 --- a/dlls/taskschd/tests/scheduler.c +++ b/dlls/taskschd/tests/scheduler.c @@ -1367,11 +1367,19 @@ static void test_daily_trigger(ITrigger *trigger) hr = IDailyTrigger_get_StartBoundary(daily_trigger, NULL); ok(hr == E_POINTER, "get_StartBoundary failed: %08lx\n", hr);
+ hr = IDailyTrigger_get_EndBoundary(daily_trigger, NULL); + ok(hr == E_POINTER, "get_EndBoundary failed: %08lx\n", hr); + start_boundary = (BSTR)0xdeadbeef; hr = IDailyTrigger_get_StartBoundary(daily_trigger, &start_boundary); ok(hr == S_OK, "get_StartBoundary failed: %08lx\n", hr); ok(start_boundary == NULL, "start_boundary not set\n");
+ end_boundary = (BSTR)0xdeadbeef; + hr = IDailyTrigger_get_EndBoundary(daily_trigger, &end_boundary); + ok(hr == S_OK, "get_EndBoundary failed: %08lx\n", hr); + ok(end_boundary == NULL, "end_boundary not set\n"); + for (i = 0; i < ARRAY_SIZE(start_test); i++) { winetest_push_context("%lu", i); @@ -1393,6 +1401,15 @@ static void test_daily_trigger(ITrigger *trigger) hr = IDailyTrigger_put_EndBoundary(daily_trigger, end_boundary); ok(hr == start_test[i].hr, "got %08lx expected %08lx\n", hr, start_test[i].hr); SysFreeString(end_boundary); + if (hr == S_OK) + { + end_boundary = NULL; + hr = IDailyTrigger_get_EndBoundary(daily_trigger, &end_boundary); + ok(hr == S_OK, "got %08lx\n", hr); + ok(end_boundary != NULL, "end_boundary not set\n"); + ok(!lstrcmpW(end_boundary, start_test[i].end), "got %s\n", wine_dbgstr_w(end_boundary)); + SysFreeString(end_boundary); + } winetest_pop_context(); }