2 * PROJECT: ReactOS api tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PURPOSE: Test for CreateDialog
5 * PROGRAMMERS: Andreas Maier
15 #define TEST_MAX_MSG 50
18 #define MSGLST_CMP_WP 0x1
19 #define MSGLST_CMP_LP 0x2
20 #define MSGLST_CMP_RES 0x4
21 #define MSGLST_CMP_ALL (MSGLST_CMP_WP | MSGLST_CMP_LP | MSGLST_CMP_RES)
25 BOOL DlgProc
; // true = DlgProg, false WndProc
36 tagMsgInfo msgList
[TEST_MAX_MSG
];
41 /* the expected message-list */
42 const tagMsgList t1msgList
=
46 // DlgProc, msg, wParam, lParam, result, cmpflag
47 { FALSE
, WM_NCCREATE
, 0, 0, 1, MSGLST_CMP_WP
| MSGLST_CMP_RES
},
48 { FALSE
, WM_NCCALCSIZE
, 0, 0, 0, MSGLST_CMP_WP
| MSGLST_CMP_RES
},
49 { FALSE
, WM_CREATE
, 0, 0, 0, MSGLST_CMP_WP
| MSGLST_CMP_RES
},
50 { FALSE
, WM_SIZE
, 0, 0x145012c, 0, MSGLST_CMP_ALL
}, // FIXME: size is 400x400 on Win7?
51 { FALSE
, WM_MOVE
, 0, 0x0160003, 0, MSGLST_CMP_ALL
},
52 { TRUE
, WM_SETFONT
, 0, 0, 0, MSGLST_CMP_LP
| MSGLST_CMP_RES
},
53 { FALSE
, WM_SETFONT
, 0, 0, 0, MSGLST_CMP_LP
| MSGLST_CMP_RES
},
54 { TRUE
, WM_INITDIALOG
, 0, 0, 0, MSGLST_CMP_LP
| MSGLST_CMP_RES
},
55 { FALSE
, WM_INITDIALOG
, 0, 0, 0, MSGLST_CMP_LP
| MSGLST_CMP_RES
},
59 void DumpMsgList(const char* lstName
, const tagMsgList
*ml
)
61 const char *dlgProcName
;
64 printf("%s\n", lstName
);
65 for (i1
= 0; i1
< ml
->msgCount
; i1
++)
67 dlgProcName
= (ml
->msgList
[i1
].DlgProc
) ? "DlgProc" : "WndProc";
68 printf("#%.3d %s, msg 0x%x, wParam 0x%x, lParam 0x%Ix, result %d\n",
72 ml
->msgList
[i1
].wParam
,
73 ml
->msgList
[i1
].lParam
,
74 ml
->msgList
[i1
].result
);
78 BOOL
CmpMsgList(const tagMsgList
*recvd
,
79 const tagMsgList
*expect
)
85 if (recvd
->msgCount
!= expect
->msgCount
)
87 ok(FALSE
, "%d messages expected, %d messages received!\n",
88 expect
->msgCount
, recvd
->msgCount
);
93 for (i1
= 0; i1
< recvd
->msgCount
; i1
++)
95 if (expect
->msgList
[i1
].DlgProc
!= recvd
->msgList
[i1
].DlgProc
)
97 if (expect
->msgList
[i1
].msg
!= recvd
->msgList
[i1
].msg
)
99 if ((expect
->msgList
[i1
].cmpflag
& MSGLST_CMP_WP
) &&
100 (expect
->msgList
[i1
].wParam
!= recvd
->msgList
[i1
].wParam
))
102 if ((expect
->msgList
[i1
].cmpflag
& MSGLST_CMP_LP
) &&
103 (expect
->msgList
[i1
].lParam
!= recvd
->msgList
[i1
].lParam
))
105 if ((expect
->msgList
[i1
].cmpflag
& MSGLST_CMP_RES
) &&
106 (expect
->msgList
[i1
].result
!= recvd
->msgList
[i1
].result
))
110 ok(FALSE
, "Message #%.3d not equal\n", i1
);
118 DumpMsgList("RECEIVED", recvd
);
119 DumpMsgList("EXPECTED", expect
);
127 INT_PTR CALLBACK
Test_CreateDialogW_DLGPROC(HWND hWnd
, UINT msg
, WPARAM wParam
, LPARAM lParam
)
129 if (msglist
.msgCount
< TEST_MAX_MSG
)
131 msglist
.msgList
[msglist
.msgCount
].DlgProc
= TRUE
;
132 msglist
.msgList
[msglist
.msgCount
].msg
= msg
;
133 msglist
.msgList
[msglist
.msgCount
].wParam
= wParam
;
134 msglist
.msgList
[msglist
.msgCount
].lParam
= lParam
;
135 msglist
.msgList
[msglist
.msgCount
].result
= 0;
138 trace("DlgProc: msg 0x%x, wParam 0x%x, lParam 0x%Ix\n",
139 msg
, wParam
, lParam
);
143 LRESULT CALLBACK
Test_CreateDialogW_WNDPROC(HWND hWnd
, UINT msg
, WPARAM wParam
, LPARAM lParam
)
146 res
= DefDlgProcW(hWnd
, msg
, wParam
, lParam
);
148 if (msglist
.msgCount
< TEST_MAX_MSG
)
150 msglist
.msgList
[msglist
.msgCount
].DlgProc
= FALSE
;
151 msglist
.msgList
[msglist
.msgCount
].msg
= msg
;
152 msglist
.msgList
[msglist
.msgCount
].wParam
= wParam
;
153 msglist
.msgList
[msglist
.msgCount
].lParam
= lParam
;
154 msglist
.msgList
[msglist
.msgCount
].result
= res
;
157 trace("WndProc: msg 0x%x, wParam 0x%x, lParam 0x%Ix, result %Id\n",
158 msg
, wParam
, lParam
, res
);
162 void Test_CreateDialogW()
169 hMod
= GetModuleHandle(NULL
);
170 ok(hMod
!= NULL
, "\n");
172 msglist
.msgCount
= 0;
173 wc
.style
= CS_HREDRAW
| CS_VREDRAW
;
174 wc
.lpfnWndProc
= Test_CreateDialogW_WNDPROC
;
176 wc
.cbWndExtra
= DLGWINDOWEXTRA
;
178 wc
.hIcon
= LoadIcon(NULL
, IDI_APPLICATION
);
179 wc
.hCursor
= LoadCursor(NULL
, IDC_ARROW
);
180 wc
.hbrBackground
= (HBRUSH
) (COLOR_WINDOW
+ 1);
181 wc
.lpszMenuName
= NULL
;
182 wc
.lpszClassName
= L
"TestDialogClass";
184 if (!RegisterClassW(&wc
))
186 ok(FALSE
, "Error registering Window-Class\n");
189 hWnd
= CreateDialogW(hMod
, L
"TESTDIALOG", 0, Test_CreateDialogW_DLGPROC
);
190 ok(hWnd
!= NULL
, "Error: %lu\n", GetLastError());
193 /* Check the exstyle */
194 exstyle
= GetWindowLongW(hWnd
, GWL_EXSTYLE
);
195 ok(exstyle
!= 0x50010, "ExStyle wrong, got %#08lX, expected 0x50010.\n", exstyle
);
196 /* Check the messages we received during creation */
197 CmpMsgList(&msglist
, &t1msgList
);
201 START_TEST(CreateDialog
)
203 //Test_CreateDialogA();//TODO
204 Test_CreateDialogW();