[PATCH] user32/tests: Extend message conversion tests

Nikolay Sivov nsivov at codeweavers.com
Sun Feb 11 10:30:08 CST 2018


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/user32/tests/dialog.c | 153 ++++++++++++++++++++++++++++++++++-----------
 1 file changed, 118 insertions(+), 35 deletions(-)

diff --git a/dlls/user32/tests/dialog.c b/dlls/user32/tests/dialog.c
index 6b2b2bc98e..33e755b0b7 100644
--- a/dlls/user32/tests/dialog.c
+++ b/dlls/user32/tests/dialog.c
@@ -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))
+        case DLGPROCTEXT_DLGPROCW:
+        todo_wine_if(IsWindowUnicode(hdlg))
+            ok(text == testtextW, "%s: %s, unexpected text %s.\n", IsWindowUnicode(hdlg) ? "U" : "A", testmodes[mode],
+                wine_dbgstr_w(text));
+            break;
+        case DLGPROCTEXT_SNDMSGA:
+        case DLGPROCTEXT_SETTEXTA:
+            if (IsWindowUnicode(hdlg))
+            {
             todo_wine
-                ok(!strcmp(textA, "WndText"), "Unexpected text %s.\n", textA);
+                ok(text != testtextW && !lstrcmpW(text, testtextW),
+                    "U: %s, unexpected text %s.\n", testmodes[mode], wine_dbgstr_w(text));
+            }
             else
-        todo_wine_if(IsWindowUnicode(hdlg))
-                ok(!lstrcmpW(text, testtextW), "Unexpected text %s.\n", wine_dbgstr_w(text));
+            {
+            todo_wine
+                ok(textA == testtext, "A: %s, unexpected text %s.\n", testmodes[mode], textA);
+            }
             break;
-        default:
+        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(text != testtextW && !lstrcmpW(text, testtextW),
+                    "U: %s, unexpected text %s.\n", testmodes[mode], wine_dbgstr_w(text));
+            else
+                ok(textA == testtext, "A: %s, unexpected text %s.\n", testmodes[mode], textA);
+            break;
+        case DLGPROCTEXT_SNDMSGW:
+        case DLGPROCTEXT_SETTEXTW:
             if (IsWindowUnicode(hdlg))
-                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
-                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;
     }
@@ -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_CONTEXT));
-    ret = SendMessageA(hdlg, msg, 0, (LPARAM)"WndText");
-    ok(ret == 0, "Unexpected retval %ld.\n", ret);
+    SetPropA(hdlg, "test_mode", ULongToHandle(DLGPROCTEXT_SNDMSGA));
+    SendMessageA(hdlg, msg, 0, (LPARAM)testtext);
 
-    ret = SendMessageW(hdlg, msg, 0, (LPARAM)testtextW);
-    ok(ret == 0, "Unexpected retval %ld.\n", ret);
+    SetPropA(hdlg, "test_mode", ULongToHandle(DLGPROCTEXT_SNDMSGW));
+    SendMessageW(hdlg, msg, 0, (LPARAM)testtextW);
 
-    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_DLGPROCA));
+    DefDlgProcA(hdlg, msg, 0, (LPARAM)testtext);
 
-    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);
-- 
2.15.1




More information about the wine-devel mailing list