Module: wine Branch: master Commit: b4c5a62338f114fde6993869f61cf4ccf0fbe7d3 URL: http://source.winehq.org/git/wine.git/?a=commit;h=b4c5a62338f114fde6993869f6...
Author: John Klehm xixsimplicityxix@gmail.com Date: Sun Aug 2 16:23:35 2009 -0500
wintab32: Add a test for context validation by WTOpen.
---
configure | 9 +++ configure.ac | 1 + dlls/wintab32/tests/Makefile.in | 13 ++++ dlls/wintab32/tests/context.c | 152 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 175 insertions(+), 0 deletions(-)
diff --git a/configure b/configure index 2f74bac..199187a 100755 --- a/configure +++ b/configure @@ -28001,6 +28001,14 @@ dlls/wintab32/Makefile: dlls/wintab32/Makefile.in dlls/Makedll.rules" ac_config_files="$ac_config_files dlls/wintab32/Makefile"
ALL_MAKEFILES="$ALL_MAKEFILES \ + dlls/wintab32/tests/Makefile" +test "x$enable_tests" != xno && ALL_TEST_DIRS="$ALL_TEST_DIRS \ + wintab32/tests" +ALL_MAKEFILE_DEPENDS="$ALL_MAKEFILE_DEPENDS +dlls/wintab32/tests/Makefile: dlls/wintab32/tests/Makefile.in dlls/Maketest.rules" +ac_config_files="$ac_config_files dlls/wintab32/tests/Makefile" + +ALL_MAKEFILES="$ALL_MAKEFILES \ dlls/wintrust/Makefile" test "x$enable_wintrust" != xno && ALL_DLL_DIRS="$ALL_DLL_DIRS \ wintrust" @@ -29794,6 +29802,7 @@ do "dlls/winspool.drv/tests/Makefile") CONFIG_FILES="$CONFIG_FILES dlls/winspool.drv/tests/Makefile" ;; "dlls/wintab.dll16/Makefile") CONFIG_FILES="$CONFIG_FILES dlls/wintab.dll16/Makefile" ;; "dlls/wintab32/Makefile") CONFIG_FILES="$CONFIG_FILES dlls/wintab32/Makefile" ;; + "dlls/wintab32/tests/Makefile") CONFIG_FILES="$CONFIG_FILES dlls/wintab32/tests/Makefile" ;; "dlls/wintrust/Makefile") CONFIG_FILES="$CONFIG_FILES dlls/wintrust/Makefile" ;; "dlls/wintrust/tests/Makefile") CONFIG_FILES="$CONFIG_FILES dlls/wintrust/tests/Makefile" ;; "dlls/wldap32/Makefile") CONFIG_FILES="$CONFIG_FILES dlls/wldap32/Makefile" ;; diff --git a/configure.ac b/configure.ac index 3b805fe..17bfc66 100644 --- a/configure.ac +++ b/configure.ac @@ -2431,6 +2431,7 @@ WINE_CONFIG_MAKEFILE([dlls/winspool.drv/Makefile],[dlls/Makedll.rules],[dlls],[A WINE_CONFIG_MAKEFILE([dlls/winspool.drv/tests/Makefile],[dlls/Maketest.rules],[dlls],[ALL_TEST_DIRS],[enable_tests]) WINE_CONFIG_MAKEFILE([dlls/wintab.dll16/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS],[enable_win16]) WINE_CONFIG_MAKEFILE([dlls/wintab32/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) +WINE_CONFIG_MAKEFILE([dlls/wintab32/tests/Makefile],[dlls/Maketest.rules],[dlls],[ALL_TEST_DIRS],[enable_tests]) WINE_CONFIG_MAKEFILE([dlls/wintrust/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) WINE_CONFIG_MAKEFILE([dlls/wintrust/tests/Makefile],[dlls/Maketest.rules],[dlls],[ALL_TEST_DIRS],[enable_tests]) WINE_CONFIG_MAKEFILE([dlls/wldap32/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) diff --git a/dlls/wintab32/tests/Makefile.in b/dlls/wintab32/tests/Makefile.in new file mode 100644 index 0000000..07c2961 --- /dev/null +++ b/dlls/wintab32/tests/Makefile.in @@ -0,0 +1,13 @@ +TOPSRCDIR = @top_srcdir@ +TOPOBJDIR = ../../.. +SRCDIR = @srcdir@ +VPATH = @srcdir@ +TESTDLL = wintab32.dll +IMPORTS = kernel32 user32 + +CTESTS = \ + context.c + +@MAKE_TEST_RULES@ + +@DEPENDENCIES@ # everything below this line is overwritten by make depend diff --git a/dlls/wintab32/tests/context.c b/dlls/wintab32/tests/context.c new file mode 100644 index 0000000..c9f13fa --- /dev/null +++ b/dlls/wintab32/tests/context.c @@ -0,0 +1,152 @@ +/* + * tests for Wintab context behavior + * + * Copyright 2009 John Klehm + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include <assert.h> +#include <windows.h> +#include <wintab.h> + +#include "wine/test.h" + +static const CHAR wintab32Dll[] = "Wintab32.dll"; +static const CHAR defaultWindowName[] = "Wintab Test"; +static const CHAR wintabTestWindowClassName[] = "WintabTestWnd"; +static const CHAR contextName[] = "TestContext"; +static const UINT X = 0; +static const UINT Y = 0; +static const UINT WIDTH = 200; +static const UINT HEIGHT = 200; + +static HCTX (WINAPI *pWTOpenA)(HWND, LPLOGCONTEXTA, BOOL); +static BOOL (WINAPI *pWTClose)(HCTX); + +static HMODULE load_functions(void) +{ +#define GET_PROC(func) \ + (p ## func = (void *)GetProcAddress(hWintab, #func)) + + HMODULE hWintab = LoadLibraryA(wintab32Dll); + + if (!hWintab) + { + trace("LoadLibraryA(%s) failed\n", + wintab32Dll); + return NULL; + } + + if (GET_PROC(WTOpenA) && + GET_PROC(WTClose) ) + { + return hWintab; + } + else + { + FreeLibrary(hWintab); + trace("Library loaded but failed to load function pointers\n"); + return NULL; + } + +#undef GET_PROC +} + +static LRESULT CALLBACK wintabTestWndProc(HWND hwnd, UINT msg, WPARAM wParam, + LPARAM lParam) +{ + return DefWindowProcA(hwnd, msg, wParam, lParam); +} + +static void wintab_create_window(HWND* pHwnd) +{ + WNDCLASSA testWindowClass; + + if (!pHwnd) return; + + *pHwnd = NULL; + + ZeroMemory(&testWindowClass, sizeof(testWindowClass)); + + testWindowClass.lpfnWndProc = (WNDPROC)wintabTestWndProc; + testWindowClass.hInstance = NULL; + testWindowClass.hIcon = NULL; + testWindowClass.hCursor = NULL; + testWindowClass.hbrBackground = NULL; + testWindowClass.lpszMenuName = NULL; + testWindowClass.lpszClassName = wintabTestWindowClassName; + + assert(RegisterClassA(&testWindowClass)); + + *pHwnd = CreateWindowA(wintabTestWindowClassName, NULL, + WS_OVERLAPPED, X, Y, WIDTH, HEIGHT, NULL, NULL, + NULL, NULL); + + assert(*pHwnd != NULL); +} + +static void wintab_destroy_window(HWND hwnd) +{ + DestroyWindow(hwnd); + UnregisterClassA(wintabTestWindowClassName, NULL); +} + +/* test how a logcontext is validated by wtopen */ +static void test_WTOpenContextValidation(void) +{ + HWND defaultWindow = NULL; + HCTX hCtx = NULL; + LOGCONTEXTA testLogCtx; + LOGCONTEXTA refLogCtx; + int memdiff; + + wintab_create_window(&defaultWindow); + + ZeroMemory(&testLogCtx, sizeof(testLogCtx)); + strcpy(testLogCtx.lcName, contextName); + + ZeroMemory(&refLogCtx, sizeof(refLogCtx)); + strcpy(refLogCtx.lcName, contextName); + + /* a zeroed out context has values which makes WTOpen return null + * on wacom tablets but not on uclogic tablets */ + hCtx = pWTOpenA(defaultWindow, &testLogCtx, TRUE); + + /* check if the context gets updated */ + memdiff = memcmp(&testLogCtx, &refLogCtx, sizeof(LOGCONTEXTA)); + ok(0 == memdiff, "Expected 0 == memcmp(testLogCtx, refLogCtx), got %i\n", + memdiff); + + if (hCtx) + pWTClose(hCtx); + + wintab_destroy_window(defaultWindow); +} + +START_TEST(context) +{ + HMODULE hWintab = load_functions(); + + if (!hWintab) + { + skip("Wintab32.dll not available\n"); + return; + } + + test_WTOpenContextValidation(); + + FreeLibrary(hWintab); +}