Module: wine Branch: master Commit: 2cab7ff2c7a11563436e014e2affc73987039bf6 URL: http://source.winehq.org/git/wine.git/?a=commit;h=2cab7ff2c7a11563436e014e2a...
Author: Reece Dunn msclrhd@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,