Akihiro Sagawa : gdi32/tests: Make GetStockObject tests pass on East-Asian machines.

Alexandre Julliard julliard at winehq.org
Mon Jun 18 15:00:23 CDT 2012


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

Author: Akihiro Sagawa <sagawa.aki at gmail.com>
Date:   Sat Jun 16 23:15:51 2012 +0900

gdi32/tests: Make GetStockObject tests pass on East-Asian machines.

---

 dlls/gdi32/tests/font.c |  116 +++++++++++++++++++++++++++++++++++------------
 1 files changed, 87 insertions(+), 29 deletions(-)

diff --git a/dlls/gdi32/tests/font.c b/dlls/gdi32/tests/font.c
index 9e5602b..218b980 100644
--- a/dlls/gdi32/tests/font.c
+++ b/dlls/gdi32/tests/font.c
@@ -4373,38 +4373,69 @@ static int get_font_dpi(const LOGFONT *lf)
 
 static void test_stock_fonts(void)
 {
+    static const int font[] =
+    {
+        ANSI_FIXED_FONT, ANSI_VAR_FONT, SYSTEM_FONT, DEVICE_DEFAULT_FONT, DEFAULT_GUI_FONT
+        /* SYSTEM_FIXED_FONT, OEM_FIXED_FONT */
+    };
     static const struct test_data
     {
-        int id, weight, height, dpi;
+        int charset, weight, height, dpi;
         const char face_name[LF_FACESIZE];
-    } td[] =
+    } td[][11] =
     {
-        { ANSI_FIXED_FONT, FW_NORMAL, 12, 96, "Courier" },
-        { ANSI_FIXED_FONT, FW_NORMAL, 12, 120, "Courier" },
-        { ANSI_VAR_FONT, FW_NORMAL, 12, 96, "MS Sans Serif" },
-        { ANSI_VAR_FONT, FW_NORMAL, 12, 120, "MS Sans Serif" },
-        { SYSTEM_FONT, FW_BOLD, 16, 96, "System" },
-        { SYSTEM_FONT, FW_BOLD, 20, 120, "System" },
-        { DEVICE_DEFAULT_FONT, FW_BOLD, 16, 96, "System" },
-        { DEVICE_DEFAULT_FONT, FW_BOLD, 20, 120, "System" },
-        { DEFAULT_GUI_FONT, FW_NORMAL, -11, 96, "MS Shell Dlg" },
-        { DEFAULT_GUI_FONT, FW_NORMAL, -13, 120, "MS Shell Dlg" }
-
-        /*{ SYSTEM_FIXED_FONT, FW_NORMAL, 15, 96, "Fixedsys" },*/
-        /*{ SYSTEM_FIXED_FONT, FW_NORMAL, 20, 120, "Fixedsys" },*/
-        /*{ OEM_FIXED_FONT, FW_NORMAL, 16, 96, "Terminal" },*/
-        /*{ OEM_FIXED_FONT, FW_NORMAL, 20, 120, "Terminal" },*/
+        { /* ANSI_FIXED_FONT */
+            { DEFAULT_CHARSET, FW_NORMAL, 12, 96, "Courier" },
+            { DEFAULT_CHARSET, FW_NORMAL, 12, 120, "Courier" },
+            { 0 }
+        },
+        { /* ANSI_VAR_FONT */
+            { DEFAULT_CHARSET, FW_NORMAL, 12, 96, "MS Sans Serif" },
+            { DEFAULT_CHARSET, FW_NORMAL, 12, 120, "MS Sans Serif" },
+            { 0 }
+        },
+        { /* SYSTEM_FONT */
+            { SHIFTJIS_CHARSET, FW_NORMAL, 18, 96, "System" },
+            { SHIFTJIS_CHARSET, FW_NORMAL, 22, 120, "System" },
+            { HANGEUL_CHARSET, FW_NORMAL, 16, 96, "System" },
+            { HANGEUL_CHARSET, FW_NORMAL, 20, 120, "System" },
+            { DEFAULT_CHARSET, FW_BOLD, 16, 96, "System" },
+            { DEFAULT_CHARSET, FW_BOLD, 20, 120, "System" },
+            { 0 }
+        },
+        { /* DEVICE_DEFAULT_FONT */
+            { SHIFTJIS_CHARSET, FW_NORMAL, 18, 96, "System" },
+            { SHIFTJIS_CHARSET, FW_NORMAL, 22, 120, "System" },
+            { HANGEUL_CHARSET, FW_NORMAL, 16, 96, "System" },
+            { HANGEUL_CHARSET, FW_NORMAL, 20, 120, "System" },
+            { DEFAULT_CHARSET, FW_BOLD, 16, 96, "System" },
+            { DEFAULT_CHARSET, FW_BOLD, 20, 120, "System" },
+            { 0 }
+        },
+        { /* DEFAULT_GUI_FONT */
+            { SHIFTJIS_CHARSET, FW_NORMAL, -12, 96, "?MS UI Gothic" },
+            { SHIFTJIS_CHARSET, FW_NORMAL, -15, 120, "?MS UI Gothic" },
+            { HANGEUL_CHARSET, FW_NORMAL, -12, 96, "?Gulim" },
+            { HANGEUL_CHARSET, FW_NORMAL, -15, 120, "?Gulim" },
+            { GB2312_CHARSET, FW_NORMAL, -12, 96, "?SimHei" },
+            { GB2312_CHARSET, FW_NORMAL, -15, 120, "?SimHei" },
+            { CHINESEBIG5_CHARSET, FW_NORMAL, -12, 96, "?MingLiU" },
+            { CHINESEBIG5_CHARSET, FW_NORMAL, -15, 120, "?MingLiU" },
+            { DEFAULT_CHARSET, FW_NORMAL, -11, 96, "MS Shell Dlg" },
+            { DEFAULT_CHARSET, FW_NORMAL, -13, 120, "MS Shell Dlg" },
+            { 0 }
+        }
     };
