shell32: Add test for SHCreateShellItem.
This commit is contained in:
parent
b0a40dafd9
commit
026c37e747
|
@ -52,6 +52,9 @@ static HRESULT (WINAPI *pStrRetToBufW)(STRRET*,LPCITEMIDLIST,LPWSTR,UINT);
|
||||||
static LPITEMIDLIST (WINAPI *pILFindLastID)(LPCITEMIDLIST);
|
static LPITEMIDLIST (WINAPI *pILFindLastID)(LPCITEMIDLIST);
|
||||||
static void (WINAPI *pILFree)(LPITEMIDLIST);
|
static void (WINAPI *pILFree)(LPITEMIDLIST);
|
||||||
static BOOL (WINAPI *pILIsEqual)(LPCITEMIDLIST, LPCITEMIDLIST);
|
static BOOL (WINAPI *pILIsEqual)(LPCITEMIDLIST, LPCITEMIDLIST);
|
||||||
|
static HRESULT (WINAPI *pSHCreateShellItem)(LPCITEMIDLIST,IShellFolder*,LPCITEMIDLIST,IShellItem**);
|
||||||
|
static LPITEMIDLIST (WINAPI *pILCombine)(LPCITEMIDLIST,LPCITEMIDLIST);
|
||||||
|
|
||||||
|
|
||||||
static void init_function_pointers(void)
|
static void init_function_pointers(void)
|
||||||
{
|
{
|
||||||
|
@ -68,6 +71,8 @@ static void init_function_pointers(void)
|
||||||
pILFindLastID = (void *)GetProcAddress(hmod, (LPCSTR)16);
|
pILFindLastID = (void *)GetProcAddress(hmod, (LPCSTR)16);
|
||||||
pILFree = (void*)GetProcAddress(hmod, (LPSTR)155);
|
pILFree = (void*)GetProcAddress(hmod, (LPSTR)155);
|
||||||
pILIsEqual = (void*)GetProcAddress(hmod, (LPSTR)21);
|
pILIsEqual = (void*)GetProcAddress(hmod, (LPSTR)21);
|
||||||
|
pSHCreateShellItem = (void*)GetProcAddress(hmod, "SHCreateShellItem");
|
||||||
|
pILCombine = (void*)GetProcAddress(hmod, (LPSTR)25);
|
||||||
|
|
||||||
hmod = GetModuleHandleA("shlwapi.dll");
|
hmod = GetModuleHandleA("shlwapi.dll");
|
||||||
pStrRetToBufW = (void*)GetProcAddress(hmod, "StrRetToBufW");
|
pStrRetToBufW = (void*)GetProcAddress(hmod, "StrRetToBufW");
|
||||||
|
@ -1740,6 +1745,142 @@ cleanup:
|
||||||
RemoveDirectoryA(".\\testfolder");
|
RemoveDirectoryA(".\\testfolder");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_SHCreateShellItem(void)
|
||||||
|
{
|
||||||
|
IShellItem *shellitem;
|
||||||
|
IPersistIDList *persistidl;
|
||||||
|
LPITEMIDLIST pidl_cwd=NULL, pidl_testfile, pidl_abstestfile, pidl_test;
|
||||||
|
HRESULT ret;
|
||||||
|
char curdirA[MAX_PATH];
|
||||||
|
WCHAR curdirW[MAX_PATH];
|
||||||
|
IShellFolder *desktopfolder=NULL, *currentfolder=NULL;
|
||||||
|
static WCHAR testfileW[] = {'t','e','s','t','f','i','l','e',0};
|
||||||
|
|
||||||
|
GetCurrentDirectoryA(MAX_PATH, curdirA);
|
||||||
|
|
||||||
|
if (!lstrlenA(curdirA))
|
||||||
|
{
|
||||||
|
win_skip("GetCurrentDirectoryA returned empty string, skipping test_SHCreateShellItem\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
MultiByteToWideChar(CP_ACP, 0, curdirA, -1, curdirW, MAX_PATH);
|
||||||
|
|
||||||
|
ret = SHGetDesktopFolder(&desktopfolder);
|
||||||
|
ok(SUCCEEDED(ret), "SHGetShellFolder returned %x\n", ret);
|
||||||
|
|
||||||
|
ret = IShellFolder_ParseDisplayName(desktopfolder, NULL, NULL, curdirW, NULL, &pidl_cwd, NULL);
|
||||||
|
ok(SUCCEEDED(ret), "ParseDisplayName returned %x\n", ret);
|
||||||
|
|
||||||
|
ret = IShellFolder_BindToObject(desktopfolder, pidl_cwd, NULL, &IID_IShellFolder, (void**)¤tfolder);
|
||||||
|
ok(SUCCEEDED(ret), "BindToObject returned %x\n", ret);
|
||||||
|
|
||||||
|
CreateTestFile(".\\testfile");
|
||||||
|
|
||||||
|
ret = IShellFolder_ParseDisplayName(currentfolder, NULL, NULL, testfileW, NULL, &pidl_testfile, NULL);
|
||||||
|
ok(SUCCEEDED(ret), "ParseDisplayName returned %x\n", ret);
|
||||||
|
|
||||||
|
pidl_abstestfile = pILCombine(pidl_cwd, pidl_testfile);
|
||||||
|
|
||||||
|
ret = pSHCreateShellItem(NULL, NULL, NULL, &shellitem);
|
||||||
|
todo_wine ok(ret == E_INVALIDARG, "SHCreateShellItem returned %x\n", ret);
|
||||||
|
|
||||||
|
if (0) /* crashes on Windows XP */
|
||||||
|
{
|
||||||
|
pSHCreateShellItem(NULL, NULL, pidl_cwd, NULL);
|
||||||
|
pSHCreateShellItem(pidl_cwd, NULL, NULL, &shellitem);
|
||||||
|
pSHCreateShellItem(NULL, currentfolder, NULL, &shellitem);
|
||||||
|
pSHCreateShellItem(pidl_cwd, currentfolder, NULL, &shellitem);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = pSHCreateShellItem(NULL, NULL, pidl_cwd, &shellitem);
|
||||||
|
ok(SUCCEEDED(ret), "SHCreateShellItem returned %x\n", ret);
|
||||||
|
if (SUCCEEDED(ret))
|
||||||
|
{
|
||||||
|
ret = IShellItem_QueryInterface(shellitem, &IID_IPersistIDList, (void**)&persistidl);
|
||||||
|
ok(SUCCEEDED(ret), "QueryInterface returned %x\n", ret);
|
||||||
|
if (SUCCEEDED(ret))
|
||||||
|
{
|
||||||
|
ret = IPersistIDList_GetIDList(persistidl, &pidl_test);
|
||||||
|
ok(SUCCEEDED(ret), "GetIDList returned %x\n", ret);
|
||||||
|
if (SUCCEEDED(ret))
|
||||||
|
{
|
||||||
|
ok(ILIsEqual(pidl_cwd, pidl_test), "id lists are not equal\n");
|
||||||
|
pILFree(pidl_test);
|
||||||
|
}
|
||||||
|
IPersistIDList_Release(persistidl);
|
||||||
|
}
|
||||||
|
IShellItem_Release(shellitem);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = pSHCreateShellItem(pidl_cwd, NULL, pidl_testfile, &shellitem);
|
||||||
|
todo_wine ok(SUCCEEDED(ret), "SHCreateShellItem returned %x\n", ret);
|
||||||
|
if (SUCCEEDED(ret))
|
||||||
|
{
|
||||||
|
ret = IShellItem_QueryInterface(shellitem, &IID_IPersistIDList, (void**)&persistidl);
|
||||||
|
ok(SUCCEEDED(ret), "QueryInterface returned %x\n", ret);
|
||||||
|
if (SUCCEEDED(ret))
|
||||||
|
{
|
||||||
|
ret = IPersistIDList_GetIDList(persistidl, &pidl_test);
|
||||||
|
ok(SUCCEEDED(ret), "GetIDList returned %x\n", ret);
|
||||||
|
if (SUCCEEDED(ret))
|
||||||
|
{
|
||||||
|
ok(ILIsEqual(pidl_abstestfile, pidl_test), "id lists are not equal\n");
|
||||||
|
pILFree(pidl_test);
|
||||||
|
}
|
||||||
|
IPersistIDList_Release(persistidl);
|
||||||
|
}
|
||||||
|
IShellItem_Release(shellitem);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = pSHCreateShellItem(NULL, currentfolder, pidl_testfile, &shellitem);
|
||||||
|
todo_wine ok(SUCCEEDED(ret), "SHCreateShellItem returned %x\n", ret);
|
||||||
|
if (SUCCEEDED(ret))
|
||||||
|
{
|
||||||
|
ret = IShellItem_QueryInterface(shellitem, &IID_IPersistIDList, (void**)&persistidl);
|
||||||
|
ok(SUCCEEDED(ret), "QueryInterface returned %x\n", ret);
|
||||||
|
if (SUCCEEDED(ret))
|
||||||
|
{
|
||||||
|
ret = IPersistIDList_GetIDList(persistidl, &pidl_test);
|
||||||
|
ok(SUCCEEDED(ret), "GetIDList returned %x\n", ret);
|
||||||
|
if (SUCCEEDED(ret))
|
||||||
|
{
|
||||||
|
ok(ILIsEqual(pidl_abstestfile, pidl_test), "id lists are not equal\n");
|
||||||
|
pILFree(pidl_test);
|
||||||
|
}
|
||||||
|
IPersistIDList_Release(persistidl);
|
||||||
|
}
|
||||||
|
IShellItem_Release(shellitem);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* if a parent pidl and shellfolder are specified, the shellfolder is ignored */
|
||||||
|
ret = pSHCreateShellItem(pidl_cwd, desktopfolder, pidl_testfile, &shellitem);
|
||||||
|
todo_wine ok(SUCCEEDED(ret), "SHCreateShellItem returned %x\n", ret);
|
||||||
|
if (SUCCEEDED(ret))
|
||||||
|
{
|
||||||
|
ret = IShellItem_QueryInterface(shellitem, &IID_IPersistIDList, (void**)&persistidl);
|
||||||
|
ok(SUCCEEDED(ret), "QueryInterface returned %x\n", ret);
|
||||||
|
if (SUCCEEDED(ret))
|
||||||
|
{
|
||||||
|
ret = IPersistIDList_GetIDList(persistidl, &pidl_test);
|
||||||
|
ok(SUCCEEDED(ret), "GetIDList returned %x\n", ret);
|
||||||
|
if (SUCCEEDED(ret))
|
||||||
|
{
|
||||||
|
ok(ILIsEqual(pidl_abstestfile, pidl_test), "id lists are not equal\n");
|
||||||
|
pILFree(pidl_test);
|
||||||
|
}
|
||||||
|
IPersistIDList_Release(persistidl);
|
||||||
|
}
|
||||||
|
IShellItem_Release(shellitem);
|
||||||
|
}
|
||||||
|
|
||||||
|
DeleteFileA(".\\testfile");
|
||||||
|
pILFree(pidl_abstestfile);
|
||||||
|
pILFree(pidl_testfile);
|
||||||
|
pILFree(pidl_cwd);
|
||||||
|
IShellFolder_Release(currentfolder);
|
||||||
|
IShellFolder_Release(desktopfolder);
|
||||||
|
}
|
||||||
|
|
||||||
START_TEST(shlfolder)
|
START_TEST(shlfolder)
|
||||||
{
|
{
|
||||||
|
@ -1762,6 +1903,10 @@ START_TEST(shlfolder)
|
||||||
else
|
else
|
||||||
skip("SHGetFolderPathAndSubDirA not present\n");
|
skip("SHGetFolderPathAndSubDirA not present\n");
|
||||||
test_LocalizedNames();
|
test_LocalizedNames();
|
||||||
|
if(pSHCreateShellItem)
|
||||||
|
test_SHCreateShellItem();
|
||||||
|
else
|
||||||
|
win_skip("test_SHCreateShellItem not present\n");
|
||||||
|
|
||||||
OleUninitialize();
|
OleUninitialize();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue