[PATCH 3/6] comctl32/tests: Run Header format mask tests on version 6

Nikolay Sivov nsivov at codeweavers.com
Mon Jan 29 05:20:39 CST 2018


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/comctl32/tests/header.c | 111 ++++++++++++++++++++++++++-----------------
 1 file changed, 67 insertions(+), 44 deletions(-)

diff --git a/dlls/comctl32/tests/header.c b/dlls/comctl32/tests/header.c
index 31610f0c9a..7ea80519a6 100644
--- a/dlls/comctl32/tests/header.c
+++ b/dlls/comctl32/tests/header.c
@@ -535,58 +535,79 @@ static HWND create_custom_header_control(HWND hParent, BOOL preloadHeaderItems)
     return childHandle;
 }
 
-static void check_auto_format(void)
+static void header_item_getback(HWND hwnd, UINT mask, HDITEMA *item)
 {
-    HDITEMA hdiCreate;
-    HDITEMA hdiRead;
-    static CHAR text[] = "Test";
-    ZeroMemory(&hdiCreate, sizeof(HDITEMA));
+    int ret;
 
-    /* Windows implicitly sets some format bits in INSERTITEM */
+    ret = SendMessageA(hwnd, HDM_INSERTITEMA, 0, (LPARAM)item);
+    ok(ret != -1, "Failed to add header item.\n");
 
-    /* HDF_STRING is automatically set and cleared for no text */
-    hdiCreate.mask = HDI_TEXT|HDI_WIDTH|HDI_FORMAT;
-    hdiCreate.pszText = text;
-    hdiCreate.cxy = 100;
-    hdiCreate.fmt=HDF_CENTER;
-    addReadDelItem(hWndHeader, &hdiCreate, HDI_FORMAT, &hdiRead);
-    ok(hdiRead.fmt == (HDF_STRING|HDF_CENTER), "HDF_STRING not set automatically (fmt=%x)\n", hdiRead.fmt);
+    memset(item, 0, sizeof(*item));
+    item->mask = mask;
 
-    hdiCreate.mask = HDI_WIDTH|HDI_FORMAT;
-    hdiCreate.pszText = text;
-    hdiCreate.fmt = HDF_CENTER|HDF_STRING;
-    addReadDelItem(hWndHeader, &hdiCreate, HDI_FORMAT, &hdiRead);
-    ok(hdiRead.fmt == (HDF_CENTER), "HDF_STRING should be automatically cleared (fmt=%x)\n", hdiRead.fmt);
+    ret = SendMessageA(hwnd, HDM_GETITEMA, 0, (LPARAM)item);
+    ok(ret != 0, "Failed to get item data.\n");
+    ret = SendMessageA(hwnd, HDM_DELETEITEM, 0, 0);
+    ok(ret != 0, "Failed to delete item.\n");
+}
 
