shell32: Added tests for SHGetFolderPathAndSubDirA.
This commit is contained in:
parent
257d82705c
commit
b5cc68f629
|
@ -43,6 +43,8 @@
|
||||||
static IMalloc *ppM;
|
static IMalloc *ppM;
|
||||||
|
|
||||||
static HRESULT (WINAPI *pSHBindToParent)(LPCITEMIDLIST, REFIID, LPVOID*, LPCITEMIDLIST*);
|
static HRESULT (WINAPI *pSHBindToParent)(LPCITEMIDLIST, REFIID, LPVOID*, LPCITEMIDLIST*);
|
||||||
|
static HRESULT (WINAPI *pSHGetFolderPathA)(HWND, int, HANDLE, DWORD, LPSTR);
|
||||||
|
static HRESULT (WINAPI *pSHGetFolderPathAndSubDirA)(HWND, int, HANDLE, DWORD, LPCSTR, LPSTR);
|
||||||
static BOOL (WINAPI *pSHGetPathFromIDListW)(LPCITEMIDLIST,LPWSTR);
|
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);
|
||||||
|
@ -57,6 +59,8 @@ static void init_function_pointers(void)
|
||||||
|
|
||||||
hmod = GetModuleHandleA("shell32.dll");
|
hmod = GetModuleHandleA("shell32.dll");
|
||||||
pSHBindToParent = (void*)GetProcAddress(hmod, "SHBindToParent");
|
pSHBindToParent = (void*)GetProcAddress(hmod, "SHBindToParent");
|
||||||
|
pSHGetFolderPathA = (void*)GetProcAddress(hmod, "SHGetFolderPathA");
|
||||||
|
pSHGetFolderPathAndSubDirA = (void*)GetProcAddress(hmod, "SHGetFolderPathAndSubDirA");
|
||||||
pSHGetPathFromIDListW = (void*)GetProcAddress(hmod, "SHGetPathFromIDListW");
|
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);
|
||||||
|
@ -1365,6 +1369,102 @@ static void test_ITEMIDLIST_format(void) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void testSHGetFolderPathAndSubDirA(void)
|
||||||
|
{
|
||||||
|
HRESULT ret;
|
||||||
|
BOOL delret;
|
||||||
|
DWORD dwret;
|
||||||
|
int i;
|
||||||
|
static char wine[] = "wine";
|
||||||
|
static char winetemp[] = "wine\\temp";
|
||||||
|
static char appdata[MAX_PATH];
|
||||||
|
static char testpath[MAX_PATH];
|
||||||
|
static char toolongpath[MAX_PATH+1];
|
||||||
|
|
||||||
|
if(!pSHGetFolderPathA) {
|
||||||
|
skip("SHGetFolderPathA not present!\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(!SUCCEEDED(pSHGetFolderPathA(NULL, CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, appdata)))
|
||||||
|
{
|
||||||
|
skip("SHGetFolderPathA failed for CSIDL_LOCAL_APPDATA!\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
sprintf(testpath, "%s\\%s", appdata, winetemp);
|
||||||
|
delret = RemoveDirectoryA(testpath);
|
||||||
|
if(!delret && (ERROR_PATH_NOT_FOUND != GetLastError()) ) {
|
||||||
|
skip("RemoveDirectoryA(%s) failed with error %u\n", testpath, GetLastError());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
sprintf(testpath, "%s\\%s", appdata, wine);
|
||||||
|
delret = RemoveDirectoryA(testpath);
|
||||||
|
if(!delret && (ERROR_PATH_NOT_FOUND != GetLastError()) && (ERROR_FILE_NOT_FOUND != GetLastError())) {
|
||||||
|
skip("RemoveDirectoryA(%s) failed with error %u\n", testpath, GetLastError());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for(i=0; i< MAX_PATH; i++)
|
||||||
|
toolongpath[i] = '0' + i % 10;
|
||||||
|
toolongpath[MAX_PATH] = '\0';
|
||||||
|
|
||||||
|
/* test invalid second parameter */
|
||||||
|
ret = pSHGetFolderPathAndSubDirA(NULL, CSIDL_FLAG_DONT_VERIFY | 0xff, NULL, SHGFP_TYPE_CURRENT, wine, testpath);
|
||||||
|
ok(E_INVALIDARG == ret, "expected E_INVALIDARG, got %x\n", ret);
|
||||||
|
|
||||||
|
/* test invalid forth parameter */
|
||||||
|
ret = pSHGetFolderPathAndSubDirA(NULL, CSIDL_FLAG_DONT_VERIFY | CSIDL_LOCAL_APPDATA, NULL, 2, wine, testpath);
|
||||||
|
ok(E_INVALIDARG == ret, "expected E_INVALIDARG, got %x\n", ret);
|
||||||
|
|
||||||
|
/* test fifth parameter */
|
||||||
|
testpath[0] = '\0';
|
||||||
|
ret = pSHGetFolderPathAndSubDirA(NULL, CSIDL_FLAG_DONT_VERIFY | CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, NULL, testpath);
|
||||||
|
ok(S_OK == ret, "expected S_OK, got %x\n", ret);
|
||||||
|
ok(!lstrcmpA(appdata, testpath), "expected %s, got %s\n", appdata, testpath);
|
||||||
|
|
||||||
|
testpath[0] = '\0';
|
||||||
|
ret = pSHGetFolderPathAndSubDirA(NULL, CSIDL_FLAG_DONT_VERIFY | CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, "", testpath);
|
||||||
|
ok(S_OK == ret, "expected S_OK, got %x\n", ret);
|
||||||
|
ok(!lstrcmpA(appdata, testpath), "expected %s, got %s\n", appdata, testpath);
|
||||||
|
|
||||||
|
testpath[0] = '\0';
|
||||||
|
ret = pSHGetFolderPathAndSubDirA(NULL, CSIDL_FLAG_DONT_VERIFY | CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, "\\", testpath);
|
||||||
|
ok(S_OK == ret, "expected S_OK, got %x\n", ret);
|
||||||
|
ok(!lstrcmpA(appdata, testpath), "expected %s, got %s\n", appdata, testpath);
|
||||||
|
|
||||||
|
ret = pSHGetFolderPathAndSubDirA(NULL, CSIDL_FLAG_DONT_VERIFY | CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, toolongpath, testpath);
|
||||||
|
ok(HRESULT_FROM_WIN32(ERROR_FILENAME_EXCED_RANGE) == ret,
|
||||||
|
"expected %x, got %x\n", HRESULT_FROM_WIN32(ERROR_FILENAME_EXCED_RANGE), ret);
|
||||||
|
|
||||||
|
testpath[0] = '\0';
|
||||||
|
ret = pSHGetFolderPathAndSubDirA(NULL, CSIDL_FLAG_DONT_VERIFY | CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, wine, NULL);
|
||||||
|
ok(S_OK == ret, "expected S_OK, got %x\n", ret);
|
||||||
|
|
||||||
|
/* test a not existing path */
|
||||||
|
testpath[0] = '\0';
|
||||||
|
ret = pSHGetFolderPathAndSubDirA(NULL, CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, winetemp, testpath);
|
||||||
|
ok(HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND) == ret,
|
||||||
|
"expected %x, got %x\n", HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND), ret);
|
||||||
|
|
||||||
|
/* create a directory inside a not existing directory */
|
||||||
|
testpath[0] = '\0';
|
||||||
|
ret = pSHGetFolderPathAndSubDirA(NULL, CSIDL_FLAG_CREATE | CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, winetemp, testpath);
|
||||||
|
ok(S_OK == ret, "expected S_OK, got %x\n", ret);
|
||||||
|
ok(!strncmp(appdata, testpath, strlen(appdata)),
|
||||||
|
"expected %s to start with %s\n", testpath, appdata);
|
||||||
|
ok(!lstrcmpA(&testpath[1 + strlen(appdata)], winetemp),
|
||||||
|
"expected %s to end with %s\n", testpath, winetemp);
|
||||||
|
dwret = GetFileAttributes(testpath);
|
||||||
|
ok(FILE_ATTRIBUTE_DIRECTORY | dwret, "expected %x to contain FILE_ATTRIBUTE_DIRECTORY\n", dwret);
|
||||||
|
|
||||||
|
/* cleanup */
|
||||||
|
sprintf(testpath, "%s\\%s", appdata, winetemp);
|
||||||
|
RemoveDirectoryA(testpath);
|
||||||
|
sprintf(testpath, "%s\\%s", appdata, wine);
|
||||||
|
RemoveDirectoryA(testpath);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
START_TEST(shlfolder)
|
START_TEST(shlfolder)
|
||||||
{
|
{
|
||||||
init_function_pointers();
|
init_function_pointers();
|
||||||
|
@ -1381,6 +1481,10 @@ START_TEST(shlfolder)
|
||||||
test_CallForAttributes();
|
test_CallForAttributes();
|
||||||
test_FolderShortcut();
|
test_FolderShortcut();
|
||||||
test_ITEMIDLIST_format();
|
test_ITEMIDLIST_format();
|
||||||
|
if(pSHGetFolderPathAndSubDirA)
|
||||||
|
testSHGetFolderPathAndSubDirA();
|
||||||
|
else
|
||||||
|
skip("SHGetFolderPathAndSubDirA not present\n");
|
||||||
|
|
||||||
OleUninitialize();
|
OleUninitialize();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue