Akihiro Sagawa : comctl32/tests: Tests default margin size with various font face and charset.

Alexandre Julliard julliard at winehq.org
Wed Apr 24 16:33:30 CDT 2019


Module: wine
Branch: master
Commit: 95f7ad03e39946ee4d05c94e67b7d5bf7c7742f5
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=95f7ad03e39946ee4d05c94e67b7d5bf7c7742f5

Author: Akihiro Sagawa <sagawa.aki at gmail.com>
Date:   Wed Apr 24 21:42:15 2019 +0900

comctl32/tests: Tests default margin size with various font face and charset.

Signed-off-by: Akihiro Sagawa <sagawa.aki at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/comctl32/tests/edit.c | 100 ++++++++++++++++++++++++++++++---------------
 1 file changed, 66 insertions(+), 34 deletions(-)

diff --git a/dlls/comctl32/tests/edit.c b/dlls/comctl32/tests/edit.c
index aa5ee66..fedd8dd 100644
--- a/dlls/comctl32/tests/edit.c
+++ b/dlls/comctl32/tests/edit.c
@@ -1485,13 +1485,17 @@ static void test_edit_control_scroll(void)
     DestroyWindow (hwEdit);
 }
 
-static BOOL is_cjk_charset(HDC dc)
+static BOOL is_cjk(HDC dc)
 {
+    const DWORD FS_DBCS_MASK = FS_JISJAPAN|FS_CHINESESIMP|FS_WANSUNG|FS_CHINESETRAD|FS_JOHAB;
+    FONTSIGNATURE fs;
+
     switch (GdiGetCodePage(dc)) {
     case 932: case 936: case 949: case 950: case 1361:
         return TRUE;
     default:
-        return FALSE;
+        return (GetTextCharsetInfo(dc, &fs, 0) != DEFAULT_CHARSET &&
+                (fs.fsCsb[0] & FS_DBCS_MASK));
     }
 }
 
@@ -1599,13 +1603,13 @@ static void test_margins_usefontinfo(UINT charset)
     DeleteObject(hfont);
 }
 
-static void test_margins_default(UINT charset)
+static void test_margins_default(const char* facename, UINT charset)
 {
     HWND hwnd;
     HDC hdc;
     TEXTMETRICW tm;
     SIZE size;
-    BOOL cjk_charset;
+    BOOL cjk;
     LOGFONTA lf;
     HFONT hfont;
     RECT rect;
@@ -1617,7 +1621,7 @@ static void test_margins_default(UINT charset)
     lf.lfHeight = -11;
     lf.lfWeight = FW_NORMAL;
     lf.lfCharSet = charset;
-    strcpy(lf.lfFaceName, "Tahoma");
+    strcpy(lf.lfFaceName, facename);
 
     hfont = CreateFontIndirectA(&lf);
     ok(hfont != NULL, "got %p\n", hfont);
@@ -1641,7 +1645,7 @@ static void test_margins_default(UINT charset)
         return;
     }
     expect = MAKELONG(size.cx / 2, size.cx / 2);
-    cjk_charset = is_cjk_charset(hdc);
+    cjk = is_cjk(hdc);
 
     hfont = SelectObject(hdc, hfont);
     ReleaseDC(hwnd, hdc);
@@ -1651,17 +1655,17 @@ static void test_margins_default(UINT charset)
     SendMessageA(hwnd, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, small_margins);
     SendMessageA(hwnd, WM_SETFONT, (WPARAM)hfont, MAKELPARAM(TRUE, 0));
     margins = SendMessageA(hwnd, EM_GETMARGINS, 0, 0);
-    if (!cjk_charset)
-        ok(margins == expect, "%d: got %d, %d\n", charset, HIWORD(margins), LOWORD(margins));
+    if (!cjk)
+        ok(margins == expect, "%s:%d: got %d, %d\n", facename, charset, HIWORD(margins), LOWORD(margins));
     SendMessageA(hwnd, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, small_margins);
     SendMessageA(hwnd, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(EC_USEFONTINFO, EC_USEFONTINFO));
     margins = SendMessageA(hwnd, EM_GETMARGINS, 0, 0);
-    if (!cjk_charset)
-        ok(margins == expect, "%d: got %d, %d\n", charset, HIWORD(margins), LOWORD(margins));
+    if (!cjk)
+        ok(margins == expect, "%s:%d: got %d, %d\n", facename, charset, HIWORD(margins), LOWORD(margins));
     else
     {
-        ok(HIWORD(margins) <= HIWORD(expect), "%d: got %d\n", charset, HIWORD(margins));
-        ok(LOWORD(margins) <= LOWORD(expect), "%d: got %d\n", charset, LOWORD(margins));
+        ok(HIWORD(margins) <= HIWORD(expect), "%s:%d: got %d\n", facename, charset, HIWORD(margins));
+        ok(LOWORD(margins) <= LOWORD(expect), "%s:%d: got %d\n", facename, charset, LOWORD(margins));
     }
     DestroyWindow(hwnd);
 
