comctl32/listview: Fix test crashes on comctl32 <5.80.

This commit is contained in:
Nikolay Sivov 2009-06-18 01:06:41 +04:00 committed by Alexandre Julliard
parent e3b9420034
commit c05e6d8f45
1 changed files with 61 additions and 22 deletions

View File

@ -48,6 +48,8 @@ BOOL blockEdit;
/* format reported to control:
-1 falls to defproc, anything else returned */
INT notifyFormat;
/* indicates we're running < 5.80 version */
BOOL g_is_below_5;
static HWND subclass_editbox(HWND hwndListview);
@ -2244,21 +2246,28 @@ static void test_ownerdata(void)
LVITEMA item;
/* it isn't possible to set LVS_OWNERDATA after creation */
hwnd = create_listview_control(0);
ok(hwnd != NULL, "failed to create a listview window\n");
style = GetWindowLongPtrA(hwnd, GWL_STYLE);
ok(!(style & LVS_OWNERDATA) && style, "LVS_OWNERDATA isn't expected\n");
if (g_is_below_5)
{
win_skip("set LVS_OWNERDATA after creation leads to crash on < 5.80\n");
}
else
{
hwnd = create_listview_control(0);
ok(hwnd != NULL, "failed to create a listview window\n");
style = GetWindowLongPtrA(hwnd, GWL_STYLE);
ok(!(style & LVS_OWNERDATA) && style, "LVS_OWNERDATA isn't expected\n");
flush_sequences(sequences, NUM_MSG_SEQUENCES);
flush_sequences(sequences, NUM_MSG_SEQUENCES);
ret = SetWindowLongPtrA(hwnd, GWL_STYLE, style | LVS_OWNERDATA);
ok(ret == style, "Expected set GWL_STYLE to succeed\n");
ok_sequence(sequences, LISTVIEW_SEQ_INDEX, listview_ownerdata_switchto_seq,
ret = SetWindowLongPtrA(hwnd, GWL_STYLE, style | LVS_OWNERDATA);
ok(ret == style, "Expected set GWL_STYLE to succeed\n");
ok_sequence(sequences, LISTVIEW_SEQ_INDEX, listview_ownerdata_switchto_seq,
"try to switch to LVS_OWNERDATA seq", FALSE);
style = GetWindowLongPtrA(hwnd, GWL_STYLE);
ok(!(style & LVS_OWNERDATA), "LVS_OWNERDATA isn't expected\n");
DestroyWindow(hwnd);
style = GetWindowLongPtrA(hwnd, GWL_STYLE);
ok(!(style & LVS_OWNERDATA), "LVS_OWNERDATA isn't expected\n");
DestroyWindow(hwnd);
}
/* try to set LVS_OWNERDATA after creation just having it */
hwnd = create_listview_control(LVS_OWNERDATA);
@ -2275,20 +2284,27 @@ static void test_ownerdata(void)
DestroyWindow(hwnd);
/* try to remove LVS_OWNERDATA after creation just having it */
hwnd = create_listview_control(LVS_OWNERDATA);
ok(hwnd != NULL, "failed to create a listview window\n");
style = GetWindowLongPtrA(hwnd, GWL_STYLE);
ok(style & LVS_OWNERDATA, "LVS_OWNERDATA is expected\n");
if (g_is_below_5)
{
win_skip("remove LVS_OWNERDATA after creation leads to crash on < 5.80\n");
}
else
{
hwnd = create_listview_control(LVS_OWNERDATA);
ok(hwnd != NULL, "failed to create a listview window\n");
style = GetWindowLongPtrA(hwnd, GWL_STYLE);
ok(style & LVS_OWNERDATA, "LVS_OWNERDATA is expected\n");
flush_sequences(sequences, NUM_MSG_SEQUENCES);
flush_sequences(sequences, NUM_MSG_SEQUENCES);
ret = SetWindowLongPtrA(hwnd, GWL_STYLE, style & ~LVS_OWNERDATA);
ok(ret == style, "Expected set GWL_STYLE to succeed\n");
ok_sequence(sequences, LISTVIEW_SEQ_INDEX, listview_ownerdata_switchto_seq,
ret = SetWindowLongPtrA(hwnd, GWL_STYLE, style & ~LVS_OWNERDATA);
ok(ret == style, "Expected set GWL_STYLE to succeed\n");
ok_sequence(sequences, LISTVIEW_SEQ_INDEX, listview_ownerdata_switchto_seq,
"try to switch to LVS_OWNERDATA seq", FALSE);
style = GetWindowLongPtrA(hwnd, GWL_STYLE);
ok(style & LVS_OWNERDATA, "LVS_OWNERDATA is expected\n");
DestroyWindow(hwnd);
style = GetWindowLongPtrA(hwnd, GWL_STYLE);
ok(style & LVS_OWNERDATA, "LVS_OWNERDATA is expected\n");
DestroyWindow(hwnd);
}
/* try select an item */
hwnd = create_listview_control(LVS_OWNERDATA);
@ -3337,6 +3353,27 @@ static void test_indentation(void)
DestroyWindow(hwnd);
}
INT CALLBACK DummyCompareEx(LPARAM first, LPARAM second, LPARAM param)
{
return 0;
}
static BOOL is_below_comctl_5(void)
{
HWND hwnd;
BOOL ret;
hwnd = create_listview_control(0);
ok(hwnd != NULL, "failed to create a listview window\n");
insert_item(hwnd, 0);
ret = SendMessage(hwnd, LVM_SORTITEMSEX, 0, (LPARAM)&DummyCompareEx);
DestroyWindow(hwnd);
return !ret;
}
START_TEST(listview)
{
HMODULE hComctl32;
@ -3361,6 +3398,8 @@ START_TEST(listview)
ok_sequence(sequences, PARENT_SEQ_INDEX, create_parent_wnd_seq, "create parent window", TRUE);
flush_sequences(sequences, NUM_MSG_SEQUENCES);
g_is_below_5 = is_below_comctl_5();
test_images();
test_checkboxes();
test_items();