Module: wine Branch: master Commit: e7cc2f76daac482a492e5703ba2bb963c4ed3b8c URL: http://source.winehq.org/git/wine.git/?a=commit;h=e7cc2f76daac482a492e5703ba...
Author: André Hentschel nerv@dawncrow.de Date: Thu Apr 28 22:32:52 2011 +0200
shell32: Add some selection tests.
---
dlls/shell32/tests/brsfolder.c | 93 ++++++++++++++++++++++++++++++++++++++++ 1 files changed, 93 insertions(+), 0 deletions(-)
diff --git a/dlls/shell32/tests/brsfolder.c b/dlls/shell32/tests/brsfolder.c index fd547cb..7adaa1f 100644 --- a/dlls/shell32/tests/brsfolder.c +++ b/dlls/shell32/tests/brsfolder.c @@ -2,6 +2,7 @@ * Unit test of the SHBrowseForFolder function. * * Copyright 2009-2010 Michael Mc Donnell + * Copyright 2011 André Hentschel * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -27,6 +28,7 @@ #define TIMER_WAIT_MS 50 /* Should be long enough for slow systems */
static const char new_folder_name[] = "foo"; +static LPITEMIDLIST selected_folder_pidl;
/* * Returns the number of folders in a folder. @@ -247,7 +249,98 @@ static void test_click_make_new_folder_button(void) CoUninitialize(); }
+ +/* + * Callback used by test_selection. + */ +static int CALLBACK selection_callback(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData) +{ + DWORD ret; + + switch (uMsg) + { + case BFFM_INITIALIZED: + /* test with zero values */ + ret = SendMessage(hwnd, BFFM_SETSELECTIONA, 0, 0); + ok(!ret, "SendMessage returned: %u\n", ret); + ret = SendMessage(hwnd, BFFM_SETSELECTIONW, 0, 0); + ok(!ret, "SendMessage returned: %u\n", ret); + + ret = SendMessage(hwnd, BFFM_SETSELECTIONA, 1, 0); + ok(!ret, "SendMessage returned: %u\n", ret); + + if(0) + { + /* Crashes on NT4 */ + ret = SendMessage(hwnd, BFFM_SETSELECTIONW, 1, 0); + ok(!ret, "SendMessage returned: %u\n", ret); + } + + ret = SendMessage(hwnd, BFFM_SETSELECTIONA, 0, (LPARAM)selected_folder_pidl); + ok(!ret, "SendMessage returned: %u\n", ret); + ret = SendMessage(hwnd, BFFM_SETSELECTIONW, 0, (LPARAM)selected_folder_pidl); + ok(!ret, "SendMessage returned: %u\n", ret); + + ret = SendMessage(hwnd, BFFM_SETSELECTIONA, 1, (LPARAM)selected_folder_pidl); + ok(!ret, "SendMessage returned: %u\n", ret); + ret = SendMessage(hwnd, BFFM_SETSELECTIONW, 1, (LPARAM)selected_folder_pidl); + ok(!ret, "SendMessage returned: %u\n", ret); + + ret = SendMessage(hwnd, BFFM_SETSELECTIONA, 1, (LPARAM)new_folder_name); + ok(!ret, "SendMessage returned: %u\n", ret); + ret = SendMessage(hwnd, BFFM_SETSELECTIONW, 1, (LPARAM)new_folder_name); + ok(!ret, "SendMessage returned: %u\n", ret); + + SendMessage(hwnd, WM_COMMAND, IDOK, 0); + return TRUE; + default: + return FALSE; + } +} + +static void test_selection(void) +{ + HRESULT resCoInit; + BROWSEINFO bi; + LPITEMIDLIST pidl = NULL; + IShellFolder *desktop_object; + WCHAR selected_folderW[MAX_PATH]; + const CHAR title[] = "test_selection"; + + resCoInit = CoInitialize(NULL); + if(!(resCoInit == S_OK || resCoInit == S_FALSE)) + { + skip("COM could not be initialized %u\n", GetLastError()); + return; + } + + if (!GetCurrentDirectoryW(MAX_PATH, selected_folderW)) + { + skip("GetCurrentDirectoryW failed %u\n", GetLastError()); + } + + /* Initialize browse info struct for SHBrowseForFolder */ + bi.hwndOwner = NULL; + bi.pszDisplayName = NULL; + bi.lpszTitle = (LPTSTR) title; + bi.ulFlags = BIF_NEWDIALOGSTYLE; + bi.lpfn = selection_callback; + + SHGetDesktopFolder(&desktop_object); + desktop_object->lpVtbl->ParseDisplayName(desktop_object, NULL, NULL, + selected_folderW, 0UL, &selected_folder_pidl, 0UL); + bi.pidlRoot = selected_folder_pidl; + + pidl = SHBrowseForFolder(&bi); + + if (pidl) + CoTaskMemFree(pidl); + + CoUninitialize(); +} + START_TEST(brsfolder) { test_click_make_new_folder_button(); + test_selection(); }