[1/3] richedit: Added tests for zooming.

Dylan Smith dylan.ah.smith at gmail.com
Tue Jan 13 12:39:23 CST 2009


The contents of the text can be zoomed in with EM_SETZOOM, or with the
mouse wheel.  EM_SETZOOM is implemented, but these tests show bugs in
the implementation, and zooming using the mouse wheel isn't implemented
at all yet.
---
 dlls/riched20/tests/editor.c |  143 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 143 insertions(+), 0 deletions(-)
-------------- next part --------------
diff --git a/dlls/riched20/tests/editor.c b/dlls/riched20/tests/editor.c
index 8c3281c..7f99489 100644
--- a/dlls/riched20/tests/editor.c
+++ b/dlls/riched20/tests/editor.c
@@ -6264,6 +6264,148 @@ static void test_WM_GETDLGCODE(void)
     DestroyWindow(hwnd);
 }
 
+static void test_zoom(void)
+{
+    HWND hwnd;
+    UINT ret;
+    RECT rc;
+    POINT pt;
+    int numerator, denominator;
+
+    hwnd = new_richedit(NULL);
+    GetClientRect(hwnd, &rc);
+    pt.x = (rc.right - rc.left) / 2;
+    pt.y = (rc.bottom - rc.top) / 2;
+    ClientToScreen(hwnd, &pt);
+
+    /* Test initial zoom value */
+    ret = SendMessage(hwnd, EM_GETZOOM, (WPARAM)&numerator, (LPARAM)&denominator);
+    ok(numerator == 0, "Numerator should be initialized to 0 (got %d).\n", numerator);
+    ok(denominator == 0, "Denominator should be initialized to 0 (got %d).\n", denominator);
+    ok(ret == TRUE, "EM_GETZOOM failed (%d).\n", ret);
+
+    /* test scroll wheel */
+    hold_key(VK_CONTROL);
+    ret = SendMessage(hwnd, WM_MOUSEWHEEL, MAKEWPARAM(MK_CONTROL, WHEEL_DELTA),
+                      MAKELPARAM(pt.x, pt.y));
+    ok(!ret, "WM_MOUSEWHEEL failed (%d).\n", ret);
+    release_key(VK_CONTROL);
+
+    ret = SendMessage(hwnd, EM_GETZOOM, (WPARAM)&numerator, (LPARAM)&denominator);
+    todo_wine ok(numerator == 110, "incorrect numerator is %d\n", numerator);
+    todo_wine ok(denominator == 100, "incorrect denominator is %d\n", denominator);
+    ok(ret == TRUE, "EM_GETZOOM failed (%d).\n", ret);
+
+    /* Test how much the mouse wheel can zoom in and out. */
+    ret = SendMessage(hwnd, EM_SETZOOM, (WPARAM)490, (LPARAM)100);
+    ok(ret == TRUE, "EM_SETZOOM failed (%d).\n", ret);
+
+    hold_key(VK_CONTROL);
+    ret = SendMessage(hwnd, WM_MOUSEWHEEL, MAKEWPARAM(MK_CONTROL, WHEEL_DELTA),
+                      MAKELPARAM(pt.x, pt.y));
+    ok(!ret, "WM_MOUSEWHEEL failed (%d).\n", ret);
+    release_key(VK_CONTROL);
+
+    ret = SendMessage(hwnd, EM_GETZOOM, (WPARAM)&numerator, (LPARAM)&denominator);
+    todo_wine ok(numerator == 500, "incorrect numerator is %d\n", numerator);
+    ok(denominator == 100, "incorrect denominator is %d\n", denominator);
+    ok(ret == TRUE, "EM_GETZOOM failed (%d).\n", ret);
+
+    ret = SendMessage(hwnd, EM_SETZOOM, (WPARAM)491, (LPARAM)100);
+    ok(ret == TRUE, "EM_SETZOOM failed (%d).\n", ret);
+
+    hold_key(VK_CONTROL);
+    ret = SendMessage(hwnd, WM_MOUSEWHEEL, MAKEWPARAM(MK_CONTROL, WHEEL_DELTA),
+                      MAKELPARAM(pt.x, pt.y));
+    ok(!ret, "WM_MOUSEWHEEL failed (%d).\n", ret);
+    release_key(VK_CONTROL);
+
+    ret = SendMessage(hwnd, EM_GETZOOM, (WPARAM)&numerator, (LPARAM)&denominator);
+    ok(numerator == 491, "incorrect numerator is %d\n", numerator);
+    ok(denominator == 100, "incorrect denominator is %d\n", denominator);
+    ok(ret == TRUE, "EM_GETZOOM failed (%d).\n", ret);
+
+    ret = SendMessage(hwnd, EM_SETZOOM, (WPARAM)20, (LPARAM)100);
+    ok(ret == TRUE, "EM_SETZOOM failed (%d).\n", ret);
+
+    hold_key(VK_CONTROL);
+    ret = SendMessage(hwnd, WM_MOUSEWHEEL, MAKEWPARAM(MK_CONTROL, -WHEEL_DELTA),
+                      MAKELPARAM(pt.x, pt.y));
+    ok(!ret, "WM_MOUSEWHEEL failed (%d).\n", ret);
+    release_key(VK_CONTROL);
+
+    ret = SendMessage(hwnd, EM_GETZOOM, (WPARAM)&numerator, (LPARAM)&denominator);
+    todo_wine ok(numerator == 10, "incorrect numerator is %d\n", numerator);
+    ok(denominator == 100, "incorrect denominator is %d\n", denominator);
+    ok(ret == TRUE, "EM_GETZOOM failed (%d).\n", ret);
+
+    ret = SendMessage(hwnd, EM_SETZOOM, (WPARAM)19, (LPARAM)100);
+    ok(ret == TRUE, "EM_SETZOOM failed (%d).\n", ret);
+
+    hold_key(VK_CONTROL);
+    ret = SendMessage(hwnd, WM_MOUSEWHEEL, MAKEWPARAM(MK_CONTROL, -WHEEL_DELTA),
+                      MAKELPARAM(pt.x, pt.y));
+    ok(!ret, "WM_MOUSEWHEEL failed (%d).\n", ret);
+    release_key(VK_CONTROL);
+
+    ret = SendMessage(hwnd, EM_GETZOOM, (WPARAM)&numerator, (LPARAM)&denominator);
+    ok(numerator == 19, "incorrect numerator is %d\n", numerator);
+    ok(denominator == 100, "incorrect denominator is %d\n", denominator);
+    ok(ret == TRUE, "EM_GETZOOM failed (%d).\n", ret);
+
+    /* Test how WM_SCROLLWHEEL treats our custom denominator. */
+    ret = SendMessage(hwnd, EM_SETZOOM, (WPARAM)50, (LPARAM)13);
+    ok(ret == TRUE, "EM_SETZOOM failed (%d).\n", ret);
+
+    hold_key(VK_CONTROL);
+    ret = SendMessage(hwnd, WM_MOUSEWHEEL, MAKEWPARAM(MK_CONTROL, WHEEL_DELTA),
+                      MAKELPARAM(pt.x, pt.y));
+    ok(!ret, "WM_MOUSEWHEEL failed (%d).\n", ret);
+    release_key(VK_CONTROL);
+
+    ret = SendMessage(hwnd, EM_GETZOOM, (WPARAM)&numerator, (LPARAM)&denominator);
+    todo_wine ok(numerator == 394, "incorrect numerator is %d\n", numerator);
+    todo_wine ok(denominator == 100, "incorrect denominator is %d\n", denominator);
+    ok(ret == TRUE, "EM_GETZOOM failed (%d).\n", ret);
+
+    /* Test bounds checking on EM_SETZOOM */
+    ret = SendMessage(hwnd, EM_SETZOOM, (WPARAM)2, (LPARAM)127);
+    ok(ret == TRUE, "EM_SETZOOM rejected valid values (%d).\n", ret);
+
+    ret = SendMessage(hwnd, EM_SETZOOM, (WPARAM)127, (LPARAM)2);
+    ok(ret == TRUE, "EM_SETZOOM rejected valid values (%d).\n", ret);
+
+    ret = SendMessage(hwnd, EM_SETZOOM, (WPARAM)2, (LPARAM)128);
+    todo_wine ok(ret == FALSE, "EM_SETZOOM accepted invalid values (%d).\n", ret);
+
+    ret = SendMessage(hwnd, EM_GETZOOM, (WPARAM)&numerator, (LPARAM)&denominator);
+    todo_wine ok(numerator == 127, "incorrect numerator is %d\n", numerator);
+    todo_wine ok(denominator == 2, "incorrect denominator is %d\n", denominator);
+    ok(ret == TRUE, "EM_GETZOOM failed (%d).\n", ret);
+
+    ret = SendMessage(hwnd, EM_SETZOOM, (WPARAM)128, (LPARAM)2);
+    todo_wine ok(ret == FALSE, "EM_SETZOOM accepted invalid values (%d).\n", ret);
+
+    /* See if negative numbers are accepted. */
+    ret = SendMessage(hwnd, EM_SETZOOM, (WPARAM)-100, (LPARAM)-100);
+    todo_wine ok(ret == FALSE, "EM_SETZOOM accepted invalid values (%d).\n", ret);
+
+    /* See if negative numbers are accepted. */
+    ret = SendMessage(hwnd, EM_SETZOOM, (WPARAM)0, (LPARAM)100);
+    todo_wine ok(ret == FALSE, "EM_SETZOOM failed (%d).\n", ret);
+
+    ret = SendMessage(hwnd, EM_GETZOOM, (WPARAM)&numerator, (LPARAM)&denominator);
+    todo_wine ok(numerator == 127, "incorrect numerator is %d\n", numerator);
+    todo_wine ok(denominator == 2, "incorrect denominator is %d\n", denominator);
+    ok(ret == TRUE, "EM_GETZOOM failed (%d).\n", ret);
+
+    /* Reset the zoom value */
+    ret = SendMessage(hwnd, EM_SETZOOM, (WPARAM)0, (LPARAM)0);
+    ok(ret == TRUE, "EM_SETZOOM failed (%d).\n", ret);
+
+    DestroyWindow(hwnd);
+}
+
 START_TEST( editor )
 {
   /* Must explicitly LoadLibrary(). The test has no references to functions in
@@ -6318,6 +6460,7 @@ START_TEST( editor )
   test_autoscroll();
   test_format_rect();
   test_WM_GETDLGCODE();
+  test_zoom();
 
   /* 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-patches mailing list