[PATCH v2 8/8] comctl32/tests: Add tests for LBS_NODATA listboxes

Gabriel Ivăncescu gabrielopcode at gmail.com
Tue Nov 6 05:31:00 CST 2018


Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
---

The last batch of tests that should prove the previous patches' behavior
matches Windows.

 dlls/comctl32/tests/listbox.c | 99 ++++++++++++++++++++++++++++++-----
 1 file changed, 87 insertions(+), 12 deletions(-)

diff --git a/dlls/comctl32/tests/listbox.c b/dlls/comctl32/tests/listbox.c
index e7777d1..a84adb2 100644
--- a/dlls/comctl32/tests/listbox.c
+++ b/dlls/comctl32/tests/listbox.c
@@ -167,10 +167,10 @@ static void keypress(HWND handle, WPARAM keycode, BYTE scancode, BOOL extended)
   listbox_todo_field_ok(t, s, caret, got); \
   listbox_todo_field_ok(t, s, selcount, got)
 
-static void run_test(const struct listbox_test test)
+static void run_test(const struct listbox_test test, DWORD extra_styles)
 {
     struct listbox_stat answer;
-    HWND hLB=create_listbox (test.prop.add_style, 0);
+    HWND hLB=create_listbox (test.prop.add_style | extra_styles, 0);
     RECT second_item;
     int i, res;
 
@@ -190,13 +190,13 @@ static void run_test(const struct listbox_test test)
 
     DestroyWindow(hLB);
 
-    hLB = create_listbox(test.prop.add_style, 0);
+    hLB = create_listbox(test.prop.add_style | extra_styles, 0);
 
     SendMessageA(hLB, LB_SELITEMRANGE, TRUE, MAKELPARAM(1, 2));
     listbox_query(hLB, &answer);
     listbox_ok(test, sel, answer);
 
-    for (i = 0; i < 4; i++)
+    if (!(extra_styles & LBS_NODATA)) for (i = 0; i < 4; i++)
     {
         DWORD size = SendMessageA(hLB, LB_GETTEXTLEN, i, 0);
         int resA, resW;
@@ -1809,6 +1809,71 @@ static void test_nodata_invalid_styles( void )
     DestroyWindow(parent);
 }
 
+static void test_nodata( void )
+{
+    static const UINT invalid_idx[] = { -2, 2 };
+    static const UINT valid_idx[] = { 0, 1 };
+    HWND listbox;
+    DWORD_PTR data;
+    INT i, ret;
+
+    listbox = CreateWindowA(WC_LISTBOXA, "TestList", LBS_NODATA | LBS_OWNERDRAWFIXED | WS_VISIBLE,
+                            0, 0, 100, 100, NULL, NULL, NULL, 0);
+    ok(listbox != NULL, "last error 0x%08x\n", GetLastError());
+    if (!listbox) return;
+
+    ret = SendMessageA(listbox, LB_INSERTSTRING, -1, 0);
+    ok(ret == 0, "expected 0, got %d\n", ret);
+    ret = SendMessageA(listbox, LB_INSERTSTRING, -1, 0);
+    ok(ret == 1, "expected 1, got %d\n", ret);
+    ret = SendMessageA(listbox, LB_GETCOUNT, 0, 0);
+    ok(ret == 2, "Expected 2 items, got %d\n", ret);
+
+    /* try invalid indices */
+    for (i = 0; i < ARRAY_SIZE(invalid_idx); i++)
+    {
+        ret = SendMessageA(listbox, LB_SETITEMDATA, invalid_idx[i], 42);
+        ok(ret == LB_ERR, "got %d\n", ret);
+        ret = SendMessageA(listbox, LB_GETTEXTLEN, invalid_idx[i], 0);
+        ok(ret == LB_ERR, "got %d\n", ret);
+        if (ret == LB_ERR)
+        {
+            ret = SendMessageA(listbox, LB_GETTEXT, invalid_idx[i], (LPARAM)&data);
+            ok(ret == LB_ERR, "got %d\n", ret);
+        }
+        ret = SendMessageA(listbox, LB_GETITEMDATA, invalid_idx[i], 0);
+        ok(ret == LB_ERR, "got %d\n", ret);
+    }
+
+    /* valid indices should always retreive zeros */
+    for (i = 0; i < ARRAY_SIZE(valid_idx); i++)
+    {
+        ret = SendMessageA(listbox, LB_SETITEMDATA, valid_idx[i], 42);
+        ok(ret == TRUE, "got %d\n", ret);
+        ret = SendMessageA(listbox, LB_GETTEXTLEN, valid_idx[i], 0);
+        ok(ret <= sizeof(data), "got %d\n", ret);
+        if (ret <= sizeof(data))
+        {
+            data = 0xdeadbeef;
+            ret = SendMessageA(listbox, LB_GETTEXT, valid_idx[i], (LPARAM)&data);
+            ok(ret <= sizeof(data), "got %d\n", ret);
+            ok(data == 0, "LB_GETTEXT should retrieve 0 with LBS_NODATA, got 0x%lx\n", data);
+        }
+        ret = SendMessageA(listbox, LB_GETITEMDATA, valid_idx[i], 0);
+        ok(ret == 0, "LB_GETDATA should return 0 with LBS_NODATA, got %d\n", ret);
+    }
+
+    /* test more invalid messages with LBS_NODATA */
+    ret = SendMessageA(listbox, LB_FINDSTRING, 1, 42);
+    ok(ret == LB_ERR, "got %d\n", ret);
+    ret = SendMessageA(listbox, LB_FINDSTRINGEXACT, 1, 42);
+    ok(ret == LB_ERR, "got %d\n", ret);
+    ret = SendMessageA(listbox, LB_SELECTSTRING, 1, 42);
+    ok(ret == LB_ERR, "got %d\n", ret);
+
+    DestroyWindow(listbox);
+}
+
 static int lb_getlistboxinfo;
 
 static LRESULT WINAPI listbox_subclass_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
@@ -2104,14 +2169,23 @@ static void test_listbox(void)
          {     2,      2,      2, LB_ERR}, {0,0,0,0},
          {LB_ERR, LB_ERR,      0, LB_ERR}, {0,0,0,0}};
 
