diff --git a/dlls/shell32/tests/shlview.c b/dlls/shell32/tests/shlview.c index 0f6ad9f4158..28f9ec4252c 100644 --- a/dlls/shell32/tests/shlview.c +++ b/dlls/shell32/tests/shlview.c @@ -1493,10 +1493,26 @@ static void test_newmenu(void) static void test_folder_flags(void) { + IFolderView2 *folderview; FOLDERSETTINGS settings; IShellFolder *desktop; IShellView *shellview; + DWORD flags; HRESULT hr; + int i; + static const struct + { + DWORD mask, flags; + DWORD expected; + } tests[] = + { + { FWF_USESEARCHFOLDER, FWF_NONE, FWF_NONE }, + { FWF_NONE, FWF_AUTOARRANGE, FWF_NONE }, + { FWF_AUTOARRANGE, FWF_AUTOARRANGE, FWF_AUTOARRANGE }, + { FWF_OWNERDATA, FWF_AUTOARRANGE, FWF_NONE }, + { FWF_AUTOARRANGE, FWF_OWNERDATA | FWF_AUTOARRANGE, FWF_AUTOARRANGE }, + { ~FWF_NONE, FWF_AUTOARRANGE, FWF_AUTOARRANGE }, + }; create_interfaces(&desktop, &shellview); @@ -1507,6 +1523,37 @@ static void test_folder_flags(void) ok(settings.fFlags == FWF_USESEARCHFOLDER || broken(!settings.fFlags) /* pre vista */, "Got flags %#x.\n", settings.fFlags); + hr = IShellView_QueryInterface(shellview, &IID_IFolderView2, (void **)&folderview); + ok(hr == S_OK || broken(hr == E_NOINTERFACE) /* pre vista */, "Got hr %#lx.\n", hr); + if (hr != S_OK) + { + win_skip("No IFolderView2 for the desktop folder.\n"); + destroy_interfaces(desktop, shellview); + return; + } + + hr = IFolderView2_GetCurrentFolderFlags(folderview, NULL); + todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr); + + flags = 0xdeadbeef; + hr = IFolderView2_GetCurrentFolderFlags(folderview, &flags); + todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr); + todo_wine ok(flags == FWF_USESEARCHFOLDER, "Got flags %#lx.\n", flags); + + for (i = 0; i < ARRAY_SIZE(tests); ++i) + { + hr = IFolderView2_SetCurrentFolderFlags(folderview, tests[i].mask, tests[i].flags); + todo_wine ok(hr == S_OK, "Test %u: Got hr %#lx.\n", i, hr); + flags = 0xdeadbeef; + hr = IFolderView2_GetCurrentFolderFlags(folderview, &flags); + todo_wine ok(hr == S_OK, "Test %u: Got hr %#lx.\n", i, hr); + todo_wine ok(flags == tests[i].expected, "Test %u: Got flags %#lx.\n", i, flags); + + hr = IFolderView2_SetCurrentFolderFlags(folderview, ~FWF_NONE, FWF_NONE); + todo_wine ok(hr == S_OK, "Test %u: Got hr %#lx.\n", i, hr); + } + + IFolderView2_Release(folderview); destroy_interfaces(desktop, shellview); }