diff --git a/reactos/regtests/winetests/comctl32/comboex.c b/reactos/regtests/winetests/comctl32/comboex.c index 1d10b39cd62..106a80e9021 100644 --- a/reactos/regtests/winetests/comctl32/comboex.c +++ b/reactos/regtests/winetests/comctl32/comboex.c @@ -72,12 +72,14 @@ static void test_comboboxex(void) { HWND myHwnd = 0; LONG res = -1; COMBOBOXEXITEM cbexItem; - -#define FIRST_ITEM "First Item" -#define SECOND_ITEM "Second Item" -#define THIRD_ITEM "Third Item" -#define MIDDLE_ITEM "Between First and Second Items" -#define REPLACEMENT_ITEM "Between First and Second Items" + static TCHAR first_item[] = {'F','i','r','s','t',' ','I','t','e','m',0}, + second_item[] = {'S','e','c','o','n','d',' ','I','t','e','m',0}, + third_item[] = {'T','h','i','r','d',' ','I','t','e','m',0}, + middle_item[] = {'B','e','t','w','e','e','n',' ','F','i','r','s','t',' ','a','n','d',' ', + 'S','e','c','o','n','d',' ','I','t','e','m','s',0}, + replacement_item[] = {'B','e','t','w','e','e','n',' ','F','i','r','s','t',' ','a','n','d',' ', + 'S','e','c','o','n','d',' ','I','t','e','m','s',0}, + out_of_range_item[] = {'O','u','t',' ','o','f',' ','R','a','n','g','e',' ','I','t','e','m',0}; /* Allocate space for result */ textBuffer = malloc(MAX_CHARS); @@ -86,19 +88,19 @@ static void test_comboboxex(void) { myHwnd = createComboEx(WS_BORDER | WS_VISIBLE | WS_CHILD | CBS_DROPDOWN); /* Add items onto the end of the combobox */ - res = addItem(myHwnd, -1, FIRST_ITEM); + res = addItem(myHwnd, -1, first_item); ok(res == 0, "Adding simple item failed (%ld)\n", res); - res = addItem(myHwnd, -1, SECOND_ITEM); + res = addItem(myHwnd, -1, second_item); ok(res == 1, "Adding simple item failed (%ld)\n", res); - res = addItem(myHwnd, 2, THIRD_ITEM); + res = addItem(myHwnd, 2, third_item); ok(res == 2, "Adding simple item failed (%ld)\n", res); - res = addItem(myHwnd, 1, MIDDLE_ITEM); + res = addItem(myHwnd, 1, middle_item); ok(res == 1, "Inserting simple item failed (%ld)\n", res); /* Add an item completely out of range */ - res = addItem(myHwnd, 99, "Out Of Range Item"); + res = addItem(myHwnd, 99, out_of_range_item); ok(res == -1, "Adding using out of range index worked unexpectedly (%ld)\n", res); - res = addItem(myHwnd, 5, "Out Of Range Item"); + res = addItem(myHwnd, 5, out_of_range_item); ok(res == -1, "Adding using out of range index worked unexpectedly (%ld)\n", res); /* Removed: Causes traps on Windows XP res = addItem(myHwnd, -2, "Out Of Range Item"); @@ -116,32 +118,32 @@ static void test_comboboxex(void) { /* Get an item in range */ res = getItem(myHwnd, 0, &cbexItem); ok(res != 0, "Getting item using valid index failed unexpectedly (%ld)\n", res); - ok(strcmp(FIRST_ITEM, cbexItem.pszText) == 0, "Getting item returned wrong string (%s)\n", cbexItem.pszText); + ok(strcmp(first_item, cbexItem.pszText) == 0, "Getting item returned wrong string (%s)\n", cbexItem.pszText); res = getItem(myHwnd, 1, &cbexItem); ok(res != 0, "Getting item using valid index failed unexpectedly (%ld)\n", res); - ok(strcmp(MIDDLE_ITEM, cbexItem.pszText) == 0, "Getting item returned wrong string (%s)\n", cbexItem.pszText); + ok(strcmp(middle_item, cbexItem.pszText) == 0, "Getting item returned wrong string (%s)\n", cbexItem.pszText); res = getItem(myHwnd, 2, &cbexItem); ok(res != 0, "Getting item using valid index failed unexpectedly (%ld)\n", res); - ok(strcmp(SECOND_ITEM, cbexItem.pszText) == 0, "Getting item returned wrong string (%s)\n", cbexItem.pszText); + ok(strcmp(second_item, cbexItem.pszText) == 0, "Getting item returned wrong string (%s)\n", cbexItem.pszText); res = getItem(myHwnd, 3, &cbexItem); ok(res != 0, "Getting item using valid index failed unexpectedly (%ld)\n", res); - ok(strcmp(THIRD_ITEM, cbexItem.pszText) == 0, "Getting item returned wrong string (%s)\n", cbexItem.pszText); + ok(strcmp(third_item, cbexItem.pszText) == 0, "Getting item returned wrong string (%s)\n", cbexItem.pszText); /* Set an item completely out of range */ - res = setItem(myHwnd, 99, REPLACEMENT_ITEM); + res = setItem(myHwnd, 99, replacement_item); ok(res == 0, "Setting item using out of range index worked unexpectedly (%ld)\n", res); - res = setItem(myHwnd, 4, REPLACEMENT_ITEM); + res = setItem(myHwnd, 4, replacement_item); ok(res == 0, "Setting item using out of range index worked unexpectedly (%ld)\n", res); - res = setItem(myHwnd, -2, REPLACEMENT_ITEM); + res = setItem(myHwnd, -2, replacement_item); ok(res == 0, "Setting item using out of range index worked unexpectedly (%ld)\n", res); /* Set an item in range */ - res = setItem(myHwnd, 0, REPLACEMENT_ITEM); + res = setItem(myHwnd, 0, replacement_item); ok(res != 0, "Setting first item failed (%ld)\n", res); - res = setItem(myHwnd, 3, REPLACEMENT_ITEM); + res = setItem(myHwnd, 3, replacement_item); ok(res != 0, "Setting last item failed (%ld)\n", res); /* Remove items completely out of range (4 items in control at this point) */ diff --git a/reactos/regtests/winetests/comctl32/header.c b/reactos/regtests/winetests/comctl32/header.c index 65038cef1ee..0084a71ec28 100644 --- a/reactos/regtests/winetests/comctl32/header.c +++ b/reactos/regtests/winetests/comctl32/header.c @@ -56,7 +56,7 @@ static void dont_expect_notify(INT iCode) unexpectedNotify[nUnexpectedNotify++] = iCode; } -static BOOL notifies_received() +static BOOL notifies_received(void) { BOOL fRet = (nExpectedNotify == nReceivedNotify); nExpectedNotify = nReceivedNotify = 0; @@ -323,7 +323,7 @@ static void check_auto_fields(void) /* field from comctl >4.0 not tested as the system probably won't touch them */ } -static void check_mask() +static void check_mask(void) { HDITEMA hdi; static CHAR text[] = "ABC"; diff --git a/reactos/regtests/winetests/comctl32/listview.c b/reactos/regtests/winetests/comctl32/listview.c index c929ed554c2..dd99df9e588 100644 --- a/reactos/regtests/winetests/comctl32/listview.c +++ b/reactos/regtests/winetests/comctl32/listview.c @@ -24,19 +24,15 @@ #include "wine/test.h" -START_TEST(listview) +static void test_images(void) { HWND hwnd, hwndparent = 0; - INITCOMMONCONTROLSEX icc; DWORD r; LVITEM item; HIMAGELIST himl; HBITMAP hbmp; RECT r1, r2; - - icc.dwICC = 0; - icc.dwSize = sizeof icc; - InitCommonControlsEx(&icc); + static CHAR hello[] = "hello"; himl = ImageList_Create(40, 40, 0, 4, 4); ok(himl != NULL, "failed to create imagelist\n"); @@ -71,7 +67,7 @@ START_TEST(listview) ok(r == -1, "should fail\n"); item.iSubItem = 0; - item.pszText = "hello"; + item.pszText = hello; r = SendMessage(hwnd, LVM_INSERTITEM, 0, (LPARAM) &item); ok(r == 0, "should not fail\n"); @@ -83,7 +79,7 @@ START_TEST(listview) ok(r == TRUE, "should not fail\n"); item.iSubItem = 0; - item.pszText = "hello"; + item.pszText = hello; r = SendMessage(hwnd, LVM_INSERTITEM, 0, (LPARAM) &item); ok(r == 0, "should not fail\n"); @@ -95,3 +91,145 @@ START_TEST(listview) DestroyWindow(hwnd); } + +static void test_checkboxes(void) +{ + HWND hwnd, hwndparent = 0; + LVITEMA item; + DWORD r; + static CHAR text[] = "Text", + text2[] = "Text2", + text3[] = "Text3"; + + hwnd = CreateWindowEx(0, "SysListView32", "foo", LVS_REPORT, + 10, 10, 100, 200, hwndparent, NULL, NULL, NULL); + ok(hwnd != NULL, "failed to create listview window\n"); + + /* first without LVS_EX_CHECKBOXES set and an item and check that state is preserved */ + item.mask = LVIF_TEXT | LVIF_STATE; + item.stateMask = 0xffff; + item.state = 0xfccc; + item.iItem = 0; + item.iSubItem = 0; + item.pszText = text; + r = SendMessage(hwnd, LVM_INSERTITEMA, 0, (LPARAM) &item); + ok(r == 0, "ret %ld\n", r); + + item.iItem = 0; + item.mask = LVIF_STATE; + item.stateMask = 0xffff; + r = SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &item); + ok(item.state == 0xfccc, "state %x\n", item.state); + + /* Don't set LVIF_STATE */ + item.mask = LVIF_TEXT; + item.stateMask = 0xffff; + item.state = 0xfccc; + item.iItem = 1; + item.iSubItem = 0; + item.pszText = text; + r = SendMessage(hwnd, LVM_INSERTITEMA, 0, (LPARAM) &item); + ok(r == 1, "ret %ld\n", r); + + item.iItem = 1; + item.mask = LVIF_STATE; + item.stateMask = 0xffff; + r = SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &item); + ok(item.state == 0, "state %x\n", item.state); + + r = SendMessage(hwnd, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_CHECKBOXES, LVS_EX_CHECKBOXES); + ok(r == 0, "should return zero\n"); + + /* Having turned on checkboxes, check that all existing items are set to 0x1000 (unchecked) */ + item.iItem = 0; + item.mask = LVIF_STATE; + item.stateMask = 0xffff; + r = SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &item); + ok(item.state == 0x1ccc, "state %x\n", item.state); + + /* Now add an item without specifying a state and check that it's state goes to 0x1000 */ + item.iItem = 2; + item.mask = LVIF_TEXT; + item.state = 0; + item.pszText = text2; + r = SendMessage(hwnd, LVM_INSERTITEMA, 0, (LPARAM) &item); + ok(r == 2, "ret %ld\n", r); + + item.iItem = 2; + item.mask = LVIF_STATE; + item.stateMask = 0xffff; + r = SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &item); + ok(item.state == 0x1000, "state %x\n", item.state); + + /* Add a further item this time specifying a state and still it's state goes to 0x1000 */ + item.iItem = 3; + item.mask = LVIF_TEXT | LVIF_STATE; + item.stateMask = 0xffff; + item.state = 0x2aaa; + item.pszText = text3; + r = SendMessage(hwnd, LVM_INSERTITEMA, 0, (LPARAM) &item); + ok(r == 3, "ret %ld\n", r); + + item.iItem = 3; + item.mask = LVIF_STATE; + item.stateMask = 0xffff; + r = SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &item); + ok(item.state == 0x1aaa, "state %x\n", item.state); + + /* Set an item's state to checked */ + item.iItem = 3; + item.mask = LVIF_STATE; + item.stateMask = 0xf000; + item.state = 0x2000; + r = SendMessage(hwnd, LVM_SETITEMA, 0, (LPARAM) &item); + + item.iItem = 3; + item.mask = LVIF_STATE; + item.stateMask = 0xffff; + r = SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &item); + ok(item.state == 0x2aaa, "state %x\n", item.state); + + /* Set the style again and check that doesn't change an item's state */ + r = SendMessage(hwnd, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_CHECKBOXES, LVS_EX_CHECKBOXES); + ok(r == LVS_EX_CHECKBOXES, "ret %lx\n", r); + + item.iItem = 3; + item.mask = LVIF_STATE; + item.stateMask = 0xffff; + r = SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &item); + ok(item.state == 0x2aaa, "state %x\n", item.state); + + /* Unsetting the checkbox extended style doesn't change an item's state */ + r = SendMessage(hwnd, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_CHECKBOXES, 0); + ok(r == LVS_EX_CHECKBOXES, "ret %lx\n", r); + + item.iItem = 3; + item.mask = LVIF_STATE; + item.stateMask = 0xffff; + r = SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &item); + ok(item.state == 0x2aaa, "state %x\n", item.state); + + /* Now setting the style again will change an item's state */ + r = SendMessage(hwnd, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_CHECKBOXES, LVS_EX_CHECKBOXES); + ok(r == 0, "ret %lx\n", r); + + item.iItem = 3; + item.mask = LVIF_STATE; + item.stateMask = 0xffff; + r = SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &item); + ok(item.state == 0x1aaa, "state %x\n", item.state); + + DestroyWindow(hwnd); +} + +START_TEST(listview) +{ + INITCOMMONCONTROLSEX icc; + + icc.dwICC = 0; + icc.dwSize = sizeof icc; + InitCommonControlsEx(&icc); + + test_images(); + test_checkboxes(); +}