Author: akhaldi Date: Sun Jun 5 18:56:37 2016 New Revision: 71541
URL: http://svn.reactos.org/svn/reactos?rev=71541&view=rev Log: [COMCTL32_WINETEST] Sync with Wine Staging 1.9.11. CORE-11368
Added: trunk/rostests/winetests/comctl32/animate.c (with props) Modified: trunk/rostests/winetests/comctl32/CMakeLists.txt trunk/rostests/winetests/comctl32/datetime.c trunk/rostests/winetests/comctl32/header.c trunk/rostests/winetests/comctl32/listview.c trunk/rostests/winetests/comctl32/monthcal.c trunk/rostests/winetests/comctl32/progress.c trunk/rostests/winetests/comctl32/testlist.c trunk/rostests/winetests/comctl32/toolbar.c trunk/rostests/winetests/comctl32/tooltips.c
Modified: trunk/rostests/winetests/comctl32/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/comctl32/CMakeLi... ============================================================================== --- trunk/rostests/winetests/comctl32/CMakeLists.txt [iso-8859-1] (original) +++ trunk/rostests/winetests/comctl32/CMakeLists.txt [iso-8859-1] Sun Jun 5 18:56:37 2016 @@ -4,6 +4,7 @@ add_definitions(-DUSE_WINE_TODOS)
list(APPEND SOURCE + animate.c button.c comboex.c datetime.c
Added: trunk/rostests/winetests/comctl32/animate.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/comctl32/animate... ============================================================================== --- trunk/rostests/winetests/comctl32/animate.c (added) +++ trunk/rostests/winetests/comctl32/animate.c [iso-8859-1] Sun Jun 5 18:56:37 2016 @@ -0,0 +1,182 @@ +/* Unit tests for the animate control. + * + * Copyright 2016 Bruno Jesus + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include <stdarg.h> + +#include "windef.h" +#include "winbase.h" +#include "wingdi.h" +#include "winuser.h" +#include "commctrl.h" + +#include "wine/test.h" + +#define SEARCHING_AVI_INDEX 151 /* From shell32 resource library */ +#define INVALID_AVI_INDEX 0xffff + +static HWND hAnimateParentWnd, hAnimateWnd; +static const char animateTestClass[] = "AnimateTestClass"; +static WNDPROC animate_wndproc; +static HANDLE shell32; + +/* try to make sure pending X events have been processed before continuing */ +static void flush_events(void) +{ + MSG msg; + int diff = 100; + DWORD time = GetTickCount() + diff; + + while (diff > 0) + { + if (MsgWaitForMultipleObjects( 0, NULL, FALSE, min(10,diff), QS_ALLINPUT ) == WAIT_TIMEOUT) break; + while (PeekMessageA( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessageA( &msg ); + diff = time - GetTickCount(); + } +} + +static LRESULT CALLBACK animate_test_wnd_proc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch(msg) + { + case WM_DESTROY: + PostQuitMessage(0); + break; + + default: + return DefWindowProcA(hWnd, msg, wParam, lParam); + } + return 0L; +} + +static void update_window(HWND hWnd) +{ + UpdateWindow(hWnd); + ok(!GetUpdateRect(hWnd, NULL, FALSE), "GetUpdateRect must return zero after UpdateWindow\n"); +} + +static void create_animate(DWORD parent_style, DWORD animate_style) +{ + WNDCLASSA wc; + RECT rect; + BOOL ret; + + wc.style = CS_HREDRAW | CS_VREDRAW; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.hInstance = GetModuleHandleA(NULL); + wc.hIcon = NULL; + wc.hCursor = LoadCursorA(NULL, (LPCSTR)IDC_ARROW); + wc.hbrBackground = GetSysColorBrush(COLOR_WINDOW); + wc.lpszMenuName = NULL; + wc.lpszClassName = animateTestClass; + wc.lpfnWndProc = animate_test_wnd_proc; + RegisterClassA(&wc); + + SetRect(&rect, 0, 0, 200, 200); + ret = AdjustWindowRect(&rect, WS_OVERLAPPEDWINDOW, FALSE); + ok(ret, "got %d\n", ret); + + hAnimateParentWnd = CreateWindowExA(0, animateTestClass, "Animate Test", WS_OVERLAPPEDWINDOW | parent_style, + CW_USEDEFAULT, CW_USEDEFAULT, rect.right - rect.left, rect.bottom - rect.top, NULL, NULL, GetModuleHandleA(NULL), 0); + ok(hAnimateParentWnd != NULL, "failed to create parent wnd\n"); + + GetClientRect(hAnimateParentWnd, &rect); + hAnimateWnd = CreateWindowExA(0, ANIMATE_CLASSA, NULL, WS_CHILD | WS_VISIBLE | animate_style, + 0, 0, rect.right, rect.bottom, hAnimateParentWnd, NULL, shell32, 0); + ok(hAnimateWnd != NULL, "failed to create parent wnd\n"); + animate_wndproc = (WNDPROC)SetWindowLongPtrA(hAnimateWnd, GWLP_WNDPROC, 0); + + ShowWindow(hAnimateParentWnd, SW_SHOWNORMAL); + ok(GetUpdateRect(hAnimateParentWnd, NULL, FALSE), "GetUpdateRect: There should be a region that needs to be updated\n"); + flush_events(); + update_window(hAnimateParentWnd); +} + +static void init(void) +{ + HMODULE hComctl32; + BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*); + + hComctl32 = GetModuleHandleA("comctl32.dll"); + pInitCommonControlsEx = (void*)GetProcAddress(hComctl32, "InitCommonControlsEx"); + if (pInitCommonControlsEx) + { + INITCOMMONCONTROLSEX iccex; + iccex.dwSize = sizeof(iccex); + iccex.dwICC = ICC_ANIMATE_CLASS; + pInitCommonControlsEx(&iccex); + } + else + InitCommonControls(); + + shell32 = LoadLibraryA("Shell32.dll"); +} + +static void destroy_animate(void) +{ + MSG msg; + + PostMessageA(hAnimateParentWnd, WM_CLOSE, 0, 0); + while (GetMessageA(&msg,0,0,0)) + { + TranslateMessage(&msg); + DispatchMessageA(&msg); + } + hAnimateParentWnd = NULL; +} + +static void cleanup(void) +{ + UnregisterClassA(animateTestClass, GetModuleHandleA(NULL)); +} + +static void test_play(void) +{ + LONG res; + DWORD err; + + create_animate(0, 0); + SetLastError(0xdeadbeef); + res = SendMessageA(hAnimateWnd, ACM_OPENA,(WPARAM)shell32, (LPARAM)MAKEINTRESOURCE(INVALID_AVI_INDEX)); + err = GetLastError(); + ok(res == 0, "Invalid video should have failed\n"); + ok(err == ERROR_RESOURCE_NAME_NOT_FOUND, "Expected 1814, got %u\n", err); + + SetLastError(0xdeadbeef); + res = SendMessageA(hAnimateWnd, ACM_PLAY, (WPARAM) -1, MAKELONG(0, -1)); + ok(res == 0, "Play should have failed\n"); + ok(err == ERROR_RESOURCE_NAME_NOT_FOUND, "Expected 1814, got %u\n", err); + destroy_animate(); + + create_animate(0, 0); + res = SendMessageA(hAnimateWnd, ACM_OPENA,(WPARAM)shell32, (LPARAM)MAKEINTRESOURCE(SEARCHING_AVI_INDEX)); + ok(res != 0, "Load AVI resource failed\n"); + res = SendMessageA(hAnimateWnd, ACM_PLAY, (WPARAM) -1, MAKELONG(0, -1)); + ok(res != 0, "Play should have worked\n"); + destroy_animate(); +} + +START_TEST(animate) +{ + init(); + + test_play(); + + cleanup(); +}
Propchange: trunk/rostests/winetests/comctl32/animate.c ------------------------------------------------------------------------------ svn:eol-style = native
Modified: trunk/rostests/winetests/comctl32/datetime.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/comctl32/datetim... ============================================================================== --- trunk/rostests/winetests/comctl32/datetime.c [iso-8859-1] (original) +++ trunk/rostests/winetests/comctl32/datetime.c [iso-8859-1] Sun Jun 5 18:56:37 2016 @@ -365,9 +365,7 @@ r = SendMessageA(hWnd, DTM_SETRANGE, GDTR_MAX, (LPARAM)st); expect(1, r); r = SendMessageA(hWnd, DTM_GETRANGE, 0, (LPARAM)getSt); - todo_wine { - ok(r == GDTR_MAX, "Expected %x, not %x(GDTR_MIN) or %x(GDTR_MIN | GDTR_MAX), got %lx\n", GDTR_MAX, GDTR_MIN, GDTR_MIN | GDTR_MAX, r); - } + ok(r == GDTR_MAX, "Expected %x, not %x(GDTR_MIN) or %x(GDTR_MIN | GDTR_MAX), got %lx\n", GDTR_MAX, GDTR_MIN, GDTR_MIN | GDTR_MAX, r); expect_systime(&st[1], &getSt[1]);
r = SendMessageA(hWnd, DTM_SETRANGE, GDTR_MIN, (LPARAM)st); @@ -410,6 +408,13 @@ expect_systime(&st[1], &getSt[1]);
ok_sequence(sequences, DATETIME_SEQ_INDEX, test_dtm_set_and_get_range_seq, "test_dtm_set_and_get_range", FALSE); + + /* DTM_SETRANGE with 0 flags */ + r = SendMessageA(hWnd, DTM_SETRANGE, 0, (LPARAM)st); + ok(r, "got %lu\n", r); + r = SendMessageA(hWnd, DTM_GETRANGE, 0, (LPARAM)getSt); + ok(r == 0, "got %lu\n", r); + ok(getSt[0].wYear == 0 && getSt[1].wYear == 0, "got %u, %u\n", getSt[0].wYear, getSt[1].wYear);
DestroyWindow(hWnd); }
Modified: trunk/rostests/winetests/comctl32/header.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/comctl32/header.... ============================================================================== --- trunk/rostests/winetests/comctl32/header.c [iso-8859-1] (original) +++ trunk/rostests/winetests/comctl32/header.c [iso-8859-1] Sun Jun 5 18:56:37 2016 @@ -1005,8 +1005,19 @@ ok_sequence(sequences, PARENT_SEQ_INDEX, add_header_to_parent_seq, "adder header control to parent", FALSE);
+ timeout = SendMessageA(hChild, HDM_SETFILTERCHANGETIMEOUT, 0, 0); + ok(timeout == 1000, "got %d\n", timeout); + + timeout = SendMessageA(hChild, HDM_SETFILTERCHANGETIMEOUT, 0, 0); + ok(timeout == 1000, "got %d\n", timeout); + + timeout = SendMessageA(hChild, HDM_SETFILTERCHANGETIMEOUT, 0, -100); + ok(timeout == 1000, "got %d\n", timeout); + timeout = SendMessageA(hChild, HDM_SETFILTERCHANGETIMEOUT, 1, 100); - SendMessageA(hChild, HDM_SETFILTERCHANGETIMEOUT, 1, timeout); + ok(timeout == -100, "got %d\n", timeout); + retVal = SendMessageA(hChild, HDM_SETFILTERCHANGETIMEOUT, 1, timeout); + ok(retVal == 100, "got %d\n", retVal);
flush_sequences(sequences, NUM_MSG_SEQUENCES);
@@ -1089,23 +1100,15 @@ static void test_hdm_index_messages(HWND hParent) { HWND hChild; - int retVal; - int loopcnt; - int strcmpResult; - int iSize; + int retVal, i, iSize; static const int lpiarray[2] = {1, 0}; - static int lpiarrayReceived[2]; - static char firstHeaderItem[] = "Name"; - static char secondHeaderItem[] = "Size"; - static char thirdHeaderItem[] = "Type"; - static char fourthHeaderItem[] = "Date Modified"; - static char *items[] = {firstHeaderItem, secondHeaderItem, thirdHeaderItem, fourthHeaderItem}; + static const char *item_texts[] = { + "Name", "Size", "Type", "Date Modified" + }; RECT rect; HDITEMA hdItem; - hdItem.mask = HDI_TEXT | HDI_WIDTH | HDI_FORMAT; - hdItem.fmt = HDF_LEFT; - hdItem.cxy = 80; - hdItem.cchTextMax = 260; + char buffA[32]; + int array[2];
flush_sequences(sequences, NUM_MSG_SEQUENCES); hChild = create_custom_header_control(hParent, FALSE); @@ -1116,11 +1119,15 @@ ok_sequence(sequences, PARENT_SEQ_INDEX, add_header_to_parent_seq, "adder header control to parent", FALSE); flush_sequences(sequences, NUM_MSG_SEQUENCES); - for ( loopcnt = 0 ; loopcnt < 4 ; loopcnt++ ) - { - hdItem.pszText = items[loopcnt]; - retVal = SendMessageA(hChild, HDM_INSERTITEMA, loopcnt, (LPARAM) &hdItem); - ok(retVal == loopcnt, "Adding item %d failed with return value %d\n", ( loopcnt + 1 ), retVal); + for (i = 0; i < sizeof(item_texts)/sizeof(item_texts[0]); i++) + { + hdItem.mask = HDI_TEXT | HDI_WIDTH | HDI_FORMAT; + hdItem.pszText = (char*)item_texts[i]; + hdItem.fmt = HDF_LEFT; + hdItem.cxy = 80; + + retVal = SendMessageA(hChild, HDM_INSERTITEMA, i, (LPARAM) &hdItem); + ok(retVal == i, "Adding item %d failed with return value %d\n", i, retVal); } ok_sequence(sequences, HEADER_SEQ_INDEX, insertItem_seq, "insertItem sequence testing", FALSE);
@@ -1146,17 +1153,21 @@
flush_sequences(sequences, NUM_MSG_SEQUENCES);
+ hdItem.mask = HDI_WIDTH; retVal = SendMessageA(hChild, HDM_GETITEMA, 3, (LPARAM) &hdItem); ok(retVal == FALSE, "Getting already-deleted item should return FALSE, got %d\n", retVal);
+ hdItem.mask = HDI_TEXT | HDI_WIDTH; + hdItem.pszText = buffA; + hdItem.cchTextMax = sizeof(buffA)/sizeof(buffA[0]); retVal = SendMessageA(hChild, HDM_GETITEMA, 0, (LPARAM) &hdItem); ok(retVal == TRUE, "Getting the 1st header item should return TRUE, got %d\n", retVal);
ok_sequence(sequences, HEADER_SEQ_INDEX, getItem_seq, "getItem sequence testing", FALSE);
/* check if the item is the right one */ - strcmpResult = strcmp(hdItem.pszText, firstHeaderItem); - expect(0, strcmpResult); + ok(!strcmp(hdItem.pszText, item_texts[0]), "got wrong item %s, expected %s\n", + hdItem.pszText, item_texts[0]); expect(80, hdItem.cxy);
iSize = SendMessageA(hChild, HDM_GETITEMCOUNT, 0, 0); @@ -1175,15 +1186,15 @@ retVal = SendMessageA(hChild, HDM_SETORDERARRAY, iSize, (LPARAM) lpiarray); ok(retVal == TRUE, "Setting header items order should return TRUE, got %d\n", retVal);
- retVal = SendMessageA(hChild, HDM_GETORDERARRAY, iSize, (LPARAM) lpiarrayReceived); + retVal = SendMessageA(hChild, HDM_GETORDERARRAY, 2, (LPARAM) array); ok(retVal == TRUE, "Getting header items order should return TRUE, got %d\n", retVal);
ok_sequence(sequences, HEADER_SEQ_INDEX, orderArray_seq, "set_get_orderArray sequence testing", FALSE);
/* check if the array order is set correctly and the size of the array is correct. */ expect(2, iSize); - expect(lpiarray[0], lpiarrayReceived[0]); - expect(lpiarray[1], lpiarrayReceived[1]); + ok(lpiarray[0] == array[0], "got %d, expected %d\n", array[0], lpiarray[0]); + ok(lpiarray[1] == array[1], "got %d, expected %d\n", array[1], lpiarray[1]);
hdItem.mask = HDI_FORMAT; hdItem.fmt = HDF_CENTER | HDF_STRING; @@ -1718,17 +1729,17 @@ order[i-1] = start>>(4*(count-i)) & 0xf;
ret = SendMessageA(hwnd, HDM_SETORDERARRAY, count, (LPARAM)order); - ok_(__FILE__, line)(ret, "Expected HDM_SETORDERARAY to succeed, got %d\n", ret); + ok_(__FILE__, line)(ret, "Expected HDM_SETORDERARRAY to succeed, got %d\n", ret);
/* new order */ for(i = 1; i<=count; i++) order[i-1] = set>>(4*(count-i)) & 0xf; ret = SendMessageA(hwnd, HDM_SETORDERARRAY, count, (LPARAM)order); - ok_(__FILE__, line)(ret, "Expected HDM_SETORDERARAY to succeed, got %d\n", ret); + ok_(__FILE__, line)(ret, "Expected HDM_SETORDERARRAY to succeed, got %d\n", ret);
/* check actual order */ ret = SendMessageA(hwnd, HDM_GETORDERARRAY, count, (LPARAM)order); - ok_(__FILE__, line)(ret, "Expected HDM_GETORDERARAY to succeed, got %d\n", ret); + ok_(__FILE__, line)(ret, "Expected HDM_GETORDERARRAY to succeed, got %d\n", ret); for(i = 1; i<=count; i++) array |= order[i-1]<<(4*(count-i));
Modified: trunk/rostests/winetests/comctl32/listview.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/comctl32/listvie... ============================================================================== --- trunk/rostests/winetests/comctl32/listview.c [iso-8859-1] (original) +++ trunk/rostests/winetests/comctl32/listview.c [iso-8859-1] Sun Jun 5 18:56:37 2016 @@ -1710,9 +1710,7 @@ ok(!IsWindow(hHeader), "Header shouldn't be created\n"); ok(NULL == GetDlgItem(hList, 0), "NULL dialog item expected\n");
- rect.left = LVIR_BOUNDS; - rect.top = 1; - rect.right = rect.bottom = -10; + SetRect(&rect, LVIR_BOUNDS, 1, -10, -10); r = SendMessageA(hList, LVM_GETSUBITEMRECT, -1, (LPARAM)&rect); /* right value contains garbage, probably because header columns are not set up */ expect(0, rect.bottom); @@ -2241,8 +2239,9 @@
HWND hwnd; INT r; - int i,j,item_count,selected_count; + int i, j; static const int items=5; + DWORD item_count; BYTE kstate[256]; select_task task; LONG_PTR style; @@ -2260,10 +2259,11 @@ for (i = 0; i < items; i++) insert_item(hwnd, 0);
- item_count = (int)SendMessageA(hwnd, LVM_GETITEMCOUNT, 0, 0); + item_count = SendMessageA(hwnd, LVM_GETITEMCOUNT, 0, 0); expect(items, item_count);
for (i = 0; i < 4; i++) { + DWORD selected_count; LVITEMA item;
task = task_list[i]; @@ -2296,9 +2296,11 @@ expect(0,r); }
- selected_count = (int)SendMessageA(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); + selected_count = SendMessageA(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); @@ -2312,7 +2314,7 @@ for (i=0;i<items;i++) { insert_item(hwnd, 0); } - item_count = (int)SendMessageA(hwnd, LVM_GETITEMCOUNT, 0, 0); + item_count = SendMessageA(hwnd, LVM_GETITEMCOUNT, 0, 0); expect(items,item_count);
/* try with NULL pointer */ @@ -2613,15 +2615,11 @@ r = SendMessageA(hwnd, LVM_INSERTCOLUMNA, 2, (LPARAM)&col); expect(2, r); /* item = -1 means header, subitem index is 1 based */ - rect.left = LVIR_BOUNDS; - rect.top = 0; - rect.right = rect.bottom = 0; + SetRect(&rect, LVIR_BOUNDS, 0, 0, 0); r = SendMessageA(hwnd, LVM_GETSUBITEMRECT, -1, (LPARAM)&rect); expect(0, r);
- rect.left = LVIR_BOUNDS; - rect.top = 1; - rect.right = rect.bottom = 0; + SetRect(&rect, LVIR_BOUNDS, 1, 0, 0); r = SendMessageA(hwnd, LVM_GETSUBITEMRECT, -1, (LPARAM)&rect); expect(1, r);
@@ -2629,9 +2627,7 @@ expect(250, rect.right); expect(3, rect.top);
- rect.left = LVIR_BOUNDS; - rect.top = 2; - rect.right = rect.bottom = 0; + SetRect(&rect, LVIR_BOUNDS, 2, 0, 0); r = SendMessageA(hwnd, LVM_GETSUBITEMRECT, -1, (LPARAM)&rect); expect(1, r);
@@ -2642,26 +2638,20 @@ /* item LVS_REPORT padding isn't applied to subitems */ insert_item(hwnd, 0);
- rect.left = LVIR_BOUNDS; - rect.top = 1; - rect.right = rect.bottom = 0; + SetRect(&rect, LVIR_BOUNDS, 1, 0, 0); r = SendMessageA(hwnd, LVM_GETSUBITEMRECT, 0, (LPARAM)&rect); expect(1, r); expect(100, rect.left); expect(250, rect.right);
- rect.left = LVIR_ICON; - rect.top = 1; - rect.right = rect.bottom = 0; + SetRect(&rect, LVIR_ICON, 1, 0, 0); r = SendMessageA(hwnd, LVM_GETSUBITEMRECT, 0, (LPARAM)&rect); expect(1, r); /* no icon attached - zero width rectangle, with no left padding */ expect(100, rect.left); expect(100, rect.right);
- rect.left = LVIR_LABEL; - rect.top = 1; - rect.right = rect.bottom = 0; + SetRect(&rect, LVIR_LABEL, 1, 0, 0); r = SendMessageA(hwnd, LVM_GETSUBITEMRECT, 0, (LPARAM)&rect); expect(1, r); /* same as full LVIR_BOUNDS */ @@ -2670,9 +2660,7 @@
SendMessageA(hwnd, LVM_SCROLL, 10, 0);
- rect.left = LVIR_BOUNDS; - rect.top = 1; - rect.right = rect.bottom = 0; + SetRect(&rect, LVIR_BOUNDS, 1, 0, 0); r = SendMessageA(hwnd, LVM_GETSUBITEMRECT, 0, (LPARAM)&rect); expect(1, r); expect(90, rect.left); @@ -2684,27 +2672,19 @@ subclass_header(hwnd); flush_sequences(sequences, NUM_MSG_SEQUENCES);
- rect.left = LVIR_BOUNDS; - rect.top = 1; - rect.right = rect.bottom = 0; + SetRect(&rect, LVIR_BOUNDS, 1, 0, 0); r = SendMessageA(hwnd, LVM_GETSUBITEMRECT, -1, (LPARAM)&rect); expect(1, r);
- rect.left = LVIR_BOUNDS; - rect.top = 1; - rect.right = rect.bottom = 0; + SetRect(&rect, LVIR_BOUNDS, 1, 0, 0); r = SendMessageA(hwnd, LVM_GETSUBITEMRECT, 0, (LPARAM)&rect); expect(1, r);
- rect.left = LVIR_BOUNDS; - rect.top = 1; - rect.right = rect.bottom = 0; + SetRect(&rect, LVIR_BOUNDS, 1, 0, 0); r = SendMessageA(hwnd, LVM_GETSUBITEMRECT, -10, (LPARAM)&rect); expect(1, r);
- rect.left = LVIR_BOUNDS; - rect.top = 1; - rect.right = rect.bottom = 0; + SetRect(&rect, LVIR_BOUNDS, 1, 0, 0); r = SendMessageA(hwnd, LVM_GETSUBITEMRECT, 20, (LPARAM)&rect); expect(1, r);
@@ -2734,22 +2714,16 @@ insert_item(hwnd, 1);
/* wrong item is refused for main item */ - rect.left = LVIR_BOUNDS; - rect.top = 0; - rect.right = rect.bottom = -1; + SetRect(&rect, LVIR_BOUNDS, 0, -1, -1); r = SendMessageA(hwnd, LVM_GETSUBITEMRECT, 2, (LPARAM)&rect); expect(FALSE, r);
/* for subitems rectangle is calculated even if there's no item added */ - rect.left = LVIR_BOUNDS; - rect.top = 1; - rect.right = rect.bottom = -1; + SetRect(&rect, LVIR_BOUNDS, 1, -1, -1); r = SendMessageA(hwnd, LVM_GETSUBITEMRECT, 1, (LPARAM)&rect); expect(TRUE, r);
- rect2.left = LVIR_BOUNDS; - rect2.top = 1; - rect2.right = rect2.bottom = -1; + SetRect(&rect2, LVIR_BOUNDS, 1, -1, -1); r = SendMessageA(hwnd, LVM_GETSUBITEMRECT, 2, (LPARAM)&rect2); expect(TRUE, r); expect(rect.right, rect2.right); @@ -2761,25 +2735,19 @@ r = SendMessageA(hwnd, LVM_SETCOLUMNORDERARRAY, 3, (LPARAM)arr); expect(TRUE, r);
- rect.left = LVIR_BOUNDS; - rect.top = 0; - rect.right = rect.bottom = -1; + SetRect(&rect, LVIR_BOUNDS, 0, -1, -1); r = SendMessageA(hwnd, LVM_GETSUBITEMRECT, 0, (LPARAM)&rect); expect(TRUE, r); expect(0, rect.left); expect(600, rect.right);
- rect.left = LVIR_BOUNDS; - rect.top = 1; - rect.right = rect.bottom = -1; + SetRect(&rect, LVIR_BOUNDS, 1, -1, -1); r = SendMessageA(hwnd, LVM_GETSUBITEMRECT, 0, (LPARAM)&rect); expect(TRUE, r); expect(0, rect.left); expect(200, rect.right);
- rect2.left = LVIR_BOUNDS; - rect2.top = 1; - rect2.right = rect2.bottom = -1; + SetRect(&rect2, LVIR_BOUNDS, 1, -1, -1); r = SendMessageA(hwnd, LVM_GETSUBITEMRECT, 1, (LPARAM)&rect2); expect(TRUE, r); expect(0, rect2.left); @@ -2789,9 +2757,7 @@ expect(rect.bottom, rect2.top); expect(rect.bottom * 2 - rect.top, rect2.bottom);
- rect.left = LVIR_BOUNDS; - rect.top = 2; - rect.right = rect.bottom = -1; + SetRect(&rect, LVIR_BOUNDS, 2, -1, -1); r = SendMessageA(hwnd, LVM_GETSUBITEMRECT, 0, (LPARAM)&rect); expect(TRUE, r); expect(300, rect.left); @@ -2802,9 +2768,7 @@ /* try it for non LVS_REPORT style */ hwnd = CreateWindowA("SysListView32", "Test", LVS_ICON, 0, 0, 100, 100, NULL, NULL, GetModuleHandleA(NULL), 0); - rect.left = LVIR_BOUNDS; - rect.top = 1; - rect.right = rect.bottom = -10; + SetRect(&rect, LVIR_BOUNDS, 1, -10, -10); r = SendMessageA(hwnd, LVM_GETSUBITEMRECT, -1, (LPARAM)&rect); expect(0, r); /* rect is unchanged */ @@ -3819,7 +3783,7 @@ r = SendMessageA(hwnd, LVM_SETCOLUMNWIDTH, 1, MAKELPARAM(120, 0)); expect(TRUE, r);
- rect.left = rect.right = rect.top = rect.bottom = -1; + SetRect(&rect, -1, -1, -1, -1); r = SendMessageA(hwnd, LVM_GETVIEWRECT, 0, (LPARAM)&rect); expect(TRUE, r); /* left is set to (2e31-1) - XP SP2 */ @@ -3830,7 +3794,7 @@ /* switch to LVS_ICON */ SetWindowLongA(hwnd, GWL_STYLE, GetWindowLongA(hwnd, GWL_STYLE) & ~LVS_REPORT);
- rect.left = rect.right = rect.top = rect.bottom = -1; + SetRect(&rect, -1, -1, -1, -1); r = SendMessageA(hwnd, LVM_GETVIEWRECT, 0, (LPARAM)&rect); expect(TRUE, r); expect(0, rect.left); @@ -3941,8 +3905,7 @@ r = SendMessageA(hwnd, LVM_INSERTITEMA, 0, (LPARAM)&item); expect(0, r);
- rect.left = LVIR_BOUNDS; - rect.right = rect.top = rect.bottom = -1; + SetRect(&rect, LVIR_BOUNDS, -1, -1, -1); r = SendMessageA(hwnd, LVM_GETITEMRECT, 0, (LPARAM)&rect); expect(TRUE, r);
@@ -3963,8 +3926,7 @@ r = SendMessageA(hwnd, LVM_SETCOLUMNA, 1, (LPARAM)&col); expect(TRUE, r);
- rect.left = LVIR_BOUNDS; - rect.right = rect.top = rect.bottom = -1; + SetRect(&rect, LVIR_BOUNDS, -1, -1, -1); r = SendMessageA(hwnd, LVM_GETITEMRECT, 0, (LPARAM)&rect); expect(TRUE, r);
@@ -3972,15 +3934,13 @@ expect(0, rect.left); expect(150, rect.right);
- rect.left = LVIR_SELECTBOUNDS; - rect.right = rect.top = rect.bottom = -1; + SetRect(&rect, LVIR_SELECTBOUNDS, -1, -1, -1); r = SendMessageA(hwnd, LVM_GETITEMRECT, 0, (LPARAM)&rect); expect(TRUE, r); /* padding */ expect(2, rect.left);
- rect.left = LVIR_LABEL; - rect.right = rect.top = rect.bottom = -1; + SetRect(&rect, LVIR_LABEL, -1, -1, -1); r = SendMessageA(hwnd, LVM_GETITEMRECT, 0, (LPARAM)&rect); expect(TRUE, r); /* padding, column width */ @@ -3988,8 +3948,7 @@ expect(50, rect.right);
/* no icons attached */ - rect.left = LVIR_ICON; - rect.right = rect.top = rect.bottom = -1; + SetRect(&rect, LVIR_ICON, -1, -1, -1); r = SendMessageA(hwnd, LVM_GETITEMRECT, 0, (LPARAM)&rect); expect(TRUE, r); /* padding */ @@ -4006,16 +3965,14 @@ /* 1 indexed column width + padding */ expect(102, pt.x); /* rect is at zero too */ - rect.left = LVIR_BOUNDS; - rect.right = rect.top = rect.bottom = -1; + SetRect(&rect, LVIR_BOUNDS, -1, -1, -1); r = SendMessageA(hwnd, LVM_GETITEMRECT, 0, (LPARAM)&rect); expect(TRUE, r); expect(0, rect.left); /* just width sum */ expect(150, rect.right);
- rect.left = LVIR_SELECTBOUNDS; - rect.right = rect.top = rect.bottom = -1; + SetRect(&rect, LVIR_SELECTBOUNDS, -1, -1, -1); r = SendMessageA(hwnd, LVM_GETITEMRECT, 0, (LPARAM)&rect); expect(TRUE, r); /* column width + padding */ @@ -4050,16 +4007,14 @@ expect(TRUE, r);
/* icon bounds */ - rect.left = LVIR_ICON; - rect.right = rect.top = rect.bottom = -1; + SetRect(&rect, LVIR_ICON, -1, -1, -1); r = SendMessageA(hwnd, LVM_GETITEMRECT, 0, (LPARAM)&rect); expect(TRUE, r); /* padding + stateicon width */ expect(18, rect.left); expect(18, rect.right); /* label bounds */ - rect.left = LVIR_LABEL; - rect.right = rect.top = rect.bottom = -1; + SetRect(&rect, LVIR_LABEL, -1, -1, -1); r = SendMessageA(hwnd, LVM_GETITEMRECT, 0, (LPARAM)&rect); expect(TRUE, r); /* padding + stateicon width -> column width */ @@ -4082,16 +4037,14 @@ expect(TRUE, r);
/* icon bounds */ - rect.left = LVIR_ICON; - rect.right = rect.top = rect.bottom = -1; + SetRect(&rect, LVIR_ICON, -1, -1, -1); r = SendMessageA(hwnd, LVM_GETITEMRECT, 0, (LPARAM)&rect); expect(TRUE, r); /* padding, icon width */ expect(2, rect.left); expect(18, rect.right); /* label bounds */ - rect.left = LVIR_LABEL; - rect.right = rect.top = rect.bottom = -1; + SetRect(&rect, LVIR_LABEL, -1, -1, -1); r = SendMessageA(hwnd, LVM_GETITEMRECT, 0, (LPARAM)&rect); expect(TRUE, r); /* padding + icon width -> column width */ @@ -4099,8 +4052,7 @@ expect(50, rect.right);
/* select bounds */ - rect.left = LVIR_SELECTBOUNDS; - rect.right = rect.top = rect.bottom = -1; + SetRect(&rect, LVIR_SELECTBOUNDS, -1, -1, -1); r = SendMessageA(hwnd, LVM_GETITEMRECT, 0, (LPARAM)&rect); expect(TRUE, r); /* padding, column width */ @@ -4116,8 +4068,7 @@ expect(TRUE, r);
/* bounds */ - rect.left = LVIR_BOUNDS; - rect.right = rect.top = rect.bottom = -1; + SetRect(&rect, LVIR_BOUNDS, -1, -1, -1); r = SendMessageA(hwnd, LVM_GETITEMRECT, 0, (LPARAM)&rect); expect(TRUE, r); /* padding + 1 icon width, column width */ @@ -4125,8 +4076,7 @@ expect(150, rect.right);
/* select bounds */ - rect.left = LVIR_SELECTBOUNDS; - rect.right = rect.top = rect.bottom = -1; + SetRect(&rect, LVIR_SELECTBOUNDS, -1, -1, -1); r = SendMessageA(hwnd, LVM_GETITEMRECT, 0, (LPARAM)&rect); expect(TRUE, r); /* padding + 1 icon width, column width */ @@ -4134,8 +4084,7 @@ expect(50, rect.right);
/* label bounds */ - rect.left = LVIR_LABEL; - rect.right = rect.top = rect.bottom = -1; + SetRect(&rect, LVIR_LABEL, -1, -1, -1); r = SendMessageA(hwnd, LVM_GETITEMRECT, 0, (LPARAM)&rect); expect(TRUE, r); /* padding + 2 icon widths, column width */ @@ -4143,8 +4092,7 @@ expect(50, rect.right);
/* icon bounds */ - rect.left = LVIR_ICON; - rect.right = rect.top = rect.bottom = -1; + SetRect(&rect, LVIR_ICON, -1, -1, -1); r = SendMessageA(hwnd, LVM_GETITEMRECT, 0, (LPARAM)&rect); expect(TRUE, r); /* padding + 1 icon width indentation, icon width */
Modified: trunk/rostests/winetests/comctl32/monthcal.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/comctl32/monthca... ============================================================================== --- trunk/rostests/winetests/comctl32/monthcal.c [iso-8859-1] (original) +++ trunk/rostests/winetests/comctl32/monthcal.c [iso-8859-1] Sun Jun 5 18:56:37 2016 @@ -265,6 +265,7 @@ SYSTEMTIME st[2], st1[2], today; int res, month_range; DWORD limits; + BOOL r;
hwnd = CreateWindowA(MONTHCAL_CLASSA, "MonthCal", WS_POPUP | WS_VISIBLE, CW_USEDEFAULT, 0, 300, 300, 0, 0, NULL, NULL); @@ -307,6 +308,9 @@ expect(0, st[1].wSecond); expect(0, st[1].wMilliseconds);
+ limits = SendMessageA(hwnd, MCM_GETRANGE, 0, 0); + ok(limits == 0, "got %u\n", limits); + GetSystemTime(&st[0]); st[1] = st[0];
@@ -452,6 +456,40 @@ expect(0, st1[1].wMinute); expect(0, st1[1].wSecond); expect(0, st1[1].wMilliseconds); + + /* 0 limit flags */ + limits = SendMessageA(hwnd, MCM_GETRANGE, 0, (LPARAM)st1); + ok(limits == GDTR_MIN, "got 0x%08x\n", limits); + + GetSystemTime(st); + st[1] = st[0]; + st[1].wYear++; + r = SendMessageA(hwnd, MCM_SETRANGE, 0, (LPARAM)st); + ok(r, "got %d\n", r); + + limits = SendMessageA(hwnd, MCM_GETRANGE, 0, (LPARAM)st); + ok(limits == 0, "got 0x%08x\n", limits); + ok(st[0].wYear == 0 && st[1].wYear == 0, "got %u, %u\n", st[0].wYear, st[1].wYear); + + /* flags are 0, set min limit */ + GetSystemTime(st); + st[1] = st[0]; + st[1].wYear++; + + r = SendMessageA(hwnd, MCM_SETRANGE, GDTR_MIN, (LPARAM)st); + ok(r, "got %d\n", r); + + limits = SendMessageA(hwnd, MCM_GETRANGE, 0, (LPARAM)st1); + ok(limits == GDTR_MIN, "got 0x%08x\n", limits); + ok(st1[1].wYear == 0, "got %u\n", st1[1].wYear); + + /* now set max limit, check flags */ + r = SendMessageA(hwnd, MCM_SETRANGE, GDTR_MAX, (LPARAM)st); + ok(r, "got %d\n", r); + + limits = SendMessageA(hwnd, MCM_GETRANGE, 0, (LPARAM)st1); + ok(limits == GDTR_MAX, "got 0x%08x\n", limits); + ok(st1[0].wYear == 0, "got %u\n", st1[0].wYear);
DestroyWindow(hwnd); } @@ -1860,7 +1898,7 @@ ret = SendMessageA(hwnd, MCM_SIZERECTTOMIN, 0, 0); ok(ret == 0, "got %d\n", ret);
- r.left = r.right = r.top = r.bottom = 0; + SetRectEmpty(&r); ret = SendMessageA(hwnd, MCM_SIZERECTTOMIN, 0, (LPARAM)&r); if (ret == 0) {
Modified: trunk/rostests/winetests/comctl32/progress.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/comctl32/progres... ============================================================================== --- trunk/rostests/winetests/comctl32/progress.c [iso-8859-1] (original) +++ trunk/rostests/winetests/comctl32/progress.c [iso-8859-1] Sun Jun 5 18:56:37 2016 @@ -123,11 +123,8 @@ wc.lpszClassName = progressTestClass; wc.lpfnWndProc = progress_test_wnd_proc; RegisterClassA(&wc); - - rect.left = 0; - rect.top = 0; - rect.right = 400; - rect.bottom = 20; + + SetRect(&rect, 0, 0, 400, 20); ret = AdjustWindowRect(&rect, WS_OVERLAPPEDWINDOW, FALSE); ok(ret, "got %d\n", ret);
Modified: trunk/rostests/winetests/comctl32/testlist.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/comctl32/testlis... ============================================================================== --- trunk/rostests/winetests/comctl32/testlist.c [iso-8859-1] (original) +++ trunk/rostests/winetests/comctl32/testlist.c [iso-8859-1] Sun Jun 5 18:56:37 2016 @@ -3,6 +3,7 @@ #define STANDALONE #include <wine/test.h>
+extern void func_animate(void); extern void func_button(void); extern void func_comboex(void); extern void func_datetime(void); @@ -30,6 +31,7 @@
const struct test winetest_testlist[] = { + { "button", func_animate }, { "button", func_button }, { "comboex", func_comboex }, { "datetime", func_datetime },
Modified: trunk/rostests/winetests/comctl32/toolbar.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/comctl32/toolbar... ============================================================================== --- trunk/rostests/winetests/comctl32/toolbar.c [iso-8859-1] (original) +++ trunk/rostests/winetests/comctl32/toolbar.c [iso-8859-1] Sun Jun 5 18:56:37 2016 @@ -399,7 +399,7 @@ ok(SendMessageA(hToolbar, TB_ISBUTTONCHECKED, 1005, 0), "A6 pressed\n"); ok(!SendMessageA(hToolbar, TB_ISBUTTONCHECKED, 1004, 0), "A5 not pressed anymore\n");
- /* test for inter-group crosstalk, ie. two radio groups interfering with each other */ + /* test for inter-group crosstalk, i.e. two radio groups interfering with each other */ SendMessageA(hToolbar, TB_CHECKBUTTON, 1007, 1); /* press B2 */ ok(SendMessageA(hToolbar, TB_ISBUTTONCHECKED, 1005, 0), "A6 still pressed, no inter-group crosstalk\n"); ok(!SendMessageA(hToolbar, TB_ISBUTTONCHECKED, 1000, 0), "A1 still not pressed\n");
Modified: trunk/rostests/winetests/comctl32/tooltips.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/comctl32/tooltip... ============================================================================== --- trunk/rostests/winetests/comctl32/tooltips.c [iso-8859-1] (original) +++ trunk/rostests/winetests/comctl32/tooltips.c [iso-8859-1] Sun Jun 5 18:56:37 2016 @@ -292,13 +292,15 @@
static void test_gettext(void) { + static const CHAR testtip2A[] = "testtip\ttest2"; + static const CHAR testtipA[] = "testtip"; HWND hwnd, notify; TTTOOLINFOA toolinfoA; TTTOOLINFOW toolinfoW; LRESULT r; CHAR bufA[10] = ""; WCHAR bufW[10] = { 0 }; - static const CHAR testtipA[] = "testtip"; + DWORD length, style;
notify = create_parent_window(); ok(notify != NULL, "Expected notification window to be created\n"); @@ -320,49 +322,48 @@ toolinfoA.lParam = 0xdeadbeef; GetClientRect(hwnd, &toolinfoA.rect); r = SendMessageA(hwnd, TTM_ADDTOOLA, 0, (LPARAM)&toolinfoA); - if (r) - { - toolinfoA.hwnd = NULL; - toolinfoA.uId = 0x1234ABCD; - toolinfoA.lpszText = bufA; - SendMessageA(hwnd, TTM_GETTEXTA, 0, (LPARAM)&toolinfoA); - ok(strcmp(toolinfoA.lpszText, "") == 0, "lpszText should be an empty string\n"); - - toolinfoA.lpszText = bufA; - SendMessageA(hwnd, TTM_GETTOOLINFOA, 0, (LPARAM)&toolinfoA); - ok(toolinfoA.lpszText == NULL, - "expected NULL, got %p\n", toolinfoA.lpszText); - - /* NULL hinst, valid resource id for text */ - toolinfoA.cbSize = sizeof(TTTOOLINFOA); - toolinfoA.hwnd = NULL; - toolinfoA.hinst = NULL; - toolinfoA.uFlags = 0; - toolinfoA.uId = 0x1233ABCD; - toolinfoA.lpszText = MAKEINTRESOURCEA(IDS_TBADD1); - toolinfoA.lParam = 0xdeadbeef; - GetClientRect(hwnd, &toolinfoA.rect); - r = SendMessageA(hwnd, TTM_ADDTOOLA, 0, (LPARAM)&toolinfoA); - ok(r, "failed to add a tool\n"); - - toolinfoA.hwnd = NULL; - toolinfoA.uId = 0x1233ABCD; - toolinfoA.lpszText = bufA; - SendMessageA(hwnd, TTM_GETTEXTA, 0, (LPARAM)&toolinfoA); - ok(strcmp(toolinfoA.lpszText, "abc") == 0, "lpszText should be an empty string\n"); - - toolinfoA.hinst = (HINSTANCE)0xdeadbee; - SendMessageA(hwnd, TTM_GETTOOLINFOA, 0, (LPARAM)&toolinfoA); - ok(toolinfoA.hinst == NULL, "expected NULL, got %p\n", toolinfoA.hinst); - - SendMessageA(hwnd, TTM_DELTOOLA, 0, (LPARAM)&toolinfoA); - } - else - { - win_skip( "Old comctl32, not testing NULL text\n" ); - DestroyWindow( hwnd ); - return; - } + ok(r, "got %ld\n", r); + + toolinfoA.hwnd = NULL; + toolinfoA.uId = 0x1234abcd; + toolinfoA.lpszText = bufA; + r = SendMessageA(hwnd, TTM_GETTEXTA, 0, (LPARAM)&toolinfoA); + ok(!r, "got %ld\n", r); + ok(!*toolinfoA.lpszText, "lpszText should be empty, got %s\n", toolinfoA.lpszText); + + toolinfoA.lpszText = bufA; + r = SendMessageA(hwnd, TTM_GETTOOLINFOA, 0, (LPARAM)&toolinfoA); +todo_wine + ok(!r, "got %ld\n", r); + ok(toolinfoA.lpszText == NULL, "expected NULL, got %p\n", toolinfoA.lpszText); + + /* NULL hinst, valid resource id for text */ + toolinfoA.cbSize = sizeof(TTTOOLINFOA); + toolinfoA.hwnd = NULL; + toolinfoA.hinst = NULL; + toolinfoA.uFlags = 0; + toolinfoA.uId = 0x1233abcd; + toolinfoA.lpszText = MAKEINTRESOURCEA(IDS_TBADD1); + toolinfoA.lParam = 0xdeadbeef; + GetClientRect(hwnd, &toolinfoA.rect); + r = SendMessageA(hwnd, TTM_ADDTOOLA, 0, (LPARAM)&toolinfoA); + ok(r, "failed to add a tool\n"); + + toolinfoA.hwnd = NULL; + toolinfoA.uId = 0x1233abcd; + toolinfoA.lpszText = bufA; + r = SendMessageA(hwnd, TTM_GETTEXTA, 0, (LPARAM)&toolinfoA); + ok(!r, "got %ld\n", r); + ok(!strcmp(toolinfoA.lpszText, "abc"), "got wrong text, %s\n", toolinfoA.lpszText); + + toolinfoA.hinst = (HINSTANCE)0xdeadbee; + r = SendMessageA(hwnd, TTM_GETTOOLINFOA, 0, (LPARAM)&toolinfoA); +todo_wine + ok(!r, "got %ld\n", r); + ok(toolinfoA.hinst == NULL, "expected NULL, got %p\n", toolinfoA.hinst); + + r = SendMessageA(hwnd, TTM_DELTOOLA, 0, (LPARAM)&toolinfoA); + ok(!r, "got %ld\n", r);
/* add another tool with text */ toolinfoA.cbSize = sizeof(TTTOOLINFOA); @@ -376,28 +377,26 @@ GetClientRect(hwnd, &toolinfoA.rect); r = SendMessageA(hwnd, TTM_ADDTOOLA, 0, (LPARAM)&toolinfoA); ok(r, "Adding the tool to the tooltip failed\n"); - if (r) - { - DWORD length; - - length = SendMessageA(hwnd, WM_GETTEXTLENGTH, 0, 0); - ok(length == 0, "Expected 0, got %d\n", length); - - toolinfoA.hwnd = NULL; - toolinfoA.uId = 0x1235ABCD; - toolinfoA.lpszText = bufA; - SendMessageA(hwnd, TTM_GETTEXTA, 0, (LPARAM)&toolinfoA); - ok(strcmp(toolinfoA.lpszText, testtipA) == 0, "lpszText should be an empty string\n"); - - memset(bufA, 0x1f, sizeof(bufA)); - toolinfoA.lpszText = bufA; - SendMessageA(hwnd, TTM_GETTOOLINFOA, 0, (LPARAM)&toolinfoA); - ok(strcmp(toolinfoA.lpszText, testtipA) == 0, - "expected %s, got %p\n", testtipA, toolinfoA.lpszText); - - length = SendMessageA(hwnd, WM_GETTEXTLENGTH, 0, 0); - ok(length == 0, "Expected 0, got %d\n", length); - } + + length = SendMessageA(hwnd, WM_GETTEXTLENGTH, 0, 0); + ok(length == 0, "Expected 0, got %d\n", length); + + toolinfoA.hwnd = NULL; + toolinfoA.uId = 0x1235abcd; + toolinfoA.lpszText = bufA; + r = SendMessageA(hwnd, TTM_GETTEXTA, 0, (LPARAM)&toolinfoA); + ok(!r, "got %ld\n", r); + ok(!strcmp(toolinfoA.lpszText, testtipA), "expected %s, got %p\n", testtipA, toolinfoA.lpszText); + + memset(bufA, 0x1f, sizeof(bufA)); + toolinfoA.lpszText = bufA; + r = SendMessageA(hwnd, TTM_GETTOOLINFOA, 0, (LPARAM)&toolinfoA); +todo_wine + ok(!r, "got %ld\n", r); + ok(!strcmp(toolinfoA.lpszText, testtipA), "expected %s, got %p\n", testtipA, toolinfoA.lpszText); + + length = SendMessageA(hwnd, WM_GETTEXTLENGTH, 0, 0); + ok(length == 0, "Expected 0, got %d\n", length);
/* add another with callback text */ toolinfoA.cbSize = sizeof(TTTOOLINFOA); @@ -410,33 +409,26 @@ GetClientRect(hwnd, &toolinfoA.rect); r = SendMessageA(hwnd, TTM_ADDTOOLA, 0, (LPARAM)&toolinfoA); ok(r, "Adding the tool to the tooltip failed\n"); - if (r) - { - toolinfoA.hwnd = notify; - toolinfoA.uId = 0x1236ABCD; - toolinfoA.lpszText = bufA; - SendMessageA(hwnd, TTM_GETTEXTA, 0, (LPARAM)&toolinfoA); - ok(strcmp(toolinfoA.lpszText, testcallbackA) == 0, - "lpszText should be an (%s) string\n", testcallbackA); - - toolinfoA.lpszText = bufA; - SendMessageA(hwnd, TTM_GETTOOLINFOA, 0, (LPARAM)&toolinfoA); - ok(toolinfoA.lpszText == LPSTR_TEXTCALLBACKA, - "expected LPSTR_TEXTCALLBACKA, got %p\n", toolinfoA.lpszText); - } + + toolinfoA.hwnd = notify; + toolinfoA.uId = 0x1236abcd; + toolinfoA.lpszText = bufA; + r = SendMessageA(hwnd, TTM_GETTEXTA, 0, (LPARAM)&toolinfoA); + ok(!r, "got %ld\n", r); + ok(!strcmp(toolinfoA.lpszText, testcallbackA), "lpszText should be an (%s) string\n", testcallbackA); + + toolinfoA.lpszText = bufA; + r = SendMessageA(hwnd, TTM_GETTOOLINFOA, 0, (LPARAM)&toolinfoA); +todo_wine + ok(!r, "got %ld\n", r); + ok(toolinfoA.lpszText == LPSTR_TEXTCALLBACKA, "expected LPSTR_TEXTCALLBACKA, got %p\n", toolinfoA.lpszText);
DestroyWindow(hwnd); DestroyWindow(notify);
- SetLastError(0xdeadbeef); hwnd = CreateWindowExW(0, TOOLTIPS_CLASSW, NULL, 0, 10, 10, 300, 100, NULL, NULL, NULL, 0); - - if (!hwnd && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) { - win_skip("CreateWindowExW is not implemented\n"); - return; - } ok(hwnd != NULL, "failed to create tooltip wnd\n");
toolinfoW.cbSize = sizeof(TTTOOLINFOW); @@ -485,6 +477,37 @@ SendMessageW(hwnd, TTM_GETTEXTW, 0, (LPARAM)&toolinfoW); ok(toolinfoW.lpszText[0] == 0, "lpszText should be an empty string\n"); } + + /* text with embedded tabs */ + toolinfoA.cbSize = sizeof(TTTOOLINFOA); + toolinfoA.hwnd = NULL; + toolinfoA.hinst = GetModuleHandleA(NULL); + toolinfoA.uFlags = 0; + toolinfoA.uId = 0x1235abce; + strcpy(bufA, testtip2A); + toolinfoA.lpszText = bufA; + toolinfoA.lParam = 0xdeadbeef; + GetClientRect(hwnd, &toolinfoA.rect); + r = SendMessageA(hwnd, TTM_ADDTOOLA, 0, (LPARAM)&toolinfoA); + ok(r, "got %ld\n", r); + + toolinfoA.hwnd = NULL; + toolinfoA.uId = 0x1235abce; + toolinfoA.lpszText = bufA; + r = SendMessageA(hwnd, TTM_GETTEXTA, 0, (LPARAM)&toolinfoA); + ok(!r, "got %ld\n", r); + ok(!strcmp(toolinfoA.lpszText, testtipA), "expected %s, got %s\n", testtipA, toolinfoA.lpszText); + + /* enable TTS_NOPREFIX, original text is retained */ + style = GetWindowLongA(hwnd, GWL_STYLE); + SetWindowLongA(hwnd, GWL_STYLE, style | TTS_NOPREFIX); + + toolinfoA.hwnd = NULL; + toolinfoA.uId = 0x1235abce; + toolinfoA.lpszText = bufA; + r = SendMessageA(hwnd, TTM_GETTEXTA, 0, (LPARAM)&toolinfoA); + ok(!r, "got %ld\n", r); + ok(!strcmp(toolinfoA.lpszText, testtip2A), "expected %s, got %s\n", testtip2A, toolinfoA.lpszText);
DestroyWindow(hwnd); }