[COMCTL32_WINETEST] Sync with Wine Staging 1.9.11. CORE-11368

svn path=/trunk/; revision=71541
This commit is contained in:
Amine Khaldi
2016-06-05 18:56:37 +00:00
parent 9158c74670
commit 1cb9628323
10 changed files with 419 additions and 212 deletions
@@ -4,6 +4,7 @@ remove_definitions(-D_WIN32_WINNT=0x502 -D_WIN32_IE=0x600)
add_definitions(-DUSE_WINE_TODOS)
list(APPEND SOURCE
animate.c
button.c
comboex.c
datetime.c
+182
View File
@@ -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();
}
+8 -3
View File
@@ -365,9 +365,7 @@ static void test_dtm_set_and_get_range(void)
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);
@@ -411,6 +409,13 @@ static void test_dtm_set_and_get_range(void)
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);
}
+38 -27
View File
@@ -1005,8 +1005,19 @@ static void test_hdm_filterMessages(HWND hParent)
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_bitmapmarginMessages(HWND hParent)
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 @@ static void test_hdm_index_messages(HWND hParent)
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++ )
for (i = 0; i < sizeof(item_texts)/sizeof(item_texts[0]); i++)
{
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);
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 @@ static void test_hdm_index_messages(HWND hParent)
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 @@ static void test_hdm_index_messages(HWND hParent)
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 @@ static void check_orderarray(HWND hwnd, DWORD start, DWORD set, DWORD expected,
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));
+47 -99
View File
@@ -1710,9 +1710,7 @@ static void test_create(void)
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 @@ static void test_multiselect(void)
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 @@ static void test_multiselect(void)
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 @@ static void test_multiselect(void)
expect(0,r);
}
selected_count = (int)SendMessageA(hwnd, LVM_GETSELECTEDCOUNT, 0, 0);
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);
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 @@ static void test_multiselect(void)
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 @@ static void test_subitem_rect(void)
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 @@ static void test_subitem_rect(void)
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 @@ static void test_subitem_rect(void)
/* 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 @@ static void test_subitem_rect(void)
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 @@ static void test_subitem_rect(void)
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 @@ static void test_subitem_rect(void)
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 @@ static void test_subitem_rect(void)
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 @@ static void test_subitem_rect(void)
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 @@ static void test_subitem_rect(void)
/* 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 @@ static void test_getviewrect(void)
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 @@ static void test_getviewrect(void)
/* 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 @@ todo_wine
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 @@ todo_wine
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 @@ todo_wine
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 @@ todo_wine
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 @@ todo_wine
/* 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 @@ todo_wine
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 @@ todo_wine
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 @@ todo_wine
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 @@ todo_wine
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 @@ todo_wine
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 @@ todo_wine
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 @@ todo_wine
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 */
+39 -1
View File
@@ -265,6 +265,7 @@ static void test_monthcal(void)
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 @@ static void test_monthcal(void)
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];
@@ -453,6 +457,40 @@ static void test_monthcal(void)
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 @@ static void test_MCM_SIZERECTTOMIN(void)
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)
{
+2 -5
View File
@@ -123,11 +123,8 @@ static void init(void)
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);
+2
View File
@@ -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 @@ extern void func_updown(void);
const struct test winetest_testlist[] =
{
{ "button", func_animate },
{ "button", func_button },
{ "comboex", func_comboex },
{ "datetime", func_datetime },
+1 -1
View File
@@ -399,7 +399,7 @@ static void basic_test(void)
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");
+99 -76
View File
@@ -292,13 +292,15 @@ static HWND create_parent_window(void)
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 @@ static void test_gettext(void)
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");
ok(r, "got %ld\n", r);
toolinfoA.lpszText = bufA;
SendMessageA(hwnd, TTM_GETTOOLINFOA, 0, (LPARAM)&toolinfoA);
ok(toolinfoA.lpszText == NULL,
"expected NULL, got %p\n", toolinfoA.lpszText);
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);
/* 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.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);
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");
/* 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.hinst = (HINSTANCE)0xdeadbee;
SendMessageA(hwnd, TTM_GETTOOLINFOA, 0, (LPARAM)&toolinfoA);
ok(toolinfoA.hinst == NULL, "expected NULL, got %p\n", toolinfoA.hinst);
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);
SendMessageA(hwnd, TTM_DELTOOLA, 0, (LPARAM)&toolinfoA);
}
else
{
win_skip( "Old comctl32, not testing NULL text\n" );
DestroyWindow( hwnd );
return;
}
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 @@ static void test_gettext(void)
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);
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");
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;
SendMessageA(hwnd, TTM_GETTOOLINFOA, 0, (LPARAM)&toolinfoA);
ok(strcmp(toolinfoA.lpszText, testtipA) == 0,
"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);
}
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 @@ static void test_gettext(void)
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);
@@ -486,6 +478,37 @@ static void test_gettext(void)
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);
}