John Klehm : wintab32: Add a test for context validation by WTOpen.

Alexandre Julliard julliard at winehq.org
Tue Aug 4 12:25:19 CDT 2009


Module: wine
Branch: master
Commit: b4c5a62338f114fde6993869f61cf4ccf0fbe7d3
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=b4c5a62338f114fde6993869f61cf4ccf0fbe7d3

Author: John Klehm <xixsimplicityxix at 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
+
+ at MAKE_TEST_RULES@
+
+ at 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);
+}




More information about the wine-cvs mailing list