-    run_test(SS);
-    run_test(SS_NS);
-    run_test(MS);
-    run_test(MS_NS);
-    run_test(ES);
-    run_test(ES_NS);
-    run_test(EMS);
-    run_test(EMS_NS);
+    run_test(SS, 0);
+    run_test(SS_NS, 0);
+    run_test(MS, 0);
+    run_test(MS_NS, 0);
+    run_test(ES, 0);
+    run_test(ES_NS, 0);
+    run_test(EMS, 0);
+    run_test(EMS_NS, 0);
+
+    run_test(SS, LBS_NODATA | LBS_OWNERDRAWFIXED);
+    run_test(SS_NS, LBS_NODATA | LBS_OWNERDRAWFIXED);
+    run_test(MS, LBS_NODATA | LBS_OWNERDRAWFIXED);
+    run_test(MS_NS, LBS_NODATA | LBS_OWNERDRAWFIXED);
+    run_test(ES, LBS_NODATA | LBS_OWNERDRAWFIXED);
+    run_test(ES_NS, LBS_NODATA | LBS_OWNERDRAWFIXED);
+    run_test(EMS, LBS_NODATA | LBS_OWNERDRAWFIXED);
+    run_test(EMS_NS, LBS_NODATA | LBS_OWNERDRAWFIXED);
 }
 
 static const struct message lb_addstring_ownerdraw_parent_seq[] =
@@ -2252,6 +2326,7 @@ START_TEST(listbox)
     test_listbox_dlgdir();
     test_set_count();
     test_nodata_invalid_styles();
+    test_nodata();
     test_GetListBoxInfo();
     test_missing_lbuttonup();
     test_extents();
-- 
2.19.1




More information about the wine-devel mailing list