On 21.07.2016 7:45, Alex Henrie wrote:
+ for (i = 0; i < sizeof(file_defs)/sizeof(file_defs[0]); i++) + { + switch (file_defs[i].type) + { + case DIRECTORY: + r = CreateDirectoryA(file_defs[i].name, NULL); + ok(r, "file_defs[%d]: CreateDirectory failed: %08x\n", i, GetLastError()); + break; + + case SHORTCUT: + sl = NULL; + r = CoCreateInstance(&CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, &IID_IShellLinkA, (void**)&sl); + ok(SUCCEEDED(r), "file_defs[%d]: CoCreateInstance failed: %08x\n", i, r); + ok(!!sl, "sl is null\n"); + + shortcut = NULL; + r = IShellLinkA_QueryInterface(sl, &IID_IPersistFile, (void**)&shortcut); + ok(r == S_OK, "file_defs[%d]: IShellLink::QueryInterface failed: %08x\n", i, r); + ok(!!shortcut, "file_defs[%d]: shortcut is null\n", i); + + MultiByteToWideChar(CP_ACP, 0, file_defs[i].name, -1, wstr, sizeof(wstr)/sizeof(WCHAR)); + r = IPersistFile_Save(shortcut, wstr, FALSE); + ok(r == S_OK, "file_defs[%d]: IPersistFile::Save failed: %08x\n", i, r); + + IPersistFile_Release(shortcut); + IShellLinkA_Release(sl);
If you're only interested in IPersistFile you can request it directly when calling CoCreateInstance().
+ r = FolderItems_QueryInterface(items, &IID_FolderItems2, (void**)&items2); + ok(r == S_OK || broken(E_NOINTERFACE) /* xp and later */, "FolderItems::QueryInterface failed: %08x\n", r); + ok(!!items2 || broken(!items2) /* xp and later */, "items2 is null\n");
Second ok() is a bit meaningless, because it's expected to be consistent with previous return value test. I think it could be placed into if (r == S_OK), with broken() removed.
+ + bstr = NULL; + r = FolderItem_get_Path(item, &bstr); + ok(r == S_OK, "file_defs[%d]: FolderItem::get_Path failed: %08x\n", i, r); + ok(!!bstr, "file_defs[%d]: bstr is null\n", i); + + bstr2 = NULL; + r = FolderItem_get_Path(item, &bstr2); + ok(r == S_OK, "file_defs[%d]: FolderItem::get_Path failed: %08x\n", i, r); + ok(bstr2 != bstr, "file_defs[%d]: bstr and bstr2 are the same\n", i); + SysFreeString(bstr2);
This is a regular convention for [out] BSTR arguments. It only makes sense to explicitly test it if it differs from expected behavior.
+ + V_I4(&var) = sizeof(file_defs)/sizeof(file_defs[0]); + item = NULL; + r = FolderItems_Item(items, var, &item); +todo_wine + ok(r == S_FALSE, "expected S_FALSE, got %08x\n", r); + ok(!item, "item is not null\n"); + if (0) /* crashes on xp */ { r = FolderItems_get_Application(items, NULL); @@ -422,12 +623,20 @@ todo_wine ok(r == E_INVALIDARG, "expected E_INVALIDARG, got %08x\n", r); }
+ verbs = (FolderItemVerbs*)0xdeadbeef; r = FolderItems3_get_Verbs(items3, &verbs); todo_wine ok(r == S_FALSE, "expected S_FALSE, got %08x\n", r); ok(!verbs, "verbs is not null\n"); }
+ for (i = 0; i < sizeof(file_defs)/sizeof(file_defs[0]); i++) + { + if (file_defs[i].type == DIRECTORY) + RemoveDirectoryA(file_defs[i].name); + else + DeleteFileA(file_defs[i].name); + }
Could this cleanup be merged with one of the loops you have earlier?