Reece Dunn : user32: Improve the HiliteMenuItem tests so they reflect actual behaviour on Windows .
Alexandre Julliard
julliard at winehq.org
Tue Mar 18 07:44:53 CDT 2008
Module: wine
Branch: master
Commit: 2cab7ff2c7a11563436e014e2affc73987039bf6
URL: http://source.winehq.org/git/wine.git/?a=commit;h=2cab7ff2c7a11563436e014e2affc73987039bf6
Author: Reece Dunn <msclrhd at googlemail.com>
Date: Mon Mar 17 21:18:32 2008 +0000
user32: Improve the HiliteMenuItem tests so they reflect actual behaviour on Windows.
---
dlls/user32/tests/menu.c | 103 ++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 94 insertions(+), 9 deletions(-)
diff --git a/dlls/user32/tests/menu.c b/dlls/user32/tests/menu.c
index 5f900d0..2f7677c 100644
--- a/dlls/user32/tests/menu.c
+++ b/dlls/user32/tests/menu.c
@@ -1864,6 +1864,23 @@ static void test_menu_flags( void )
static void test_menu_hilitemenuitem( void )
{
HMENU hMenu, hPopupMenu;
+ WNDCLASSA wclass;
+ HWND hWnd;
+
+ wclass.lpszClassName = "HiliteMenuTestClass";
+ wclass.style = CS_HREDRAW | CS_VREDRAW;
+ wclass.lpfnWndProc = WndProc;
+ wclass.hInstance = GetModuleHandleA( NULL );
+ wclass.hIcon = LoadIconA( 0, (LPSTR)IDI_APPLICATION );
+ wclass.hCursor = LoadCursorA( NULL, (LPSTR)IDC_ARROW);
+ wclass.hbrBackground = (HBRUSH)( COLOR_WINDOW + 1);
+ wclass.lpszMenuName = 0;
+ wclass.cbClsExtra = 0;
+ wclass.cbWndExtra = 0;
+ assert (RegisterClassA( &wclass ));
+ assert (hWnd = CreateWindowA( wclass.lpszClassName, "HiliteMenuTest",
+ WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0,
+ 400, 200, NULL, NULL, wclass.hInstance, NULL) );
hMenu = CreateMenu();
hPopupMenu = CreatePopupMenu();
@@ -1874,40 +1891,108 @@ static void test_menu_hilitemenuitem( void )
AppendMenu(hPopupMenu, MF_STRING, 102, "Item 2");
AppendMenu(hPopupMenu, MF_STRING, 103, "Item 3");
+ SetMenu(hWnd, hMenu);
+
+ /* test invalid arguments */
+
ok(!(GetMenuState(hPopupMenu, 1, MF_BYPOSITION) & MF_HILITE),
"HiliteMenuItem: Item 2 is hilited\n");
SetLastError(0xdeadbeef);
- ok(!HiliteMenuItem(NULL, hPopupMenu, 1, MF_HILITE),
- "HiliteMenuItem: call should have failed.\n");
todo_wine
{
+ ok(!HiliteMenuItem(NULL, hPopupMenu, 1, MF_HILITE | MF_BYPOSITION),
+ "HiliteMenuItem: call should have failed.\n");
ok(GetLastError() == ERROR_INVALID_WINDOW_HANDLE,
"HiliteMenuItem: expected error ERROR_INVALID_WINDOW_HANDLE, got: %d\n", GetLastError());
}
+ SetLastError(0xdeadbeef);
+ ok(!HiliteMenuItem(hWnd, NULL, 1, MF_HILITE | MF_BYPOSITION),
+ "HiliteMenuItem: call should have failed.\n");
+ todo_wine
+ {
+ ok(GetLastError() == ERROR_INVALID_MENU_HANDLE,
+ "HiliteMenuItem: expected error ERROR_INVALID_MENU_HANDLE, got: %d\n", GetLastError());
+ }
+
ok(!(GetMenuState(hPopupMenu, 1, MF_BYPOSITION) & MF_HILITE),
"HiliteMenuItem: Item 2 is hilited\n");
- HiliteMenuItem(NULL, hPopupMenu, 0, MF_HILITE);
- HiliteMenuItem(NULL, hPopupMenu, 1, MF_HILITE);
- HiliteMenuItem(NULL, hPopupMenu, 2, MF_HILITE);
- HiliteMenuItem(NULL, hPopupMenu, 1, MF_UNHILITE);
+ /* either MF_HILITE or MF_UNHILITE *and* MF_BYCOMMAND or MF_BYPOSITION need to be set */
+ SetLastError(0xdeadbeef);
+ ok(HiliteMenuItem(hWnd, hPopupMenu, 1, MF_BYPOSITION),
+ "HiliteMenuItem: call should have succeeded.\n");
+ ok(GetLastError() == 0xdeadbeef,
+ "HiliteMenuItem: expected error 0xdeadbeef, got: %d\n", GetLastError());
+
+ ok(!(GetMenuState(hPopupMenu, 1, MF_BYPOSITION) & MF_HILITE),
+ "HiliteMenuItem: Item 2 is hilited\n");
+
+ SetLastError(0xdeadbeef);
todo_wine
{
- ok(GetMenuState(hPopupMenu, 0, MF_BYPOSITION) & MF_HILITE,
- "HiliteMenuItem: Item 1 is not hilited\n");
+ ok(HiliteMenuItem(hWnd, hPopupMenu, 1, MF_HILITE),
+ "HiliteMenuItem: call should have succeeded.\n");
}
+ ok(GetLastError() == 0xdeadbeef,
+ "HiliteMenuItem: expected error 0xdeadbeef, got: %d\n", GetLastError());
+
+ ok(!(GetMenuState(hPopupMenu, 1, MF_BYPOSITION) & MF_HILITE),
+ "HiliteMenuItem: Item 2 is hilited\n");
+
+ /* hilite a menu item (by position) */
+
+ SetLastError(0xdeadbeef);
+ ok(HiliteMenuItem(hWnd, hPopupMenu, 1, MF_HILITE | MF_BYPOSITION),
+ "HiliteMenuItem: call should not have failed.\n");
+ ok(GetLastError() == 0xdeadbeef,
+ "HiliteMenuItem: expected error 0xdeadbeef, got: %d\n", GetLastError());
+
+ todo_wine
+ {
+ ok(GetMenuState(hPopupMenu, 1, MF_BYPOSITION) & MF_HILITE,
+ "HiliteMenuItem: Item 2 is not hilited\n");
+ }
+
+ /* unhilite a menu item (by position) */
+
+ SetLastError(0xdeadbeef);
+ ok(HiliteMenuItem(hWnd, hPopupMenu, 1, MF_UNHILITE | MF_BYPOSITION),
+ "HiliteMenuItem: call should not have failed.\n");
+ ok(GetLastError() == 0xdeadbeef,
+ "HiliteMenuItem: expected error 0xdeadbeef, got: %d\n", GetLastError());
+
ok(!(GetMenuState(hPopupMenu, 1, MF_BYPOSITION) & MF_HILITE),
"HiliteMenuItem: Item 2 is hilited\n");
+
+ /* hilite a menu item (by command) */
+
+ SetLastError(0xdeadbeef);
+ ok(HiliteMenuItem(hWnd, hPopupMenu, 103, MF_HILITE | MF_BYCOMMAND),
+ "HiliteMenuItem: call should not have failed.\n");
+ ok(GetLastError() == 0xdeadbeef,
+ "HiliteMenuItem: expected error 0xdeadbeef, got: %d\n", GetLastError());
+
todo_wine
{
ok(GetMenuState(hPopupMenu, 2, MF_BYPOSITION) & MF_HILITE,
"HiliteMenuItem: Item 3 is not hilited\n");
}
- DestroyMenu(hMenu);
+ /* unhilite a menu item (by command) */
+
+ SetLastError(0xdeadbeef);
+ ok(HiliteMenuItem(hWnd, hPopupMenu, 103, MF_UNHILITE | MF_BYCOMMAND),
+ "HiliteMenuItem: call should not have failed.\n");
+ ok(GetLastError() == 0xdeadbeef,
+ "HiliteMenuItem: expected error 0xdeadbeef, got: %d\n", GetLastError());
+
+ ok(!(GetMenuState(hPopupMenu, 2, MF_BYPOSITION) & MF_HILITE),
+ "HiliteMenuItem: Item 3 is hilited\n");
+
+ DestroyWindow(hWnd);
}
static void check_menu_items(HMENU hmenu, UINT checked_cmd, UINT checked_type,
More information about the wine-cvs
mailing list