user32/tests: Extend message conversion tests.

Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Nikolay Sivov 2018-02-11 19:30:08 +03:00 committed by Alexandre Julliard
parent 71c2c2dad2
commit eebdb457bf
1 changed files with 119 additions and 36 deletions

View File

@ -1237,12 +1237,26 @@ static INT_PTR CALLBACK TestControlStyleDlgProc(HWND hdlg, UINT msg,
}
static const WCHAR testtextW[] = {'W','n','d','T','e','x','t',0};
static const char *testtext = "WndText";
enum defdlgproc_text
{
DLGPROCTEXT_CONTEXT = 0,
DLGPROCTEXT_A,
DLGPROCTEXT_W,
DLGPROCTEXT_SNDMSGA = 0,
DLGPROCTEXT_SNDMSGW,
DLGPROCTEXT_DLGPROCA,
DLGPROCTEXT_DLGPROCW,
DLGPROCTEXT_SETTEXTA,
DLGPROCTEXT_SETTEXTW,
};
static const char *testmodes[] =
{
"SNDMSGA",
"SNDMSGW",
"DLGPROCA",
"DLGPROCW",
"SETTEXTA",
"SETTEXTW",
};
static INT_PTR CALLBACK test_aw_conversion_dlgprocA(HWND hdlg, UINT msg, WPARAM wparam, LPARAM lparam)
@ -1262,25 +1276,42 @@ static INT_PTR CALLBACK test_aw_conversion_dlgprocA(HWND hdlg, UINT msg, WPARAM
case EM_REPLACESEL:
switch (mode)
{
case DLGPROCTEXT_A:
case DLGPROCTEXT_DLGPROCA:
todo_wine_if(!IsWindowUnicode(hdlg))
ok(!strcmp(textA, "WndText"), "Unexpected text %s.\n", textA);
ok(textA == testtext, "%s: %s, unexpected text %s.\n", IsWindowUnicode(hdlg) ? "U" : "A",
testmodes[mode], textA);
break;
case DLGPROCTEXT_W:
if (msg == WM_SETTEXT && !IsWindowUnicode(hdlg))
todo_wine
ok(!strcmp(textA, "WndText"), "Unexpected text %s.\n", textA);
else
case DLGPROCTEXT_DLGPROCW:
todo_wine_if(IsWindowUnicode(hdlg))
ok(!lstrcmpW(text, testtextW), "Unexpected text %s.\n", wine_dbgstr_w(text));
ok(text == testtextW, "%s: %s, unexpected text %s.\n", IsWindowUnicode(hdlg) ? "U" : "A", testmodes[mode],
wine_dbgstr_w(text));
break;
default:
case DLGPROCTEXT_SNDMSGA:
case DLGPROCTEXT_SETTEXTA:
if (IsWindowUnicode(hdlg))
{
todo_wine
ok(text != testtextW && !lstrcmpW(text, testtextW),
"U: %s, unexpected text %s.\n", testmodes[mode], wine_dbgstr_w(text));
}
else
{
todo_wine
ok(textA == testtext, "A: %s, unexpected text %s.\n", testmodes[mode], textA);
}
break;
case DLGPROCTEXT_SNDMSGW:
case DLGPROCTEXT_SETTEXTW:
if (IsWindowUnicode(hdlg))
todo_wine
ok(!lstrcmpW(text, testtextW), "Unexpected text %s.\n", wine_dbgstr_w(text));
ok(text == testtextW, "U: %s, unexpected text %s.\n", testmodes[mode], wine_dbgstr_w(text));
else
{
todo_wine
ok(!strcmp(textA, "WndText"), "Unexpected text %s.\n", textA);
ok(textA != testtext && !strcmp(textA, testtext), "A: %s, unexpected text %s.\n",
testmodes[mode], textA);
}
break;
}
break;
};
@ -1305,19 +1336,32 @@ static INT_PTR CALLBACK test_aw_conversion_dlgprocW(HWND hdlg, UINT msg, WPARAM
case EM_REPLACESEL:
switch (mode)
{
case DLGPROCTEXT_A:
case DLGPROCTEXT_DLGPROCA:
todo_wine_if(IsWindowUnicode(hdlg))
ok(!strcmp(textA, "WndText"), "Unexpected text %s.\n", textA);
ok(textA == testtext, "%s: %s, unexpected text %s.\n", IsWindowUnicode(hdlg) ? "U" : "A",
testmodes[mode], textA);
break;
case DLGPROCTEXT_W:
case DLGPROCTEXT_DLGPROCW:
todo_wine_if(!IsWindowUnicode(hdlg))
ok(!lstrcmpW(text, testtextW), "Unexpected text %s.\n", wine_dbgstr_w(text));
ok(text == testtextW, "%s: %s, unexpected text %s.\n", IsWindowUnicode(hdlg) ? "U" : "A", testmodes[mode],
wine_dbgstr_w(text));
break;
default:
case DLGPROCTEXT_SNDMSGA:
case DLGPROCTEXT_SETTEXTA:
if (IsWindowUnicode(hdlg))
ok(!lstrcmpW(text, testtextW), "Unexpected text %s.\n", wine_dbgstr_w(text));
ok(text != testtextW && !lstrcmpW(text, testtextW),
"U: %s, unexpected text %s.\n", testmodes[mode], wine_dbgstr_w(text));
else
ok(!strcmp(textA, "WndText"), "Unexpected text %s.\n", textA);
ok(textA == testtext, "A: %s, unexpected text %s.\n", testmodes[mode], textA);
break;
case DLGPROCTEXT_SNDMSGW:
case DLGPROCTEXT_SETTEXTW:
if (IsWindowUnicode(hdlg))
ok(text == testtextW, "U: %s, unexpected text %s.\n", testmodes[mode], wine_dbgstr_w(text));
else
ok(textA != testtext && !strcmp(textA, testtext), "A: %s, unexpected text %s.\n",
testmodes[mode], textA);
break;
}
break;
}
@ -1327,22 +1371,17 @@ static INT_PTR CALLBACK test_aw_conversion_dlgprocW(HWND hdlg, UINT msg, WPARAM
static void dlg_test_aw_message(HWND hdlg, UINT msg)
{
LRESULT ret;
SetPropA(hdlg, "test_mode", ULongToHandle(DLGPROCTEXT_SNDMSGA));
SendMessageA(hdlg, msg, 0, (LPARAM)testtext);
SetPropA(hdlg, "test_mode", ULongToHandle(DLGPROCTEXT_CONTEXT));
ret = SendMessageA(hdlg, msg, 0, (LPARAM)"WndText");
ok(ret == 0, "Unexpected retval %ld.\n", ret);
SetPropA(hdlg, "test_mode", ULongToHandle(DLGPROCTEXT_SNDMSGW));
SendMessageW(hdlg, msg, 0, (LPARAM)testtextW);
ret = SendMessageW(hdlg, msg, 0, (LPARAM)testtextW);
ok(ret == 0, "Unexpected retval %ld.\n", ret);
SetPropA(hdlg, "test_mode", ULongToHandle(DLGPROCTEXT_DLGPROCA));
DefDlgProcA(hdlg, msg, 0, (LPARAM)testtext);
SetPropA(hdlg, "test_mode", ULongToHandle(DLGPROCTEXT_A));
ret = DefDlgProcA(hdlg, msg, 0, (LPARAM)"WndText");
ok(ret == 0, "Unexpected retval %ld.\n", ret);
SetPropA(hdlg, "test_mode", ULongToHandle(DLGPROCTEXT_W));
ret = DefDlgProcW(hdlg, msg, 0, (LPARAM)testtextW);
ok(ret == 0, "Unexpected retval %ld.\n", ret);
SetPropA(hdlg, "test_mode", ULongToHandle(DLGPROCTEXT_DLGPROCW));
DefDlgProcW(hdlg, msg, 0, (LPARAM)testtextW);
}
static INT_PTR CALLBACK test_aw_conversion_dlgproc(HWND hdlg, UINT msg, WPARAM wparam, LPARAM lparam)
@ -1358,6 +1397,14 @@ static INT_PTR CALLBACK test_aw_conversion_dlgproc(HWND hdlg, UINT msg, WPARAM w
case WM_INITDIALOG:
ok(IsWindowUnicode(hdlg), "Expected unicode window.\n");
dlg_test_aw_message(hdlg, WM_WININICHANGE);
dlg_test_aw_message(hdlg, WM_DEVMODECHANGE);
dlg_test_aw_message(hdlg, CB_DIR);
dlg_test_aw_message(hdlg, LB_DIR);
dlg_test_aw_message(hdlg, LB_ADDFILE);
dlg_test_aw_message(hdlg, EM_REPLACESEL);
dlg_test_aw_message(hdlg, WM_SETTEXT);
/* WM_SETTEXT/WM_GETTEXT */
originalproc = GetWindowLongPtrW(hdlg, DWLP_DLGPROC);
ok(originalproc == (ULONG_PTR)test_aw_conversion_dlgproc, "Unexpected dlg proc %#lx.\n", originalproc);
@ -1374,6 +1421,12 @@ static INT_PTR CALLBACK test_aw_conversion_dlgproc(HWND hdlg, UINT msg, WPARAM w
dlgproc = GetWindowLongPtrA(hdlg, DWLP_DLGPROC);
ok(dlgproc == (ULONG_PTR)test_aw_conversion_dlgprocA, "Unexpected dlg proc %#lx.\n", dlgproc);
SetPropA(hdlg, "test_mode", ULongToHandle(DLGPROCTEXT_SETTEXTA));
ret = SetWindowTextA(hdlg, testtext);
todo_wine
ok(ret, "Failed to set window text.\n");
SetPropA(hdlg, "test_mode", ULongToHandle(DLGPROCTEXT_SETTEXTW));
ret = SetWindowTextW(hdlg, testtextW);
todo_wine
ok(ret, "Failed to set window text.\n");
@ -1395,6 +1448,7 @@ static INT_PTR CALLBACK test_aw_conversion_dlgproc(HWND hdlg, UINT msg, WPARAM w
dlg_test_aw_message(hdlg, LB_DIR);
dlg_test_aw_message(hdlg, LB_ADDFILE);
dlg_test_aw_message(hdlg, EM_REPLACESEL);
dlg_test_aw_message(hdlg, WM_SETTEXT);
dlgproc = SetWindowLongPtrW(hdlg, DWLP_DLGPROC, (UINT_PTR)test_aw_conversion_dlgprocW);
ok(IsWindowUnicode(hdlg), "Expected unicode window.\n");
@ -1405,7 +1459,13 @@ static INT_PTR CALLBACK test_aw_conversion_dlgproc(HWND hdlg, UINT msg, WPARAM w
dlgproc = GetWindowLongPtrA(hdlg, DWLP_DLGPROC);
ok(dlgproc != (ULONG_PTR)test_aw_conversion_dlgprocW, "Unexpected dlg proc %#lx.\n", dlgproc);
ret = SetWindowTextA(hdlg, "WndText");
SetPropA(hdlg, "test_mode", ULongToHandle(DLGPROCTEXT_SETTEXTA));
ret = SetWindowTextA(hdlg, testtext);
todo_wine
ok(ret, "Failed to set window text.\n");
SetPropA(hdlg, "test_mode", ULongToHandle(DLGPROCTEXT_SETTEXTW));
ret = SetWindowTextW(hdlg, testtextW);
todo_wine
ok(ret, "Failed to set window text.\n");
@ -1425,6 +1485,7 @@ static INT_PTR CALLBACK test_aw_conversion_dlgproc(HWND hdlg, UINT msg, WPARAM w
dlg_test_aw_message(hdlg, LB_DIR);
dlg_test_aw_message(hdlg, LB_ADDFILE);
dlg_test_aw_message(hdlg, EM_REPLACESEL);
dlg_test_aw_message(hdlg, WM_SETTEXT);
SetWindowLongPtrA(hdlg, DWLP_DLGPROC, originalproc);
EndDialog(hdlg, -123);
@ -1446,6 +1507,14 @@ static INT_PTR CALLBACK test_aw_conversion_dlgproc2(HWND hdlg, UINT msg, WPARAM
case WM_INITDIALOG:
ok(!IsWindowUnicode(hdlg), "Unexpected unicode window.\n");
dlg_test_aw_message(hdlg, WM_WININICHANGE);
dlg_test_aw_message(hdlg, WM_DEVMODECHANGE);
dlg_test_aw_message(hdlg, CB_DIR);
dlg_test_aw_message(hdlg, LB_DIR);
dlg_test_aw_message(hdlg, LB_ADDFILE);
dlg_test_aw_message(hdlg, EM_REPLACESEL);
dlg_test_aw_message(hdlg, WM_SETTEXT);
originalproc = GetWindowLongPtrW(hdlg, DWLP_DLGPROC);
ok(originalproc != (ULONG_PTR)test_aw_conversion_dlgproc2, "Unexpected dlg proc %#lx.\n", originalproc);
@ -1461,7 +1530,13 @@ static INT_PTR CALLBACK test_aw_conversion_dlgproc2(HWND hdlg, UINT msg, WPARAM
dlgproc = GetWindowLongPtrA(hdlg, DWLP_DLGPROC);
ok(dlgproc == (ULONG_PTR)test_aw_conversion_dlgprocW, "Unexpected dlg proc %#lx.\n", dlgproc);
ret = SetWindowTextA(hdlg, "WndText");
SetPropA(hdlg, "test_mode", ULongToHandle(DLGPROCTEXT_SETTEXTA));
ret = SetWindowTextA(hdlg, testtext);
todo_wine
ok(ret, "Failed to set window text.\n");
SetPropA(hdlg, "test_mode", ULongToHandle(DLGPROCTEXT_SETTEXTW));
ret = SetWindowTextW(hdlg, testtextW);
todo_wine
ok(ret, "Failed to set window text.\n");
@ -1480,6 +1555,7 @@ static INT_PTR CALLBACK test_aw_conversion_dlgproc2(HWND hdlg, UINT msg, WPARAM
dlg_test_aw_message(hdlg, LB_DIR);
dlg_test_aw_message(hdlg, LB_ADDFILE);
dlg_test_aw_message(hdlg, EM_REPLACESEL);
dlg_test_aw_message(hdlg, WM_SETTEXT);
dlgproc = SetWindowLongPtrW(hdlg, DWLP_DLGPROC, (UINT_PTR)test_aw_conversion_dlgprocA);
ok(!IsWindowUnicode(hdlg), "Unexpected unicode window.\n");
@ -1490,6 +1566,12 @@ static INT_PTR CALLBACK test_aw_conversion_dlgproc2(HWND hdlg, UINT msg, WPARAM
dlgproc = GetWindowLongPtrA(hdlg, DWLP_DLGPROC);
ok(dlgproc != (ULONG_PTR)test_aw_conversion_dlgprocA, "Unexpected dlg proc %#lx.\n", dlgproc);
SetPropA(hdlg, "test_mode", ULongToHandle(DLGPROCTEXT_SETTEXTA));
ret = SetWindowTextA(hdlg, testtext);
todo_wine
ok(ret, "Failed to set window text.\n");
SetPropA(hdlg, "test_mode", ULongToHandle(DLGPROCTEXT_SETTEXTW));
ret = SetWindowTextW(hdlg, testtextW);
todo_wine
ok(ret, "Failed to set window text.\n");
@ -1511,6 +1593,7 @@ static INT_PTR CALLBACK test_aw_conversion_dlgproc2(HWND hdlg, UINT msg, WPARAM
dlg_test_aw_message(hdlg, LB_DIR);
dlg_test_aw_message(hdlg, LB_ADDFILE);
dlg_test_aw_message(hdlg, EM_REPLACESEL);
dlg_test_aw_message(hdlg, WM_SETTEXT);
SetWindowLongPtrA(hdlg, DWLP_DLGPROC, originalproc);
EndDialog(hdlg, -123);