Nikolay Sivov : comctl32/tests: Some tests for focus handling in owner-data listviews.

Alexandre Julliard julliard at winehq.org
Mon Dec 4 14:58:21 CST 2017


Module: wine
Branch: master
Commit: 3fe501fb602981876e09c9d396eb164b821740a6
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=3fe501fb602981876e09c9d396eb164b821740a6

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Mon Dec  4 12:09:44 2017 +0300

comctl32/tests: Some tests for focus handling in owner-data listviews.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/comctl32/tests/listview.c | 122 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 122 insertions(+)

diff --git a/dlls/comctl32/tests/listview.c b/dlls/comctl32/tests/listview.c
index 0e12362..4e2efe4 100644
--- a/dlls/comctl32/tests/listview.c
+++ b/dlls/comctl32/tests/listview.c
@@ -193,6 +193,12 @@ static const struct message empty_seq[] = {
     { 0 }
 };
 
+static const struct message parent_focus_change_ownerdata_seq[] = {
+    { WM_NOTIFY, sent|id, 0, 0, LVN_ITEMCHANGED },
+    { WM_NOTIFY, sent|id, 0, 0, LVN_GETDISPINFOA },
+    { 0 }
+};
+
 static const struct message forward_erasebkgnd_parent_seq[] = {
     { WM_ERASEBKGND, sent },
     { 0 }
@@ -5996,6 +6002,7 @@ static void test_oneclickactivate(void)
 
 static void test_callback_mask(void)
 {
+    LVITEMA item;
     DWORD mask;
     HWND hwnd;
     BOOL ret;
@@ -6012,6 +6019,121 @@ static void test_callback_mask(void)
     ok(mask == ~0u, "got 0x%08x\n", mask);
 
     DestroyWindow(hwnd);
+
+    /* LVS_OWNERDATA, mask LVIS_FOCUSED */
+    hwnd = create_listview_control(LVS_REPORT | LVS_OWNERDATA);
+
+    mask = SendMessageA(hwnd, LVM_GETCALLBACKMASK, 0, 0);
+    ok(mask == 0, "Unexpected callback mask %#x.\n", mask);
+
+    ret = SendMessageA(hwnd, LVM_SETCALLBACKMASK, LVIS_FOCUSED, 0);
+    ok(ret, "Failed to set callback mask, %d\n", ret);
+
+    mask = SendMessageA(hwnd, LVM_GETCALLBACKMASK, 0, 0);
+    ok(mask == LVIS_FOCUSED, "Unexpected callback mask %#x.\n", mask);
+
+    ret = SendMessageA(hwnd, LVM_SETITEMCOUNT, 1, 0);
+    ok(ret, "Failed to set item count.\n");
+
+    ret = SendMessageA(hwnd, LVM_GETSELECTIONMARK, 0, 0);
+    ok(ret == -1, "Unexpected selection mark, %d\n", ret);
+
+    item.stateMask = LVIS_FOCUSED;
+    item.state = LVIS_FOCUSED;
+    ret = SendMessageA(hwnd, LVM_SETITEMSTATE, 0, (LPARAM)&item);
+    ok(ret, "Failed to set item state.\n");
+
+    flush_sequences(sequences, NUM_MSG_SEQUENCES);
+
+    ret = SendMessageA(hwnd, LVM_GETNEXTITEM, -1, LVNI_FOCUSED);
+todo_wine
+    ok(ret == 0, "Unexpected focused item, ret %d\n", ret);
+
+    ret = SendMessageA(hwnd, LVM_GETSELECTIONMARK, 0, 0);
+todo_wine
+    ok(ret == 0, "Unexpected selection mark, %d\n", ret);
+
+    ret = SendMessageA(hwnd, LVM_SETITEMCOUNT, 0, 0);
+    ok(ret, "Failed to set item count.\n");
+
+    ret = SendMessageA(hwnd, LVM_GETNEXTITEM, -1, LVNI_FOCUSED);
+    ok(ret == -1, "Unexpected focused item, ret %d\n", ret);
+
+    ret = SendMessageA(hwnd, LVM_GETSELECTIONMARK, 0, 0);
+    ok(ret == -1, "Unexpected selection mark, %d\n", ret);
+
+    ret = SendMessageA(hwnd, LVM_SETITEMCOUNT, 1, 0);
+    ok(ret, "Failed to set item count.\n");
+
+    ret = SendMessageA(hwnd, LVM_GETNEXTITEM, -1, LVNI_FOCUSED);
+    ok(ret == -1, "Unexpected focused item, ret %d\n", ret);
+
+    ok_sequence(sequences, PARENT_SEQ_INDEX, empty_seq, "parent seq, owner data/focus 1", FALSE);
+
+    /* LVS_OWNDERDATA, empty mask */
+    ret = SendMessageA(hwnd, LVM_SETCALLBACKMASK, 0, 0);
+    ok(ret, "Failed to set callback mask, %d\n", ret);
+
+    ret = SendMessageA(hwnd, LVM_SETITEMCOUNT, 1, 0);
+    ok(ret, "Failed to set item count.\n");
+
+    ret = SendMessageA(hwnd, LVM_GETSELECTIONMARK, 0, 0);
+    ok(ret == -1, "Unexpected selection mark, %d\n", ret);
+
+    item.stateMask = LVIS_FOCUSED;
+    item.state = LVIS_FOCUSED;
+    ret = SendMessageA(hwnd, LVM_SETITEMSTATE, 0, (LPARAM)&item);
+    ok(ret, "Failed to set item state.\n");
+
+    ret = SendMessageA(hwnd, LVM_GETSELECTIONMARK, 0, 0);
+    ok(ret == 0, "Unexpected selection mark, %d\n", ret);
+
+    flush_sequences(sequences, NUM_MSG_SEQUENCES);
+
+    ret = SendMessageA(hwnd, LVM_GETNEXTITEM, -1, LVNI_FOCUSED);
+    ok(ret == 0, "Unexpected focused item, ret %d\n", ret);
+
+    ret = SendMessageA(hwnd, LVM_SETITEMCOUNT, 0, 0);
+    ok(ret, "Failed to set item count.\n");
+
+    ret = SendMessageA(hwnd, LVM_GETNEXTITEM, -1, LVNI_FOCUSED);
+    ok(ret == -1, "Unexpected focused item, ret %d\n", ret);
+
+    ret = SendMessageA(hwnd, LVM_GETSELECTIONMARK, 0, 0);
+todo_wine
+    ok(ret == -1, "Unexpected selection mark, %d\n", ret);
+
+    ret = SendMessageA(hwnd, LVM_SETITEMCOUNT, 1, 0);
+    ok(ret, "Failed to set item count.\n");
+
+    ret = SendMessageA(hwnd, LVM_GETNEXTITEM, -1, LVNI_FOCUSED);
+todo_wine
+    ok(ret == -1, "Unexpected focused item, ret %d\n", ret);
+
+    ok_sequence(sequences, PARENT_SEQ_INDEX, empty_seq, "parent seq, owner data/focus 2", TRUE);
+
+    /* 2 items, focus on index 0, reduce to 1 item. */
+    flush_sequences(sequences, NUM_MSG_SEQUENCES);
+
+    ret = SendMessageA(hwnd, LVM_SETITEMCOUNT, 2, 0);
+    ok(ret, "Failed to set item count.\n");
+
+    ret = SendMessageA(hwnd, LVM_SETITEMSTATE, 0, (LPARAM)&item);
+    ok(ret, "Failed to set item state.\n");
+
+    ret = SendMessageA(hwnd, LVM_GETNEXTITEM, -1, LVNI_FOCUSED);
+    ok(ret == 0, "Unexpected focused item, ret %d\n", ret);
+
+    ret = SendMessageA(hwnd, LVM_SETITEMCOUNT, 1, 0);
+    ok(ret, "Failed to set item count.\n");
+
+    ret = SendMessageA(hwnd, LVM_GETNEXTITEM, -1, LVNI_FOCUSED);
+    ok(ret == 0, "Unexpected focused item, ret %d\n", ret);
+
+    ok_sequence(sequences, PARENT_SEQ_INDEX, parent_focus_change_ownerdata_seq,
+        "parent seq, owner data/focus 3", TRUE);
+
+    DestroyWindow(hwnd);
 }
 
 START_TEST(listview)




More information about the wine-cvs mailing list