[PATCH] comctl32/taskdialog/tests: Add a basic taskdialog creator as interactive test

Fabian Maurer dark.shadow4 at web.de
Thu May 31 12:59:05 CDT 2018


Signed-off-by: Fabian Maurer <dark.shadow4 at web.de>
---
 dlls/comctl32/tests/resources.h  |  5 +++
 dlls/comctl32/tests/rsrc.rc      | 17 +++++++++
 dlls/comctl32/tests/taskdialog.c | 62 ++++++++++++++++++++++++++++++++
 3 files changed, 84 insertions(+)

diff --git a/dlls/comctl32/tests/resources.h b/dlls/comctl32/tests/resources.h
index 3a89cd7baf..0e4ff6702c 100644
--- a/dlls/comctl32/tests/resources.h
+++ b/dlls/comctl32/tests/resources.h
@@ -48,4 +48,9 @@
 #define IDC_PS_COMBO1 1020
 #define IDC_PS_PUSHBUTTON1 1021
 
+#define IDC_TASKDIALOG_CREATE 1030
+#define IDC_TASKDIALOG_TEXT_TITLE 1031
+#define IDC_TASKDIALOG_TEXT_MAIN 1032
+#define IDC_TASKDIALOG_TEXT_CONTENT 1033
+
 #endif  /* __WINE_COMCTL32_TEST_RESOURCES_H */
diff --git a/dlls/comctl32/tests/rsrc.rc b/dlls/comctl32/tests/rsrc.rc
index 959130e2f1..fad3f71858 100644
--- a/dlls/comctl32/tests/rsrc.rc
+++ b/dlls/comctl32/tests/rsrc.rc
@@ -173,3 +173,20 @@ FONT 8, "MS Shell Dlg"
     PUSHBUTTON "Cancel", IDCANCEL, 100, 60, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
     EDITTEXT 1000, 5, 5, 150, 50, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL | ES_AUTOVSCROLL | ES_WANTRETURN
 }
+
+TAKDIALOG_CREATOR DIALOG 0, 0, 600, 500
+STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | DS_CENTER
+CAPTION "Taskdialog Creator"
+FONT 8, "MS Shell Dlg"
+{
+    LTEXT "Title:", -1, 5, 5, 70, 15, BS_CENTER
+    EDITTEXT IDC_TASKDIALOG_TEXT_TITLE, 75, 5, 450, 15, WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_WANTRETURN
+
+    LTEXT "Main Instruction:", -1, 5, 25, 70, 50, BS_CENTER
+    EDITTEXT IDC_TASKDIALOG_TEXT_MAIN, 75, 25, 450, 50, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL | ES_MULTILINE | ES_WANTRETURN
+
+    LTEXT "Content:", -1, 5, 80, 70, 50, BS_CENTER
+    EDITTEXT IDC_TASKDIALOG_TEXT_CONTENT, 75, 80, 450, 50, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL | ES_MULTILINE | ES_WANTRETURN
+
+    PUSHBUTTON "Create Taskdialog", IDC_TASKDIALOG_CREATE, 260, 460, 80, 30,  WS_CHILD | WS_VISIBLE | WS_TABSTOP
+}
diff --git a/dlls/comctl32/tests/taskdialog.c b/dlls/comctl32/tests/taskdialog.c
index 432b89bd15..3b78f4fbf7 100644
--- a/dlls/comctl32/tests/taskdialog.c
+++ b/dlls/comctl32/tests/taskdialog.c
@@ -28,6 +28,7 @@
 #include "wine/test.h"
 #include "v6util.h"
 #include "msg.h"
+#include "resources.h"
 
 #define WM_TD_CALLBACK (WM_APP) /* Custom dummy message to wrap callback notifications */
 
@@ -374,6 +375,61 @@ static void test_timer(void)
     pTaskDialogIndirect(&info, NULL, NULL, NULL);
 }
 
+/* Caller must free the buffer */
+static WCHAR* control_get_text(HWND hdlg, int id_control)
+{
+    HWND hwnd_control = GetDlgItem(hdlg, id_control);
+    int text_length = GetWindowTextLengthW(hwnd_control);
+    WCHAR *text = heap_alloc((text_length + 1) * sizeof(WCHAR));
+    GetWindowTextW(hwnd_control, text, text_length + 1);
+    return text;
+}
+
+static void taskdialog_creator_create(HWND hdlg)
+{
+    TASKDIALOGCONFIG info = { 0 };
+    WCHAR *text_title;
+    WCHAR *text_main_instruction;
+    WCHAR *text_content;
+
+    text_title = control_get_text(hdlg, IDC_TASKDIALOG_TEXT_TITLE);
+    text_main_instruction = control_get_text(hdlg, IDC_TASKDIALOG_TEXT_MAIN);
+    text_content = control_get_text(hdlg, IDC_TASKDIALOG_TEXT_CONTENT);
+
+    info.cbSize = sizeof(TASKDIALOGCONFIG);
+    info.hwndParent = hdlg;
+    info.pszWindowTitle = text_title;
+    info.pszMainInstruction = text_main_instruction;
+    info.pszContent = text_content;
+
+    pTaskDialogIndirect(&info, NULL, NULL, NULL);
+
+    heap_free(text_title);
+    heap_free(text_main_instruction);
+    heap_free(text_content);
+}
+
+static INT_PTR CALLBACK taskdialog_creator_proc(HWND hdlg, UINT msg, WPARAM wparam, LPARAM lparam)
+{
+    switch (msg)
+    {
+        case WM_COMMAND:
+            if (HIWORD(wparam) == BN_CLICKED && LOWORD(wparam) == IDC_TASKDIALOG_CREATE)
+            {
+                taskdialog_creator_create(hdlg);
+            }
+            break;
+        case WM_CLOSE:
+            EndDialog(hdlg, 0);
+            break;
+
+        default:
+            break;
+    }
+
+    return FALSE;
+}
+
 START_TEST(taskdialog)
 {
     ULONG_PTR ctx_cookie;
@@ -405,6 +461,12 @@ START_TEST(taskdialog)
     ok(pTaskDialogIndirect == ptr_ordinal, "got wrong pointer for ordinal 345, %p expected %p\n",
                                             ptr_ordinal, pTaskDialogIndirect);
 
+    if (winetest_interactive)
+    {
+        DialogBoxParamA(GetModuleHandleA(NULL), "TAKDIALOG_CREATOR", NULL, taskdialog_creator_proc, 0);
+        return;
+    }
+
     init_msg_sequences(sequences, NUM_MSG_SEQUENCES);
 
     test_invalid_parameters();
-- 
2.17.1




More information about the wine-devel mailing list