Author: tfaber
Date: Thu Apr 16 11:35:23 2015
New Revision: 67213
URL:
http://svn.reactos.org/svn/reactos?rev=67213&view=rev
Log:
[USER32_APITEST]
- Add a test for CreateDialog. Patch by Andreas Maier.
ROSTESTS-163 #resolve
Added:
trunk/rostests/apitests/user32/CreateDialog.c (with props)
Modified:
trunk/rostests/apitests/user32/CMakeLists.txt
trunk/rostests/apitests/user32/testlist.c
trunk/rostests/apitests/user32/user32_apitest.rc
Modified: trunk/rostests/apitests/user32/CMakeLists.txt
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/user32/CMakeList…
==============================================================================
--- trunk/rostests/apitests/user32/CMakeLists.txt [iso-8859-1] (original)
+++ trunk/rostests/apitests/user32/CMakeLists.txt [iso-8859-1] Thu Apr 16 11:35:23 2015
@@ -2,6 +2,7 @@
list(APPEND SOURCE
AttachThreadInput.c
helper.c
+ CreateDialog.c
CreateIconFromResourceEx.c
DeferWindowPos.c
DestroyCursorIcon.c
Added: trunk/rostests/apitests/user32/CreateDialog.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/user32/CreateDia…
==============================================================================
--- trunk/rostests/apitests/user32/CreateDialog.c (added)
+++ trunk/rostests/apitests/user32/CreateDialog.c [iso-8859-1] Thu Apr 16 11:35:23 2015
@@ -0,0 +1,205 @@
+/*
+ * PROJECT: ReactOS api tests
+ * LICENSE: GPL - See COPYING in the top level directory
+ * PURPOSE: Test for CreateDialog
+ * PROGRAMMERS: Andreas Maier
+ */
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <apitest.h>
+
+#include <wingdi.h>
+#include <winuser.h>
+
+#define TEST_MAX_MSG 50
+
+// cmpflag
+#define MSGLST_CMP_WP 0x1
+#define MSGLST_CMP_LP 0x2
+#define MSGLST_CMP_RES 0x4
+#define MSGLST_CMP_ALL (MSGLST_CMP_WP | MSGLST_CMP_LP | MSGLST_CMP_RES)
+
+typedef struct
+{
+ BOOL DlgProc; // true = DlgProg, false WndProc
+ UINT msg;
+ WPARAM wParam;
+ LPARAM lParam;
+ int result;
+ int cmpflag;
+} tagMsgInfo;
+
+typedef struct
+{
+ int msgCount;
+ tagMsgInfo msgList[TEST_MAX_MSG];
+} tagMsgList;
+
+tagMsgList msglist;
+
+/* the expected message-list */
+const tagMsgList t1msgList =
+{
+ 9,
+ {
+ // DlgProc, msg, wParam, lParam, result, cmpflag
+ { FALSE, WM_NCCREATE, 0, 0, 1, MSGLST_CMP_WP |
MSGLST_CMP_RES },
+ { FALSE, WM_NCCALCSIZE, 0, 0, 0, MSGLST_CMP_WP |
MSGLST_CMP_RES },
+ { FALSE, WM_CREATE, 0, 0, 0, MSGLST_CMP_WP |
MSGLST_CMP_RES },
+ { FALSE, WM_SIZE, 0, 0x145012c, 0, MSGLST_CMP_ALL }, //
FIXME: size is 400x400 on Win7?
+ { FALSE, WM_MOVE, 0, 0x0160003, 0, MSGLST_CMP_ALL },
+ { TRUE, WM_SETFONT, 0, 0, 0, MSGLST_CMP_LP |
MSGLST_CMP_RES },
+ { FALSE, WM_SETFONT, 0, 0, 0, MSGLST_CMP_LP |
MSGLST_CMP_RES },
+ { TRUE, WM_INITDIALOG, 0, 0, 0, MSGLST_CMP_LP |
MSGLST_CMP_RES },
+ { FALSE, WM_INITDIALOG, 0, 0, 0, MSGLST_CMP_LP |
MSGLST_CMP_RES },
+ }
+};
+
+void DumpMsgList(const char* lstName, const tagMsgList *ml)
+{
+ const char *dlgProcName;
+ int i1;
+
+ printf("%s\n", lstName);
+ for (i1 = 0; i1 < ml->msgCount; i1++)
+ {
+ dlgProcName = (ml->msgList[i1].DlgProc) ? "DlgProc" :
"WndProc";
+ printf("#%.3d %s, msg 0x%x, wParam 0x%x, lParam 0x%Ix, result %d\n",
+ i1,
+ dlgProcName,
+ ml->msgList[i1].msg,
+ ml->msgList[i1].wParam,
+ ml->msgList[i1].lParam,
+ ml->msgList[i1].result);
+ }
+}
+
+BOOL CmpMsgList(const tagMsgList *recvd,
+ const tagMsgList *expect)
+{
+ int i1;
+ BOOL isOk;
+
+ isOk = TRUE;
+ if (recvd->msgCount != expect->msgCount)
+ {
+ ok(FALSE, "%d messages expected, %d messages received!\n",
+ expect->msgCount, recvd->msgCount);
+ isOk = FALSE;
+ }
+ else
+ {
+ for (i1 = 0; i1 < recvd->msgCount; i1++)
+ {
+ if (expect->msgList[i1].DlgProc != recvd->msgList[i1].DlgProc)
+ isOk = FALSE;
+ if (expect->msgList[i1].msg != recvd->msgList[i1].msg)
+ isOk = FALSE;
+ if ((expect->msgList[i1].cmpflag & MSGLST_CMP_WP) &&
+ (expect->msgList[i1].wParam != recvd->msgList[i1].wParam))
+ isOk = FALSE;
+ if ((expect->msgList[i1].cmpflag & MSGLST_CMP_LP) &&
+ (expect->msgList[i1].lParam != recvd->msgList[i1].lParam))
+ isOk = FALSE;
+ if ((expect->msgList[i1].cmpflag & MSGLST_CMP_RES) &&
+ (expect->msgList[i1].result != recvd->msgList[i1].result))
+ isOk = FALSE;
+ if (!isOk)
+ {
+ ok(FALSE, "Message #%.3d not equal\n", i1);
+ break;
+ }
+ }
+ }
+
+ if (!isOk)
+ {
+ DumpMsgList("RECEIVED", recvd);
+ DumpMsgList("EXPECTED", expect);
+ return FALSE;
+ }
+
+ ok(TRUE, "\n");
+ return TRUE;
+}
+
+INT_PTR CALLBACK Test_CreateDialogW_DLGPROC(HWND hWnd, UINT msg, WPARAM wParam, LPARAM
lParam)
+{
+ if (msglist.msgCount < TEST_MAX_MSG)
+ {
+ msglist.msgList[msglist.msgCount].DlgProc = TRUE;
+ msglist.msgList[msglist.msgCount].msg = msg;
+ msglist.msgList[msglist.msgCount].wParam = wParam;
+ msglist.msgList[msglist.msgCount].lParam = lParam;
+ msglist.msgList[msglist.msgCount].result = 0;
+ msglist.msgCount++;
+ }
+ trace("DlgProc: msg 0x%x, wParam 0x%x, lParam 0x%Ix\n",
+ msg, wParam, lParam);
+ return FALSE;
+}
+
+LRESULT CALLBACK Test_CreateDialogW_WNDPROC(HWND hWnd, UINT msg, WPARAM wParam, LPARAM
lParam)
+{
+ LRESULT res;
+ res = DefDlgProcW(hWnd, msg, wParam, lParam);
+
+ if (msglist.msgCount < TEST_MAX_MSG)
+ {
+ msglist.msgList[msglist.msgCount].DlgProc = FALSE;
+ msglist.msgList[msglist.msgCount].msg = msg;
+ msglist.msgList[msglist.msgCount].wParam = wParam;
+ msglist.msgList[msglist.msgCount].lParam = lParam;
+ msglist.msgList[msglist.msgCount].result = res;
+ msglist.msgCount++;
+ }
+ trace("WndProc: msg 0x%x, wParam 0x%x, lParam 0x%Ix, result %Id\n",
+ msg, wParam, lParam, res);
+ return res;
+}
+
+void Test_CreateDialogW()
+{
+ HWND hWnd;
+ HMODULE hMod;
+ DWORD exstyle;
+ WNDCLASSW wc;
+
+ hMod = GetModuleHandle(NULL);
+ ok(hMod != NULL, "\n");
+
+ msglist.msgCount = 0;
+ wc.style = CS_HREDRAW | CS_VREDRAW;
+ wc.lpfnWndProc = Test_CreateDialogW_WNDPROC;
+ wc.cbClsExtra = 0;
+ wc.cbWndExtra = DLGWINDOWEXTRA;
+ wc.hInstance = hMod;
+ wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
+ wc.hCursor = LoadCursor(NULL, IDC_ARROW);
+ wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1);
+ wc.lpszMenuName = NULL;
+ wc.lpszClassName = L"TestDialogClass";
+
+ if (!RegisterClassW(&wc))
+ {
+ ok(FALSE, "Error registering Window-Class\n");
+ return;
+ }
+ hWnd = CreateDialogW(hMod, L"TESTDIALOG", 0, Test_CreateDialogW_DLGPROC);
+ ok(hWnd != NULL, "Error: %lu\n", GetLastError());
+ if (hWnd != NULL)
+ {
+ /* Check the exstyle */
+ exstyle = GetWindowLongW(hWnd, GWL_EXSTYLE);
+ ok(exstyle != 0x50010, "ExStyle wrong, got %#08lX, expected
0x50010.\n", exstyle);
+ /* Check the messages we received during creation */
+ CmpMsgList(&msglist, &t1msgList);
+ }
+}
+
+START_TEST(CreateDialog)
+{
+ //Test_CreateDialogA();//TODO
+ Test_CreateDialogW();
+}
Propchange: trunk/rostests/apitests/user32/CreateDialog.c
------------------------------------------------------------------------------
svn:eol-style = native
Modified: trunk/rostests/apitests/user32/testlist.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/user32/testlist.…
==============================================================================
--- trunk/rostests/apitests/user32/testlist.c [iso-8859-1] (original)
+++ trunk/rostests/apitests/user32/testlist.c [iso-8859-1] Thu Apr 16 11:35:23 2015
@@ -4,6 +4,7 @@
#include <apitest.h>
extern void func_AttachThreadInput(void);
+extern void func_CreateDialog(void);
extern void func_CreateIconFromResourceEx(void);
extern void func_DeferWindowPos(void);
extern void func_DestroyCursorIcon(void);
@@ -34,6 +35,7 @@
const struct test winetest_testlist[] =
{
{ "AttachThreadInput", func_AttachThreadInput },
+ { "CreateDialog", func_CreateDialog },
{ "CreateIconFromResourceEx", func_CreateIconFromResourceEx },
{ "DeferWindowPos", func_DeferWindowPos },
{ "DestroyCursorIcon", func_DestroyCursorIcon },
Modified: trunk/rostests/apitests/user32/user32_apitest.rc
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/user32/user32_ap…
==============================================================================
--- trunk/rostests/apitests/user32/user32_apitest.rc [iso-8859-1] (original)
+++ trunk/rostests/apitests/user32/user32_apitest.rc [iso-8859-1] Thu Apr 16 11:35:23
2015
@@ -5,3 +5,11 @@
IDI_TEST ICON "test.ico"
TESTCURSOR CURSOR "test.cur"
+
+TESTDIALOG DIALOG 0,0, 200,200
+CLASS "TestDialogClass"
+CAPTION "Testdialog"
+FONT 8, "MS Shell Dlg"
+{
+ PUSHBUTTON "a button", 1, 5,5, 100,20
+}