[2/2] gdi32: Add a EnumFontFamilies test to see how it handles various font faces. Take 2.

Dmitry Timoshkov dmitry at codeweavers.com
Mon Feb 14 03:55:03 CST 2011


This version of the test takes into account user locale.
---
 dlls/gdi32/tests/font.c |   96 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 96 insertions(+), 0 deletions(-)

diff --git a/dlls/gdi32/tests/font.c b/dlls/gdi32/tests/font.c
index 8bce92b..a9a8755 100644
--- a/dlls/gdi32/tests/font.c
+++ b/dlls/gdi32/tests/font.c
@@ -3483,6 +3483,101 @@ static void test_AddFontMemResource(void)
     free_font(font);
 }
 
+static INT CALLBACK enum_fonts_proc(const LOGFONT *elf, const TEXTMETRIC *ntm, DWORD type, LPARAM lparam)
+{
+    LOGFONT *lf;
+
+    if (type != TRUETYPE_FONTTYPE) return 1;
+
+    ok(ntm->tmWeight == elf->lfWeight, "expected %d got %d\n", ntm->tmWeight, elf->lfWeight);
+
+    lf = (LOGFONT *)lparam;
+    *lf = *elf;
+    return 0;
+}
+
+static INT CALLBACK enum_all_fonts_proc(const LOGFONT *elf, const TEXTMETRIC *ntm, DWORD type, LPARAM lparam)
+{
+    int ret;
+    LOGFONT *lf;
+
+    if (type != TRUETYPE_FONTTYPE) return 1;
+
+    lf = (LOGFONT *)lparam;
+    ret = strcmp(lf->lfFaceName, elf->lfFaceName);
+    if(ret == 0)
+    {
+        ok(ntm->tmWeight == elf->lfWeight, "expected %d got %d\n", ntm->tmWeight, elf->lfWeight);
+        *lf = *elf;
+        return 0;
+    }
+    return 1;
+}
+
+static void test_EnumFonts(void)
+{
+    int ret;
+    LOGFONT lf;
+    HDC hdc;
+
+    if (!is_truetype_font_installed("Arial"))
+    {
+        skip("Arial is not installed\n");
+        return;
+    }
+
+    /* Windows uses localized font face names, so Arial Bold won't be found */
+    if (PRIMARYLANGID(GetUserDefaultLangID()) != LANG_ENGLISH)
+    {
+        skip("User locale is not English, skipping the test\n");
+        return;
+    }
+
+    hdc = CreateCompatibleDC(0);
+
+    ret = EnumFontFamilies(hdc, "Arial", enum_fonts_proc, (LPARAM)&lf);
+    ok(!ret, "font Arial is not enumerated\n");
+    ret = strcmp(lf.lfFaceName, "Arial");
+    ok(!ret, "expected Arial got %s\n", lf.lfFaceName);
+    ok(lf.lfWeight == FW_NORMAL, "expected FW_NORMAL got %d\n", lf.lfWeight);
+
+    lstrcpy(lf.lfFaceName, "Arial");
+    ret = EnumFontFamilies(hdc, NULL, enum_all_fonts_proc, (LPARAM)&lf);
+    ok(!ret, "font Arial is not enumerated\n");
+    ret = strcmp(lf.lfFaceName, "Arial");
+    ok(!ret, "expected Arial got %s\n", lf.lfFaceName);
+    ok(lf.lfWeight == FW_NORMAL, "expected FW_NORMAL got %d\n", lf.lfWeight);
+
+    ret = EnumFontFamilies(hdc, "Arial Bold", enum_fonts_proc, (LPARAM)&lf);
+    ok(!ret, "font Arial Bold is not enumerated\n");
+    ret = strcmp(lf.lfFaceName, "Arial");
+    ok(!ret, "expected Arial got %s\n", lf.lfFaceName);
+    ok(lf.lfWeight == FW_BOLD, "expected FW_BOLD got %d\n", lf.lfWeight);
+
+    lstrcpy(lf.lfFaceName, "Arial Bold");
+    ret = EnumFontFamilies(hdc, NULL, enum_all_fonts_proc, (LPARAM)&lf);
+    ok(ret, "font Arial Bold should not be enumerated\n");
+
+    ret = EnumFontFamilies(hdc, "Arial Bold Italic", enum_fonts_proc, (LPARAM)&lf);
+    ok(!ret, "font Arial Bold Italic is not enumerated\n");
+    ret = strcmp(lf.lfFaceName, "Arial");
+    ok(!ret, "expected Arial got %s\n", lf.lfFaceName);
+    ok(lf.lfWeight == FW_BOLD, "expected FW_BOLD got %d\n", lf.lfWeight);
+
+    lstrcpy(lf.lfFaceName, "Arial Bold Italic");
+    ret = EnumFontFamilies(hdc, NULL, enum_all_fonts_proc, (LPARAM)&lf);
+    ok(ret, "font Arial Bold Italic should not be enumerated\n");
+
+    ret = EnumFontFamilies(hdc, "Arial Italic Bold", enum_fonts_proc, (LPARAM)&lf);
+    ok(ret, "font Arial Italic Bold  should not be enumerated\n");
+
+    lstrcpy(lf.lfFaceName, "Arial Italic Bold");
+    ret = EnumFontFamilies(hdc, NULL, enum_all_fonts_proc, (LPARAM)&lf);
+    ok(ret, "font Arial Italic Bold should not be enumerated\n");
+
+    DeleteDC(hdc);
+}
+
 START_TEST(font)
 {
     init();
@@ -3504,6 +3599,7 @@ START_TEST(font)
     test_orientation();
     test_height_selection();
     test_AddFontMemResource();
+    test_EnumFonts();
 
     /* On Windows Arial has a lot of default charset aliases such as Arial Cyr,
      * I'd like to avoid them in this test.
-- 
1.7.3.5




More information about the wine-patches mailing list