Commit d22568d0 authored by Francois Gouget's avatar Francois Gouget Committed by Alexandre Julliard

shell32/tests: Use GetProcAddress() on SHGetPathFromIDListW() because it is missing on Windows 95.

parent 3874c55c
...@@ -43,6 +43,7 @@ ...@@ -43,6 +43,7 @@
static IMalloc *ppM; static IMalloc *ppM;
static HRESULT (WINAPI *pSHBindToParent)(LPCITEMIDLIST, REFIID, LPVOID*, LPCITEMIDLIST*); static HRESULT (WINAPI *pSHBindToParent)(LPCITEMIDLIST, REFIID, LPVOID*, LPCITEMIDLIST*);
static BOOL (WINAPI *pSHGetPathFromIDListW)(LPCITEMIDLIST,LPWSTR);
static BOOL (WINAPI *pSHGetSpecialFolderPathW)(HWND, LPWSTR, int, BOOL); static BOOL (WINAPI *pSHGetSpecialFolderPathW)(HWND, LPWSTR, int, BOOL);
static HRESULT (WINAPI *pStrRetToBufW)(STRRET*,LPCITEMIDLIST,LPWSTR,UINT); static HRESULT (WINAPI *pStrRetToBufW)(STRRET*,LPCITEMIDLIST,LPWSTR,UINT);
static LPITEMIDLIST (WINAPI *pILFindLastID)(LPCITEMIDLIST); static LPITEMIDLIST (WINAPI *pILFindLastID)(LPCITEMIDLIST);
...@@ -56,6 +57,7 @@ static void init_function_pointers(void) ...@@ -56,6 +57,7 @@ static void init_function_pointers(void)
hmod = GetModuleHandleA("shell32.dll"); hmod = GetModuleHandleA("shell32.dll");
pSHBindToParent = (void*)GetProcAddress(hmod, "SHBindToParent"); pSHBindToParent = (void*)GetProcAddress(hmod, "SHBindToParent");
pSHGetPathFromIDListW = (void*)GetProcAddress(hmod, "SHGetPathFromIDListW");
pSHGetSpecialFolderPathW = (void*)GetProcAddress(hmod, "SHGetSpecialFolderPathW"); pSHGetSpecialFolderPathW = (void*)GetProcAddress(hmod, "SHGetSpecialFolderPathW");
pILFindLastID = (void *)GetProcAddress(hmod, (LPCSTR)16); pILFindLastID = (void *)GetProcAddress(hmod, (LPCSTR)16);
pILFree = (void*)GetProcAddress(hmod, (LPSTR)155); pILFree = (void*)GetProcAddress(hmod, (LPSTR)155);
...@@ -363,10 +365,10 @@ static void test_GetDisplayName(void) ...@@ -363,10 +365,10 @@ static void test_GetDisplayName(void)
static const WCHAR wszDirName[] = { 'w','i','n','e','t','e','s','t',0 }; static const WCHAR wszDirName[] = { 'w','i','n','e','t','e','s','t',0 };
/* I'm trying to figure if there is a functional difference between calling /* I'm trying to figure if there is a functional difference between calling
* SHGetPathFromIDList and calling GetDisplayNameOf(SHGDN_FORPARSING) after * SHGetPathFromIDListW and calling GetDisplayNameOf(SHGDN_FORPARSING) after
* binding to the shellfolder. One thing I thought of was that perhaps * binding to the shellfolder. One thing I thought of was that perhaps
* SHGetPathFromIDList would be able to get the path to a file, which does * SHGetPathFromIDListW would be able to get the path to a file, which does
* not exist anymore, while the other method would'nt. It turns out there's * not exist anymore, while the other method wouldn't. It turns out there's
* no functional difference in this respect. * no functional difference in this respect.
*/ */
...@@ -461,9 +463,12 @@ static void test_GetDisplayName(void) ...@@ -461,9 +463,12 @@ static void test_GetDisplayName(void)
RemoveDirectoryA(szTestDir); RemoveDirectoryA(szTestDir);
/* SHGetPathFromIDListW still works, although the file is not present anymore. */ /* SHGetPathFromIDListW still works, although the file is not present anymore. */
result = SHGetPathFromIDListW(pidlTestFile, wszTestFile2); if (pSHGetPathFromIDListW)
ok (result, "SHGetPathFromIDListW failed! Last error: %u\n", GetLastError()); {
ok (!lstrcmpiW(wszTestFile, wszTestFile2), "SHGetPathFromIDListW returns incorrect path!\n"); result = pSHGetPathFromIDListW(pidlTestFile, wszTestFile2);
ok (result, "SHGetPathFromIDListW failed! Last error: %u\n", GetLastError());
ok (!lstrcmpiW(wszTestFile, wszTestFile2), "SHGetPathFromIDListW returns incorrect path!\n");
}
if(!pSHBindToParent) return; if(!pSHBindToParent) return;
...@@ -793,26 +798,30 @@ static void test_SHGetPathFromIDList(void) ...@@ -793,26 +798,30 @@ static void test_SHGetPathFromIDList(void)
HMODULE hShell32; HMODULE hShell32;
LPITEMIDLIST pidlPrograms; LPITEMIDLIST pidlPrograms;
if(!pSHGetSpecialFolderPathW) return; if(!pSHGetPathFromIDListW || !pSHGetSpecialFolderPathW)
{
skip("SHGetPathFromIDListW() or SHGetSpecialFolderPathW() is missing\n");
return;
}
/* Calling SHGetPathFromIDList with no pidl should return the empty string */ /* Calling SHGetPathFromIDListW with no pidl should return the empty string */
wszPath[0] = 'a'; wszPath[0] = 'a';
wszPath[1] = '\0'; wszPath[1] = '\0';
result = SHGetPathFromIDListW(NULL, wszPath); result = pSHGetPathFromIDListW(NULL, wszPath);
ok(!result, "Expected failure\n"); ok(!result, "Expected failure\n");
ok(!wszPath[0], "Expected empty string\n"); ok(!wszPath[0], "Expected empty string\n");
/* Calling SHGetPathFromIDList with an empty pidl should return the desktop folder's path. */ /* Calling SHGetPathFromIDListW with an empty pidl should return the desktop folder's path. */
result = pSHGetSpecialFolderPathW(NULL, wszDesktop, CSIDL_DESKTOP, FALSE); result = pSHGetSpecialFolderPathW(NULL, wszDesktop, CSIDL_DESKTOP, FALSE);
ok(result, "SHGetSpecialFolderPathW(CSIDL_DESKTOP) failed! Last error: %u\n", GetLastError()); ok(result, "SHGetSpecialFolderPathW(CSIDL_DESKTOP) failed! Last error: %u\n", GetLastError());
if (!result) return; if (!result) return;
result = SHGetPathFromIDListW(pidlEmpty, wszPath); result = pSHGetPathFromIDListW(pidlEmpty, wszPath);
ok(result, "SHGetPathFromIDListW failed! Last error: %u\n", GetLastError()); ok(result, "SHGetPathFromIDListW failed! Last error: %u\n", GetLastError());
if (!result) return; if (!result) return;
ok(!lstrcmpiW(wszDesktop, wszPath), "SHGetPathFromIDList didn't return desktop path for empty pidl!\n"); ok(!lstrcmpiW(wszDesktop, wszPath), "SHGetPathFromIDListW didn't return desktop path for empty pidl!\n");
/* MyComputer does not map to a filesystem path. SHGetPathFromIDList should fail. */ /* MyComputer does not map to a filesystem path. SHGetPathFromIDListW should fail. */
hr = SHGetDesktopFolder(&psfDesktop); hr = SHGetDesktopFolder(&psfDesktop);
ok (SUCCEEDED(hr), "SHGetDesktopFolder failed! hr = %08x\n", hr); ok (SUCCEEDED(hr), "SHGetDesktopFolder failed! hr = %08x\n", hr);
if (FAILED(hr)) return; if (FAILED(hr)) return;
...@@ -827,9 +836,9 @@ static void test_SHGetPathFromIDList(void) ...@@ -827,9 +836,9 @@ static void test_SHGetPathFromIDList(void)
SetLastError(0xdeadbeef); SetLastError(0xdeadbeef);
wszPath[0] = 'a'; wszPath[0] = 'a';
wszPath[1] = '\0'; wszPath[1] = '\0';
result = SHGetPathFromIDListW(pidlMyComputer, wszPath); result = pSHGetPathFromIDListW(pidlMyComputer, wszPath);
ok (!result, "SHGetPathFromIDList succeeded where it shouldn't!\n"); ok (!result, "SHGetPathFromIDListW succeeded where it shouldn't!\n");
ok (GetLastError()==0xdeadbeef, "SHGetPathFromIDList shouldn't set last error! Last error: %u\n", GetLastError()); ok (GetLastError()==0xdeadbeef, "SHGetPathFromIDListW shouldn't set last error! Last error: %u\n", GetLastError());
ok (!wszPath[0], "Expected empty path\n"); ok (!wszPath[0], "Expected empty path\n");
if (result) { if (result) {
IShellFolder_Release(psfDesktop); IShellFolder_Release(psfDesktop);
...@@ -881,7 +890,7 @@ static void test_SHGetPathFromIDList(void) ...@@ -881,7 +890,7 @@ static void test_SHGetPathFromIDList(void)
"returned incorrect path for file placed on desktop\n"); "returned incorrect path for file placed on desktop\n");
} }
result = SHGetPathFromIDListW(pidlTestFile, wszPath); result = pSHGetPathFromIDListW(pidlTestFile, wszPath);
ok(result, "SHGetPathFromIDListW failed! Last error: %u\n", GetLastError()); ok(result, "SHGetPathFromIDListW failed! Last error: %u\n", GetLastError());
IMalloc_Free(ppM, pidlTestFile); IMalloc_Free(ppM, pidlTestFile);
if (!result) return; if (!result) return;
...@@ -896,9 +905,9 @@ static void test_SHGetPathFromIDList(void) ...@@ -896,9 +905,9 @@ static void test_SHGetPathFromIDList(void)
ok(SUCCEEDED(hr), "SHGetFolderLocation failed: 0x%08x\n", hr); ok(SUCCEEDED(hr), "SHGetFolderLocation failed: 0x%08x\n", hr);
SetLastError(0xdeadbeef); SetLastError(0xdeadbeef);
result = SHGetPathFromIDListW(pidlPrograms, wszPath); result = pSHGetPathFromIDListW(pidlPrograms, wszPath);
IMalloc_Free(ppM, pidlPrograms); IMalloc_Free(ppM, pidlPrograms);
ok(result, "SHGetPathFromIDList failed\n"); ok(result, "SHGetPathFromIDListW failed\n");
} }
static void test_EnumObjects_and_CompareIDs(void) static void test_EnumObjects_and_CompareIDs(void)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment