From 576a398338b6b69e29d81d6d564a40dcaffe27dc Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Tue, 18 Aug 2009 14:25:24 +0200 Subject: [PATCH] comctl32/tests: Fix a number of listview message test failures. --- dlls/comctl32/tests/listview.c | 57 ++++++++++++++++++++-------------- dlls/comctl32/tests/msg.c | 5 +++ 2 files changed, 39 insertions(+), 23 deletions(-) diff --git a/dlls/comctl32/tests/listview.c b/dlls/comctl32/tests/listview.c index 908aa4aea2c..b6a368b1ce3 100644 --- a/dlls/comctl32/tests/listview.c +++ b/dlls/comctl32/tests/listview.c @@ -70,10 +70,10 @@ static const struct message redraw_listview_seq[] = { { WM_PAINT, sent|id, 0, 0, LISTVIEW_ID }, { WM_PAINT, sent|id, 0, 0, HEADER_ID }, { WM_NCPAINT, sent|id|defwinproc, 0, 0, HEADER_ID }, - { WM_ERASEBKGND, sent|id|defwinproc, 0, 0, HEADER_ID }, + { WM_ERASEBKGND, sent|id|defwinproc|optional, 0, 0, HEADER_ID }, { WM_NOTIFY, sent|id|defwinproc, 0, 0, LISTVIEW_ID }, { WM_NCPAINT, sent|id|defwinproc, 0, 0, LISTVIEW_ID }, - { WM_ERASEBKGND, sent|id|defwinproc, 0, 0, LISTVIEW_ID }, + { WM_ERASEBKGND, sent|id|defwinproc|optional, 0, 0, LISTVIEW_ID }, { 0 } }; @@ -122,6 +122,8 @@ static const struct message listview_item_count_seq[] = { { LVM_INSERTITEM, sent }, { LVM_GETITEMCOUNT, sent }, { LVM_DELETEITEM, sent|wparam, 2 }, + { WM_NCPAINT, sent|optional }, + { WM_ERASEBKGND, sent|optional }, { LVM_GETITEMCOUNT, sent }, { LVM_DELETEALLITEMS, sent }, { LVM_GETITEMCOUNT, sent }, @@ -138,6 +140,8 @@ static const struct message listview_itempos_seq[] = { { LVM_INSERTITEM, sent }, { LVM_INSERTITEM, sent }, { LVM_SETITEMPOSITION, sent|wparam|lparam, 1, MAKELPARAM(10,5) }, + { WM_NCPAINT, sent|optional }, + { WM_ERASEBKGND, sent|optional }, { LVM_GETITEMPOSITION, sent|wparam, 1 }, { LVM_SETITEMPOSITION, sent|wparam|lparam, 2, MAKELPARAM(0,0) }, { LVM_GETITEMPOSITION, sent|wparam, 2 }, @@ -182,6 +186,7 @@ static const struct message ownerdata_setstate_all_parent_seq[] = { static const struct message ownerdata_defocus_all_parent_seq[] = { { WM_NOTIFY, sent|id, 0, 0, LVN_ITEMCHANGED }, { WM_NOTIFY, sent|id, 0, 0, LVN_GETDISPINFOA }, + { WM_NOTIFY, sent|id|optional, 0, 0, LVN_GETDISPINFOA }, { WM_NOTIFY, sent|id, 0, 0, LVN_ITEMCHANGED }, { 0 } }; @@ -383,6 +388,7 @@ static BOOL register_parent_wnd_class(BOOL Unicode) static HWND create_parent_window(BOOL Unicode) { static const WCHAR nameW[] = {'t','e','s','t','p','a','r','e','n','t','n','a','m','e','W'}; + HWND hwnd; if (!register_parent_wnd_class(Unicode)) return NULL; @@ -391,18 +397,20 @@ static HWND create_parent_window(BOOL Unicode) notifyFormat = -1; if (Unicode) - return CreateWindowExW(0, testparentclassW, nameW, + hwnd = CreateWindowExW(0, testparentclassW, nameW, WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_VISIBLE, 0, 0, 100, 100, GetDesktopWindow(), NULL, GetModuleHandleW(NULL), NULL); else - return CreateWindowExA(0, "Listview test parent class", + hwnd = CreateWindowExA(0, "Listview test parent class", "Listview test parent window", WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_VISIBLE, 0, 0, 100, 100, GetDesktopWindow(), NULL, GetModuleHandleA(NULL), NULL); + SetWindowPos( hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE ); + return hwnd; } static LRESULT WINAPI listview_subclass_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) @@ -615,7 +623,7 @@ static HWND subclass_editbox(HWND hwndListview) } /* Performs a single LVM_HITTEST test */ -static void test_lvm_hittest(HWND hwnd, INT x, INT y, INT item, UINT flags, +static void test_lvm_hittest(HWND hwnd, INT x, INT y, INT item, UINT flags, UINT broken_flags, BOOL todo_item, BOOL todo_flags, int line) { LVHITTESTINFO lpht; @@ -649,6 +657,9 @@ static void test_lvm_hittest(HWND hwnd, INT x, INT y, INT item, UINT flags, todo_wine ok_(__FILE__, line)(lpht.flags == flags, "Expected flags %x, got %x\n", flags, lpht.flags); } + else if (broken_flags) + ok_(__FILE__, line)(lpht.flags == flags || broken(lpht.flags == broken_flags), + "Expected flags %x, got %x\n", flags, lpht.flags); else ok_(__FILE__, line)(lpht.flags == flags, "Expected flags %x, got %x\n", flags, lpht.flags); } @@ -2864,22 +2875,22 @@ static void test_hittest(void) /* LVS_EX_FULLROWSELECT not set, no icons attached */ x = pos.x + 50; /* column half width */ y = pos.y + (bounds.bottom - bounds.top) / 2; - test_lvm_hittest(hwnd, x, y, 0, LVHT_ONITEMLABEL, FALSE, FALSE, __LINE__); + test_lvm_hittest(hwnd, x, y, 0, LVHT_ONITEMLABEL, 0, FALSE, FALSE, __LINE__); test_lvm_subitemhittest(hwnd, x, y, 0, 0, LVHT_ONITEMLABEL, FALSE, FALSE, FALSE, __LINE__); x = pos.x + 150; /* outside column */ y = pos.y + (bounds.bottom - bounds.top) / 2; - test_lvm_hittest(hwnd, x, y, -1, LVHT_TORIGHT, FALSE, FALSE, __LINE__); + test_lvm_hittest(hwnd, x, y, -1, LVHT_TORIGHT, 0, FALSE, FALSE, __LINE__); test_lvm_subitemhittest(hwnd, x, y, 0, 1, LVHT_ONITEMLABEL, FALSE, FALSE, FALSE, __LINE__); y = (bounds.bottom - bounds.top) / 2; - test_lvm_hittest(hwnd, x, y, -1, LVHT_TORIGHT, FALSE, TRUE, __LINE__); + test_lvm_hittest(hwnd, x, y, -1, LVHT_TORIGHT, 0, FALSE, TRUE, __LINE__); test_lvm_subitemhittest(hwnd, x, y, 0, 1, LVHT_ONITEMLABEL, FALSE, FALSE, FALSE, __LINE__); /* outside possible client rectangle (to right) */ x = pos.x + 500; y = pos.y + (bounds.bottom - bounds.top) / 2; - test_lvm_hittest(hwnd, x, y, -1, LVHT_TORIGHT, FALSE, FALSE, __LINE__); + test_lvm_hittest(hwnd, x, y, -1, LVHT_TORIGHT, 0, FALSE, FALSE, __LINE__); test_lvm_subitemhittest(hwnd, x, y, -1, -1, LVHT_NOWHERE, FALSE, FALSE, FALSE, __LINE__); y = (bounds.bottom - bounds.top) / 2; - test_lvm_hittest(hwnd, x, y, -1, LVHT_TORIGHT, FALSE, TRUE, __LINE__); + test_lvm_hittest(hwnd, x, y, -1, LVHT_TORIGHT, 0, FALSE, TRUE, __LINE__); test_lvm_subitemhittest(hwnd, x, y, -1, -1, LVHT_NOWHERE, FALSE, FALSE, FALSE, __LINE__); /* subitem returned with -1 item too */ x = pos.x + 150; @@ -2889,34 +2900,34 @@ static void test_hittest(void) MoveWindow(hwnd, 0, 0, 300, 100, FALSE); x = pos.x + 150; /* outside column */ y = pos.y + (bounds.bottom - bounds.top) / 2; - test_lvm_hittest(hwnd, x, y, -1, LVHT_NOWHERE, FALSE, FALSE, __LINE__); + test_lvm_hittest(hwnd, x, y, -1, LVHT_NOWHERE, 0, FALSE, FALSE, __LINE__); test_lvm_subitemhittest(hwnd, x, y, 0, 1, LVHT_ONITEMLABEL, FALSE, FALSE, FALSE, __LINE__); y = (bounds.bottom - bounds.top) / 2; - test_lvm_hittest(hwnd, x, y, -1, LVHT_NOWHERE, FALSE, TRUE, __LINE__); + test_lvm_hittest(hwnd, x, y, -1, LVHT_NOWHERE, 0, FALSE, TRUE, __LINE__); test_lvm_subitemhittest(hwnd, x, y, 0, 1, LVHT_ONITEMLABEL, FALSE, FALSE, FALSE, __LINE__); /* the same with LVS_EX_FULLROWSELECT */ SendMessage(hwnd, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT); x = pos.x + 150; /* outside column */ y = pos.y + (bounds.bottom - bounds.top) / 2; - test_lvm_hittest(hwnd, x, y, 0, LVHT_ONITEM, FALSE, FALSE, __LINE__); + test_lvm_hittest(hwnd, x, y, 0, LVHT_ONITEM, LVHT_ONITEMLABEL, FALSE, FALSE, __LINE__); test_lvm_subitemhittest(hwnd, x, y, 0, 1, LVHT_ONITEMLABEL, FALSE, FALSE, FALSE, __LINE__); y = (bounds.bottom - bounds.top) / 2; test_lvm_subitemhittest(hwnd, x, y, 0, 1, LVHT_ONITEMLABEL, FALSE, FALSE, FALSE, __LINE__); MoveWindow(hwnd, 0, 0, 100, 100, FALSE); x = pos.x + 150; /* outside column */ y = pos.y + (bounds.bottom - bounds.top) / 2; - test_lvm_hittest(hwnd, x, y, -1, LVHT_TORIGHT, FALSE, FALSE, __LINE__); + test_lvm_hittest(hwnd, x, y, -1, LVHT_TORIGHT, 0, FALSE, FALSE, __LINE__); test_lvm_subitemhittest(hwnd, x, y, 0, 1, LVHT_ONITEMLABEL, FALSE, FALSE, FALSE, __LINE__); y = (bounds.bottom - bounds.top) / 2; - test_lvm_hittest(hwnd, x, y, -1, LVHT_TORIGHT, FALSE, TRUE, __LINE__); + test_lvm_hittest(hwnd, x, y, -1, LVHT_TORIGHT, 0, FALSE, TRUE, __LINE__); test_lvm_subitemhittest(hwnd, x, y, 0, 1, LVHT_ONITEMLABEL, FALSE, FALSE, FALSE, __LINE__); /* outside possible client rectangle (to right) */ x = pos.x + 500; y = pos.y + (bounds.bottom - bounds.top) / 2; - test_lvm_hittest(hwnd, x, y, -1, LVHT_TORIGHT, FALSE, FALSE, __LINE__); + test_lvm_hittest(hwnd, x, y, -1, LVHT_TORIGHT, 0, FALSE, FALSE, __LINE__); test_lvm_subitemhittest(hwnd, x, y, -1, -1, LVHT_NOWHERE, FALSE, FALSE, FALSE, __LINE__); y = (bounds.bottom - bounds.top) / 2; - test_lvm_hittest(hwnd, x, y, -1, LVHT_TORIGHT, FALSE, TRUE, __LINE__); + test_lvm_hittest(hwnd, x, y, -1, LVHT_TORIGHT, 0, FALSE, TRUE, __LINE__); test_lvm_subitemhittest(hwnd, x, y, -1, -1, LVHT_NOWHERE, FALSE, FALSE, FALSE, __LINE__); /* try with icons, state icons index is 1 based so at least 2 bitmaps needed */ himl = ImageList_Create(16, 16, 0, 4, 4); @@ -2942,7 +2953,7 @@ static void test_hittest(void) /* on state icon */ x = pos.x + 8; y = pos.y + (bounds.bottom - bounds.top) / 2; - test_lvm_hittest(hwnd, x, y, 0, LVHT_ONITEMSTATEICON, FALSE, FALSE, __LINE__); + test_lvm_hittest(hwnd, x, y, 0, LVHT_ONITEMSTATEICON, 0, FALSE, FALSE, __LINE__); test_lvm_subitemhittest(hwnd, x, y, 0, 0, LVHT_ONITEMSTATEICON, FALSE, FALSE, FALSE, __LINE__); y = (bounds.bottom - bounds.top) / 2; test_lvm_subitemhittest(hwnd, x, y, 0, 0, LVHT_ONITEMSTATEICON, FALSE, FALSE, FALSE, __LINE__); @@ -2958,7 +2969,7 @@ static void test_hittest(void) /* on state icon */ x = pos.x + 8; y = pos.y + (bounds.bottom - bounds.top) / 2; - test_lvm_hittest(hwnd, x, y, 0, LVHT_ONITEMSTATEICON, FALSE, FALSE, __LINE__); + test_lvm_hittest(hwnd, x, y, 0, LVHT_ONITEMSTATEICON, 0, FALSE, FALSE, __LINE__); test_lvm_subitemhittest(hwnd, x, y, 0, 0, LVHT_ONITEMSTATEICON, FALSE, FALSE, FALSE, __LINE__); y = (bounds.bottom - bounds.top) / 2; test_lvm_subitemhittest(hwnd, x, y, 0, 0, LVHT_ONITEMSTATEICON, FALSE, FALSE, FALSE, __LINE__); @@ -2971,7 +2982,7 @@ static void test_hittest(void) /* on item icon */ x = pos.x + 8; y = pos.y + (bounds.bottom - bounds.top) / 2; - test_lvm_hittest(hwnd, x, y, 0, LVHT_ONITEMICON, FALSE, FALSE, __LINE__); + test_lvm_hittest(hwnd, x, y, 0, LVHT_ONITEMICON, 0, FALSE, FALSE, __LINE__); test_lvm_subitemhittest(hwnd, x, y, 0, 0, LVHT_ONITEMICON, FALSE, FALSE, FALSE, __LINE__); y = (bounds.bottom - bounds.top) / 2; test_lvm_subitemhittest(hwnd, x, y, 0, 0, LVHT_ONITEMICON, FALSE, FALSE, FALSE, __LINE__); @@ -3506,7 +3517,7 @@ static void test_notifyformat(void) r = SendMessage(hwnd, LVM_GETUNICODEFORMAT, 0, 0); expect(0, r); r = SendMessage(header, HDM_GETUNICODEFORMAT, 0, 0); - expect(1, r); + ok( r == 1 || broken(r == 0), /* win9x */ "Expected 1, got %d\n", r ); r = SendMessage(hwnd, WM_NOTIFYFORMAT, 0, NF_QUERY); ok(r != 0, "Expected valid format\n"); @@ -3516,7 +3527,7 @@ static void test_notifyformat(void) r = SendMessage(hwnd, LVM_GETUNICODEFORMAT, 0, 0); expect(1, r); r = SendMessage(header, HDM_GETUNICODEFORMAT, 0, 0); - expect(1, r); + ok( r == 1 || broken(r == 0), /* win9x */ "Expected 1, got %d\n", r ); notifyFormat = NFR_ANSI; r = SendMessage(hwnd, WM_NOTIFYFORMAT, 0, NF_REQUERY); @@ -3524,7 +3535,7 @@ static void test_notifyformat(void) r = SendMessage(hwnd, LVM_GETUNICODEFORMAT, 0, 0); expect(0, r); r = SendMessage(header, HDM_GETUNICODEFORMAT, 0, 0); - expect(1, r); + ok( r == 1 || broken(r == 0), /* win9x */ "Expected 1, got %d\n", r ); DestroyWindow(hwnd); diff --git a/dlls/comctl32/tests/msg.c b/dlls/comctl32/tests/msg.c index 314bb557e65..04bf1a05dd2 100644 --- a/dlls/comctl32/tests/msg.c +++ b/dlls/comctl32/tests/msg.c @@ -129,6 +129,11 @@ void ok_sequence_(struct msg_sequence **seq, int sequence_index, if (expected->flags & id) { + if (expected->id != actual->id && expected->flags & optional) + { + expected++; + continue; + } if (expected->id != actual->id && todo) { todo_wine