Module: wine Branch: master Commit: aa37e696cb7868382d94c14b8f4dd53ef39b94fa URL: http://source.winehq.org/git/wine.git/?a=commit;h=aa37e696cb7868382d94c14b8f...
Author: Vincent Povirk vincent@codeweavers.com Date: Mon Sep 25 15:35:22 2017 -0500
shell32/tests: Setting a PIDL with no path resets the path.
Signed-off-by: Vincent Povirk vincent@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/shell32/tests/shelllink.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+)
diff --git a/dlls/shell32/tests/shelllink.c b/dlls/shell32/tests/shelllink.c index 7326516..461d92b 100644 --- a/dlls/shell32/tests/shelllink.c +++ b/dlls/shell32/tests/shelllink.c @@ -39,6 +39,7 @@ static void (WINAPI *pILFree)(LPITEMIDLIST); static BOOL (WINAPI *pILIsEqual)(LPCITEMIDLIST, LPCITEMIDLIST); static HRESULT (WINAPI *pSHILCreateFromPath)(LPCWSTR, LPITEMIDLIST *,DWORD*); +static HRESULT (WINAPI *pSHGetFolderLocation)(HWND,INT,HANDLE,DWORD,PIDLIST_ABSOLUTE*); static HRESULT (WINAPI *pSHDefExtractIconA)(LPCSTR, int, UINT, HICON*, HICON*, UINT); static HRESULT (WINAPI *pSHGetStockIconInfo)(SHSTOCKICONID, UINT, SHSTOCKICONINFO *); static DWORD (WINAPI *pGetLongPathNameA)(LPCSTR, LPSTR, DWORD); @@ -242,6 +243,24 @@ static void test_get_set(void) ok(lstrcmpiA(buffer, mypath)==0, "GetPath returned '%s'\n", buffer); }
+ if (pSHGetFolderLocation) + { + LPITEMIDLIST pidl_controls; + + r = pSHGetFolderLocation(NULL, CSIDL_CONTROLS, NULL, 0, &pidl_controls); + ok(r == S_OK, "SHGetFolderLocation failed (0x%08x)\n", r); + + r = IShellLinkA_SetIDList(sl, pidl_controls); + ok(r == S_OK, "SetIDList failed (0x%08x)\n", r); + + strcpy(buffer,"garbage"); + r = IShellLinkA_GetPath(sl, buffer, sizeof(buffer), NULL, SLGP_RAWPATH); + ok(r == S_FALSE, "GetPath failed (0x%08x)\n", r); + ok(buffer[0] == 0, "GetPath returned '%s'\n", buffer); + + pILFree(pidl_controls); + } + /* test path with quotes (IShellLinkA_SetPath returns S_FALSE on W2K and below and S_OK on XP and above */ r = IShellLinkA_SetPath(sl, ""c:\nonexistent\file""); ok(r==S_FALSE || r == S_OK, "SetPath failed (0x%08x)\n", r); @@ -1407,6 +1426,7 @@ START_TEST(shelllink) pILFree = (void *)GetProcAddress(hmod, (LPSTR)155); pILIsEqual = (void *)GetProcAddress(hmod, (LPSTR)21); pSHILCreateFromPath = (void *)GetProcAddress(hmod, (LPSTR)28); + pSHGetFolderLocation = (void *)GetProcAddress(hmod, "SHGetFolderLocation"); pSHDefExtractIconA = (void *)GetProcAddress(hmod, "SHDefExtractIconA"); pSHGetStockIconInfo = (void *)GetProcAddress(hmod, "SHGetStockIconInfo"); pGetLongPathNameA = (void *)GetProcAddress(hkernel32, "GetLongPathNameA");