[PATCH v4 7/7] comctl32/tests: Expand ownerdata listview tests.

Angelo Haller wine-devel at szanni.org
Tue Jun 28 16:16:12 CDT 2022


From: Angelo Haller <angelo at szanni.org>

Add more test cases to ownderdata listviews:

- Complete test to include matching up/down key sequences using
  SHIFT/SHIFT+CONTROL

Signed-off-by: Angelo Haller <angelo at szanni.org>

---
v4: Move some up/down key sequences from v3 1/6 to account for 32KB
    Debian log buffer limit.
---
 dlls/comctl32/tests/listview.c | 139 +++++++++++++++++++++++++++++++++
 1 file changed, 139 insertions(+)

diff --git a/dlls/comctl32/tests/listview.c b/dlls/comctl32/tests/listview.c
index d8a27ea18f4..92415da981d 100644
--- a/dlls/comctl32/tests/listview.c
+++ b/dlls/comctl32/tests/listview.c
@@ -263,6 +263,13 @@ static const struct message ownerdata_multiselect_select_0_to_1_odstatechanged_s
     { 0 }
 };
 
+static const struct message ownerdata_multiselect_select_0_odstatechanged_seq[] = {
+    { WM_NOTIFY, sent|id|wparam, -1, 0, LVN_ITEMCHANGED },
+    { WM_NOTIFY, sent|id|wparam, 1, 0, LVN_ITEMCHANGED },
+    { WM_NOTIFY, sent|id|wparam, 0, 0, LVN_ITEMCHANGED },
+    { 0 }
+};
+
 static const struct message ownerdata_multiselect_select_0_modkey_odstatechanged_seq[] = {
     { WM_NOTIFY, sent|id|wparam, -1, 0, LVN_ITEMCHANGED },
     { WM_NOTIFY, sent|id|wparam, 0, 0, LVN_ITEMCHANGED },
@@ -292,6 +299,36 @@ static const struct message ownerdata_multiselect_select_3_odstatechanged_seq[]
     { 0 }
 };
 
