[USER32_WINETEST] Sync everything except win.c with Wine Staging 3.3. CORE-14434
[reactos.git] / modules / rostests / winetests / user32 / dialog.c
index f18e626..679a762 100755 (executable)
  * normally be met.
  */
 
-#include "precomp.h"
+#ifndef __REACTOS__
+#define WINVER 0x0600 /* For NONCLIENTMETRICS with padding */
+#endif
+
+#include <assert.h>
+#include <stdio.h>
+#include <stdarg.h>
+
+#include "wine/test.h"
+#include "windef.h"
+#include "winbase.h"
+#include "wingdi.h"
+#include "winuser.h"
 
 #define MAXHWNDS 1024
 static HWND hwnd [MAXHWNDS];
@@ -1249,8 +1261,441 @@ static INT_PTR CALLBACK TestControlStyleDlgProc(HWND hdlg, UINT msg,
     return FALSE;
 }
 
-static void test_DialogBoxParamA(void)
+static const WCHAR testtextW[] = {'W','n','d','T','e','x','t',0};
+static const char *testtext = "WndText";
+
+enum defdlgproc_text
+{
+    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)
+{
+    int mode = HandleToULong(GetPropA(hdlg, "test_mode"));
+    WCHAR *text = (WCHAR *)lparam;
+    char *textA = (char *)lparam;
+
+    switch (msg)
+    {
+    case WM_SETTEXT:
+    case WM_WININICHANGE:
+    case WM_DEVMODECHANGE:
+    case CB_DIR:
+    case LB_DIR:
+    case LB_ADDFILE:
+    case EM_REPLACESEL:
+        switch (mode)
+        {
+        case DLGPROCTEXT_DLGPROCA:
+            ok(textA == testtext, "%s: %s, unexpected text %s.\n", IsWindowUnicode(hdlg) ? "U" : "A",
+                testmodes[mode], textA);
+            break;
+        case DLGPROCTEXT_DLGPROCW:
+            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))
+            {
+                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(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;
+    };
+
+    return DefWindowProcW(hdlg, msg, wparam, lparam);
+}
+
+static INT_PTR CALLBACK test_aw_conversion_dlgprocW(HWND hdlg, UINT msg, WPARAM wparam, LPARAM lparam)
+{
+    int mode = HandleToULong(GetPropA(hdlg, "test_mode"));
+    WCHAR *text = (WCHAR *)lparam;
+    char *textA = (char *)lparam;
+
+    switch (msg)
+    {
+    case WM_SETTEXT:
+    case WM_WININICHANGE:
+    case WM_DEVMODECHANGE:
+    case CB_DIR:
+    case LB_DIR:
+    case LB_ADDFILE:
+    case EM_REPLACESEL:
+        switch (mode)
+        {
+        case DLGPROCTEXT_DLGPROCA:
+            ok(textA == testtext, "%s: %s, unexpected text %s.\n", IsWindowUnicode(hdlg) ? "U" : "A",
+                testmodes[mode], textA);
+            break;
+        case DLGPROCTEXT_DLGPROCW:
+            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))
+                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(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;
+    }
+
+    return DefWindowProcA(hdlg, msg, wparam, lparam);
+}
+
+static void dlg_test_aw_message(HWND hdlg, UINT msg)
 {
+    SetPropA(hdlg, "test_mode", ULongToHandle(DLGPROCTEXT_SNDMSGA));
+    SendMessageA(hdlg, msg, 0, (LPARAM)testtext);
+
+    SetPropA(hdlg, "test_mode", ULongToHandle(DLGPROCTEXT_SNDMSGW));
+    SendMessageW(hdlg, msg, 0, (LPARAM)testtextW);
+
+    SetPropA(hdlg, "test_mode", ULongToHandle(DLGPROCTEXT_DLGPROCA));
+    DefDlgProcA(hdlg, msg, 0, (LPARAM)testtext);
+
+    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)
+{
+    ULONG_PTR dlgproc, originalproc;
+    WCHAR buffW[64];
+    char buff[64];
+    BOOL ret;
+    INT len;
+
+    switch (msg)
+    {
+    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);
+
+        dlgproc = GetWindowLongPtrA(hdlg, DWLP_DLGPROC);
+        ok(dlgproc != (ULONG_PTR)test_aw_conversion_dlgproc, "Unexpected dlg proc %#lx.\n", dlgproc);
+
+        dlgproc = SetWindowLongPtrA(hdlg, DWLP_DLGPROC, (UINT_PTR)test_aw_conversion_dlgprocA);
+        ok(IsWindowUnicode(hdlg), "Expected unicode window.\n");
+
+        dlgproc = GetWindowLongPtrW(hdlg, DWLP_DLGPROC);
+        ok(dlgproc != (ULONG_PTR)test_aw_conversion_dlgprocA, "Unexpected dlg proc %#lx.\n", dlgproc);
+
+        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");
+
+        memset(buff, 'A', sizeof(buff));
+        len = GetWindowTextA(hdlg, buff, sizeof(buff));
+        ok(buff[0] == 0 && buff[1] == 'A' && len == 0, "Unexpected window text %#x, %#x, len %d\n",
+           (BYTE)buff[0], (BYTE)buff[1], len);
+
+        memset(buffW, 0xff, sizeof(buffW));
+        len = GetWindowTextW(hdlg, buffW, 64);
+        ok(!lstrcmpW(buffW, testtextW) && len == 0, "Unexpected window text %s, len %d\n", wine_dbgstr_w(buffW), len);
+
+        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);
+
+        dlgproc = SetWindowLongPtrW(hdlg, DWLP_DLGPROC, (UINT_PTR)test_aw_conversion_dlgprocW);
+        ok(IsWindowUnicode(hdlg), "Expected unicode window.\n");
+
+        dlgproc = GetWindowLongPtrW(hdlg, DWLP_DLGPROC);
+        ok(dlgproc == (ULONG_PTR)test_aw_conversion_dlgprocW, "Unexpected dlg proc %#lx.\n", dlgproc);
+
+        dlgproc = GetWindowLongPtrA(hdlg, DWLP_DLGPROC);
+        ok(dlgproc != (ULONG_PTR)test_aw_conversion_dlgprocW, "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");
+
+        memset(buff, 'A', sizeof(buff));
+        len = GetWindowTextA(hdlg, buff, sizeof(buff));
+        ok(buff[0] == 0 && buff[1] == 'A' && len == 0, "Unexpected window text %#x, %#x, len %d\n",
+           (BYTE)buff[0], (BYTE)buff[1], len);
+
+        memset(buffW, 0xff, sizeof(buffW));
+        len = GetWindowTextW(hdlg, buffW, sizeof(buffW)/sizeof(buffW[0]));
+        ok(buffW[0] == 'W' && buffW[1] == 0xffff && len == 0, "Unexpected window text %#x, %#x, len %d\n",
+            buffW[0], buffW[1], len);
+
+        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);
+
+        SetWindowLongPtrA(hdlg, DWLP_DLGPROC, originalproc);
+        EndDialog(hdlg, -123);
+        return TRUE;
+    }
+    return FALSE;
+}
+
+static INT_PTR CALLBACK test_aw_conversion_dlgproc2(HWND hdlg, UINT msg, WPARAM wparam, LPARAM lparam)
+{
+    ULONG_PTR dlgproc, originalproc;
+    WCHAR buffW[64];
+    char buff[64];
+    BOOL ret;
+    INT len;
+
+    switch (msg)
+    {
+    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);
+
+        dlgproc = GetWindowLongPtrA(hdlg, DWLP_DLGPROC);
+        ok(dlgproc == (ULONG_PTR)test_aw_conversion_dlgproc2, "Unexpected dlg proc %#lx.\n", dlgproc);
+
+        dlgproc = SetWindowLongPtrA(hdlg, DWLP_DLGPROC, (UINT_PTR)test_aw_conversion_dlgprocW);
+        ok(!IsWindowUnicode(hdlg), "Unexpected unicode window.\n");
+
+        dlgproc = GetWindowLongPtrW(hdlg, DWLP_DLGPROC);
+        ok(dlgproc != (ULONG_PTR)test_aw_conversion_dlgprocW, "Unexpected dlg proc %#lx.\n", dlgproc);
+
+        dlgproc = GetWindowLongPtrA(hdlg, DWLP_DLGPROC);
+        ok(dlgproc == (ULONG_PTR)test_aw_conversion_dlgprocW, "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");
+
+        memset(buff, 'A', sizeof(buff));
+        len = GetWindowTextA(hdlg, buff, sizeof(buff));
+        ok(!strcmp(buff, testtext) && len == 0, "Unexpected window text %s, len %d\n", buff, len);
+
+        memset(buffW, 0xff, sizeof(buffW));
+        len = GetWindowTextW(hdlg, buffW, 64);
+        ok(buffW[0] == 0 && buffW[1] == 0xffff && len == 0, "Unexpected window text %s, len %d\n",
+            wine_dbgstr_w(buffW), len);
+
+        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);
+
+        dlgproc = SetWindowLongPtrW(hdlg, DWLP_DLGPROC, (UINT_PTR)test_aw_conversion_dlgprocA);
+        ok(!IsWindowUnicode(hdlg), "Unexpected unicode window.\n");
+
+        dlgproc = GetWindowLongPtrW(hdlg, DWLP_DLGPROC);
+        ok(dlgproc == (ULONG_PTR)test_aw_conversion_dlgprocA, "Unexpected dlg proc %#lx.\n", dlgproc);
+
+        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");
+
+        memset(buff, 'A', sizeof(buff));
+        len = GetWindowTextA(hdlg, buff, sizeof(buff));
+        ok(!strcmp(buff, testtext) && len == 0, "Unexpected window text %s, len %d\n", buff, len);
+
+        memset(buffW, 0xff, sizeof(buffW));
+        len = GetWindowTextW(hdlg, buffW, sizeof(buffW)/sizeof(buffW[0]));
+        ok(buffW[0] == 0 && buffW[1] == 0xffff && len == 0, "Unexpected window text %#x, %#x, len %d\n",
+            buffW[0], buffW[1], len);
+
+        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);
+
+        SetWindowLongPtrA(hdlg, DWLP_DLGPROC, originalproc);
+        EndDialog(hdlg, -123);
+        return TRUE;
+    }
+    return FALSE;
+}
+
+static LRESULT CALLBACK test_aw_conversion_wndproc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
+{
+    WNDPROC oldproc = (WNDPROC)GetWindowLongPtrA(hwnd, GWLP_USERDATA);
+    int mode = HandleToULong(GetPropA(hwnd, "test_mode"));
+    WCHAR *text = (WCHAR *)lparam;
+    char *textA = (char *)lparam;
+
+    switch (msg)
+    {
+    case WM_SETTEXT:
+    case WM_WININICHANGE:
+    case WM_DEVMODECHANGE:
+    case CB_DIR:
+    case LB_DIR:
+    case LB_ADDFILE:
+    case EM_REPLACESEL:
+        switch (mode)
+        {
+        case DLGPROCTEXT_SNDMSGA:
+            if (IsWindowUnicode(hwnd))
+                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:
+            if (IsWindowUnicode(hwnd))
+                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;
+        default:
+            ok(0, "Unexpected test mode %d.\n", mode);
+        }
+        break;
+    }
+
+    return IsWindowUnicode(hwnd) ? CallWindowProcW(oldproc, hwnd, msg, wparam, lparam) :
+        CallWindowProcA(oldproc, hwnd, msg, wparam, lparam);
+}
+
+static INT_PTR CALLBACK test_aw_conversion_dlgproc3(HWND hdlg, UINT msg, WPARAM wparam, LPARAM lparam)
+{
+    BOOL is_unicode = !!lparam;
+    LONG_PTR oldproc;
+
+    switch (msg)
+    {
+    case WM_INITDIALOG:
+        ok(is_unicode == IsWindowUnicode(hdlg), "Unexpected unicode window property.\n");
+
+        oldproc = SetWindowLongPtrA(hdlg, GWLP_WNDPROC, (LONG_PTR)test_aw_conversion_wndproc);
+        SetWindowLongPtrA(hdlg, GWLP_USERDATA, oldproc);
+        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);
+
+        SetWindowLongPtrW(hdlg, GWLP_WNDPROC, (LONG_PTR)test_aw_conversion_wndproc);
+        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);
+
+        SetWindowLongPtrA(hdlg, GWLP_WNDPROC, oldproc);
+        EndDialog(hdlg, -123);
+        return TRUE;
+    }
+    return FALSE;
+}
+
+static void test_DialogBoxParam(void)
+{
+    static const WCHAR nameW[] = {'T','E','S','T','_','E','M','P','T','Y','_','D','I','A','L','O','G',0};
     INT_PTR ret;
     HWND hwnd_invalid = (HWND)0x4444;
 
@@ -1302,7 +1747,21 @@ static void test_DialogBoxParamA(void)
     ret = DialogBoxParamA(GetModuleHandleA(NULL), "TEST_EMPTY_DIALOG", 0, TestDefButtonDlgProc, 0);
     ok(ret == IDOK, "Expected IDOK\n");
 
-    DialogBoxParamA(GetModuleHandleA(NULL), "TEST_EMPTY_DIALOG", 0, TestReturnKeyDlgProc, 0);
+    ret = DialogBoxParamA(GetModuleHandleA(NULL), "TEST_EMPTY_DIALOG", 0, TestReturnKeyDlgProc, 0);
+    ok(ret == 0, "Unexpected ret value %ld.\n", ret);
+
+    /* WM_SETTEXT handling in case of A/W dialog procedures vs A/W dialog window.  */
+    ret = DialogBoxParamW(GetModuleHandleA(NULL), nameW, 0, test_aw_conversion_dlgproc, 0);
+    ok(ret == -123, "Unexpected ret value %ld.\n", ret);
+
+    ret = DialogBoxParamA(GetModuleHandleA(NULL), "TEST_EMPTY_DIALOG", 0, test_aw_conversion_dlgproc2, 0);
+    ok(ret == -123, "Unexpected ret value %ld.\n", ret);
+
+    ret = DialogBoxParamW(GetModuleHandleA(NULL), nameW, 0, test_aw_conversion_dlgproc3, 1);
+    ok(ret == -123, "Unexpected ret value %ld.\n", ret);
+
+    ret = DialogBoxParamA(GetModuleHandleA(NULL), "TEST_EMPTY_DIALOG", 0, test_aw_conversion_dlgproc3, 0);
+    ok(ret == -123, "Unexpected ret value %ld.\n", ret);
 }
 
 static void test_DisabledDialogTest(void)
@@ -1713,7 +2172,7 @@ START_TEST(dialog)
     test_focus();
     test_GetDlgItem();
     test_GetDlgItemText();
-    test_DialogBoxParamA();
+    test_DialogBoxParam();
     test_DisabledDialogTest();
     test_MessageBoxFontTest();
     test_SaveRestoreFocus();