André Hentschel : shell32: Add some selection tests.

Alexandre Julliard julliard at winehq.org
Fri Apr 29 11:09:13 CDT 2011


Module: wine
Branch: master
Commit: e7cc2f76daac482a492e5703ba2bb963c4ed3b8c
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=e7cc2f76daac482a492e5703ba2bb963c4ed3b8c

Author: André Hentschel <nerv at 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();
 }




More information about the wine-cvs mailing list