shell32/tests: Hack SHGetFileInfo() so it does not crash and add a test for it.

This commit is contained in:
Francois Gouget 2007-01-06 19:24:06 +01:00 committed by Alexandre Julliard
parent 3d01fc39aa
commit d2daa384e9
2 changed files with 30 additions and 0 deletions

View File

@ -356,6 +356,14 @@ DWORD_PTR WINAPI SHGetFileInfoW(LPCWSTR path,DWORD dwFileAttributes,
(flags & (SHGFI_ATTRIBUTES|SHGFI_EXETYPE|SHGFI_PIDL))) (flags & (SHGFI_ATTRIBUTES|SHGFI_EXETYPE|SHGFI_PIDL)))
return FALSE; return FALSE;
if ( (flags & SHGFI_USEFILEATTRIBUTES) &&
(flags & (SHGFI_ICONLOCATION | SHGFI_ICON | SHGFI_SYSICONINDEX)) )
{
FIXME("This combination of flags is not supported yet\n");
/* And it would cause a crash, so return false instead */
return FALSE;
}
/* windows initializes these values regardless of the flags */ /* windows initializes these values regardless of the flags */
if (psfi != NULL) if (psfi != NULL)
{ {

View File

@ -111,6 +111,26 @@ static void clean_after_shfo_tests(void)
RemoveDirectoryA("nonexistent"); RemoveDirectoryA("nonexistent");
} }
static void test_get_file_info(void)
{
DWORD rc;
SHFILEINFO shfi;
strcpy(shfi.szDisplayName, "dummy");
shfi.iIcon=0xdeadbeef;
rc=SHGetFileInfoA("c:\\nonexistent", FILE_ATTRIBUTE_DIRECTORY,
&shfi, sizeof(shfi),
SHGFI_ICONLOCATION | SHGFI_USEFILEATTRIBUTES);
todo_wine ok(rc, "SHGetFileInfoA(c:\\nonexistent) returned %d\n", rc);
if (rc)
{
ok(strcpy(shfi.szDisplayName, "dummy") != 0, "SHGetFileInfoA(c:\\nonexistent) displayname is not set\n");
ok(shfi.iIcon != 0xdeadbeef, "SHGetFileInfoA(c:\\nonexistent) iIcon is not set\n");
}
}
/* /*
puts into the specified buffer file names with current directory. puts into the specified buffer file names with current directory.
files - string with file names, separated by null characters. Ends on a double files - string with file names, separated by null characters. Ends on a double
@ -855,6 +875,8 @@ START_TEST(shlfileop)
clean_after_shfo_tests(); clean_after_shfo_tests();
test_get_file_info();
init_shfo_tests(); init_shfo_tests();
test_delete(); test_delete();
clean_after_shfo_tests(); clean_after_shfo_tests();