Piotr Caban : user32/tests: Added GetMenuBarInfo tests.

Alexandre Julliard julliard at winehq.org
Wed May 16 14:22:41 CDT 2012


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

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Wed May 16 13:36:52 2012 +0200

user32/tests: Added GetMenuBarInfo tests.

---

 dlls/user32/tests/edit.c |   60 +++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 54 insertions(+), 6 deletions(-)

diff --git a/dlls/user32/tests/edit.c b/dlls/user32/tests/edit.c
index 89a2843..11550f7 100644
--- a/dlls/user32/tests/edit.c
+++ b/dlls/user32/tests/edit.c
@@ -39,12 +39,14 @@ struct edit_notify {
 static struct edit_notify notifications;
 
 static BOOL (WINAPI *pEndMenu) (void);
+static BOOL (WINAPI *pGetMenuBarInfo)(HWND,LONG,LONG,PMENUBARINFO);
 
 static void init_function_pointers(void)
 {
     HMODULE hdll = GetModuleHandleA("user32");
 
     pEndMenu = (void*)GetProcAddress(hdll, "EndMenu");
+    pGetMenuBarInfo = (void*)GetProcAddress(hdll, "GetMenuBarInfo");
 }
 
 static INT_PTR CALLBACK multi_edit_dialog_proc(HWND hdlg, UINT msg, WPARAM wparam, LPARAM lparam)
@@ -2134,6 +2136,7 @@ static void test_child_edit_wmkeydown(void)
 
 static int got_en_setfocus = 0;
 static int got_wm_capturechanged = 0;
+static LRESULT (CALLBACK *p_edit_proc)(HWND, UINT, WPARAM, LPARAM);
 
 static LRESULT CALLBACK edit4_wnd_procA(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
@@ -2156,7 +2159,50 @@ static LRESULT CALLBACK edit4_wnd_procA(HWND hWnd, UINT msg, WPARAM wParam, LPAR
     return DefWindowProcA(hWnd, msg, wParam, lParam);
 }
 
-static void test_contextmenu_focus(void)
+static LRESULT CALLBACK edit_proc_proxy(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+    switch (msg) {
+        case WM_ENTERIDLE: {
+            MENUBARINFO mbi;
+            BOOL ret;
+            HWND ctx_menu = (HWND)lParam;
+
+            memset(&mbi, 0, sizeof(mbi));
+            mbi.cbSize = sizeof(mbi);
+            SetLastError(0xdeadbeef);
+            ret = pGetMenuBarInfo(ctx_menu, OBJID_CLIENT, 0, &mbi);
+            ok(ret || broken(!ret && GetLastError()==ERROR_INVALID_WINDOW_HANDLE) /* NT */,
+                    "GetMenuBarInfo failed\n");
+            if (ret)
+            {
+                ok(mbi.hMenu != NULL, "mbi.hMenu = NULL\n");
+                ok(!mbi.hwndMenu, "mbi.hwndMenu != NULL\n");
+                ok(mbi.fBarFocused, "mbi.fBarFocused = FALSE\n");
+                ok(mbi.fFocused, "mbi.fFocused = FALSE\n");
+            }
+
+            memset(&mbi, 0, sizeof(mbi));
+            mbi.cbSize = sizeof(mbi);
+            SetLastError(0xdeadbeef);
+            ret = pGetMenuBarInfo(ctx_menu, OBJID_CLIENT, 1, &mbi);
+            ok(ret || broken(!ret && GetLastError()==ERROR_INVALID_WINDOW_HANDLE) /* NT */,
+                    "GetMenuBarInfo failed\n");
+            if (ret)
+            {
+                ok(mbi.hMenu != NULL, "mbi.hMenu = NULL\n");
+                ok(!mbi.hwndMenu, "mbi.hwndMenu != NULL\n");
+                ok(mbi.fBarFocused, "mbi.fBarFocused = FALSE\n");
+                ok(!mbi.fFocused, "mbi.fFocused = TRUE\n");
+            }
+
+            pEndMenu();
+            break;
+        }
+    }
+    return p_edit_proc(hWnd, msg, wParam, lParam);
+}
+
+static void test_contextmenu(void)
 {
     HWND hwndMain, hwndEdit;
 
@@ -2171,15 +2217,17 @@ static void test_contextmenu_focus(void)
     assert(hwndEdit);
 
     SetFocus(NULL);
-
     SetCapture(hwndMain);
-
     SendMessage(hwndEdit, WM_CONTEXTMENU, (WPARAM)hwndEdit, MAKEWORD(10, 10));
-
     ok(got_en_setfocus, "edit box didn't get focused\n");
-
     ok(got_wm_capturechanged, "main window capture did not change\n");
 
+    if (pGetMenuBarInfo)
+    {
+        p_edit_proc = (void*)SetWindowLongPtr(hwndEdit, GWLP_WNDPROC, (ULONG_PTR)edit_proc_proxy);
+        SendMessage(hwndEdit, WM_CONTEXTMENU, (WPARAM)hwndEdit, MAKEWORD(10, 10));
+    }
+
     DestroyWindow (hwndEdit);
     DestroyWindow (hwndMain);
 }
@@ -2516,7 +2564,7 @@ START_TEST(edit)
     test_fontsize();
     test_dialogmode();
     if (pEndMenu)
-        test_contextmenu_focus();
+        test_contextmenu();
     else
         win_skip("EndMenu is not available\n");
 




More information about the wine-cvs mailing list