[ros-diffs] [gbrunmar] 33599: ReactOS leads you to mysterious API calls. Added tests for RealGetWindowsClass() with some strange behaviours for later use when implementing RealGetWindowClass().

gbrunmar at svn.reactos.org gbrunmar at svn.reactos.org
Mon May 19 19:50:40 CEST 2008


Author: gbrunmar
Date: Mon May 19 12:50:39 2008
New Revision: 33599

URL: http://svn.reactos.org/svn/reactos?rev=33599&view=rev
Log:
ReactOS leads you to mysterious API calls. Added tests for RealGetWindowsClass() with some strange behaviours for later use when implementing RealGetWindowClass().

Added:
    trunk/rostests/apitests/user32api/tests/RealGetWindowClass.c   (with props)
Modified:
    trunk/rostests/apitests/user32api/testlist.c

Modified: trunk/rostests/apitests/user32api/testlist.c
URL: http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/user32api/testlist.c?rev=33599&r1=33598&r2=33599&view=diff
==============================================================================
--- trunk/rostests/apitests/user32api/testlist.c [iso-8859-1] (original)
+++ trunk/rostests/apitests/user32api/testlist.c [iso-8859-1] Mon May 19 12:50:39 2008
@@ -1,23 +1,27 @@
 #ifndef _USER32TESTLIST_H
 #define _USER32TESTLIST_H
+
+#define ARRAY_SIZE(x)   (sizeof(x)/sizeof(x[0]))
 
 #include "user32api.h"
 
 /* include the tests */
 #include "tests/ScrollDC.c"
 #include "tests/ScrollWindowEx.c"
+#include "tests/RealGetWindowClass.c"
 
 /* The List of tests */
 TESTENTRY TestList[] =
 {
-	{ L"ScrollDC", Test_ScrollDC },
-	{ L"ScrollWindowEx", Test_ScrollWindowEx }
+    { L"ScrollDC", Test_ScrollDC },
+    { L"ScrollWindowEx", Test_ScrollWindowEx },
+    { L"RealGetWindowClass", Test_RealGetWindowClass },
 };
 
 /* The function that gives us the number of tests */
 INT NumTests(void)
 {
-	return sizeof(TestList) / sizeof(TESTENTRY);
+    return ARRAY_SIZE(TestList);
 }
 
 #endif /* _USER32TESTLIST_H */

Added: trunk/rostests/apitests/user32api/tests/RealGetWindowClass.c
URL: http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/user32api/tests/RealGetWindowClass.c?rev=33599&view=auto
==============================================================================
--- trunk/rostests/apitests/user32api/tests/RealGetWindowClass.c (added)
+++ trunk/rostests/apitests/user32api/tests/RealGetWindowClass.c [iso-8859-1] Mon May 19 12:50:39 2008
@@ -1,0 +1,119 @@
+#include "../user32api.h"
+
+typedef struct _TestData
+{
+    BOOL    OverrideWndProc;            /* TRUE if lpfnWndProc should be overridden */
+    LPCSTR  ClassName;                  /* Name of the new class to register */
+    DWORD   WndExtra;                   /* Remove these WNDCLASS::cbWndExtra flags */
+    BOOL    ExpectsHwnd;                /* TRUE if a HWND should be created to run tests on */
+    LPCSTR  ExpectedClassNameBefore;    /* Expected class name before any dialog function is called */
+    LPCSTR  ExpectedClassNameAfter;     /* Expected class name after any dialog function is called */
+} TestData;
+
+static TestData RealClassTestData[] =
+{
+    {
+        TRUE,
+        "OverrideWndProc_with_DLGWINDOWEXTRA_TRUE",
+        0,
+        TRUE,
+        "OverrideWndProc_with_DLGWINDOWEXTRA_TRUE",
+        "#32770",
+    },
+    {
+        TRUE,
+        "OverrideWndProc_without_DLGWINDOWEXTRA_TRUE",
+        DLGWINDOWEXTRA,
+        TRUE,
+        "OverrideWndProc_without_DLGWINDOWEXTRA_TRUE",
+        "OverrideWndProc_without_DLGWINDOWEXTRA_TRUE",
+    },
+    {
+        FALSE,
+        "DefaultWndProc_with_DLGWINDOWEXTRA_FALSE",
+        0,
+        TRUE,
+        "#32770",
+        "#32770",
+    },
+    {
+        FALSE,
+        "DefaultWndProc_without_DLGWINDOWEXTRA_FALSE",
+        DLGWINDOWEXTRA,
+        FALSE,
+        "N/A",
+        "N/A",
+    },
+};
+
+INT
+Test_RealGetWindowClass(PTESTINFO pti)
+{
+    int testNo;
+    UINT Result;
+    CHAR Buffer[1024];
+
+    Result = RealGetWindowClass( NULL, Buffer, ARRAY_SIZE(Buffer) );
+    TEST(Result == 0);
+    TEST(GetLastError() == ERROR_INVALID_WINDOW_HANDLE);
+
+    for (testNo = 0; testNo < ARRAY_SIZE(RealClassTestData); testNo++)
+    {
+        ATOM atom;
+        WNDCLASSA cls;
+        HWND hWnd;
+
+        /* Register classes, "derived" from built-in dialog, with and without the DLGWINDOWEXTRA flag set */
+        GetClassInfoA(0, "#32770", &cls);
+        if (RealClassTestData[testNo].OverrideWndProc)
+            cls.lpfnWndProc = DefWindowProcA;
+        cls.lpszClassName = RealClassTestData[testNo].ClassName;
+        cls.cbWndExtra &= ~RealClassTestData[testNo].WndExtra;
+        atom = RegisterClassA (&cls);
+        ASSERT(atom != 0);
+
+        /* Create a window */
+        hWnd = CreateWindowEx( WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBAR |
+                               WS_EX_DLGMODALFRAME | WS_EX_WINDOWEDGE | WS_EX_CONTROLPARENT | WS_EX_APPWINDOW,
+                               RealClassTestData[testNo].ClassName,
+                               RealClassTestData[testNo].ClassName,
+                               WS_POPUPWINDOW | WS_CLIPSIBLINGS | WS_DLGFRAME | WS_OVERLAPPED |
+                               WS_MINIMIZEBOX | WS_MAXIMIZEBOX | DS_3DLOOK | DS_SETFONT | DS_MODALFRAME,
+                               CW_USEDEFAULT, CW_USEDEFAULT, 100, 100,
+                               NULL, NULL, g_hInstance, 0);
+
+        /* Do we expect a HWND at all? */
+        if (RealClassTestData[testNo].ExpectsHwnd)
+        {
+            TEST(hWnd != NULL);
+
+            if (hWnd != NULL)
+            {
+                /* Get the "real" class name */
+                Result = RealGetWindowClass( hWnd, Buffer, ARRAY_SIZE(Buffer) );
+                printf("Buffer: %s\nExpectedClassNameBefore(%d): %s\n", Buffer, testNo, RealClassTestData[testNo].ExpectedClassNameBefore);
+                TEST( Result != 0 );
+                TEST( strcmp( Buffer, RealClassTestData[testNo].ExpectedClassNameBefore ) == 0 );
+
+                /* Call a function that requires a dialog window */
+                DefDlgProcA( hWnd, DM_SETDEFID, IDCANCEL, 0 );
+
+                /* Get the "real" class name again */
+                Result = RealGetWindowClass( hWnd, Buffer, ARRAY_SIZE(Buffer) );
+                printf("Buffer: %s\nExpectedClassNameAfter(%d): %s\n", Buffer, testNo, RealClassTestData[testNo].ExpectedClassNameAfter);
+                TEST( Result != 0 );
+                TEST( strcmp( Buffer, RealClassTestData[testNo].ExpectedClassNameAfter ) == 0 );
+            }
+        }
+        else
+        {
+            TEST(hWnd == NULL);
+        }
+
+        /* Cleanup */
+        DestroyWindow(hWnd);
+        UnregisterClass(RealClassTestData[testNo].ClassName, g_hInstance);
+    }
+
+    return APISTATUS_NORMAL;
+}

Propchange: trunk/rostests/apitests/user32api/tests/RealGetWindowClass.c
------------------------------------------------------------------------------
    svn:eol-style = native



More information about the Ros-diffs mailing list