+static const struct message ownerdata_multiselect_select_3_modkey_odstatechanged_seq[] = {
+    { WM_NOTIFY, sent|id|wparam, -1, 0, LVN_ITEMCHANGED },
+    { WM_NOTIFY, sent|id|wparam, 3, 0, LVN_ITEMCHANGED },
+    { WM_NOTIFY, sent|id|wparam, 2, 0, LVN_ITEMCHANGED },
+    { WM_NOTIFY, sent|id|wparam, 3, 0, LVN_ITEMCHANGED },
+    { 0 }
+};
+
+static const struct message ownerdata_multiselect_select_3_to_2_odstatechanged_seq[] = {
+    { WM_NOTIFY, sent|id|wparam, -1, 0, LVN_ITEMCHANGED },
+    { WM_NOTIFY, sent|id, 0, 0, LVN_ODSTATECHANGED },
+    { WM_NOTIFY, sent|id|wparam, 3, 0, LVN_ITEMCHANGED },
+    { WM_NOTIFY, sent|id|wparam, 2, 0, LVN_ITEMCHANGED },
+    { 0 }
+};
+
+static const struct message ownerdata_multiselect_move_3_to_2_odstatechanged_seq[] = {
+    { WM_NOTIFY, sent|id|wparam, 3, 0, LVN_ITEMCHANGED },
+    { WM_NOTIFY, sent|id|wparam, 2, 0, LVN_ITEMCHANGED },
+    { 0 }
+};
+
+static const struct message ownerdata_multiselect_select_3_to_1_odstatechanged_seq[] = {
+    { WM_NOTIFY, sent|id|wparam, -1, 0, LVN_ITEMCHANGED },
+    { WM_NOTIFY, sent|id, 0, 0, LVN_ODSTATECHANGED },
+    { WM_NOTIFY, sent|id|wparam, 2, 0, LVN_ITEMCHANGED },
+    { WM_NOTIFY, sent|id|wparam, 1, 0, LVN_ITEMCHANGED },
+    { 0 }
+};
+
 static const struct message change_all_parent_seq[] = {
     { WM_NOTIFY, sent|id, 0, 0, LVN_ITEMCHANGING },
     { WM_NOTIFY, sent|id, 0, 0, LVN_ITEMCHANGED },
@@ -3698,6 +3735,108 @@ static void test_ownerdata_multiselect(void)
     res = SendMessageA(hwnd, LVM_GETSELECTEDCOUNT, 0, 0);
     expect(1, res);
 
+    hold_key(VK_SHIFT);
+
+    flush_sequences(sequences, NUM_MSG_SEQUENCES);
+
+    /* Select multiple items via SHIFT+UP */
+    res = SendMessageA(hwnd, WM_KEYDOWN, VK_UP, 0);
+    expect(0, res);
+    ok_sequence(sequences, PARENT_ODSTATECHANGED_SEQ_INDEX,
+                ownerdata_multiselect_select_3_to_2_odstatechanged_seq,
+                "ownerdata multiselect: select multiple via SHIFT+UP", FALSE);
+    res = SendMessageA(hwnd, WM_KEYUP, VK_UP, 0);
+    expect(0, res);
+    res = SendMessageA(hwnd, LVM_GETSELECTEDCOUNT, 0, 0);
+    expect(2, res);
+
+    flush_sequences(sequences, NUM_MSG_SEQUENCES);
+
+    /* Select one item via SHIFT+DOWN */
+    res = SendMessageA(hwnd, WM_KEYDOWN, VK_DOWN, 0);
+    expect(0, res);
+    ok_sequence(sequences, PARENT_ODSTATECHANGED_SEQ_INDEX,
+                ownerdata_multiselect_select_3_modkey_odstatechanged_seq,
+                "ownerdata multiselect: select one via SHIFT+DOWN", TRUE);
+    res = SendMessageA(hwnd, WM_KEYUP, VK_DOWN, 0);
+    expect(0, res);
+    res = SendMessageA(hwnd, LVM_GETSELECTEDCOUNT, 0, 0);
+    expect(1, res);
+
+    hold_key(VK_CONTROL);
+
+    flush_sequences(sequences, NUM_MSG_SEQUENCES);
+
+    /* Select multiple items via SHIFT+CONTROL+UP */
+    res = SendMessageA(hwnd, WM_KEYDOWN, VK_UP, 0);
+    expect(0, res);
+    ok_sequence(sequences, PARENT_ODSTATECHANGED_SEQ_INDEX,
+                ownerdata_multiselect_select_3_to_2_odstatechanged_seq,
+                "ownerdata multiselect: select multiple via SHIFT+CONTROL+UP", FALSE);
+    res = SendMessageA(hwnd, WM_KEYUP, VK_UP, 0);
+    expect(0, res);
+    res = SendMessageA(hwnd, LVM_GETSELECTEDCOUNT, 0, 0);
+    expect(2, res);
+
+    flush_sequences(sequences, NUM_MSG_SEQUENCES);
+
+    /* Select one item via SHIFT+CONTROL+DOWN */
+    res = SendMessageA(hwnd, WM_KEYDOWN, VK_DOWN, 0);
+    expect(0, res);
+    ok_sequence(sequences, PARENT_ODSTATECHANGED_SEQ_INDEX,
+                ownerdata_multiselect_select_3_modkey_odstatechanged_seq,
+                "ownerdata multiselect: select one via SHIFT+CONTROL+DOWN", TRUE);
+    res = SendMessageA(hwnd, WM_KEYUP, VK_DOWN, 0);
+    expect(0, res);
+    res = SendMessageA(hwnd, LVM_GETSELECTEDCOUNT, 0, 0);
+    expect(1, res);
+
+    release_key(VK_SHIFT);
+
+    flush_sequences(sequences, NUM_MSG_SEQUENCES);
+
+    /* Keep selection but move cursor via CONTROL+UP */
+    res = SendMessageA(hwnd, WM_KEYDOWN, VK_UP, 0);
+    expect(0, res);
+    ok_sequence(sequences, PARENT_ODSTATECHANGED_SEQ_INDEX,
+                ownerdata_multiselect_move_3_to_2_odstatechanged_seq,
+                "ownerdata multiselect: keep selection but move cursor via CONTROL+UP ", FALSE);
+    res = SendMessageA(hwnd, WM_KEYUP, VK_UP, 0);
+    expect(0, res);
+    res = SendMessageA(hwnd, LVM_GETSELECTEDCOUNT, 0, 0);
+    expect(1, res);
+
+    hold_key(VK_SHIFT);
+
+    flush_sequences(sequences, NUM_MSG_SEQUENCES);
+
+    /* Select multiple via SHIFT+CONTROL+DOWN after moving cursor over an item without selecting */
+    res = SendMessageA(hwnd, WM_KEYDOWN, VK_UP, 0);
+    expect(0, res);
+    ok_sequence(sequences, PARENT_ODSTATECHANGED_SEQ_INDEX,
+                ownerdata_multiselect_select_3_to_1_odstatechanged_seq,
+                "ownerdata multiselect: select multiple after skip via SHIFT+CONTROL+UP", FALSE);
+    res = SendMessageA(hwnd, WM_KEYUP, VK_UP, 0);
+    expect(0, res);
+    res = SendMessageA(hwnd, LVM_GETSELECTEDCOUNT, 0, 0);
+    expect(3, res);
+
+    release_key(VK_CONTROL);
+    release_key(VK_SHIFT);
+
+    flush_sequences(sequences, NUM_MSG_SEQUENCES);
+
+    /* Deselect all items, select item 3 via UP */
+    res = SendMessageA(hwnd, WM_KEYDOWN, VK_UP, 0);
+    expect(0, res);
+    ok_sequence(sequences, PARENT_ODSTATECHANGED_SEQ_INDEX,
+                ownerdata_multiselect_select_0_odstatechanged_seq,
+                "ownerdata multiselect: deselect all, select item 0 via UP", FALSE);
+    res = SendMessageA(hwnd, WM_KEYUP, VK_UP, 0);
+    expect(0, res);
+    res = SendMessageA(hwnd, LVM_GETSELECTEDCOUNT, 0, 0);
+    expect(1, res);
+
     DestroyWindow(hwnd);
 }
 
-- 
2.36.1




More information about the wine-devel mailing list