From: Vijay Kiran Kamuju infyquest@gmail.com
--- dlls/taskschd/task.c | 11 +++++++++-- dlls/taskschd/tests/scheduler.c | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 2 deletions(-)
diff --git a/dlls/taskschd/task.c b/dlls/taskschd/task.c index a91c0ec90a9..7ac4a6c3c06 100644 --- a/dlls/taskschd/task.c +++ b/dlls/taskschd/task.c @@ -143,8 +143,15 @@ static HRESULT WINAPI RepetitionPattern_get_Duration(IRepetitionPattern *iface, static HRESULT WINAPI RepetitionPattern_put_Duration(IRepetitionPattern *iface, BSTR duration) { RepetitionPattern *This = impl_from_IRepetitionPattern(iface); - FIXME("(%p)->(%s)\n", This, debugstr_w(duration)); - return E_NOTIMPL; + WCHAR *dur = NULL; + + TRACE("(%p)->(%s)\n", This, debugstr_w(duration)); + + if (duration && !(dur = wcsdup(duration))) return E_OUTOFMEMORY; + free(This->duration); + This->duration = dur; + + return S_OK; }
static HRESULT WINAPI RepetitionPattern_get_Interval(IRepetitionPattern *iface, BSTR *interval) diff --git a/dlls/taskschd/tests/scheduler.c b/dlls/taskschd/tests/scheduler.c index 65c264b2fcf..ddf2143262a 100644 --- a/dlls/taskschd/tests/scheduler.c +++ b/dlls/taskschd/tests/scheduler.c @@ -1316,9 +1316,20 @@ static void change_settings(ITaskDefinition *taskdef, struct settings *test)
static void test_repetition_pattern(IRepetitionPattern *pattern) { + static const struct + { + const WCHAR *dur; + HRESULT hr; + } + start_test[] = + { + {L"P5D", S_OK}, + {L"invalid", S_OK}, + }; BSTR duration, interval; VARIANT_BOOL stopatend; HRESULT hr; + ULONG i;
hr = IRepetitionPattern_get_Duration(pattern, NULL); ok(hr == E_POINTER, "get_Duration failed: %08lx\n", hr); @@ -1343,6 +1354,28 @@ static void test_repetition_pattern(IRepetitionPattern *pattern) hr = IRepetitionPattern_get_StopAtDurationEnd(pattern, &stopatend); ok(hr == S_OK, "get_StopAtDurationEnd failed: %08lx\n", hr); ok(stopatend == VARIANT_FALSE, "got %d\n", stopatend); + + for (i = 0; i < ARRAY_SIZE(start_test); i++) + { + winetest_push_context("%lu", i); + duration = SysAllocString(start_test[i].dur); + hr = IRepetitionPattern_put_Duration(pattern, duration); + ok(hr == start_test[i].hr, "got %08lx expected %08lx\n", hr, start_test[i].hr); + SysFreeString(duration); + if (hr == S_OK) + { + duration = NULL; + hr = IRepetitionPattern_get_Duration(pattern, &duration); + ok(hr == S_OK, "got %08lx\n", hr); + ok(duration != NULL, "duration not set\n"); + ok(!lstrcmpW(duration, start_test[i].dur), "got %s\n", wine_dbgstr_w(duration)); + SysFreeString(duration); + } + winetest_pop_context(); + } + + hr = IRepetitionPattern_put_Duration(pattern, NULL); + ok(hr == S_OK, "put_Duration failed: %08lx\n", hr); }
static void test_daily_trigger(ITrigger *trigger)