Clinton Stimpson : riched20: Add test for event masks and notifications.

Alexandre Julliard julliard at winehq.org
Wed Sep 19 08:16:29 CDT 2007


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

Author: Clinton Stimpson <cjstimpson at utwire.net>
Date:   Wed Sep 19 00:01:09 2007 -0600

riched20: Add test for event masks and notifications.

---

 dlls/riched20/tests/editor.c |   67 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 67 insertions(+), 0 deletions(-)

diff --git a/dlls/riched20/tests/editor.c b/dlls/riched20/tests/editor.c
index a1407b7..e67c028 100644
--- a/dlls/riched20/tests/editor.c
+++ b/dlls/riched20/tests/editor.c
@@ -1910,6 +1910,72 @@ static void test_EM_GETTEXTLENGTHEX(void)
     DestroyWindow(hwnd);
 }
 
+
+/* globals that parent and child access when checking event masks & notifications */
+static HWND eventMaskEditHwnd = 0;
+static int queriedEventMask;
+static int watchForEventMask = 0;
+
+/* parent proc that queries the edit's event mask when it gets a WM_COMMAND */
+static LRESULT WINAPI ParentMsgCheckProcA(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
+{
+    if(message == WM_COMMAND && (watchForEventMask & (wParam >> 16)))
+    {
+      queriedEventMask = SendMessage(eventMaskEditHwnd, EM_GETEVENTMASK, 0, 0);
+    }
+    return DefWindowProcA(hwnd, message, wParam, lParam);
+}
+
+/* test event masks in combination with WM_COMMAND */
+static void test_eventMask(void)
+{
+    HWND parent;
+    int ret;
+    WNDCLASSA cls;
+    const char text[] = "foo bar\n";
+    int eventMask;
+
+    /* register class to capture WM_COMMAND */
+    cls.style = 0;
+    cls.lpfnWndProc = ParentMsgCheckProcA;
+    cls.cbClsExtra = 0;
+    cls.cbWndExtra = 0;
+    cls.hInstance = GetModuleHandleA(0);
+    cls.hIcon = 0;
+    cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW);
+    cls.hbrBackground = GetStockObject(WHITE_BRUSH);
+    cls.lpszMenuName = NULL;
+    cls.lpszClassName = "EventMaskParentClass";
+    if(!RegisterClassA(&cls)) assert(0);
+
+    parent = CreateWindow(cls.lpszClassName, NULL, WS_POPUP|WS_VISIBLE,
+                          0, 0, 200, 60, NULL, NULL, NULL, NULL);
+    ok (parent != 0, "Failed to create parent window\n");
+
+    eventMaskEditHwnd = new_richedit(parent);
+    ok(eventMaskEditHwnd != 0, "Failed to create edit window\n");
+
+    eventMask = ENM_CHANGE | ENM_UPDATE;
+    ret = SendMessage(eventMaskEditHwnd, EM_SETEVENTMASK, 0, (LPARAM) eventMask);
+    ok(ret == ENM_NONE, "wrong event mask\n");
+    ret = SendMessage(eventMaskEditHwnd, EM_GETEVENTMASK, 0, 0);
+    ok(ret == eventMask, "failed to set event mask\n");
+
+    /* check what happens when we ask for EN_CHANGE and send WM_SETTEXT */
+    queriedEventMask = 0;  /* initialize to something other than we expect */
+    watchForEventMask = EN_CHANGE;
+    ret = SendMessage(eventMaskEditHwnd, WM_SETTEXT, 0, (LPARAM) text);
+    ok(ret == TRUE, "failed to set text\n");
+    /* richedit should mask off ENM_CHANGE when it sends an EN_CHANGE
+       notification in response to WM_SETTEXT */
+todo_wine {
+    ok(queriedEventMask == (eventMask & ~ENM_CHANGE),
+            "wrong event mask (0x%x) during WM_COMMAND\n", queriedEventMask);
+}
+
+}
+
+
 START_TEST( editor )
 {
   MSG msg;
@@ -1944,6 +2010,7 @@ START_TEST( editor )
   test_unicode_conversions();
   test_EM_GETTEXTLENGTHEX();
   test_EM_REPLACESEL();
+  test_eventMask();
 
   /* Set the environment variable WINETEST_RICHED20 to keep windows
    * responsive and open for 30 seconds. This is useful for debugging.




More information about the wine-cvs mailing list