-    int i;
+    int i, j;
 
-    for (i = 0; i < sizeof(td)/sizeof(td[0]); i++)
+    for (i = 0; i < sizeof(font)/sizeof(font[0]); i++)
     {
         HFONT hfont;
         LOGFONT lf;
         int ret;
 
-        hfont = GetStockObject(td[i].id);
-        ok(hfont != 0, "%d: GetStockObject(%d) failed\n", i, td[i].id);
+        hfont = GetStockObject(font[i]);
+        ok(hfont != 0, "%d: GetStockObject(%d) failed\n", i, font[i]);
 
         ret = GetObject(hfont, sizeof(lf), &lf);
         if (ret != sizeof(lf))
@@ -4414,16 +4445,43 @@ static void test_stock_fonts(void)
             continue;
         }
 
-        ret = get_font_dpi(&lf);
-        if (ret != td[i].dpi)
+        for (j = 0; td[i][j].face_name[0] != 0; j++)
         {
-            trace("%d: font %s %d dpi doesn't match test data %d\n", i, lf.lfFaceName, ret, td[i].dpi);
-            continue;
-        }
+            if (lf.lfCharSet != td[i][j].charset && td[i][j].charset != DEFAULT_CHARSET)
+            {
+                continue;
+            }
 
-        ok(td[i].weight == lf.lfWeight, "%d: expected lfWeight %d, got %d\n", i, td[i].weight, lf.lfWeight);
-        ok(td[i].height == lf.lfHeight, "%d: expected lfHeight %d, got %d\n", i, td[i].height, lf.lfHeight);
-        ok(!lstrcmp(td[i].face_name, lf.lfFaceName), "%d: expected lfFaceName %s, got %s\n", i, td[i].face_name, lf.lfFaceName);
+            ret = get_font_dpi(&lf);
+            if (ret != td[i][j].dpi)
+            {
+                trace("%d(%d): font %s %d dpi doesn't match test data %d\n",
+                      i, j, lf.lfFaceName, ret, td[i][j].dpi);
+                continue;
+            }
+
+            if ((font[i] == DEVICE_DEFAULT_FONT || font[i] == SYSTEM_FONT) && td[i][j].charset != DEFAULT_CHARSET)
+            todo_wine ok(td[i][j].weight == lf.lfWeight, "%d(%d): expected lfWeight %d, got %d\n", i, j, td[i][j].weight, lf.lfWeight);
+            else
+            ok(td[i][j].weight == lf.lfWeight, "%d(%d): expected lfWeight %d, got %d\n", i, j, td[i][j].weight, lf.lfWeight);
+            if ((font[i] == DEFAULT_GUI_FONT && td[i][j].charset != DEFAULT_CHARSET) ||
+                ((font[i] == DEVICE_DEFAULT_FONT || font[i] == SYSTEM_FONT) && td[i][j].charset == SHIFTJIS_CHARSET))
+            todo_wine ok(td[i][j].height == lf.lfHeight, "%d(%d): expected lfHeight %d, got %d\n", i, j, td[i][j].height, lf.lfHeight);
+            else
+            ok(td[i][j].height == lf.lfHeight, "%d(%d): expected lfHeight %d, got %d\n", i, j, td[i][j].height, lf.lfHeight);
+            if (td[i][j].face_name[0] == '?')
+            {
+                /* Wine doesn't have this font, skip this case for now.
+                   Actually, the face name is localized on Windows and varies
+                   dpending on Windows versions (e.g. Japanese NT4 vs win2k). */
+                trace("%d(%d): default gui font is %s\n", i, j, lf.lfFaceName);
+            }
+            else
+            {
+                ok(!lstrcmp(td[i][j].face_name, lf.lfFaceName), "%d(%d): expected lfFaceName %s, got %s\n", i, j, td[i][j].face_name, lf.lfFaceName);
+            }
+            break;
+        }
     }
 }
 




More information about the wine-cvs mailing list