Author: jimtabor Date: Sun Nov 25 02:53:09 2012 New Revision: 57765
URL: http://svn.reactos.org/svn/reactos?rev=57765&view=rev Log: [WineTests] - Sync to 1.5.18
Modified: trunk/rostests/winetests/user32/msg.c trunk/rostests/winetests/user32/resource.c trunk/rostests/winetests/user32/win.c
Modified: trunk/rostests/winetests/user32/msg.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/user32/msg.c?rev... ============================================================================== --- trunk/rostests/winetests/user32/msg.c [iso-8859-1] (original) +++ trunk/rostests/winetests/user32/msg.c [iso-8859-1] Sun Nov 25 02:53:09 2012 @@ -6795,6 +6795,7 @@ wnd_event.hwnd = CreateWindowExA(0, "TestParentClass", "Test parent", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 100, 100, 200, 200, 0, 0, 0, NULL); ok (wnd_event.hwnd != 0, "Failed to create parent window\n"); + flush_events(); flush_sequence(); log_all_parent_messages++; wnd_event.start_event = CreateEventA( NULL, TRUE, FALSE, NULL ); @@ -11031,11 +11032,6 @@ } else { - if (wp.ptMinPosition.x != sw[i].wp_min.x || wp.ptMinPosition.y != sw[i].wp_min.y) - todo_wine - ok(wp.ptMinPosition.x == sw[i].wp_min.x && wp.ptMinPosition.y == sw[i].wp_min.y, - "expected %d,%d got %d,%d\n", sw[i].wp_min.x, sw[i].wp_min.y, wp.ptMinPosition.x, wp.ptMinPosition.y); - else ok(wp.ptMinPosition.x == sw[i].wp_min.x && wp.ptMinPosition.y == sw[i].wp_min.y, "expected %d,%d got %d,%d\n", sw[i].wp_min.x, sw[i].wp_min.y, wp.ptMinPosition.x, wp.ptMinPosition.y); } @@ -11268,8 +11264,7 @@ ok(GetClassInfo(0, "#32770", &cls), "GetClassInfo failed\n"); cls.lpszClassName = "MyDialogClass"; cls.hInstance = GetModuleHandle(0); - /* need a cast since a dlgproc is used as a wndproc */ - cls.lpfnWndProc = (WNDPROC)test_dlg_proc; + cls.lpfnWndProc = test_dlg_proc; if (!RegisterClass(&cls)) assert(0);
flush_sequence(); @@ -13792,6 +13787,27 @@ { 0 } };
+struct layered_window_info +{ + HWND hwnd; + HDC hdc; + SIZE size; + HANDLE event; + BOOL ret; +}; + +static DWORD CALLBACK update_layered_proc( void *param ) +{ + struct layered_window_info *info = param; + POINT src = { 0, 0 }; + + info->ret = pUpdateLayeredWindow( info->hwnd, 0, NULL, &info->size, + info->hdc, &src, 0, NULL, ULW_OPAQUE ); + ok( info->ret, "failed\n"); + SetEvent( info->event ); + return 0; +} + static void test_layered_window(void) { HWND hwnd; @@ -13801,6 +13817,9 @@ SIZE size; POINT pos, src; RECT rect, client; + HANDLE thread; + DWORD tid; + struct layered_window_info info;
if (!pUpdateLayeredWindow) { @@ -13892,6 +13911,26 @@ GetClientRect( hwnd, &rect ); ok( (rect.right == 200 && rect.bottom == 250) || broken(rect.right == client.right - 100 && rect.bottom == client.bottom - 50), + "wrong client rect %d,%d,%d,%d\n", rect.left, rect.top, rect.right, rect.bottom ); + + SetWindowLong( hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_LAYERED ); + info.hwnd = hwnd; + info.hdc = hdc; + info.size.cx = 250; + info.size.cy = 300; + info.event = CreateEventA( NULL, TRUE, FALSE, NULL ); + info.ret = FALSE; + thread = CreateThread( NULL, 0, update_layered_proc, &info, 0, &tid ); + ok( WaitForSingleObject( info.event, 1000 ) == 0, "wait failed\n" ); + ok( info.ret, "UpdateLayeredWindow failed in other thread\n" ); + WaitForSingleObject( thread, 1000 ); + CloseHandle( thread ); + GetWindowRect( hwnd, &rect ); + ok( rect.left == 200 && rect.top == 200 && rect.right == 450 && rect.bottom == 500, + "wrong window rect %d,%d,%d,%d\n", rect.left, rect.top, rect.right, rect.bottom ); + GetClientRect( hwnd, &rect ); + ok( (rect.right == 250 && rect.bottom == 300) || + broken(rect.right == client.right - 50 && rect.bottom == client.bottom), "wrong client rect %d,%d,%d,%d\n", rect.left, rect.top, rect.right, rect.bottom );
DestroyWindow( hwnd );
Modified: trunk/rostests/winetests/user32/resource.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/user32/resource.... ============================================================================== --- trunk/rostests/winetests/user32/resource.c [iso-8859-1] (original) +++ trunk/rostests/winetests/user32/resource.c [iso-8859-1] Sun Nov 25 02:53:09 2012 @@ -170,11 +170,11 @@
ac[n].cmd = 0xfff0; ac[n].key = 0xffff; - ac[n++].fVirt = (SHORT) 0x0000; + ac[n++].fVirt = 0x0000;
ac[n].cmd = 0xfff0; ac[n].key = 0xffff; - ac[n++].fVirt = (SHORT) 0x0001; + ac[n++].fVirt = 0x0001;
hAccel = CreateAcceleratorTable( &ac[0], n ); ok( hAccel != NULL, "create accelerator table\n");
Modified: trunk/rostests/winetests/user32/win.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/user32/win.c?rev... ============================================================================== --- trunk/rostests/winetests/user32/win.c [iso-8859-1] (original) +++ trunk/rostests/winetests/user32/win.c [iso-8859-1] Sun Nov 25 02:53:09 2012 @@ -50,6 +50,7 @@ static BOOL (WINAPI *pGetLayeredWindowAttributes)(HWND,COLORREF*,BYTE*,DWORD*); static BOOL (WINAPI *pSetLayeredWindowAttributes)(HWND,COLORREF,BYTE,DWORD); static BOOL (WINAPI *pUpdateLayeredWindow)(HWND,HDC,POINT*,SIZE*,HDC,POINT*,COLORREF,BLENDFUNCTION*,DWORD); +static BOOL (WINAPI *pUpdateLayeredWindowIndirect)(HWND,const UPDATELAYEREDWINDOWINFO*); static BOOL (WINAPI *pGetMonitorInfoA)(HMONITOR,LPMONITORINFO); static HMONITOR (WINAPI *pMonitorFromPoint)(POINT,DWORD); static int (WINAPI *pGetWindowRgnBox)(HWND,LPRECT); @@ -2636,7 +2637,7 @@ SetActiveWindow(0); check_wnd_state(0, 0, 0, 0);
- /*trace("testing SetActiveWindow %p\n", hwnd);*/ + trace("testing SetActiveWindow %p\n", hwnd);
ShowWindow(hwnd, SW_SHOW); check_wnd_state(hwnd, hwnd, hwnd, 0); @@ -2656,11 +2657,11 @@
SetWindowPos(hwnd,0,0,0,0,0,SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE|SWP_SHOWWINDOW); check_wnd_state(hwnd, hwnd, hwnd, 0); - + trace("testing ShowWindow SW_HIDE window %p\n", hwnd); ShowWindow(hwnd, SW_HIDE); check_wnd_state(0, 0, 0, 0);
- /*trace("testing SetActiveWindow on an invisible window %p\n", hwnd);*/ + trace("testing SetActiveWindow on an invisible window %p\n", hwnd); SetActiveWindow(hwnd); check_wnd_state(hwnd, hwnd, hwnd, 0);
@@ -6074,6 +6075,47 @@ ok( !ret, "GetLayeredWindowAttributes should fail on layered but not initialized window\n" ); ret = pUpdateLayeredWindow( hwnd, 0, NULL, &sz, hdc, &pt, 0, NULL, ULW_OPAQUE ); ok( ret, "UpdateLayeredWindow should succeed on layered window\n" ); + ret = pUpdateLayeredWindow( hwnd, 0, NULL, &sz, hdc, &pt, 0, NULL, ULW_OPAQUE | ULW_EX_NORESIZE ); + ok( !ret, "UpdateLayeredWindow should fail with ex flag\n" ); + ok( GetLastError() == ERROR_INVALID_PARAMETER, "wrong error %u\n", GetLastError() ); + if (pUpdateLayeredWindowIndirect) + { + UPDATELAYEREDWINDOWINFO info; + info.cbSize = sizeof(info); + info.hdcDst = 0; + info.pptDst = NULL; + info.psize = &sz; + info.hdcSrc = hdc; + info.pptSrc = &pt; + info.crKey = 0; + info.pblend = NULL; + info.dwFlags = ULW_OPAQUE | ULW_EX_NORESIZE; + info.prcDirty = NULL; + ret = pUpdateLayeredWindowIndirect( hwnd, &info ); + ok( ret, "UpdateLayeredWindowIndirect should succeed on layered window\n" ); + sz.cx--; + ret = pUpdateLayeredWindowIndirect( hwnd, &info ); + ok( !ret, "UpdateLayeredWindowIndirect should fail\n" ); + ok( GetLastError() == ERROR_INCORRECT_SIZE || broken(GetLastError() == ERROR_MR_MID_NOT_FOUND), + "wrong error %u\n", GetLastError() ); + info.dwFlags = ULW_OPAQUE; + ret = pUpdateLayeredWindowIndirect( hwnd, &info ); + ok( ret, "UpdateLayeredWindowIndirect should succeed on layered window\n" ); + sz.cx++; + info.dwFlags = ULW_OPAQUE | 0xf00; + ret = pUpdateLayeredWindowIndirect( hwnd, &info ); + ok( !ret, "UpdateLayeredWindowIndirect should fail\n" ); + ok( GetLastError() == ERROR_INVALID_PARAMETER, "wrong error %u\n", GetLastError() ); + info.cbSize--; + info.dwFlags = ULW_OPAQUE; + ret = pUpdateLayeredWindowIndirect( hwnd, &info ); + ok( !ret, "UpdateLayeredWindowIndirect should fail\n" ); + ok( GetLastError() == ERROR_INVALID_PARAMETER, "wrong error %u\n", GetLastError() ); + ret = pUpdateLayeredWindowIndirect( hwnd, NULL ); + ok( !ret, "UpdateLayeredWindowIndirect should fail\n" ); + ok( GetLastError() == ERROR_INVALID_PARAMETER, "wrong error %u\n", GetLastError() ); + } + ret = pSetLayeredWindowAttributes( hwnd, 0x654321, 22, LWA_COLORKEY | LWA_ALPHA ); ok( ret, "SetLayeredWindowAttributes should succeed on layered window\n" ); ret = pGetLayeredWindowAttributes( hwnd, &key, &alpha, &flags ); @@ -7062,6 +7104,228 @@ ok(ret, "UnregisterClass(my_window) failed\n"); }
+static void test_map_points(void) +{ + BOOL ret; + POINT p; + HWND wnd, wnd0, dwnd; + INT n; + DWORD err; + POINT pos = { 100, 200 }; + int width = 150; + int height = 150; + RECT window_rect; + RECT client_rect; + + /* Create test windows */ + wnd = CreateWindow("static", "test1", WS_POPUP, pos.x, pos.y, width, height, NULL, NULL, NULL, NULL); + ok(wnd != NULL, "Failed %p\n", wnd); + wnd0 = CreateWindow("static", "test2", WS_POPUP, 0, 0, width, height, NULL, NULL, NULL, NULL); + ok(wnd0 != NULL, "Failed %p\n", wnd); + dwnd = CreateWindow("static", "test3", 0, 200, 300, 150, 150, NULL, NULL, NULL, NULL); + DestroyWindow(dwnd); + ok(dwnd != NULL, "Failed %p\n", dwnd); + + /* Verify window rect and client rect (they should have the same width and height) */ + GetWindowRect(wnd, &window_rect); + ok(window_rect.left == pos.x, "left is %d instead of %d\n", window_rect.left, pos.x); + ok(window_rect.top == pos.y, "top is %d instead of %d\n", window_rect.top, pos.y); + ok(window_rect.right == pos.x + width, "right is %d instead of %d\n", window_rect.right, pos.x + width); + ok(window_rect.bottom == pos.y + height, "bottom is %d instead of %d\n", window_rect.bottom, pos.y + height); + GetClientRect(wnd, &client_rect); + ok(client_rect.left == 0, "left is %d instead of 0\n", client_rect.left); + ok(client_rect.top == 0, "top is %d instead of 0\n", client_rect.top); + ok(client_rect.right == width, "right is %d instead of %d\n", client_rect.right, width); + ok(client_rect.bottom == height, "bottom is %d instead of %d\n", client_rect.bottom, height); + + /* Test MapWindowPoints */ + + /* MapWindowPoints(NULL or wnd, NULL or wnd, NULL, 1); crashes on Windows */ + + SetLastError(0xdeadbeef); + n = MapWindowPoints(NULL, NULL, NULL, 0); + err = GetLastError(); + ok(n == 0, "Got %d, expected %d\n", n, 0); + ok(err == 0xdeadbeef, "Got %x, expected %x\n", err, 0xdeadbeef); + + SetLastError(0xdeadbeef); + n = MapWindowPoints(wnd, wnd, NULL, 0); + err = GetLastError(); + ok(n == 0, "Got %d, expected %d\n", n, 0); + ok(err == 0xdeadbeef, "Got %x, expected %x\n", err, 0xdeadbeef); + + n = MapWindowPoints(wnd, NULL, NULL, 0); + ok(n == MAKELONG(window_rect.left, window_rect.top), "Got %x, expected %x\n", + n, MAKELONG(window_rect.left, window_rect.top)); + + n = MapWindowPoints(NULL, wnd, NULL, 0); + ok(n == MAKELONG(-window_rect.left, -window_rect.top), "Got %x, expected %x\n", + n, MAKELONG(-window_rect.left, -window_rect.top)); + + SetLastError(0xdeadbeef); + p.x = p.y = 100; + n = MapWindowPoints(dwnd, NULL, &p, 1); + err = GetLastError(); + ok(n == 0, "Got %d, expected %d\n", n, 0); + ok(p.x == 100 && p.y == 100, "Failed got(%d, %d), expected (%d, %d)\n", p.x, p.y, 100, 100); + ok(err == ERROR_INVALID_WINDOW_HANDLE, "Got %x, expected %x\n", err, ERROR_INVALID_WINDOW_HANDLE); + + SetLastError(0xdeadbeef); + p.x = p.y = 100; + n = MapWindowPoints(dwnd, wnd, &p, 1); + err = GetLastError(); + ok(n == 0, "Got %d, expected %d\n", n, 0); + ok(p.x == 100 && p.y == 100, "Failed got(%d, %d), expected (%d, %d)\n", p.x, p.y, 100, 100); + ok(err == ERROR_INVALID_WINDOW_HANDLE, "Got %x, expected %x\n", err, ERROR_INVALID_WINDOW_HANDLE); + + SetLastError(0xdeadbeef); + p.x = p.y = 100; + n = MapWindowPoints(NULL, dwnd, &p, 1); + err = GetLastError(); + ok(n == 0, "Got %d, expected %d\n", n, 0); + ok(p.x == 100 && p.y == 100, "Failed got(%d, %d), expected (%d, %d)\n", p.x, p.y, 100, 100); + ok(err == ERROR_INVALID_WINDOW_HANDLE, "Got %x, expected %x\n", err, ERROR_INVALID_WINDOW_HANDLE); + + SetLastError(0xdeadbeef); + p.x = p.y = 100; + n = MapWindowPoints(wnd, dwnd, &p, 1); + err = GetLastError(); + ok(n == 0, "Got %d, expected %d\n", n, 0); + ok(p.x == 100 && p.y == 100, "Failed got(%d, %d), expected (%d, %d)\n", p.x, p.y, 100, 100); + ok(err == ERROR_INVALID_WINDOW_HANDLE, "Got %x, expected %x\n", err, ERROR_INVALID_WINDOW_HANDLE); + + SetLastError(0xdeadbeef); + p.x = p.y = 100; + n = MapWindowPoints(dwnd, dwnd, &p, 1); + err = GetLastError(); + ok(n == 0, "Got %d, expected %d\n", n, 0); + ok(p.x == 100 && p.y == 100, "Failed got(%d, %d), expected (%d, %d)\n", p.x, p.y, 100, 100); + ok(err == ERROR_INVALID_WINDOW_HANDLE, "Got %x, expected %x\n", err, ERROR_INVALID_WINDOW_HANDLE); + + SetLastError(0xdeadbeef); + p.x = p.y = 100; + n = MapWindowPoints(NULL, NULL, &p, 1); + err = GetLastError(); + ok(n == 0, "Got %d, expected %d\n", n, 0); + ok(p.x == 100 && p.y == 100, "Failed got(%d, %d), expected (%d, %d)\n", p.x, p.y, 100, 100); + ok(err == 0xdeadbeef, "Got %x, expected %x\n", err, 0xdeadbeef); + + SetLastError(0xdeadbeef); + p.x = p.y = 100; + n = MapWindowPoints(wnd, wnd, &p, 1); + err = GetLastError(); + ok(n == 0, "Got %d, expected %d\n", n, 0); + ok(p.x == 100 && p.y == 100, "Failed got(%d, %d), expected (%d, %d)\n", p.x, p.y, 100, 100); + ok(err == 0xdeadbeef, "Got %x, expected %x\n", err, 0xdeadbeef); + + p.x = p.y = 100; + n = MapWindowPoints(wnd, NULL, &p, 1); + ok(n == MAKELONG(window_rect.left, window_rect.top), "Got %x, expected %x\n", + n, MAKELONG(window_rect.left, window_rect.top)); + ok((p.x == (window_rect.left + 100)) && (p.y == (window_rect.top + 100)), "Failed got (%d, %d), expected (%d, %d)\n", + p.x, p.y, window_rect.left + 100, window_rect.top + 100); + + p.x = p.y = 100; + n = MapWindowPoints(NULL, wnd, &p, 1); + ok(n == MAKELONG(-window_rect.left, -window_rect.top), "Got %x, expected %x\n", + n, MAKELONG(-window_rect.left, -window_rect.top)); + ok((p.x == (-window_rect.left + 100)) && (p.y == (-window_rect.top + 100)), "Failed got (%d, %d), expected (%d, %d)\n", + p.x, p.y, -window_rect.left + 100, -window_rect.top + 100); + + SetLastError(0xdeadbeef); + p.x = p.y = 0; + n = MapWindowPoints(wnd0, NULL, &p, 1); + err = GetLastError(); + ok(n == 0, "Got %x, expected 0\n", n); + ok((p.x == 0) && (p.y == 0), "Failed got (%d, %d), expected (0, 0)\n", p.x, p.y); + ok(err == 0xdeadbeef, "Got %x, expected %x\n", err, 0xdeadbeef); + + SetLastError(0xdeadbeef); + p.x = p.y = 0; + n = MapWindowPoints(NULL, wnd0, &p, 1); + err = GetLastError(); + ok(n == 0, "Got %x, expected 0\n", n); + ok((p.x == 0) && (p.y == 0), "Failed got (%d, %d), expected (0, 0)\n", p.x, p.y); + ok(err == 0xdeadbeef, "Got %x, expected %x\n", err, 0xdeadbeef); + + /* Test ClientToScreen */ + + /* ClientToScreen(wnd, NULL); crashes on Windows */ + + SetLastError(0xdeadbeef); + ret = ClientToScreen(NULL, NULL); + err = GetLastError(); + ok(!ret, "Should fail\n"); + ok(err == ERROR_INVALID_WINDOW_HANDLE, "Got %x, expected %x\n", err, ERROR_INVALID_WINDOW_HANDLE); + + SetLastError(0xdeadbeef); + p.x = p.y = 100; + ret = ClientToScreen(NULL, &p); + err = GetLastError(); + ok(!ret, "Should fail\n"); + ok(p.x == 100 && p.y == 100, "Failed got(%d, %d), expected (%d, %d)\n", p.x, p.y, 100, 100); + ok(err == ERROR_INVALID_WINDOW_HANDLE, "Got %x, expected %x\n", err, ERROR_INVALID_WINDOW_HANDLE); + + SetLastError(0xdeadbeef); + p.x = p.y = 100; + ret = ClientToScreen(dwnd, &p); + err = GetLastError(); + ok(!ret, "Should fail\n"); + ok(p.x == 100 && p.y == 100, "Failed got(%d, %d), expected (%d, %d)\n", p.x, p.y, 100, 100); + ok(err == ERROR_INVALID_WINDOW_HANDLE, "Got %x, expected %x\n", err, ERROR_INVALID_WINDOW_HANDLE); + + p.x = p.y = 100; + ret = ClientToScreen(wnd, &p); + ok(ret, "Failed with error %u\n", GetLastError()); + ok((p.x == (window_rect.left + 100)) && (p.y == (window_rect.top + 100)), "Failed got (%d, %d), expected (%d, %d)\n", + p.x, p.y, window_rect.left + 100, window_rect.top + 100); + + p.x = p.y = 0; + ret = ClientToScreen(wnd0, &p); + ok(ret, "Failed with error %u\n", GetLastError()); + ok((p.x == 0) && (p.y == 0), "Failed got (%d, %d), expected (0, 0)\n", p.x, p.y); + + /* Test ScreenToClient */ + + /* ScreenToClient(wnd, NULL); crashes on Windows */ + + SetLastError(0xdeadbeef); + ret = ScreenToClient(NULL, NULL); + err = GetLastError(); + ok(!ret, "Should fail\n"); + ok(err == ERROR_INVALID_WINDOW_HANDLE, "Got %x, expected %x\n", err, ERROR_INVALID_WINDOW_HANDLE); + + SetLastError(0xdeadbeef); + p.x = p.y = 100; + ret = ScreenToClient(NULL, &p); + err = GetLastError(); + ok(!ret, "Should fail\n"); + ok(p.x == 100 && p.y == 100, "Failed got(%d, %d), expected (%d, %d)\n", p.x, p.y, 100, 100); + ok(err == ERROR_INVALID_WINDOW_HANDLE, "Got %x, expected %x\n", err, ERROR_INVALID_WINDOW_HANDLE); + + SetLastError(0xdeadbeef); + p.x = p.y = 100; + ret = ScreenToClient(dwnd, &p); + err = GetLastError(); + ok(!ret, "Should fail\n"); + ok(p.x == 100 && p.y == 100, "Failed got(%d, %d), expected (%d, %d)\n", p.x, p.y, 100, 100); + ok(err == ERROR_INVALID_WINDOW_HANDLE, "Got %x, expected %x\n", err, ERROR_INVALID_WINDOW_HANDLE); + + p.x = p.y = 100; + ret = ScreenToClient(wnd, &p); + ok(ret, "Failed with error %u\n", GetLastError()); + ok((p.x == (-window_rect.left + 100)) && (p.y == (-window_rect.top + 100)), "Failed got(%d, %d), expected (%d, %d)\n", + p.x, p.y, -window_rect.left + 100, -window_rect.top + 100); + + p.x = p.y = 0; + ret = ScreenToClient(wnd0, &p); + ok(ret, "Failed with error %u\n", GetLastError()); + ok((p.x == 0) && (p.y == 0), "Failed got (%d, %d), expected (0, 0)\n", p.x, p.y); + + DestroyWindow(wnd); + DestroyWindow(wnd0); +} + START_TEST(win) { HMODULE user32 = GetModuleHandleA( "user32.dll" ); @@ -7072,6 +7336,7 @@ pGetLayeredWindowAttributes = (void *)GetProcAddress( user32, "GetLayeredWindowAttributes" ); pSetLayeredWindowAttributes = (void *)GetProcAddress( user32, "SetLayeredWindowAttributes" ); pUpdateLayeredWindow = (void *)GetProcAddress( user32, "UpdateLayeredWindow" ); + pUpdateLayeredWindowIndirect = (void *)GetProcAddress( user32, "UpdateLayeredWindowIndirect" ); pGetMonitorInfoA = (void *)GetProcAddress( user32, "GetMonitorInfoA" ); pMonitorFromPoint = (void *)GetProcAddress( user32, "MonitorFromPoint" ); pGetWindowRgnBox = (void *)GetProcAddress( user32, "GetWindowRgnBox" ); @@ -7172,6 +7437,7 @@ test_shell_window(); test_handles( hwndMain ); test_winregion(); + test_map_points();
/* add the tests above this line */ if (hhook) UnhookWindowsHookEx(hhook);