mirror of
https://github.com/reactos/reactos.git
synced 2025-02-23 17:05:46 +00:00
ReactOS leads you to mysterious API calls. Added tests for RealGetWindowsClass() with some strange behaviours for later use when implementing RealGetWindowClass().
svn path=/trunk/; revision=33599
This commit is contained in:
parent
67e132ff6b
commit
e657a0d73a
2 changed files with 126 additions and 3 deletions
|
@ -1,23 +1,27 @@
|
||||||
#ifndef _USER32TESTLIST_H
|
#ifndef _USER32TESTLIST_H
|
||||||
#define _USER32TESTLIST_H
|
#define _USER32TESTLIST_H
|
||||||
|
|
||||||
|
#define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
|
||||||
|
|
||||||
#include "user32api.h"
|
#include "user32api.h"
|
||||||
|
|
||||||
/* include the tests */
|
/* include the tests */
|
||||||
#include "tests/ScrollDC.c"
|
#include "tests/ScrollDC.c"
|
||||||
#include "tests/ScrollWindowEx.c"
|
#include "tests/ScrollWindowEx.c"
|
||||||
|
#include "tests/RealGetWindowClass.c"
|
||||||
|
|
||||||
/* The List of tests */
|
/* The List of tests */
|
||||||
TESTENTRY TestList[] =
|
TESTENTRY TestList[] =
|
||||||
{
|
{
|
||||||
{ L"ScrollDC", Test_ScrollDC },
|
{ L"ScrollDC", Test_ScrollDC },
|
||||||
{ L"ScrollWindowEx", Test_ScrollWindowEx }
|
{ L"ScrollWindowEx", Test_ScrollWindowEx },
|
||||||
|
{ L"RealGetWindowClass", Test_RealGetWindowClass },
|
||||||
};
|
};
|
||||||
|
|
||||||
/* The function that gives us the number of tests */
|
/* The function that gives us the number of tests */
|
||||||
INT NumTests(void)
|
INT NumTests(void)
|
||||||
{
|
{
|
||||||
return sizeof(TestList) / sizeof(TESTENTRY);
|
return ARRAY_SIZE(TestList);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* _USER32TESTLIST_H */
|
#endif /* _USER32TESTLIST_H */
|
||||||
|
|
119
rostests/apitests/user32api/tests/RealGetWindowClass.c
Normal file
119
rostests/apitests/user32api/tests/RealGetWindowClass.c
Normal file
|
@ -0,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;
|
||||||
|
}
|
Loading…
Reference in a new issue