[PATCH 1/3] comctl32/tests: Enable some ComboEx tests on version 6.
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> --- dlls/comctl32/tests/combo.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/dlls/comctl32/tests/combo.c b/dlls/comctl32/tests/combo.c index 63470a50ff7..4102191e2f6 100644 --- a/dlls/comctl32/tests/combo.c +++ b/dlls/comctl32/tests/combo.c @@ -1391,6 +1391,11 @@ START_TEST(combo) return; } + test_comboex(); + test_comboex_CB_GETLBTEXT(); + test_comboex_WM_WINDOWPOSCHANGING(); + test_comboex_get_set_item(); + /* ComboBox control tests. */ test_combo_WS_VSCROLL(); test_combo_setfont(CBS_DROPDOWN); -- 2.30.2
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> --- dlls/comctl32/tests/combo.c | 159 +++++++++++++++++++++++++++++++++++- 1 file changed, 155 insertions(+), 4 deletions(-) diff --git a/dlls/comctl32/tests/combo.c b/dlls/comctl32/tests/combo.c index 4102191e2f6..69232a3d4bd 100644 --- a/dlls/comctl32/tests/combo.c +++ b/dlls/comctl32/tests/combo.c @@ -27,8 +27,12 @@ #include "v6util.h" #include "msg.h" -#define EDITBOX_SEQ_INDEX 0 -#define NUM_MSG_SEQUENCES 1 +enum message_seq_index +{ + EDITBOX_SEQ_INDEX = 0, + PARENT_SEQ_INDEX, + NUM_MSG_SEQUENCES, +}; #define EDITBOX_ID 0 #define COMBO_ID 1995 @@ -442,10 +446,29 @@ static void test_comboex_WM_WINDOWPOSCHANGING(void) ok(ret, "DestroyWindow failed\n"); } -static LRESULT ComboExTestOnNotify(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) +struct di_context { + unsigned int mask; + BOOL set_CBEIF_DI_SETITEM; +}; + +static struct di_context di_context; + +static LRESULT ComboExTestOnNotify(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + struct message msg; NMHDR *hdr = (NMHDR*)lParam; - switch(hdr->code){ + + msg.message = message; + msg.flags = sent|wparam|lparam; + msg.wParam = wParam; + msg.lParam = lParam; + if (hdr) msg.id = hdr->code; + + add_message(sequences, PARENT_SEQ_INDEX, &msg); + + switch (hdr->code) + { case CBEN_ENDEDITA: { NMCBEENDEDITA *edit_info = (NMCBEENDEDITA*)hdr; @@ -462,6 +485,42 @@ static LRESULT ComboExTestOnNotify(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lP } break; } + case CBEN_GETDISPINFOA: + case CBEN_GETDISPINFOW: + { + NMCOMBOBOXEXA *item = (NMCOMBOBOXEXA *)hdr; + + di_context.mask = item->ceItem.mask; + + if (item->ceItem.mask & CBEIF_IMAGE) + { + ok(item->ceItem.iImage == I_IMAGECALLBACK, "Unexpected iImage %d.\n", item->ceItem.iImage); + item->ceItem.iImage = 123; + } + + if (item->ceItem.mask & CBEIF_TEXT) + { + ok(item->ceItem.pszText && item->ceItem.pszText != LPSTR_TEXTCALLBACKA, + "Unexpected pszText %p.\n", item->ceItem.pszText); + ok(item->ceItem.cchTextMax == 0, "Unexpected cchTextMax %d.\n", item->ceItem.cchTextMax); + } + + if (item->ceItem.mask & CBEIF_SELECTEDIMAGE) + ok(item->ceItem.iSelectedImage == I_IMAGECALLBACK, "Unexpected iSelectedImage %d.\n", + item->ceItem.iSelectedImage); + + if (item->ceItem.mask & CBEIF_OVERLAY) + ok(item->ceItem.iOverlay == I_IMAGECALLBACK, "Unexpected iOverlay %d.\n", + item->ceItem.iOverlay); + + if (item->ceItem.mask & CBEIF_INDENT) + ok(item->ceItem.iIndent == 0, "Unexpected iIndent %d.\n", item->ceItem.iIndent); + + if (di_context.set_CBEIF_DI_SETITEM) + item->ceItem.mask |= CBEIF_DI_SETITEM; + + break; + } } return 0; } @@ -1365,6 +1424,96 @@ static void test_combo_ctlcolor(void) DestroyWindow(combo); } +static const struct message getdisp_parent_seq[] = +{ + { WM_NOTIFY, sent|id, 0, 0, CBEN_GETDISPINFOA }, + { 0 } +}; + +static const struct message empty_seq[] = +{ + { 0 } +}; + +static void test_comboex_CBEN_GETDISPINFO(void) +{ + static const unsigned int test_masks[] = + { + CBEIF_TEXT, + CBEIF_IMAGE, + CBEIF_INDENT, + CBEIF_OVERLAY, + CBEIF_SELECTEDIMAGE, + CBEIF_IMAGE | CBEIF_INDENT, + }; + COMBOBOXEXITEMA item; + unsigned int i; + HWND combo; + DWORD res; + + combo = createComboEx(WS_BORDER | WS_VISIBLE | WS_CHILD | CBS_DROPDOWN); + ok(!!combo, "Failed to create control window.\n"); + + /* All possible callback fields. */ + memset(&item, 0, sizeof(item)); + item.mask = CBEIF_TEXT | CBEIF_IMAGE | CBEIF_INDENT | CBEIF_OVERLAY | CBEIF_SELECTEDIMAGE; + item.pszText = LPSTR_TEXTCALLBACKA; + item.iImage = I_IMAGECALLBACK; + item.iSelectedImage = I_IMAGECALLBACK; + item.iOverlay = I_IMAGECALLBACK; + item.iIndent = I_INDENTCALLBACK; + + res = SendMessageA(combo, CBEM_INSERTITEMA, 0, (LPARAM)&item); + ok(!res, "Unexpected return value %u.\n", res); + + for (i = 0; i < ARRAY_SIZE(test_masks); ++i) + { + flush_sequences(sequences, NUM_MSG_SEQUENCES); + + memset(&item, 0, sizeof(item)); + item.mask = test_masks[i]; + res = SendMessageA(combo, CBEM_GETITEMA, 0, (LPARAM)&item); + ok(res == 1, "Unexpected return value %u.\n", res); + + ok_sequence(sequences, PARENT_SEQ_INDEX, getdisp_parent_seq, "Get disp mask seq", TRUE); + } + + di_context.set_CBEIF_DI_SETITEM = TRUE; + + flush_sequences(sequences, NUM_MSG_SEQUENCES); + + memset(&item, 0, sizeof(item)); + item.mask = CBEIF_IMAGE; + di_context.mask = 0; + res = SendMessageA(combo, CBEM_GETITEMA, 0, (LPARAM)&item); + ok(res == 1, "Unexpected return value %u.\n", res); +todo_wine + ok(di_context.mask == CBEIF_IMAGE, "Unexpected mask %#x.\n", di_context.mask); + + ok_sequence(sequences, PARENT_SEQ_INDEX, getdisp_parent_seq, "Get disp DI_SETITEM seq", TRUE); + + flush_sequences(sequences, NUM_MSG_SEQUENCES); + + memset(&item, 0, sizeof(item)); + item.mask = CBEIF_IMAGE; + res = SendMessageA(combo, CBEM_GETITEMA, 0, (LPARAM)&item); + ok(res == 1, "Unexpected return value %u.\n", res); + ok_sequence(sequences, PARENT_SEQ_INDEX, empty_seq, "Get disp after DI_SETITEM seq", FALSE); + + /* Request two fields, one was set. */ + memset(&item, 0, sizeof(item)); + item.mask = CBEIF_IMAGE | CBEIF_INDENT; + di_context.mask = 0; + res = SendMessageA(combo, CBEM_GETITEMA, 0, (LPARAM)&item); + ok(res == 1, "Unexpected return value %u.\n", res); +todo_wine + ok(di_context.mask == CBEIF_INDENT, "Unexpected mask %#x.\n", di_context.mask); + + di_context.set_CBEIF_DI_SETITEM = FALSE; + + DestroyWindow(combo); +} + START_TEST(combo) { ULONG_PTR ctx_cookie; @@ -1384,6 +1533,7 @@ START_TEST(combo) test_comboex_WM_WINDOWPOSCHANGING(); test_comboex_subclass(); test_comboex_get_set_item(); + test_comboex_CBEN_GETDISPINFO(); if (!load_v6_module(&ctx_cookie, &hCtx)) { @@ -1395,6 +1545,7 @@ START_TEST(combo) test_comboex_CB_GETLBTEXT(); test_comboex_WM_WINDOWPOSCHANGING(); test_comboex_get_set_item(); + test_comboex_CBEN_GETDISPINFO(); /* ComboBox control tests. */ test_combo_WS_VSCROLL(); -- 2.30.2
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> --- dlls/comctl32/tests/combo.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/dlls/comctl32/tests/combo.c b/dlls/comctl32/tests/combo.c index 69232a3d4bd..69cc7680827 100644 --- a/dlls/comctl32/tests/combo.c +++ b/dlls/comctl32/tests/combo.c @@ -37,8 +37,6 @@ enum message_seq_index #define EDITBOX_ID 0 #define COMBO_ID 1995 -#define expect(expected, got) ok(got == expected, "Expected %d, got %d\n", expected, got) - #define expect_rect(r, _left, _top, _right, _bottom) ok(r.left == _left && r.top == _top && \ r.bottom == _bottom && r.right == _right, "Invalid rect %s vs (%d,%d)-(%d,%d)\n", \ wine_dbgstr_rect(&r), _left, _top, _right, _bottom); @@ -631,7 +629,7 @@ static void test_comboex_get_set_item(void) char textA[] = "test"; HWND hComboEx; COMBOBOXEXITEMA item; - BOOL ret; + DWORD ret; hComboEx = createComboEx(WS_BORDER | WS_VISIBLE | WS_CHILD | CBS_DROPDOWN); @@ -644,7 +642,7 @@ static void test_comboex_get_set_item(void) item.pszText = textA; item.iItem = -1; ret = SendMessageA(hComboEx, CBEM_SETITEMA, 0, (LPARAM)&item); - expect(TRUE, ret); + ok(ret == 1, "Unexpected return value %d.\n", ret); ok_sequence(sequences, EDITBOX_SEQ_INDEX, test_setitem_edit_seq, "set item data for edit", FALSE); @@ -653,16 +651,16 @@ static void test_comboex_get_set_item(void) item.iItem = -1; item.lParam = 0xdeadbeef; ret = SendMessageA(hComboEx, CBEM_GETITEMA, 0, (LPARAM)&item); - expect(TRUE, ret); + ok(ret == 1, "Unexpected return value %d.\n", ret); ok(item.lParam == 0, "Expected zero, got %lx\n", item.lParam); item.lParam = 0x1abe11ed; ret = SendMessageA(hComboEx, CBEM_SETITEMA, 0, (LPARAM)&item); - expect(TRUE, ret); + ok(ret == 1, "Unexpected return value %d.\n", ret); item.lParam = 0; ret = SendMessageA(hComboEx, CBEM_GETITEMA, 0, (LPARAM)&item); - expect(TRUE, ret); + ok(ret == 1, "Unexpected return value %d.\n", ret); ok(item.lParam == 0x1abe11ed, "Expected 0x1abe11ed, got %lx\n", item.lParam); DestroyWindow(hComboEx); -- 2.30.2
participants (1)
-
Nikolay Sivov