@@ -1676,23 +1680,40 @@ static void test_margins_default(UINT charset)
     SendMessageA(hwnd, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, small_margins);
     SendMessageA(hwnd, WM_SETFONT, (WPARAM)hfont, MAKELPARAM(TRUE, 0));
     margins = SendMessageA(hwnd, EM_GETMARGINS, 0, 0);
-    if (!cjk_charset)
-        ok(margins == expect, "%d: got %d, %d\n", charset, HIWORD(margins), LOWORD(margins));
+    if (!cjk)
+        ok(margins == expect, "%s:%d: got %d, %d\n", facename, charset, HIWORD(margins), LOWORD(margins));
     SendMessageA(hwnd, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, small_margins);
     SendMessageA(hwnd, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(EC_USEFONTINFO, EC_USEFONTINFO));
     margins = SendMessageA(hwnd, EM_GETMARGINS, 0, 0);
-    if (!cjk_charset)
-        ok(margins == expect, "%d: got %d, %d\n", charset, HIWORD(margins), LOWORD(margins));
+    if (!cjk)
+        ok(margins == expect, "%s:%d: got %d, %d\n", facename, charset, HIWORD(margins), LOWORD(margins));
     else
     {
-        ok(HIWORD(margins) <= HIWORD(expect), "%d: got %d\n", charset, HIWORD(margins));
-        ok(LOWORD(margins) <= LOWORD(expect), "%d: got %d\n", charset, LOWORD(margins));
+        ok(HIWORD(margins) <= HIWORD(expect), "%s:%d: got %d\n", facename, charset, HIWORD(margins));
+        ok(LOWORD(margins) <= LOWORD(expect), "%s:%d: got %d\n", facename, charset, LOWORD(margins));
     }
     DestroyWindow(hwnd);
 
     DeleteObject(hfont);
 }
 
+static INT CALLBACK find_font_proc(const LOGFONTA *elf, const TEXTMETRICA *ntm, DWORD type, LPARAM lParam)
+{
+    return 0;
+}
+
+static BOOL is_font_installed(const char*name)
+{
+    HDC hdc = GetDC(NULL);
+    BOOL ret = FALSE;
+
+    if (!EnumFontFamiliesA(hdc, name, find_font_proc, 0))
+        ret = TRUE;
+
+    ReleaseDC(NULL, hdc);
+    return ret;
+}
+
 static void test_margins(void)
 {
     DWORD old_margins, new_margins;
@@ -1768,33 +1789,44 @@ static void test_margins(void)
 
     test_margins_usefontinfo(DEFAULT_CHARSET);
 
-    test_margins_default(ANSI_CHARSET);
-    test_margins_default(EASTEUROPE_CHARSET);
+    test_margins_default("Tahoma", ANSI_CHARSET);
+    test_margins_default("Tahoma", EASTEUROPE_CHARSET);
 
-    test_margins_default(SHIFTJIS_CHARSET);
-    test_margins_default(HANGUL_CHARSET);
-    test_margins_default(CHINESEBIG5_CHARSET);
-}
+    test_margins_default("Tahoma", HANGUL_CHARSET);
+    test_margins_default("Tahoma", CHINESEBIG5_CHARSET);
 
-static INT CALLBACK find_font_proc(const LOGFONTA *elf, const TEXTMETRICA *ntm, DWORD type, LPARAM lParam)
-{
-    return 0;
+    if (is_font_installed("MS PGothic")) {
+        test_margins_default("MS PGothic", SHIFTJIS_CHARSET);
+        test_margins_default("MS PGothic", GREEK_CHARSET);
+    }
+    else
+        skip("MS PGothic is not available, skipping some margin tests\n");
+
+    if (is_font_installed("Ume P Gothic")) {
+        test_margins_default("Ume P Gothic", SHIFTJIS_CHARSET);
+        test_margins_default("Ume P Gothic", GREEK_CHARSET);
+    }
+    else
+        skip("Ume P Gothic is not available, skipping some margin tests\n");
+
+    if (is_font_installed("SimSun")) {
+        test_margins_default("SimSun", GB2312_CHARSET);
+        test_margins_default("SimSun", ANSI_CHARSET);
+    }
+    else
+        skip("SimSun is not available, skipping some margin tests\n");
 }
 
 static void test_margins_font_change(void)
 {
-    DWORD margins, font_margins, ret;
+    DWORD margins, font_margins;
     HFONT hfont, hfont2;
     HWND hwEdit;
     LOGFONTA lf;
-    HDC hdc;
 
-    hdc = GetDC(0);
-    ret = EnumFontFamiliesA(hdc, "Arial", find_font_proc, 0);
-    ReleaseDC(0, hdc);
-    if (ret)
+    if (!is_font_installed("Arial"))
     {
-        trace("Arial not found - skipping font change margin tests\n");
+        skip("Arial not found - skipping font change margin tests\n");
         return;
     }
 




More information about the wine-cvs mailing list