Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/comctl32/tests/listview.c | 165 ++++++++++++++++++++++------------------- 1 file changed, 90 insertions(+), 75 deletions(-)
diff --git a/dlls/comctl32/tests/listview.c b/dlls/comctl32/tests/listview.c index 72367c67b3..ea7ad569f5 100644 --- a/dlls/comctl32/tests/listview.c +++ b/dlls/comctl32/tests/listview.c @@ -718,6 +718,21 @@ static HWND create_listview_controlW(DWORD style, HWND parent) return hwnd; }
+static BOOL is_win_xp(void) +{ + HWND hwnd, header; + BOOL ret; + + hwnd = create_listview_control(LVS_ICON); + SendMessageA(hwnd, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_HEADERINALLVIEWS, LVS_EX_HEADERINALLVIEWS); + header = (HWND)SendMessageA(hwnd, LVM_GETHEADER, 0, 0); + ret = !IsWindow(header); + + DestroyWindow(hwnd); + + return ret; +} + static LRESULT WINAPI header_subclass_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { WNDPROC oldproc = (WNDPROC)GetWindowLongPtrA(hwnd, GWLP_USERDATA); @@ -1536,7 +1551,28 @@ static LRESULT CALLBACK create_test_wndproc(HWND hwnd, UINT uMsg, WPARAM wParam, return ret; }
-static void test_create(void) +/* Header creation is delayed in classic implementation. */ +#define TEST_NO_HEADER(a) test_header_presence_(a, FALSE, __LINE__) +#define TEST_HEADER_EXPECTED(a) test_header_presence_(a, TRUE, __LINE__) +#define TEST_NO_HEADER2(a, b) test_header_presence_(a, b, __LINE__) +static void test_header_presence_(HWND hwnd, BOOL present, int line) +{ + HWND header = (HWND)SendMessageA(hwnd, LVM_GETHEADER, 0, 0); + + if (present) + { + ok_(__FILE__, line)(IsWindow(header), "Header should have been created.\n"); + if (header) /* FIXME: remove when todo's are fixed */ + ok_(__FILE__, line)(header == GetDlgItem(hwnd, 0), "Dialog item expected.\n"); + } + else + { + ok_(__FILE__, line)(!IsWindow(header), "Header shouldn't be created.\n"); + ok_(__FILE__, line)(NULL == GetDlgItem(hwnd, 0), "NULL dialog item expected.\n"); + } +} + +static void test_create(BOOL is_version_6) { static const WCHAR testtextW[] = {'t','e','s','t',' ','t','e','x','t',0}; char buff[16]; @@ -1548,13 +1584,22 @@ static void test_create(void) RECT rect; WNDCLASSEXA cls; DWORD style; + ATOM class; + + if (is_win_xp() && is_version_6) + { + win_skip("Skipping some tests on XP.\n"); + return; + }
cls.cbSize = sizeof(WNDCLASSEXA); - ok(GetClassInfoExA(GetModuleHandleA(NULL), "SysListView32", &cls), "GetClassInfoEx failed\n"); + r = GetClassInfoExA(GetModuleHandleA(NULL), WC_LISTVIEWA, &cls); + ok(r, "Failed to get class info.\n"); listviewWndProc = cls.lpfnWndProc; cls.lpfnWndProc = create_test_wndproc; cls.lpszClassName = "MyListView32"; - ok(RegisterClassExA(&cls), "RegisterClassEx failed\n"); + class = RegisterClassExA(&cls); + ok(class, "Failed to register class.\n");
test_create_imagelist = pImageList_Create(16, 16, 0, 5, 10); hList = CreateWindowA("MyListView32", "Test", WS_VISIBLE, 0, 0, 100, 100, NULL, NULL, GetModuleHandleA(NULL), 0); @@ -1565,38 +1610,31 @@ static void test_create(void) DestroyWindow(hList);
/* header isn't created on LVS_ICON and LVS_LIST styles */ - hList = CreateWindowA("SysListView32", "Test", WS_VISIBLE, 0, 0, 100, 100, NULL, NULL, - GetModuleHandleA(NULL), 0); - hHeader = (HWND)SendMessageA(hList, LVM_GETHEADER, 0, 0); - ok(!IsWindow(hHeader), "Header shouldn't be created\n"); - ok(NULL == GetDlgItem(hList, 0), "NULL dialog item expected\n"); + hList = CreateWindowA("SysListView32", "Test", WS_VISIBLE, 0, 0, 100, 100, NULL, NULL, GetModuleHandleA(NULL), 0); + TEST_NO_HEADER(hList); + /* insert column */ memset(&col, 0, sizeof(LVCOLUMNA)); col.mask = LVCF_WIDTH; col.cx = 100; r = SendMessageA(hList, LVM_INSERTCOLUMNA, 0, (LPARAM)&col); expect(0, r); + TEST_HEADER_EXPECTED(hList); hHeader = (HWND)SendMessageA(hList, LVM_GETHEADER, 0, 0); - ok(IsWindow(hHeader), "Header should be created\n"); - ok(hHeader == GetDlgItem(hList, 0), "Expected header as dialog item\n"); style = GetWindowLongA(hHeader, GWL_STYLE); ok(!(style & HDS_HIDDEN), "Not expected HDS_HIDDEN\n"); DestroyWindow(hList);
hList = CreateWindowA("SysListView32", "Test", WS_VISIBLE|LVS_LIST, 0, 0, 100, 100, NULL, NULL, GetModuleHandleA(NULL), 0); - hHeader = (HWND)SendMessageA(hList, LVM_GETHEADER, 0, 0); - ok(!IsWindow(hHeader), "Header shouldn't be created\n"); - ok(NULL == GetDlgItem(hList, 0), "NULL dialog item expected\n"); + TEST_NO_HEADER(hList); /* insert column */ memset(&col, 0, sizeof(LVCOLUMNA)); col.mask = LVCF_WIDTH; col.cx = 100; r = SendMessageA(hList, LVM_INSERTCOLUMNA, 0, (LPARAM)&col); expect(0, r); - hHeader = (HWND)SendMessageA(hList, LVM_GETHEADER, 0, 0); - ok(IsWindow(hHeader), "Header should be created\n"); - ok(hHeader == GetDlgItem(hList, 0), "Expected header as dialog item\n"); + TEST_HEADER_EXPECTED(hList); DestroyWindow(hList);
/* try to switch LVS_ICON -> LVS_REPORT and back LVS_ICON -> LVS_REPORT */ @@ -1604,13 +1642,10 @@ static void test_create(void) GetModuleHandleA(NULL), 0); ret = SetWindowLongPtrA(hList, GWL_STYLE, GetWindowLongPtrA(hList, GWL_STYLE) | LVS_REPORT); ok(ret & WS_VISIBLE, "Style wrong, should have WS_VISIBLE\n"); - hHeader = (HWND)SendMessageA(hList, LVM_GETHEADER, 0, 0); - ok(IsWindow(hHeader), "Header should be created\n"); + TEST_HEADER_EXPECTED(hList); ret = SetWindowLongPtrA(hList, GWL_STYLE, GetWindowLongA(hList, GWL_STYLE) & ~LVS_REPORT); ok((ret & WS_VISIBLE) && (ret & LVS_REPORT), "Style wrong, should have WS_VISIBLE|LVS_REPORT\n"); - hHeader = (HWND)SendMessageA(hList, LVM_GETHEADER, 0, 0); - ok(IsWindow(hHeader), "Header should be created\n"); - ok(hHeader == GetDlgItem(hList, 0), "Expected header as dialog item\n"); + TEST_HEADER_EXPECTED(hList); DestroyWindow(hList);
/* try to switch LVS_LIST -> LVS_REPORT and back LVS_LIST -> LVS_REPORT */ @@ -1619,52 +1654,43 @@ static void test_create(void) ret = SetWindowLongPtrA(hList, GWL_STYLE, (GetWindowLongPtrA(hList, GWL_STYLE) & ~LVS_LIST) | LVS_REPORT); ok(((ret & WS_VISIBLE) && (ret & LVS_LIST)), "Style wrong, should have WS_VISIBLE|LVS_LIST\n"); - hHeader = (HWND)SendMessageA(hList, LVM_GETHEADER, 0, 0); - ok(IsWindow(hHeader), "Header should be created\n"); - ok(hHeader == GetDlgItem(hList, 0), "Expected header as dialog item\n"); - ret = SetWindowLongPtrA(hList, GWL_STYLE, - (GetWindowLongPtrA(hList, GWL_STYLE) & ~LVS_REPORT) | LVS_LIST); + TEST_HEADER_EXPECTED(hList); + ret = SetWindowLongPtrA(hList, GWL_STYLE, (GetWindowLongPtrA(hList, GWL_STYLE) & ~LVS_REPORT) | LVS_LIST); ok(((ret & WS_VISIBLE) && (ret & LVS_REPORT)), "Style wrong, should have WS_VISIBLE|LVS_REPORT\n"); - hHeader = (HWND)SendMessageA(hList, LVM_GETHEADER, 0, 0); - ok(IsWindow(hHeader), "Header should be created\n"); - ok(hHeader == GetDlgItem(hList, 0), "Expected header as dialog item\n"); + TEST_HEADER_EXPECTED(hList); DestroyWindow(hList);
/* LVS_REPORT without WS_VISIBLE */ hList = CreateWindowA("SysListView32", "Test", LVS_REPORT, 0, 0, 100, 100, NULL, NULL, GetModuleHandleA(NULL), 0); hHeader = (HWND)SendMessageA(hList, LVM_GETHEADER, 0, 0); - ok(!IsWindow(hHeader), "Header shouldn't be created\n"); - ok(NULL == GetDlgItem(hList, 0), "NULL dialog item expected\n"); +todo_wine_if(is_version_6) + TEST_NO_HEADER2(hList, is_version_6); + /* insert column */ memset(&col, 0, sizeof(LVCOLUMNA)); col.mask = LVCF_WIDTH; col.cx = 100; r = SendMessageA(hList, LVM_INSERTCOLUMNA, 0, (LPARAM)&col); expect(0, r); - hHeader = (HWND)SendMessageA(hList, LVM_GETHEADER, 0, 0); - ok(IsWindow(hHeader), "Header should be created\n"); - ok(hHeader == GetDlgItem(hList, 0), "Expected header as dialog item\n"); + TEST_HEADER_EXPECTED(hList); DestroyWindow(hList);
/* LVS_REPORT without WS_VISIBLE, try to show it */ hList = CreateWindowA("SysListView32", "Test", LVS_REPORT, 0, 0, 100, 100, NULL, NULL, GetModuleHandleA(NULL), 0); - hHeader = (HWND)SendMessageA(hList, LVM_GETHEADER, 0, 0); - ok(!IsWindow(hHeader), "Header shouldn't be created\n"); - ok(NULL == GetDlgItem(hList, 0), "NULL dialog item expected\n"); +todo_wine_if(is_version_6) + TEST_NO_HEADER2(hList, is_version_6); + ShowWindow(hList, SW_SHOW); - hHeader = (HWND)SendMessageA(hList, LVM_GETHEADER, 0, 0); - ok(IsWindow(hHeader), "Header should be created\n"); - ok(hHeader == GetDlgItem(hList, 0), "Expected header as dialog item\n"); + TEST_HEADER_EXPECTED(hList); DestroyWindow(hList);
/* LVS_REPORT with LVS_NOCOLUMNHEADER */ hList = CreateWindowA("SysListView32", "Test", LVS_REPORT|LVS_NOCOLUMNHEADER|WS_VISIBLE, 0, 0, 100, 100, NULL, NULL, GetModuleHandleA(NULL), 0); + TEST_HEADER_EXPECTED(hList); hHeader = (HWND)SendMessageA(hList, LVM_GETHEADER, 0, 0); - ok(IsWindow(hHeader), "Header should be created\n"); - ok(hHeader == GetDlgItem(hList, 0), "Expected header as dialog item\n"); /* HDS_DRAGDROP set by default */ ok(GetWindowLongPtrA(hHeader, GWL_STYLE) & HDS_DRAGDROP, "Expected header to have HDS_DRAGDROP\n"); DestroyWindow(hList); @@ -1672,43 +1698,30 @@ static void test_create(void) /* setting LVS_EX_HEADERDRAGDROP creates header */ hList = CreateWindowA("SysListView32", "Test", LVS_REPORT, 0, 0, 100, 100, NULL, NULL, GetModuleHandleA(NULL), 0); - hHeader = (HWND)SendMessageA(hList, LVM_GETHEADER, 0, 0); - ok(!IsWindow(hHeader), "Header shouldn't be created\n"); - ok(NULL == GetDlgItem(hList, 0), "NULL dialog item expected\n"); +todo_wine_if(is_version_6) + TEST_NO_HEADER2(hList, is_version_6); + SendMessageA(hList, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_HEADERDRAGDROP); - hHeader = (HWND)SendMessageA(hList, LVM_GETHEADER, 0, 0); - ok(IsWindow(hHeader) || - broken(!IsWindow(hHeader)), /* 4.7x common controls */ - "Header should be created\n"); - ok(hHeader == GetDlgItem(hList, 0), "Expected header as dialog item\n"); + TEST_HEADER_EXPECTED(hList); DestroyWindow(hList);
/* setting LVS_EX_GRIDLINES creates header */ hList = CreateWindowA("SysListView32", "Test", LVS_REPORT, 0, 0, 100, 100, NULL, NULL, GetModuleHandleA(NULL), 0); - hHeader = (HWND)SendMessageA(hList, LVM_GETHEADER, 0, 0); - ok(!IsWindow(hHeader), "Header shouldn't be created\n"); - ok(NULL == GetDlgItem(hList, 0), "NULL dialog item expected\n"); +todo_wine_if(is_version_6) + TEST_NO_HEADER2(hList, is_version_6); + SendMessageA(hList, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_GRIDLINES); - hHeader = (HWND)SendMessageA(hList, LVM_GETHEADER, 0, 0); - ok(IsWindow(hHeader) || - broken(!IsWindow(hHeader)), /* 4.7x common controls */ - "Header should be created\n"); - ok(hHeader == GetDlgItem(hList, 0), "Expected header as dialog item\n"); + TEST_HEADER_EXPECTED(hList); DestroyWindow(hList);
/* setting LVS_EX_FULLROWSELECT creates header */ hList = CreateWindowA("SysListView32", "Test", LVS_REPORT, 0, 0, 100, 100, NULL, NULL, GetModuleHandleA(NULL), 0); - hHeader = (HWND)SendMessageA(hList, LVM_GETHEADER, 0, 0); - ok(!IsWindow(hHeader), "Header shouldn't be created\n"); - ok(NULL == GetDlgItem(hList, 0), "NULL dialog item expected\n"); +todo_wine_if(is_version_6) + TEST_NO_HEADER2(hList, is_version_6); SendMessageA(hList, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT); - hHeader = (HWND)SendMessageA(hList, LVM_GETHEADER, 0, 0); - ok(IsWindow(hHeader) || - broken(!IsWindow(hHeader)), /* 4.7x common controls */ - "Header should be created\n"); - ok(hHeader == GetDlgItem(hList, 0), "Expected header as dialog item\n"); + TEST_HEADER_EXPECTED(hList); DestroyWindow(hList);
/* not report style accepts LVS_EX_HEADERDRAGDROP too */ @@ -1721,19 +1734,17 @@ static void test_create(void) /* requesting header info with LVM_GETSUBITEMRECT doesn't create it */ hList = CreateWindowA("SysListView32", "Test", LVS_REPORT, 0, 0, 100, 100, NULL, NULL, GetModuleHandleA(NULL), 0); - ok(!IsWindow(hHeader), "Header shouldn't be created\n"); - ok(NULL == GetDlgItem(hList, 0), "NULL dialog item expected\n"); +todo_wine_if(is_version_6) + TEST_NO_HEADER2(hList, is_version_6);
SetRect(&rect, LVIR_BOUNDS, 1, -10, -10); r = SendMessageA(hList, LVM_GETSUBITEMRECT, -1, (LPARAM)&rect); + ok(r == 1, "Unexpected ret value %d.\n", r); /* right value contains garbage, probably because header columns are not set up */ - expect(0, rect.bottom); - expect(1, r); - - hHeader = (HWND)SendMessageA(hList, LVM_GETHEADER, 0, 0); - ok(!IsWindow(hHeader), "Header shouldn't be created\n"); - ok(GetDlgItem(hList, 0) == NULL, "NULL dialog item expected\n"); + ok(rect.bottom >= 0, "Unexpected rectangle.\n");
+todo_wine_if(is_version_6) + TEST_NO_HEADER2(hList, is_version_6); DestroyWindow(hList);
/* WM_MEASUREITEM should be sent when created with LVS_OWNERDRAWFIXED */ @@ -1759,6 +1770,9 @@ static void test_create(void) GetWindowTextA(hList, buff, sizeof(buff)); ok(!strcmp(buff, "test text"), "Unexpected window text %s.\n", buff); DestroyWindow(hList); + + r = UnregisterClassA("MyListView32", NULL); + ok(r, "Failed to unregister test class.\n"); }
static void test_redraw(void) @@ -6275,7 +6289,7 @@ START_TEST(listview) test_images(); test_checkboxes(); test_items(); - test_create(); + test_create(FALSE); test_redraw(); test_customdraw(); test_icon_spacing(); @@ -6339,6 +6353,7 @@ START_TEST(listview) test_images(); test_checkboxes(); test_items(); + test_create(TRUE); test_color(); test_columns(); test_sorting();
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/comctl32/tests/listview.c | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-)
diff --git a/dlls/comctl32/tests/listview.c b/dlls/comctl32/tests/listview.c index ea7ad569f5..c6e31275c1 100644 --- a/dlls/comctl32/tests/listview.c +++ b/dlls/comctl32/tests/listview.c @@ -889,7 +889,7 @@ static void test_images(void) r = pImageList_Add(himl, hbmp, 0); ok(r == 0, "should be zero\n");
- hwnd = CreateWindowExA(0, "SysListView32", "foo", LVS_OWNERDRAWFIXED, + hwnd = CreateWindowExA(0, WC_LISTVIEWA, "foo", LVS_OWNERDRAWFIXED, 10, 10, 100, 200, hwndparent, NULL, NULL, NULL); ok(hwnd != NULL, "failed to create listview window\n");
@@ -952,7 +952,7 @@ static void test_checkboxes(void) text2[] = "Text2", text3[] = "Text3";
- hwnd = CreateWindowExA(0, "SysListView32", "foo", LVS_REPORT, + hwnd = CreateWindowExA(0, WC_LISTVIEWA, "foo", LVS_REPORT, 10, 10, 100, 200, hwndparent, NULL, NULL, NULL); ok(hwnd != NULL, "failed to create listview window\n");
@@ -1179,7 +1179,7 @@ static void test_items(void) LVITEMA item; DWORD r;
- hwnd = CreateWindowExA(0, "SysListView32", "foo", LVS_REPORT, + hwnd = CreateWindowExA(0, WC_LISTVIEWA, "foo", LVS_REPORT, 10, 10, 100, 200, hwndparent, NULL, NULL, NULL); ok(hwnd != NULL, "failed to create listview window\n");
@@ -1436,7 +1436,7 @@ static void test_columns(void) CHAR buff[5]; DWORD rc;
- hwnd = CreateWindowExA(0, "SysListView32", "foo", LVS_LIST, + hwnd = CreateWindowExA(0, WC_LISTVIEWA, "foo", LVS_LIST, 10, 10, 100, 200, hwndparent, NULL, NULL, NULL); ok(hwnd != NULL, "failed to create listview window\n");
@@ -1451,7 +1451,7 @@ static void test_columns(void)
DestroyWindow(hwnd);
- hwnd = CreateWindowExA(0, "SysListView32", "foo", LVS_REPORT, + hwnd = CreateWindowExA(0, WC_LISTVIEWA, "foo", LVS_REPORT, 10, 10, 100, 200, hwndparent, NULL, NULL, NULL); ok(hwnd != NULL, "failed to create listview window\n");
@@ -1610,7 +1610,7 @@ static void test_create(BOOL is_version_6) DestroyWindow(hList);
/* header isn't created on LVS_ICON and LVS_LIST styles */ - hList = CreateWindowA("SysListView32", "Test", WS_VISIBLE, 0, 0, 100, 100, NULL, NULL, GetModuleHandleA(NULL), 0); + hList = CreateWindowA(WC_LISTVIEWA, "Test", WS_VISIBLE, 0, 0, 100, 100, NULL, NULL, GetModuleHandleA(NULL), 0); TEST_NO_HEADER(hList);
/* insert column */ @@ -1625,7 +1625,7 @@ static void test_create(BOOL is_version_6) ok(!(style & HDS_HIDDEN), "Not expected HDS_HIDDEN\n"); DestroyWindow(hList);
- hList = CreateWindowA("SysListView32", "Test", WS_VISIBLE|LVS_LIST, 0, 0, 100, 100, NULL, NULL, + hList = CreateWindowA(WC_LISTVIEWA, "Test", WS_VISIBLE|LVS_LIST, 0, 0, 100, 100, NULL, NULL, GetModuleHandleA(NULL), 0); TEST_NO_HEADER(hList); /* insert column */ @@ -1638,7 +1638,7 @@ static void test_create(BOOL is_version_6) DestroyWindow(hList);
/* try to switch LVS_ICON -> LVS_REPORT and back LVS_ICON -> LVS_REPORT */ - hList = CreateWindowA("SysListView32", "Test", WS_VISIBLE, 0, 0, 100, 100, NULL, NULL, + hList = CreateWindowA(WC_LISTVIEWA, "Test", WS_VISIBLE, 0, 0, 100, 100, NULL, NULL, GetModuleHandleA(NULL), 0); ret = SetWindowLongPtrA(hList, GWL_STYLE, GetWindowLongPtrA(hList, GWL_STYLE) | LVS_REPORT); ok(ret & WS_VISIBLE, "Style wrong, should have WS_VISIBLE\n"); @@ -1649,7 +1649,7 @@ static void test_create(BOOL is_version_6) DestroyWindow(hList);
/* try to switch LVS_LIST -> LVS_REPORT and back LVS_LIST -> LVS_REPORT */ - hList = CreateWindowA("SysListView32", "Test", WS_VISIBLE|LVS_LIST, 0, 0, 100, 100, NULL, NULL, + hList = CreateWindowA(WC_LISTVIEWA, "Test", WS_VISIBLE|LVS_LIST, 0, 0, 100, 100, NULL, NULL, GetModuleHandleA(NULL), 0); ret = SetWindowLongPtrA(hList, GWL_STYLE, (GetWindowLongPtrA(hList, GWL_STYLE) & ~LVS_LIST) | LVS_REPORT); @@ -1661,7 +1661,7 @@ static void test_create(BOOL is_version_6) DestroyWindow(hList);
/* LVS_REPORT without WS_VISIBLE */ - hList = CreateWindowA("SysListView32", "Test", LVS_REPORT, 0, 0, 100, 100, NULL, NULL, + hList = CreateWindowA(WC_LISTVIEWA, "Test", LVS_REPORT, 0, 0, 100, 100, NULL, NULL, GetModuleHandleA(NULL), 0); hHeader = (HWND)SendMessageA(hList, LVM_GETHEADER, 0, 0); todo_wine_if(is_version_6) @@ -1677,7 +1677,7 @@ todo_wine_if(is_version_6) DestroyWindow(hList);
/* LVS_REPORT without WS_VISIBLE, try to show it */ - hList = CreateWindowA("SysListView32", "Test", LVS_REPORT, 0, 0, 100, 100, NULL, NULL, + hList = CreateWindowA(WC_LISTVIEWA, "Test", LVS_REPORT, 0, 0, 100, 100, NULL, NULL, GetModuleHandleA(NULL), 0); todo_wine_if(is_version_6) TEST_NO_HEADER2(hList, is_version_6); @@ -1687,7 +1687,7 @@ todo_wine_if(is_version_6) DestroyWindow(hList);
/* LVS_REPORT with LVS_NOCOLUMNHEADER */ - hList = CreateWindowA("SysListView32", "Test", LVS_REPORT|LVS_NOCOLUMNHEADER|WS_VISIBLE, + hList = CreateWindowA(WC_LISTVIEWA, "Test", LVS_REPORT|LVS_NOCOLUMNHEADER|WS_VISIBLE, 0, 0, 100, 100, NULL, NULL, GetModuleHandleA(NULL), 0); TEST_HEADER_EXPECTED(hList); hHeader = (HWND)SendMessageA(hList, LVM_GETHEADER, 0, 0); @@ -1696,7 +1696,7 @@ todo_wine_if(is_version_6) DestroyWindow(hList);
/* setting LVS_EX_HEADERDRAGDROP creates header */ - hList = CreateWindowA("SysListView32", "Test", LVS_REPORT, 0, 0, 100, 100, NULL, NULL, + hList = CreateWindowA(WC_LISTVIEWA, "Test", LVS_REPORT, 0, 0, 100, 100, NULL, NULL, GetModuleHandleA(NULL), 0); todo_wine_if(is_version_6) TEST_NO_HEADER2(hList, is_version_6); @@ -1706,7 +1706,7 @@ todo_wine_if(is_version_6) DestroyWindow(hList);
/* setting LVS_EX_GRIDLINES creates header */ - hList = CreateWindowA("SysListView32", "Test", LVS_REPORT, 0, 0, 100, 100, NULL, NULL, + hList = CreateWindowA(WC_LISTVIEWA, "Test", LVS_REPORT, 0, 0, 100, 100, NULL, NULL, GetModuleHandleA(NULL), 0); todo_wine_if(is_version_6) TEST_NO_HEADER2(hList, is_version_6); @@ -1716,7 +1716,7 @@ todo_wine_if(is_version_6) DestroyWindow(hList);
/* setting LVS_EX_FULLROWSELECT creates header */ - hList = CreateWindowA("SysListView32", "Test", LVS_REPORT, 0, 0, 100, 100, NULL, NULL, + hList = CreateWindowA(WC_LISTVIEWA, "Test", LVS_REPORT, 0, 0, 100, 100, NULL, NULL, GetModuleHandleA(NULL), 0); todo_wine_if(is_version_6) TEST_NO_HEADER2(hList, is_version_6); @@ -1732,7 +1732,7 @@ todo_wine_if(is_version_6) DestroyWindow(hList);
/* requesting header info with LVM_GETSUBITEMRECT doesn't create it */ - hList = CreateWindowA("SysListView32", "Test", LVS_REPORT, 0, 0, 100, 100, NULL, NULL, + hList = CreateWindowA(WC_LISTVIEWA, "Test", LVS_REPORT, 0, 0, 100, 100, NULL, NULL, GetModuleHandleA(NULL), 0); todo_wine_if(is_version_6) TEST_NO_HEADER2(hList, is_version_6); @@ -2834,7 +2834,7 @@ static void test_subitem_rect(void) DestroyWindow(hwnd);
/* try it for non LVS_REPORT style */ - hwnd = CreateWindowA("SysListView32", "Test", LVS_ICON, 0, 0, 100, 100, NULL, NULL, + hwnd = CreateWindowA(WC_LISTVIEWA, "Test", LVS_ICON, 0, 0, 100, 100, NULL, NULL, GetModuleHandleA(NULL), 0); SetRect(&rect, LVIR_BOUNDS, 1, -10, -10); r = SendMessageA(hwnd, LVM_GETSUBITEMRECT, -1, (LPARAM)&rect); @@ -4201,7 +4201,7 @@ static void test_editbox(void) ok_sequence(sequences, PARENT_SEQ_INDEX, empty_seq, "edit box WM_COMMAND (EN_SETFOCUS), no edit created", FALSE); /* same thing but with valid window */ - hwndedit = CreateWindowA("Edit", "Test edit", WS_VISIBLE | WS_CHILD, 0, 0, 20, + hwndedit = CreateWindowA(WC_EDITA, "Test edit", WS_VISIBLE | WS_CHILD, 0, 0, 20, 10, hwnd, (HMENU)1, (HINSTANCE)GetWindowLongPtrA(hwnd, GWLP_HINSTANCE), 0); flush_sequences(sequences, NUM_MSG_SEQUENCES); r = SendMessageA(hwnd, WM_COMMAND, MAKEWPARAM(0, EN_SETFOCUS), (LPARAM)hwndedit); @@ -5975,7 +5975,7 @@ static void test_oneclickactivate(void) INT r; POINT orig_pos;
- hwnd = CreateWindowExA(0, "SysListView32", "foo", WS_VISIBLE|WS_CHILD|LVS_LIST, + hwnd = CreateWindowExA(0, WC_LISTVIEWA, "foo", WS_VISIBLE|WS_CHILD|LVS_LIST, 10, 10, 100, 200, hwndparent, NULL, NULL, NULL); ok(hwnd != NULL, "failed to create listview window\n"); r = SendMessageA(hwnd, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_ONECLICKACTIVATE);
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/comctl32/tests/header.c | 111 ++++++++++++++++++++++++++----------------- 1 file changed, 67 insertions(+), 44 deletions(-)
diff --git a/dlls/comctl32/tests/header.c b/dlls/comctl32/tests/header.c index 31610f0c9a..7ea80519a6 100644 --- a/dlls/comctl32/tests/header.c +++ b/dlls/comctl32/tests/header.c @@ -535,58 +535,79 @@ static HWND create_custom_header_control(HWND hParent, BOOL preloadHeaderItems) return childHandle; }
-static void check_auto_format(void) +static void header_item_getback(HWND hwnd, UINT mask, HDITEMA *item) { - HDITEMA hdiCreate; - HDITEMA hdiRead; - static CHAR text[] = "Test"; - ZeroMemory(&hdiCreate, sizeof(HDITEMA)); + int ret;
- /* Windows implicitly sets some format bits in INSERTITEM */ + ret = SendMessageA(hwnd, HDM_INSERTITEMA, 0, (LPARAM)item); + ok(ret != -1, "Failed to add header item.\n");
- /* HDF_STRING is automatically set and cleared for no text */ - hdiCreate.mask = HDI_TEXT|HDI_WIDTH|HDI_FORMAT; - hdiCreate.pszText = text; - hdiCreate.cxy = 100; - hdiCreate.fmt=HDF_CENTER; - addReadDelItem(hWndHeader, &hdiCreate, HDI_FORMAT, &hdiRead); - ok(hdiRead.fmt == (HDF_STRING|HDF_CENTER), "HDF_STRING not set automatically (fmt=%x)\n", hdiRead.fmt); + memset(item, 0, sizeof(*item)); + item->mask = mask;
- hdiCreate.mask = HDI_WIDTH|HDI_FORMAT; - hdiCreate.pszText = text; - hdiCreate.fmt = HDF_CENTER|HDF_STRING; - addReadDelItem(hWndHeader, &hdiCreate, HDI_FORMAT, &hdiRead); - ok(hdiRead.fmt == (HDF_CENTER), "HDF_STRING should be automatically cleared (fmt=%x)\n", hdiRead.fmt); + ret = SendMessageA(hwnd, HDM_GETITEMA, 0, (LPARAM)item); + ok(ret != 0, "Failed to get item data.\n"); + ret = SendMessageA(hwnd, HDM_DELETEITEM, 0, 0); + ok(ret != 0, "Failed to delete item.\n"); +}
- /* HDF_BITMAP is automatically set and cleared for a NULL bitmap or no bitmap */ - hdiCreate.mask = HDI_BITMAP|HDI_WIDTH|HDI_FORMAT; - hdiCreate.hbm = CreateBitmap(16, 16, 1, 8, NULL); - hdiCreate.fmt = HDF_CENTER; - addReadDelItem(hWndHeader, &hdiCreate, HDI_FORMAT, &hdiRead); - ok(hdiRead.fmt == (HDF_BITMAP|HDF_CENTER), "HDF_BITMAP not set automatically (fmt=%x)\n", hdiRead.fmt); - DeleteObject(hdiCreate.hbm); +static void test_item_auto_format(HWND parent) +{ + static char text[] = "Test"; + HDITEMA item; + HBITMAP hbm; + HWND hwnd;
- hdiCreate.hbm = NULL; - hdiCreate.fmt = HDF_CENTER|HDF_BITMAP; - addReadDelItem(hWndHeader, &hdiCreate, HDI_FORMAT, &hdiRead); - ok(hdiRead.fmt == HDF_CENTER, "HDF_BITMAP not cleared automatically for NULL bitmap (fmt=%x)\n", hdiRead.fmt); + hwnd = create_custom_header_control(parent, FALSE);
- hdiCreate.mask = HDI_WIDTH|HDI_FORMAT; - hdiCreate.fmt = HDF_CENTER|HDF_BITMAP; - addReadDelItem(hWndHeader, &hdiCreate, HDI_FORMAT, &hdiRead); - ok(hdiRead.fmt == HDF_CENTER, "HDF_BITMAP not cleared automatically for no bitmap (fmt=%x)\n", hdiRead.fmt); + /* Windows implicitly sets some format bits in INSERTITEM */ + + /* HDF_STRING is automatically set and cleared for no text */ + item.mask = HDI_TEXT | HDI_WIDTH | HDI_FORMAT; + item.pszText = text; + item.cxy = 100; + item.fmt = HDF_CENTER; + header_item_getback(hwnd, HDI_FORMAT, &item); + ok(item.fmt == (HDF_STRING | HDF_CENTER), "Unexpected item format mask %#x.\n", item.fmt); + + item.mask = HDI_WIDTH | HDI_FORMAT; + item.pszText = text; + item.fmt = HDF_CENTER | HDF_STRING; + header_item_getback(hwnd, HDI_FORMAT, &item); + ok(item.fmt == HDF_CENTER, "Unexpected item format mask %#x.\n", item.fmt); + + /* HDF_BITMAP is automatically set and cleared for a NULL bitmap or no bitmap */ + item.mask = HDI_BITMAP | HDI_WIDTH | HDI_FORMAT; + item.hbm = hbm = CreateBitmap(16, 16, 1, 8, NULL); + item.fmt = HDF_CENTER; + header_item_getback(hwnd, HDI_FORMAT, &item); + ok(item.fmt == (HDF_BITMAP | HDF_CENTER), "Unexpected item format mask %#x.\n", item.fmt); + DeleteObject(hbm); + + item.mask = HDI_BITMAP | HDI_WIDTH | HDI_FORMAT; + item.hbm = NULL; + item.fmt = HDF_CENTER | HDF_BITMAP; + header_item_getback(hwnd, HDI_FORMAT, &item); + ok(item.fmt == HDF_CENTER, "Unexpected item format mask %#x.\n", item.fmt); + + item.mask = HDI_WIDTH | HDI_FORMAT; + item.fmt = HDF_CENTER | HDF_BITMAP; + header_item_getback(hwnd, HDI_FORMAT, &item); + ok(item.fmt == HDF_CENTER, "Unexpected item format mask %#x.\n", item.fmt);
/* HDF_IMAGE is automatically set but not cleared */ - hdiCreate.mask = HDI_IMAGE|HDI_WIDTH|HDI_FORMAT; - hdiCreate.iImage = 17; - addReadDelItem(hWndHeader, &hdiCreate, HDI_FORMAT, &hdiRead); - ok(hdiRead.fmt == (HDF_IMAGE|HDF_CENTER), "HDF_IMAGE not set automatically (fmt=%x)\n", hdiRead.fmt); + item.mask = HDI_IMAGE | HDI_WIDTH | HDI_FORMAT; + item.iImage = 17; + header_item_getback(hwnd, HDI_FORMAT, &item); + ok(item.fmt == (HDF_IMAGE | HDF_CENTER), "Unexpected item format mask %#x.\n", item.fmt);
- hdiCreate.mask = HDI_WIDTH|HDI_FORMAT; - hdiCreate.fmt = HDF_CENTER|HDF_IMAGE; - hdiCreate.iImage = 0; - addReadDelItem(hWndHeader, &hdiCreate, HDI_FORMAT, &hdiRead); - ok(hdiRead.fmt == (HDF_CENTER|HDF_IMAGE), "HDF_IMAGE shouldn't be cleared automatically (fmt=%x)\n", hdiRead.fmt); + item.mask = HDI_WIDTH | HDI_FORMAT; + item.fmt = HDF_CENTER | HDF_IMAGE; + item.iImage = 0; + header_item_getback(hwnd, HDI_FORMAT, &item); + ok(item.fmt == (HDF_CENTER | HDF_IMAGE), "Unexpected item format mask %#x.\n", item.fmt); + + DestroyWindow(hwnd); }
static void check_auto_fields(void) @@ -768,7 +789,6 @@ static void test_header_control (void) /* unexpected notifies cleared by notifies_received in setItem */ delItem(hWndHeader, 0);
- check_auto_format(); TEST_GET_ITEMCOUNT(6); check_auto_fields(); TEST_GET_ITEMCOUNT(6); @@ -1820,18 +1840,20 @@ START_TEST(header) HANDLE hCtx;
init_functions(); + init_msg_sequences(sequences, NUM_MSG_SEQUENCES);
if (!init()) return;
test_header_control(); + test_item_auto_format(hHeaderParentWnd); test_header_order(); test_hdm_orderarray(); test_customdraw();
DestroyWindow(hHeaderParentWnd);
- init_msg_sequences(sequences, NUM_MSG_SEQUENCES); + flush_sequences(sequences, NUM_MSG_SEQUENCES); parent_hwnd = create_custom_parent_window(); ok_sequence(sequences, PARENT_SEQ_INDEX, create_parent_wnd_seq, "create parent windows", FALSE);
@@ -1857,6 +1879,7 @@ START_TEST(header) /* comctl32 version 6 tests start here */ test_hdf_fixedwidth(parent_hwnd); test_hds_nosizing(parent_hwnd); + test_item_auto_format(parent_hwnd);
unload_v6_module(ctx_cookie, hCtx);
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/comctl32/tests/tab.c | 70 ++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 57 insertions(+), 13 deletions(-)
diff --git a/dlls/comctl32/tests/tab.c b/dlls/comctl32/tests/tab.c index a54dbb5de0..d3e0e0c6cf 100644 --- a/dlls/comctl32/tests/tab.c +++ b/dlls/comctl32/tests/tab.c @@ -215,6 +215,11 @@ static const struct message selchange_parent_seq[] = { { 0 } };
+static const struct message setfocus_parent_seq[] = { + { WM_NOTIFY, sent|id, 0, 0, TCN_FOCUSCHANGE }, + { 0 } +}; + static HWND create_tabcontrol (DWORD style, DWORD mask) { @@ -593,7 +598,7 @@ static void test_width(void) static void test_curfocus(void) { const INT nTabs = 5; - INT focusIndex; + INT ret; HWND hTab;
hTab = createFilledTabControl(parent_wnd, TCS_FIXEDWIDTH, TCIF_TEXT|TCIF_IMAGE, nTabs); @@ -602,24 +607,63 @@ static void test_curfocus(void) flush_sequences(sequences, NUM_MSG_SEQUENCES);
/* Testing CurFocus with largest appropriate value */ - SendMessageA(hTab, TCM_SETCURFOCUS, nTabs - 1, 0); - focusIndex = SendMessageA(hTab, TCM_GETCURFOCUS, 0, 0); - expect(nTabs-1, focusIndex); + ret = SendMessageA(hTab, TCM_SETCURFOCUS, nTabs - 1, 0); + ok(ret == 0, "Unexpected ret value %d.\n", ret); + ret = SendMessageA(hTab, TCM_GETCURFOCUS, 0, 0); + ok(ret == nTabs - 1, "Unexpected focus index %d.\n", ret);
/* Testing CurFocus with negative value */ - SendMessageA(hTab, TCM_SETCURFOCUS, -10, 0); - focusIndex = SendMessageA(hTab, TCM_GETCURFOCUS, 0, 0); - expect(-1, focusIndex); + ret = SendMessageA(hTab, TCM_SETCURFOCUS, -10, 0); + ok(ret == 0, "Unexpected ret value %d.\n", ret); + ret = SendMessageA(hTab, TCM_GETCURFOCUS, 0, 0); + ok(ret == -1, "Unexpected focus index %d.\n", ret);
/* Testing CurFocus with value larger than number of tabs */ - focusIndex = SendMessageA(hTab, TCM_SETCURSEL, 1, 0); - expect(-1, focusIndex); + ret = SendMessageA(hTab, TCM_SETCURSEL, 1, 0); + ok(ret == -1, "Unexpected focus index %d.\n", ret);
- SendMessageA(hTab, TCM_SETCURFOCUS, nTabs + 1, 0); - focusIndex = SendMessageA(hTab, TCM_GETCURFOCUS, 0, 0); - expect(1, focusIndex); + ret = SendMessageA(hTab, TCM_SETCURFOCUS, nTabs + 1, 0); + ok(ret == 0, "Unexpected ret value %d.\n", ret); + ret = SendMessageA(hTab, TCM_GETCURFOCUS, 0, 0); + ok(ret == 1, "Unexpected focus index %d.\n", ret); + + ok_sequence(sequences, TAB_SEQ_INDEX, getset_cur_focus_seq, "Set focused tab sequence", FALSE); + ok_sequence(sequences, PARENT_SEQ_INDEX, empty_sequence, "Set focused tab parent sequence", TRUE); + + DestroyWindow(hTab); + + /* TCS_BUTTONS */ + hTab = createFilledTabControl(parent_wnd, TCS_BUTTONS, TCIF_TEXT|TCIF_IMAGE, nTabs); + ok(hTab != NULL, "Failed to create tab control\n"); + + flush_sequences(sequences, NUM_MSG_SEQUENCES); + + /* Testing CurFocus with largest appropriate value */ + ret = SendMessageA(hTab, TCM_SETCURFOCUS, nTabs - 1, 0); + ok(ret == 0, "Unexpected ret value %d.\n", ret); + ret = SendMessageA(hTab, TCM_GETCURFOCUS, 0, 0); + ok(ret == nTabs - 1, "Unexpected focus index %d.\n", ret); + + /* Testing CurFocus with negative value */ + ret = SendMessageA(hTab, TCM_SETCURFOCUS, -10, 0); + ok(ret == 0, "Unexpected ret value %d.\n", ret); + ret = SendMessageA(hTab, TCM_GETCURFOCUS, 0, 0); +todo_wine + ok(ret == nTabs - 1, "Unexpected focus index %d.\n", ret); + + /* Testing CurFocus with value larger than number of tabs */ + ret = SendMessageA(hTab, TCM_SETCURSEL, 1, 0); +todo_wine + ok(ret == 0, "Unexpected focus index %d.\n", ret); + + ret = SendMessageA(hTab, TCM_SETCURFOCUS, nTabs + 1, 0); + ok(ret == 0, "Unexpected ret value %d.\n", ret); + ret = SendMessageA(hTab, TCM_GETCURFOCUS, 0, 0); +todo_wine + ok(ret == nTabs - 1, "Unexpected focus index %d.\n", ret);
- ok_sequence(sequences, TAB_SEQ_INDEX, getset_cur_focus_seq, "Getset curFoc test sequence", FALSE); + ok_sequence(sequences, TAB_SEQ_INDEX, getset_cur_focus_seq, "TCS_BUTTONS: set focused tab sequence", FALSE); + ok_sequence(sequences, PARENT_SEQ_INDEX, setfocus_parent_seq, "TCS_BUTTONS: set focused tab parent sequence", TRUE);
DestroyWindow(hTab); }
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/comctl32/tests/datetime.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+)
diff --git a/dlls/comctl32/tests/datetime.c b/dlls/comctl32/tests/datetime.c index 4036e9defd..7742dc5d18 100644 --- a/dlls/comctl32/tests/datetime.c +++ b/dlls/comctl32/tests/datetime.c @@ -22,6 +22,7 @@
#include "wine/test.h" #include "msg.h" +#include "v6util.h"
#define expect(EXPECTED, GOT) ok((GOT)==(EXPECTED), "Expected %d, got %ld\n", (EXPECTED), (GOT))
@@ -791,6 +792,8 @@ static void init_functions(void) START_TEST(datetime) { INITCOMMONCONTROLSEX iccex; + ULONG_PTR cookie; + HANDLE ctxt;
init_functions();
@@ -810,4 +813,16 @@ START_TEST(datetime) test_dtm_set_and_get_systemtime_with_limits(); test_wm_set_get_text(); test_dts_shownone(); + + if (!load_v6_module(&cookie, &ctxt)) + return; + + test_dtm_set_format(); + test_dtm_set_and_get_mccolor(); + test_dtm_set_and_get_mcfont(); + test_dtm_get_monthcal(); + test_wm_set_get_text(); + test_dts_shownone(); + + unload_v6_module(cookie, ctxt); }
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/comctl32/tests/dpa.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+)
diff --git a/dlls/comctl32/tests/dpa.c b/dlls/comctl32/tests/dpa.c index c795c14f4e..39f6b460e9 100644 --- a/dlls/comctl32/tests/dpa.c +++ b/dlls/comctl32/tests/dpa.c @@ -30,6 +30,7 @@ #include "objidl.h"
#include "wine/test.h" +#include "v6util.h"
#define expect(expected, got) ok(got == expected, "Expected %d, got %d\n", expected, got)
@@ -737,6 +738,9 @@ if (0) {
START_TEST(dpa) { + ULONG_PTR cookie; + HANDLE ctxt; + init_functions();
test_dpa(); @@ -745,4 +749,18 @@ START_TEST(dpa) test_DPA_DestroyCallback(); test_DPA_LoadStream(); test_DPA_SaveStream(); + + if (!load_v6_module(&cookie, &ctxt)) + return; + + init_functions(); + + test_dpa(); + test_DPA_Merge(); + test_DPA_EnumCallback(); + test_DPA_DestroyCallback(); + test_DPA_LoadStream(); + test_DPA_SaveStream(); + + unload_v6_module(cookie, ctxt); }