-    /* HDF_BITMAP is automatically set and cleared for a NULL bitmap or no bitmap */
-    hdiCreate.mask = HDI_BITMAP|HDI_WIDTH|HDI_FORMAT;
-    hdiCreate.hbm = CreateBitmap(16, 16, 1, 8, NULL);
-    hdiCreate.fmt = HDF_CENTER;
-    addReadDelItem(hWndHeader, &hdiCreate, HDI_FORMAT, &hdiRead);
-    ok(hdiRead.fmt == (HDF_BITMAP|HDF_CENTER), "HDF_BITMAP not set automatically (fmt=%x)\n", hdiRead.fmt);
-    DeleteObject(hdiCreate.hbm);
+static void test_item_auto_format(HWND parent)
+{
+    static char text[] = "Test";
+    HDITEMA item;
+    HBITMAP hbm;
+    HWND hwnd;
 
-    hdiCreate.hbm = NULL;
-    hdiCreate.fmt = HDF_CENTER|HDF_BITMAP;
-    addReadDelItem(hWndHeader, &hdiCreate, HDI_FORMAT, &hdiRead);
-    ok(hdiRead.fmt == HDF_CENTER, "HDF_BITMAP not cleared automatically for NULL bitmap (fmt=%x)\n", hdiRead.fmt);
+    hwnd = create_custom_header_control(parent, FALSE);
 
-    hdiCreate.mask = HDI_WIDTH|HDI_FORMAT;
-    hdiCreate.fmt = HDF_CENTER|HDF_BITMAP;
-    addReadDelItem(hWndHeader, &hdiCreate, HDI_FORMAT, &hdiRead);
-    ok(hdiRead.fmt == HDF_CENTER, "HDF_BITMAP not cleared automatically for no bitmap (fmt=%x)\n", hdiRead.fmt);
+    /* Windows implicitly sets some format bits in INSERTITEM */
+
+    /* HDF_STRING is automatically set and cleared for no text */
+    item.mask = HDI_TEXT | HDI_WIDTH | HDI_FORMAT;
+    item.pszText = text;
+    item.cxy = 100;
+    item.fmt = HDF_CENTER;
+    header_item_getback(hwnd, HDI_FORMAT, &item);
+    ok(item.fmt == (HDF_STRING | HDF_CENTER), "Unexpected item format mask %#x.\n", item.fmt);
+
+    item.mask = HDI_WIDTH | HDI_FORMAT;
+    item.pszText = text;
+    item.fmt = HDF_CENTER | HDF_STRING;
+    header_item_getback(hwnd, HDI_FORMAT, &item);
+    ok(item.fmt == HDF_CENTER, "Unexpected item format mask %#x.\n", item.fmt);
+
+    /* HDF_BITMAP is automatically set and cleared for a NULL bitmap or no bitmap */
+    item.mask = HDI_BITMAP | HDI_WIDTH | HDI_FORMAT;
+    item.hbm = hbm = CreateBitmap(16, 16, 1, 8, NULL);
+    item.fmt = HDF_CENTER;
+    header_item_getback(hwnd, HDI_FORMAT, &item);
+    ok(item.fmt == (HDF_BITMAP | HDF_CENTER), "Unexpected item format mask %#x.\n", item.fmt);
+    DeleteObject(hbm);
+
+    item.mask = HDI_BITMAP | HDI_WIDTH | HDI_FORMAT;
+    item.hbm = NULL;
+    item.fmt = HDF_CENTER | HDF_BITMAP;
+    header_item_getback(hwnd, HDI_FORMAT, &item);
+    ok(item.fmt == HDF_CENTER, "Unexpected item format mask %#x.\n", item.fmt);
+
+    item.mask = HDI_WIDTH | HDI_FORMAT;
+    item.fmt = HDF_CENTER | HDF_BITMAP;
+    header_item_getback(hwnd, HDI_FORMAT, &item);
+    ok(item.fmt == HDF_CENTER, "Unexpected item format mask %#x.\n", item.fmt);
 
     /* HDF_IMAGE is automatically set but not cleared */
-    hdiCreate.mask = HDI_IMAGE|HDI_WIDTH|HDI_FORMAT;
-    hdiCreate.iImage = 17;
-    addReadDelItem(hWndHeader, &hdiCreate, HDI_FORMAT, &hdiRead);
-    ok(hdiRead.fmt == (HDF_IMAGE|HDF_CENTER), "HDF_IMAGE not set automatically (fmt=%x)\n", hdiRead.fmt);
+    item.mask = HDI_IMAGE | HDI_WIDTH | HDI_FORMAT;
+    item.iImage = 17;
+    header_item_getback(hwnd, HDI_FORMAT, &item);
+    ok(item.fmt == (HDF_IMAGE | HDF_CENTER), "Unexpected item format mask %#x.\n", item.fmt);
 
-    hdiCreate.mask = HDI_WIDTH|HDI_FORMAT;
-    hdiCreate.fmt = HDF_CENTER|HDF_IMAGE;
-    hdiCreate.iImage = 0;
-    addReadDelItem(hWndHeader, &hdiCreate, HDI_FORMAT, &hdiRead);
-    ok(hdiRead.fmt == (HDF_CENTER|HDF_IMAGE), "HDF_IMAGE shouldn't be cleared automatically (fmt=%x)\n", hdiRead.fmt);
+    item.mask = HDI_WIDTH | HDI_FORMAT;
+    item.fmt = HDF_CENTER | HDF_IMAGE;
+    item.iImage = 0;
+    header_item_getback(hwnd, HDI_FORMAT, &item);
+    ok(item.fmt == (HDF_CENTER | HDF_IMAGE), "Unexpected item format mask %#x.\n", item.fmt);
+
+    DestroyWindow(hwnd);
 }
 
 static void check_auto_fields(void)
@@ -768,7 +789,6 @@ static void test_header_control (void)
     /* unexpected notifies cleared by notifies_received in setItem */
     delItem(hWndHeader, 0);
 
-    check_auto_format();
     TEST_GET_ITEMCOUNT(6);
     check_auto_fields();
     TEST_GET_ITEMCOUNT(6);
@@ -1820,18 +1840,20 @@ START_TEST(header)
     HANDLE hCtx;
 
     init_functions();
+    init_msg_sequences(sequences, NUM_MSG_SEQUENCES);
 
     if (!init())
         return;
 
     test_header_control();
+    test_item_auto_format(hHeaderParentWnd);
     test_header_order();
     test_hdm_orderarray();
     test_customdraw();
 
     DestroyWindow(hHeaderParentWnd);
 
-    init_msg_sequences(sequences, NUM_MSG_SEQUENCES);
+    flush_sequences(sequences, NUM_MSG_SEQUENCES);
     parent_hwnd = create_custom_parent_window();
     ok_sequence(sequences, PARENT_SEQ_INDEX, create_parent_wnd_seq, "create parent windows", FALSE);
 
@@ -1857,6 +1879,7 @@ START_TEST(header)
     /* comctl32 version 6 tests start here */
     test_hdf_fixedwidth(parent_hwnd);
     test_hds_nosizing(parent_hwnd);
+    test_item_auto_format(parent_hwnd);
 
     unload_v6_module(ctx_cookie, hCtx);
 
-- 
2.15.1




More information about the wine-devel mailing list