shell32/tests: Copy the PathRemoveBackslashA() and PathAddBackslashW() implementations because shlwapi.dll is missing on Windows 95.

This commit is contained in:
Francois Gouget 2007-12-18 10:00:47 +01:00 committed by Alexandre Julliard
parent 000fd0edc5
commit 3874c55cc4
3 changed files with 52 additions and 11 deletions

View File

@ -3,7 +3,7 @@ TOPOBJDIR = ../../..
SRCDIR = @srcdir@
VPATH = @srcdir@
TESTDLL = shell32.dll
IMPORTS = shell32 ole32 oleaut32 shlwapi user32 advapi32 kernel32
IMPORTS = shell32 ole32 oleaut32 user32 advapi32 kernel32
EXTRALIBS = -luuid
CTESTS = \

View File

@ -642,6 +642,27 @@ static void testEnvVars(void)
matchSpecialFolderPathToEnv(CSIDL_SYSTEM, "winsysdir");
}
/* Loosely based on PathRemoveBackslashA from dlls/shlwapi/path.c */
static BOOL myPathIsRootA(LPCSTR lpszPath)
{
if (lpszPath && *lpszPath &&
lpszPath[1] == ':' && lpszPath[2] == '\\' && lpszPath[3] == '\0')
return TRUE; /* X:\ */
return FALSE;
}
static LPSTR myPathRemoveBackslashA( LPSTR lpszPath )
{
LPSTR szTemp = NULL;
if(lpszPath)
{
szTemp = CharPrevA(lpszPath, lpszPath + strlen(lpszPath));
if (!myPathIsRootA(lpszPath) && *szTemp == '\\')
*szTemp = '\0';
}
return szTemp;
}
/* Verifies the shell path for CSIDL_WINDOWS matches the return from
* GetWindowsDirectory. If SHGetSpecialFolderPath fails, no harm, no foul--not
* every shell32 version supports CSIDL_WINDOWS.
@ -654,9 +675,9 @@ static void testWinDir(void)
if (pSHGetSpecialFolderPathA(NULL, windowsShellPath, CSIDL_WINDOWS, FALSE))
{
PathRemoveBackslashA(windowsShellPath);
myPathRemoveBackslashA(windowsShellPath);
GetWindowsDirectoryA(windowsDir, sizeof(windowsDir));
PathRemoveBackslashA(windowsDir);
myPathRemoveBackslashA(windowsDir);
ok(!lstrcmpiA(windowsDir, windowsShellPath),
"GetWindowsDirectory does not match SHGetSpecialFolderPath:\n"
"GetWindowsDirectory returns %s\nSHGetSpecialFolderPath returns %s\n",
@ -675,10 +696,10 @@ static void testSystemDir(void)
if (!pSHGetSpecialFolderPathA) return;
GetSystemDirectoryA(systemDir, sizeof(systemDir));
PathRemoveBackslashA(systemDir);
myPathRemoveBackslashA(systemDir);
if (pSHGetSpecialFolderPathA(NULL, systemShellPath, CSIDL_SYSTEM, FALSE))
{
PathRemoveBackslashA(systemShellPath);
myPathRemoveBackslashA(systemShellPath);
ok(!lstrcmpiA(systemDir, systemShellPath),
"GetSystemDirectory does not match SHGetSpecialFolderPath:\n"
"GetSystemDirectory returns %s\nSHGetSpecialFolderPath returns %s\n",
@ -689,7 +710,7 @@ static void testSystemDir(void)
*/
if (pSHGetSpecialFolderPathA(NULL, systemShellPath, CSIDL_SYSTEMX86, FALSE))
{
PathRemoveBackslashA(systemShellPath);
myPathRemoveBackslashA(systemShellPath);
ok(!lstrcmpiA(systemDir, systemShellPath),
"GetSystemDirectory does not match SHGetSpecialFolderPath:\n"
"GetSystemDirectory returns %s\nSHGetSpecialFolderPath returns %s\n",

View File

@ -325,6 +325,26 @@ static void test_BindToObject(void)
IShellFolder_Release(psfSystemDir);
}
/* Based on PathAddBackslashW from dlls/shlwapi/path.c */
static LPWSTR myPathAddBackslashW( LPWSTR lpszPath )
{
size_t iLen;
if (!lpszPath || (iLen = lstrlenW(lpszPath)) >= MAX_PATH)
return NULL;
if (iLen)
{
lpszPath += iLen;
if (lpszPath[-1] != '\\')
{
*lpszPath++ = '\\';
*lpszPath = '\0';
}
}
return lpszPath;
}
static void test_GetDisplayName(void)
{
BOOL result;
@ -357,7 +377,7 @@ static void test_GetDisplayName(void)
ok(result, "SHGetSpecialFolderPathW failed! Last error: %u\n", GetLastError());
if (!result) return;
PathAddBackslashW(wszTestDir);
myPathAddBackslashW(wszTestDir);
lstrcatW(wszTestDir, wszDirName);
/* Use ANSI file functions so this works on Windows 9x */
WideCharToMultiByte(CP_ACP, 0, wszTestDir, -1, szTestDir, MAX_PATH, 0, 0);
@ -370,7 +390,7 @@ static void test_GetDisplayName(void)
}
lstrcpyW(wszTestFile, wszTestDir);
PathAddBackslashW(wszTestFile);
myPathAddBackslashW(wszTestFile);
lstrcatW(wszTestFile, wszFileName);
WideCharToMultiByte(CP_ACP, 0, wszTestFile, -1, szTestFile, MAX_PATH, 0, 0);
@ -824,7 +844,7 @@ static void test_SHGetPathFromIDList(void)
IShellFolder_Release(psfDesktop);
return;
}
PathAddBackslashW(wszFileName);
myPathAddBackslashW(wszFileName);
lstrcatW(wszFileName, wszTestFile);
hTestFile = CreateFileW(wszFileName, GENERIC_WRITE, 0, NULL, CREATE_NEW, 0, NULL);
ok(hTestFile != INVALID_HANDLE_VALUE, "CreateFileW failed! Last error: %u\n", GetLastError());
@ -1153,7 +1173,7 @@ static void test_FolderShortcut(void) {
/* Next few lines are meant to show that children of FolderShortcuts are not FolderShortcuts,
* but ShellFSFolders. */
PathAddBackslashW(wszDesktopPath);
myPathAddBackslashW(wszDesktopPath);
lstrcatW(wszDesktopPath, wszSomeSubFolder);
if (!CreateDirectoryW(wszDesktopPath, NULL)) {
IShellFolder_Release(pShellFolder);