[PATCH] comctl32/taskdialog: Add callback and tests
Fabian Maurer
dark.shadow4 at web.de
Mon Aug 28 16:54:14 CDT 2017
Hello,
sorry I thought I already sent this, but it apparently didn't work.
> This looks suspicious, documentation is not strict on this, but it seems
> TDN_CREATED corresponds for to WM_SHOWWINDOW stage.
I'm not sure, I'll look into it.
> > + /* Custom messages*/
>
> What do you mean by "custom"?
I meant taskdialog specific messages. Guess I'll change it to "Taskdialog
messages"
> > - if (verification_flag_checked) *verification_flag_checked = TRUE;
> > + if (verification_flag_checked) *verification_flag_checked = FALSE;
>
> Why do you need this flag value change?
Because that's what the tests told me windows behaves like.
>
> > return S_OK;
> >
> > }
> >
> > diff --git a/dlls/comctl32/tests/taskdialog.c
> > b/dlls/comctl32/tests/taskdialog.c index c937127897..867361617c 100644
> > --- a/dlls/comctl32/tests/taskdialog.c
> > +++ b/dlls/comctl32/tests/taskdialog.c
> > @@ -24,13 +24,250 @@
> >
> > #include "winuser.h"
> > #include "commctrl.h"
> >
> > +#include "wine/list.h"
> >
> > #include "wine/test.h"
> > #include "v6util.h"
> >
> > +#include "msg.h"
> > +
> > +#define WM_TD_CALLBACK (WM_APP) /* Custom dummy message to wrap callback
> > notifications */ +
> > +#define NUM_MSG_SEQUENCES 1
> > +#define TASKDIALOG_SEQ_INDEX 0
> > +
> > +#define TEST_NUM_BUTTONS 20 /* Number of custom buttons to test with */
> > +
> > +#define ID_START 20 /* Lower IDs might be used by the system */
> > +#define ID_START_BUTTON (ID_START + 0)
> >
> > static HRESULT (WINAPI *pTaskDialogIndirect)(const TASKDIALOGCONFIG *,
> > int *, int *, BOOL *); static HRESULT (WINAPI *pTaskDialog)(HWND,
> > HINSTANCE, const WCHAR *, const WCHAR *, const WCHAR *,>
> > TASKDIALOG_COMMON_BUTTON_FLAGS, const WCHAR *, int *);
> >
> > +static struct msg_sequence *sequences[NUM_MSG_SEQUENCES];
> > +
> > +/* Message lists to test against */
> > +
> > +struct message_send_info
> > +{
> > + UINT send_message;
> > + WPARAM send_wparam;
> > + LPARAM send_lparam;
> > +
> > + BOOL post; /* post instead of send */
> > + const CHAR *title_target; /* control text, 0 means it's send to the
> > dialog form instead */ +};
> > +
> > +struct message_info
> > +{
> > + UINT recv_message; /* Message the callback receives */
> > + WPARAM recv_wparam;
> > + LPARAM recv_lparam;
> > +
> > + HRESULT ret; /* Value the callback should return */
> > +
> > + struct message_send_info send[9]; /* Message to send to trigger the
> > next callback message */ +};
> > +
> > +static const struct message_info *current_message_info;
> > +
> > +static const struct message_info mes_return_press_ok[] = {
> > + { TDN_CREATED, 0, 0, S_OK, {
> > + { WM_KEYDOWN, VK_RETURN, 0, TRUE },
> > + { 0 }}},
> > + { TDN_BUTTON_CLICKED, IDOK, 0, S_OK, {{ 0 }}},
> > + { 0 }
> > +};
> > +
> > +static const struct message_info mes_cancel_button_press[] = {
> > + { TDN_CREATED, 0, 0, S_OK, {
> > + { TDM_CLICK_BUTTON, IDOK, 0, TRUE },
> > + { TDM_CLICK_BUTTON, IDOK, 0, TRUE },
> > + { TDM_CLICK_BUTTON, IDOK, 0, TRUE },
> > + { 0 }}},
> > + { TDN_BUTTON_CLICKED, IDOK, 0, S_FALSE, {{ 0 }}},
> > + { TDN_BUTTON_CLICKED, IDOK, 0, 0xFF, {{ 0 }}}, /* Random return value
> > tested here */ + { TDN_BUTTON_CLICKED, IDOK, 0, S_OK, {{ 0 }}},
> > + { 0 }
> > +};
> > +
> > +static const struct message_info mes_send_button_directly[] = {
> > + { TDN_CREATED, 0, 0, S_OK, {
> > + { WM_LBUTTONDOWN, MK_LBUTTON, 0, TRUE, "02" },
> > + { WM_LBUTTONUP, 0, 0, TRUE, "02" },
> > + { 0 }}},
> > + { TDN_BUTTON_CLICKED, ID_START + 2, 0, S_OK, {{ 0 }}},
> > + { 0 }
> > +};
>
> This looks too complicated, I'd just check notifications callback
> received, using 'struct message' data, same way WM_NOTIFY tests work.
I have more tests currently available, like cancelling tests. They're not part
of this patch, but I figured I'll do it right from the beginning.
> > +static HWND get_child_from_title(HWND hwnd_parent, const CHAR *title)
> > +{
> > + taskdialog_child = NULL;
> > + EnumChildWindows(hwnd_parent, enum_taskdialog_children_proc,
> > (LPARAM)title); + return taskdialog_child;
> > +}
>
> I don't think we need to get that deep.
Are you sure? I figured it would make sense to actually test for simulated
mouse clicks instead of just sending the taskdialog specific click messages.
> I think for first iteration test should simply check
> creation/destruction notifications and callback user data value.
I'll take care of the issues and resend the patch as simplified version.
Regards
Fabian Maurer
More information about the wine-devel
mailing list