Module: wine Branch: master Commit: eeffc8f073522c2ceb5f34a6c8618c625d68ede5 URL: http://source.winehq.org/git/wine.git/?a=commit;h=eeffc8f073522c2ceb5f34a6c8...
Author: Dmitry Timoshkov dmitry@baikal.ru Date: Tue Jan 28 11:54:45 2014 +0900
taskschd: Implement ITaskFolderCollection::get_Item.
---
dlls/taskschd/folder_collection.c | 59 ++++++++++++++++++++++++++++++++++--- dlls/taskschd/tests/scheduler.c | 12 ++++---- 2 files changed, 61 insertions(+), 10 deletions(-)
diff --git a/dlls/taskschd/folder_collection.c b/dlls/taskschd/folder_collection.c index f1a3f3f..e8e4933 100644 --- a/dlls/taskschd/folder_collection.c +++ b/dlls/taskschd/folder_collection.c @@ -127,14 +127,65 @@ static HRESULT WINAPI folders_Invoke(ITaskFolderCollection *iface, DISPID dispid
static HRESULT WINAPI folders_get_Count(ITaskFolderCollection *iface, LONG *count) { - FIXME("%p,%p: stub\n", iface, count); - return E_NOTIMPL; + TaskFolderCollection *folders = impl_from_ITaskFolderCollection(iface); + + TRACE("%p,%p\n", iface, count); + + if (!count) return E_POINTER; + + *count = folders->count; + + return S_OK; +} + +static LONG get_var_int(const VARIANT *var) +{ + switch(V_VT(var)) + { + case VT_I1: + case VT_UI1: + return V_UI1(var); + + case VT_I2: + case VT_UI2: + return V_UI2(var); + + case VT_I4: + case VT_UI4: + return V_UI4(var); + + case VT_I8: + case VT_UI8: + return V_UI8(var); + + case VT_INT: + case VT_UINT: + return V_UINT(var); + + default: + FIXME("unsupported variant type %d\n", V_VT(var)); + return 0; + } }
static HRESULT WINAPI folders_get_Item(ITaskFolderCollection *iface, VARIANT index, ITaskFolder **folder) { - FIXME("%p,%s,%p: stub\n", iface, debugstr_variant(&index), folder); - return E_NOTIMPL; + TaskFolderCollection *folders = impl_from_ITaskFolderCollection(iface); + LONG idx; + + TRACE("%p,%s,%p\n", iface, debugstr_variant(&index), folder); + + if (!folder) return E_POINTER; + + if (V_VT(&index) == VT_BSTR) + return TaskFolder_create(folders->path, V_BSTR(&index), folder, FALSE); + + idx = get_var_int(&index); + /* collections are 1 based */ + if (idx < 1 || idx > folders->count) + return E_INVALIDARG; + + return TaskFolder_create(folders->path, folders->list[idx - 1], folder, FALSE); }
static HRESULT WINAPI folders_get__NewEnum(ITaskFolderCollection *iface, IUnknown **penum) diff --git a/dlls/taskschd/tests/scheduler.c b/dlls/taskschd/tests/scheduler.c index 700fab2..d9f622e 100644 --- a/dlls/taskschd/tests/scheduler.c +++ b/dlls/taskschd/tests/scheduler.c @@ -455,11 +455,12 @@ static void test_FolderCollection(void)
ITaskFolder_Release(folder);
+ hr = ITaskFolderCollection_get_Count(folders, NULL); + ok (hr == E_POINTER, "expected E_POINTER, got %#x\n", hr); + count = 0; hr = ITaskFolderCollection_get_Count(folders, &count); -todo_wine ok(hr == S_OK, "get_Count error %#x\n", hr); -todo_wine ok(count == 2, "expected 2, got %d\n", count);
hr = ITaskFolder_CreateFolder(root, Wine_Folder3, v_null, &subfolder); @@ -468,12 +469,8 @@ todo_wine
count = 0; hr = ITaskFolderCollection_get_Count(folders, &count); -todo_wine ok(hr == S_OK, "get_Count error %#x\n", hr); -todo_wine ok(count == 2, "expected 2, got %d\n", count); - /* FIXME: remove once implemented */ - if (!count) goto failed;
for (i = 0; i < sizeof(vt)/sizeof(vt[0]); i++) { @@ -547,7 +544,10 @@ todo_wine ok(hr == E_NOINTERFACE, "expected E_NOINTERFACE, got %#x\n", hr);
hr = ITaskFolderCollection_get__NewEnum(folders, &unknown); +todo_wine ok(hr == S_OK, "get__NewEnum error %#x\n", hr); + /* FIXME: remove once implemented */ + if (hr != S_OK) goto failed; hr = IUnknown_QueryInterface(unknown, &IID_IEnumUnknown, (void **)&enumvar); ok(hr == E_NOINTERFACE, "expected E_NOINTERFACE, got %#x\n", hr); hr = IUnknown_QueryInterface(unknown, &IID_IEnumVARIANT, (void **)&enumvar);