New conformance test: listbox behaviour
Ferenc Wagner
wferi at tba.elte.hu
Mon Apr 21 10:16:14 CDT 2003
Check the meaning of the LBS_NOSEL attribute on standard and
multiple selection list boxes. ALEPH depends on part of it.
Changed file: dlls/user/tests/Makefile.in
New file: dlls/user/tests/listbox.c
Index: dlls/user/tests/Makefile.in
===================================================================
RCS file: /home/wine/wine/dlls/user/tests/Makefile.in,v
retrieving revision 1.3
diff -u -r1.3 Makefile.in
--- dlls/user/tests/Makefile.in 2 Oct 2002 19:58:28 -0000 1.3
+++ dlls/user/tests/Makefile.in 21 Apr 2003 15:12:02 -0000
@@ -8,6 +8,7 @@
CTESTS = \
class.c \
generated.c \
+ listbox.c \
sysparams.c \
win.c \
wsprintf.c
New file:
--- /dev/null Fri Mar 29 18:19:48 2002
+++ dlls/user/tests/listbox.c Mon Apr 21 17:11:35 2003
@@ -0,0 +1,162 @@
+#include <wine/test.h>
+#include <windows.h>
+#include <assert.h>
+
+#ifdef VISIBLE
+/* #include <unistd.h> */
+#ifdef WIN32
+#define WAIT sleep (1000)
+#else /* WIN32 */
+#define WAIT sleep (1)
+#endif /* WIN32 */
+#define REDRAW assert (RedrawWindow (handle, NULL, 0, RDW_UPDATENOW))
+#else /*VISIBLE */
+#define WAIT
+#define REDRAW
+#endif /* VISIBLE */
+
+HWND
+create_listbox (DWORD add_style)
+{
+ HWND handle=CreateWindow ("LISTBOX", "TestList",
+ (LBS_STANDARD & ~LBS_SORT) | add_style,
+ 0, 0, 100, 100,
+ NULL, NULL, NULL, 0);
+
+ assert (handle);
+ assert (0==SendMessage (handle, LB_ADDSTRING, 0,
+ (LPARAM) (LPCTSTR) "First added"));
+ assert (1==SendMessage (handle, LB_ADDSTRING, 0,
+ (LPARAM) (LPCTSTR) "Second added"));
+ assert (2==SendMessage (handle, LB_ADDSTRING, 0,
+ (LPARAM) (LPCTSTR) "Third added"));
+
+#ifdef VISIBLE
+ assert (!ShowWindow (handle, SW_SHOW));
+#endif
+ REDRAW;
+
+ return handle;
+}
+
+struct listbox_prop {
+ DWORD add_style;
+};
+
+struct listbox_stat {
+ int selected, anchor, caret, selcount;
+};
+
+struct listbox_test {
+ struct listbox_prop prop;
+ struct listbox_stat init, init_todo;
+ struct listbox_stat click, click_todo;
+ struct listbox_stat step, step_todo;
+};
+
+void
+listbox_query (HWND handle, struct listbox_stat *results)
+{
+ results->selected = SendMessage (handle, LB_GETCURSEL, 0, 0);
+ results->anchor = SendMessage (handle, LB_GETANCHORINDEX, 0, 0);
+ results->caret = SendMessage (handle, LB_GETCARETINDEX, 0, 0);
+ results->selcount = SendMessage (handle, LB_GETSELCOUNT, 0, 0);
+}
+
+void
+buttonpress (HWND handle, WORD x, WORD y)
+{
+ LPARAM lp=x+(y<<16);
+
+ WAIT;
+ assert (!SendMessage (handle, WM_LBUTTONDOWN, (WPARAM) MK_LBUTTON, lp));
+ assert (!SendMessage (handle, WM_LBUTTONUP , (WPARAM) 0 , lp));
+ REDRAW;
+}
+
+void
+keypress (HWND handle, WPARAM keycode, BYTE scancode, BOOL extended)
+{
+ LPARAM lp=1+(scancode<<16)+(extended?KEYEVENTF_EXTENDEDKEY:0);
+
+ WAIT;
+ assert (!SendMessage (handle, WM_KEYDOWN, keycode, lp));
+ assert (!SendMessage (handle, WM_KEYUP , keycode, lp | 0xc000000));
+ REDRAW;
+}
+
+#define listbox_field_ok(t, s, f, got) \
+ ok (t.s.f==got.f, "style %#x, step " #s ", field " #f \
+ ": expected %d, got %d", (unsigned int)t.prop.add_style, \
+ t.s.f, got.f)
+
+#define listbox_todo_field_ok(t, s, f, got) \
+ if (t.s##_todo.f) todo_wine { listbox_field_ok(t, s, f, got); } \
+ else listbox_field_ok(t, s, f, got)
+
+#define listbox_ok(t, s, got) \
+ listbox_todo_field_ok(t, s, selected, got); \
+ listbox_todo_field_ok(t, s, anchor, got); \
+ listbox_todo_field_ok(t, s, caret, got); \
+ listbox_todo_field_ok(t, s, selcount, got)
+
+void
+check (const struct listbox_test test)
+{
+ struct listbox_stat answer;
+ HWND hLB=create_listbox (test.prop.add_style);
+ RECT second_item;
+
+ listbox_query (hLB, &answer);
+ listbox_ok (test, init, answer);
+
+ assert (SendMessage (hLB, LB_GETITEMRECT, (WPARAM) 1,
+ (LPARAM) &second_item));
+ buttonpress(hLB, (WORD)second_item.left, (WORD)second_item.top);
+
+ listbox_query (hLB, &answer);
+ listbox_ok (test, click, answer);
+
+ keypress (hLB, VK_DOWN, 0x50, TRUE);
+
+ listbox_query (hLB, &answer);
+ listbox_ok (test, step, answer);
+
+ WAIT;
+ assert (DestroyWindow (hLB));
+}
+
+START_TEST(listbox)
+{
+ const struct listbox_test SS =
+/* {add_style} */
+ {{0},
+ {LB_ERR, LB_ERR, 0, LB_ERR}, {0,0,0,0},
+ { 1, 1, 1, LB_ERR}, {0,1,0,0},
+ { 2, 2, 2, LB_ERR}, {0,1,0,0}};
+/* {selected, anchor, caret, selcount}{TODO fields} */
+ const struct listbox_test SS_NS =
+ {{LBS_NOSEL},
+ {LB_ERR, LB_ERR, 0, LB_ERR}, {0,0,0,0},
+ { 1, 1, 1, LB_ERR}, {1,1,0,0},
+ { 2, 2, 2, LB_ERR}, {1,1,1,0}};
+ const struct listbox_test MS =
+ {{LBS_MULTIPLESEL},
+ { 0, LB_ERR, 0, 0}, {0,0,0,0},
+ { 1, 1, 1, 1}, {0,1,0,0},
+ { 2, 1, 2, 1}, {0,1,0,1}};
+ const struct listbox_test MS_NS =
+ {{LBS_MULTIPLESEL | LBS_NOSEL},
+ {LB_ERR, LB_ERR, 0, LB_ERR}, {1,0,0,1},
+ { 1, 1, 1, LB_ERR}, {0,1,0,1},
+ { 2, 2, 2, LB_ERR}, {0,1,0,1}};
+
+ trace (" Testing single selection...\n");
+ check (SS);
+ trace (" ... with NOSEL\n");
+ check (SS_NS);
+ trace (" Testing multiple selection...\n");
+ check (MS);
+ trace (" ... with NOSEL\n");
+ check (MS_NS);
+}
More information about the wine-patches
mailing list