[PATCH v4 1/7] Add more test cases to ownderdata listviews:
Angelo Haller
wine-devel at szanni.org
Tue Jun 28 16:16:06 CDT 2022
From: Angelo Haller <angelo at szanni.org>
- Check LVN_ITEMCHANGED IDs
- Multi select via key down while pressing SHIFT/SHIFT+CONTROL
- Single select via key up while pressing SHIFT/SHIFT+CONTROL
- Deselect via key down
Signed-off-by: Angelo Haller <angelo at szanni.org>
---
v4: Move some up/down key sequences from to 7/7 to account for 32KB
Debian log buffer limit.
v3: Add missing WM_KEYUP events. Add more combinations of up/down keys.
---
dlls/comctl32/tests/listview.c | 118 +++++++++++++++++++++++++++++----
1 file changed, 106 insertions(+), 12 deletions(-)
diff --git a/dlls/comctl32/tests/listview.c b/dlls/comctl32/tests/listview.c
index 6ac7f53137d..ec76984175f 100644
--- a/dlls/comctl32/tests/listview.c
+++ b/dlls/comctl32/tests/listview.c
@@ -255,11 +255,40 @@ static const struct message ownerdata_deselect_all_parent_seq[] = {
{ 0 }
};
-static const struct message ownerdata_multiselect_odstatechanged_seq[] = {
- { WM_NOTIFY, sent|id, 0, 0, LVN_ITEMCHANGED },
+static const struct message ownerdata_multiselect_select_0_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, 0, 0, LVN_ITEMCHANGED },
- { WM_NOTIFY, sent|id, 0, 0, LVN_ITEMCHANGED },
+ { WM_NOTIFY, sent|id|wparam, 0, 0, LVN_ITEMCHANGED },
+ { WM_NOTIFY, sent|id|wparam, 1, 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 },
+ { 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_move_0_to_1_odstatechanged_seq[] = {
+ { WM_NOTIFY, sent|id|wparam, 0, 0, LVN_ITEMCHANGED },
+ { WM_NOTIFY, sent|id|wparam, 1, 0, LVN_ITEMCHANGED },
+ { 0 }
+};
+
+static const struct message ownerdata_multiselect_select_0_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, 1, 0, LVN_ITEMCHANGED },
+ { WM_NOTIFY, sent|id|wparam, 2, 0, LVN_ITEMCHANGED },
+ { 0 }
+};
+
+static const struct message ownerdata_multiselect_select_3_odstatechanged_seq[] = {
+ { WM_NOTIFY, sent|id|wparam, -1, 0, LVN_ITEMCHANGED },
+ { WM_NOTIFY, sent|id|wparam, 2, 0, LVN_ITEMCHANGED },
+ { WM_NOTIFY, sent|id|wparam, 3, 0, LVN_ITEMCHANGED },
{ 0 }
};
@@ -3571,38 +3600,103 @@ static void test_ownerdata_multiselect(void)
flush_sequences(sequences, NUM_MSG_SEQUENCES);
+ /* Select multiple items via SHIFT+DOWN */
res = SendMessageA(hwnd, WM_KEYDOWN, VK_DOWN, 0);
expect(0, res);
-
ok_sequence(sequences, PARENT_ODSTATECHANGED_SEQ_INDEX,
- ownerdata_multiselect_odstatechanged_seq,
- "ownerdata select multiple notification", TRUE);
-
+ ownerdata_multiselect_select_0_to_1_odstatechanged_seq,
+ "ownerdata multiselect: select multiple via SHIFT+DOWN", TRUE);
res = SendMessageA(hwnd, WM_KEYUP, VK_DOWN, 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+UP */
+ res = SendMessageA(hwnd, WM_KEYDOWN, VK_UP, 0);
+ expect(0, res);
+ ok_sequence(sequences, PARENT_ODSTATECHANGED_SEQ_INDEX,
+ ownerdata_multiselect_select_0_modkey_odstatechanged_seq,
+ "ownerdata multiselect: select one via SHIFT+UP", TRUE);
+ res = SendMessageA(hwnd, WM_KEYUP, VK_UP, 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+DOWN */
res = SendMessageA(hwnd, WM_KEYDOWN, VK_DOWN, 0);
expect(0, res);
+ ok_sequence(sequences, PARENT_ODSTATECHANGED_SEQ_INDEX,
+ ownerdata_multiselect_select_0_to_1_odstatechanged_seq,
+ "ownerdata multiselect: select multiple via SHIFT+CONTROL+DOWN", TRUE);
+ res = SendMessageA(hwnd, WM_KEYUP, VK_DOWN, 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*UP */
+ res = SendMessageA(hwnd, WM_KEYDOWN, VK_UP, 0);
+ expect(0, res);
+ ok_sequence(sequences, PARENT_ODSTATECHANGED_SEQ_INDEX,
+ ownerdata_multiselect_select_0_modkey_odstatechanged_seq,
+ "ownerdata multiselect: select one via SHIFT+CONTROL+UP", TRUE);
+ res = SendMessageA(hwnd, WM_KEYUP, VK_UP, 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+DOWN */
+ res = SendMessageA(hwnd, WM_KEYDOWN, VK_DOWN, 0);
+ expect(0, res);
ok_sequence(sequences, PARENT_ODSTATECHANGED_SEQ_INDEX,
- ownerdata_multiselect_odstatechanged_seq,
- "ownerdata select multiple notification", TRUE);
+ ownerdata_multiselect_move_0_to_1_odstatechanged_seq,
+ "ownerdata multiselect: keep selection but move cursor via CONTROL+DOWN", FALSE);
+ res = SendMessageA(hwnd, WM_KEYUP, VK_DOWN, 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_DOWN, 0);
+ expect(0, res);
+ ok_sequence(sequences, PARENT_ODSTATECHANGED_SEQ_INDEX,
+ ownerdata_multiselect_select_0_to_2_odstatechanged_seq,
+ "ownerdata multiselect: select multiple after skip via SHIFT+CONTROL+DOWN", TRUE);
res = SendMessageA(hwnd, WM_KEYUP, VK_DOWN, 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 DOWN */
+ res = SendMessageA(hwnd, WM_KEYDOWN, VK_DOWN, 0);
+ expect(0, res);
+ ok_sequence(sequences, PARENT_ODSTATECHANGED_SEQ_INDEX,
+ ownerdata_multiselect_select_3_odstatechanged_seq,
+ "ownerdata multiselect: deselect all, select item 3 via DOWN", TRUE);
+ res = SendMessageA(hwnd, WM_KEYUP, VK_DOWN, 0);
+ expect(0, res);
res = SendMessageA(hwnd, LVM_GETSELECTEDCOUNT, 0, 0);
- expect(3, res);
+ expect(1, res);
DestroyWindow(hwnd);
}
--
2.36.1
More information about the wine-devel
mailing list