mirror of
https://github.com/reactos/reactos.git
synced 2025-07-23 03:03:37 +00:00
[user32_apitest]
- Add some more tests for SetCursorPos svn path=/trunk/; revision=51312
This commit is contained in:
parent
dcd0dff4cc
commit
c08567e81e
1 changed files with 140 additions and 16 deletions
|
@ -10,29 +10,153 @@
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
HHOOK hMouseHook;
|
HHOOK hMouseHookLL, hMouseHook;
|
||||||
int hook_calls = 0;
|
|
||||||
|
|
||||||
LRESULT CALLBACK LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam)
|
struct _test_info
|
||||||
{
|
{
|
||||||
hook_calls++;
|
int ll_hook_called;
|
||||||
|
int hook_called;
|
||||||
|
int mouse_move_called;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _test_info info[] = { {0,0,0}, /* SetCursorPos without a window */
|
||||||
|
{1,2,0}, /* mouse_event without a window */
|
||||||
|
{0,1,1}, /* SetCursorPos with a window */
|
||||||
|
{1,1,1}, /* mouse_event with a window */
|
||||||
|
{0,1,1}, /* multiple SetCursorPos with a window with coalescing */
|
||||||
|
{0,2,2}, /* multiple SetCursorPos with a window without coalescing */
|
||||||
|
{2,1,1}, /* multiple mouse_event with a window with coalescing */
|
||||||
|
{2,2,2}, /* multiple mouse_event with a window without coalescing */
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _test_info results[8];
|
||||||
|
int test_no = 0;
|
||||||
|
|
||||||
|
|
||||||
|
LRESULT CALLBACK MouseLLHookProc(int nCode, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
results[test_no].ll_hook_called++;
|
||||||
|
return CallNextHookEx(hMouseHookLL, nCode, wParam, lParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
results[test_no].hook_called++;
|
||||||
return CallNextHookEx(hMouseHook, nCode, wParam, lParam);
|
return CallNextHookEx(hMouseHook, nCode, wParam, lParam);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
|
||||||
|
{
|
||||||
|
if(msg == WM_MOUSEMOVE)
|
||||||
|
results[test_no].mouse_move_called++;
|
||||||
|
|
||||||
|
return DefWindowProcA( hWnd, msg, wParam, lParam );
|
||||||
|
}
|
||||||
|
|
||||||
|
static HWND CreateTestWindow()
|
||||||
|
{
|
||||||
|
MSG msg;
|
||||||
|
WNDCLASSA wclass;
|
||||||
|
HANDLE hInstance = GetModuleHandleA( NULL );
|
||||||
|
HWND hWndTest;
|
||||||
|
|
||||||
|
wclass.lpszClassName = "MouseInputTestClass";
|
||||||
|
wclass.style = CS_HREDRAW | CS_VREDRAW;
|
||||||
|
wclass.lpfnWndProc = WndProc;
|
||||||
|
wclass.hInstance = hInstance;
|
||||||
|
wclass.hIcon = LoadIconA( 0, IDI_APPLICATION );
|
||||||
|
wclass.hCursor = LoadCursorA( NULL, IDC_ARROW );
|
||||||
|
wclass.hbrBackground = (HBRUSH)( COLOR_WINDOW + 1 );
|
||||||
|
wclass.lpszMenuName = 0;
|
||||||
|
wclass.cbClsExtra = 0;
|
||||||
|
wclass.cbWndExtra = 0;
|
||||||
|
RegisterClassA( &wclass );
|
||||||
|
/* create the test window that will receive the keystrokes */
|
||||||
|
hWndTest = CreateWindowA( wclass.lpszClassName, "MouseInputTestTest",
|
||||||
|
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, 100, 100,
|
||||||
|
NULL, NULL, hInstance, NULL);
|
||||||
|
assert( hWndTest );
|
||||||
|
ShowWindow( hWndTest, SW_SHOWMAXIMIZED);
|
||||||
|
SetWindowPos( hWndTest, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE );
|
||||||
|
SetForegroundWindow( hWndTest );
|
||||||
|
UpdateWindow( hWndTest);
|
||||||
|
SetFocus(hWndTest);
|
||||||
|
|
||||||
|
/* flush pending messages */
|
||||||
|
while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessageA( &msg );
|
||||||
|
|
||||||
|
return hWndTest;
|
||||||
|
}
|
||||||
|
|
||||||
void Test_SetCursorPos()
|
void Test_SetCursorPos()
|
||||||
{
|
{
|
||||||
hMouseHook = SetWindowsHookEx(WH_MOUSE_LL, LowLevelMouseProc, GetModuleHandleA( NULL ), 0);
|
HWND hwnd;
|
||||||
ok(hMouseHook!=NULL,"failed to set hook\n");
|
MSG msg;
|
||||||
|
int i;
|
||||||
|
|
||||||
/* try SetCursorPos */
|
memset(results, sizeof(results), 0);
|
||||||
SetCursorPos(0,0);
|
|
||||||
ok (hook_calls == 0, "hooks shouldn't be called\n");
|
|
||||||
|
|
||||||
/* try mouse_event with MOUSEEVENTF_MOVE*/
|
hMouseHookLL = SetWindowsHookEx(WH_MOUSE_LL, MouseLLHookProc, GetModuleHandleA( NULL ), 0);
|
||||||
mouse_event(MOUSEEVENTF_MOVE, 100,100, 0,0);
|
hMouseHook = SetWindowsHookEx(WH_MOUSE, MouseHookProc, GetModuleHandleA( NULL ), 0);
|
||||||
ok (hook_calls == 1, "hooks should have been called\n");
|
ok(hMouseHook!=NULL,"failed to set hook\n");
|
||||||
|
ok(hMouseHookLL!=NULL,"failed to set hook\n");
|
||||||
|
|
||||||
|
test_no = 0;
|
||||||
|
SetCursorPos(1,1);
|
||||||
|
while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessageA( &msg );
|
||||||
|
|
||||||
|
test_no = 1;
|
||||||
|
mouse_event(MOUSEEVENTF_MOVE, 2,2, 0,0);
|
||||||
|
while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessageA( &msg );
|
||||||
|
|
||||||
|
hwnd = CreateTestWindow();
|
||||||
|
SetCapture(hwnd);
|
||||||
|
|
||||||
|
test_no = 2;
|
||||||
|
SetCursorPos(50,50);
|
||||||
|
while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessageA( &msg );
|
||||||
|
|
||||||
|
test_no = 3;
|
||||||
|
mouse_event(MOUSEEVENTF_MOVE, 100,100, 0,0);
|
||||||
|
while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessageA( &msg );
|
||||||
|
|
||||||
|
test_no = 4;
|
||||||
|
SetCursorPos(50,50);
|
||||||
|
SetCursorPos(60,60);
|
||||||
|
while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessageA( &msg );
|
||||||
|
|
||||||
|
test_no = 5;
|
||||||
|
SetCursorPos(50,50);
|
||||||
|
while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessageA( &msg );
|
||||||
|
SetCursorPos(60,60);
|
||||||
|
while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessageA( &msg );
|
||||||
|
|
||||||
|
test_no = 6;
|
||||||
|
mouse_event(MOUSEEVENTF_MOVE, 50,50, 0,0);
|
||||||
|
mouse_event(MOUSEEVENTF_MOVE, 60,60, 0,0);
|
||||||
|
while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessageA( &msg );
|
||||||
|
|
||||||
|
test_no = 7;
|
||||||
|
mouse_event(MOUSEEVENTF_MOVE, 50,50, 0,0);
|
||||||
|
while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessageA( &msg );
|
||||||
|
mouse_event(MOUSEEVENTF_MOVE, 60,60, 0,0);
|
||||||
|
while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessageA( &msg );
|
||||||
|
|
||||||
|
for(i = 0; i< 8; i++)
|
||||||
|
{
|
||||||
|
#define TEST(s,x,y) ok(y == x, "%d: %s called %d times instead of %d\n",i,s, y,x);
|
||||||
|
TEST("WH_MOUSE_LL", info[i].ll_hook_called, results[i].ll_hook_called);
|
||||||
|
/* WH_MOUSE results vary greatly among windows versions */
|
||||||
|
//TEST("WH_MOUSE", info[i].hook_called, results[i].hook_called);
|
||||||
|
TEST("WM_MOUSEMOVE", info[i].mouse_move_called, results[i].mouse_move_called);
|
||||||
|
}
|
||||||
|
|
||||||
|
SetCapture(NULL);
|
||||||
|
DestroyWindow(hwnd);
|
||||||
|
|
||||||
|
UnhookWindowsHookEx (hMouseHook);
|
||||||
|
UnhookWindowsHookEx (hMouseHookLL);
|
||||||
|
|
||||||
UnhookWindowsHookEx (hMouseHook);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
START_TEST(SetCursorPos)
|
START_TEST(SetCursorPos)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue