Conformance test for multiple selection in listbox.
Tomasz Jezierski - Tefnet
developers at tefnet.pl
Mon May 19 09:17:22 CDT 2008
---
dlls/comctl32/tests/listview.c | 76 ++++++++++++++++++++++++++++++++++++++++
1 files changed, 76 insertions(+), 0 deletions(-)
diff --git a/dlls/comctl32/tests/listview.c b/dlls/comctl32/tests/listview.c
index 91f9d00..47280e0 100644
--- a/dlls/comctl32/tests/listview.c
+++ b/dlls/comctl32/tests/listview.c
@@ -1127,6 +1127,81 @@ static void test_getorigin(void)
}
+static void test_multiselect(void)
+{
+ typedef struct t_select_task
+ {
+ const char *descr;
+ int initPos;
+ int loopVK;
+ int count;
+ int result;
+ } select_task;
+
+ HWND hwnd;
+ DWORD r;
+ int i,j,item_count,selected_count;
+ static const int items=5;
+ static BYTE kstate[256];
+ select_task task;
+
+ static struct t_select_task task_list[] = {
+ { "using VK_DOWN", 0, VK_DOWN, -1, -1 },
+ { "using VK_UP", -1, VK_UP, -1, -1 },
+ { "using VK_END", 0, VK_END, 1, -1 },
+ { "using VK_HOME", -1, VK_HOME, 1, -1 }
+ };
+
+
+ hwnd = create_listview_control();
+
+ for (i=0;i<items;i++) {
+ insert_item(hwnd, 0);
+ }
+
+ item_count = (int)SendMessage(hwnd, LVM_GETITEMCOUNT, 0, 0);
+
+ expect(items,item_count);
+
+ for (i=0;i<4;i++) {
+ task = task_list[i];
+
+ /* deselect all items */
+ ListView_SetItemState(hwnd, -1, 0, LVIS_SELECTED);
+ SendMessage(hwnd, LVM_SETSELECTIONMARK, 0, -1);
+
+ /* set initial position */
+ SendMessage(hwnd, LVM_SETSELECTIONMARK, 0, (task.initPos == -1 ? item_count : task.initPos));
+ ListView_SetItemState(hwnd,(task.initPos == -1 ? item_count -1 : task.initPos),LVIS_SELECTED ,LVIS_SELECTED);
+
+ selected_count = (int)SendMessage(hwnd, LVM_GETSELECTEDCOUNT, 0, 0);
+
+ ok(selected_count == 1, "There should be only one selected item at the begining (is %d)\n",selected_count);
+
+ /* Set SHIFT key pressed */
+ GetKeyboardState(kstate);
+ kstate[VK_SHIFT]=0x80;
+ SetKeyboardState(kstate);
+
+ for (j=1;j<=(task.count == -1 ? item_count : task.count);j++) {
+ r = SendMessage(hwnd, WM_KEYDOWN, task.loopVK, 0);
+ expect(0,r);
+ r = SendMessage(hwnd, WM_KEYUP, task.loopVK, 0);
+ expect(0,r);
+ }
+
+ selected_count = (int)SendMessage(hwnd, LVM_GETSELECTEDCOUNT, 0, 0);
+
+ ok((task.result == -1 ? item_count : task.result) == selected_count, "Failed multiple selection %s. There should be %d selected items (is %d)\n", task.descr, item_count, selected_count);
+
+ /* Set SHIFT key released */
+ GetKeyboardState(kstate);
+ kstate[VK_SHIFT]=0x00;
+ SetKeyboardState(kstate);
+ }
+ DestroyWindow(hwnd);
+}
+
START_TEST(listview)
{
HMODULE hComctl32;
@@ -1163,4 +1238,5 @@ START_TEST(listview)
test_item_position();
test_columns();
test_getorigin();
+ test_multiselect();
}
--
1.5.3.7
--=-569XpX4eh1VJyY/RspbV--
More information about the wine-patches
mailing list