2 * PROJECT: ReactOS api tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PURPOSE: Test for AddFontMemResourceEx
5 * PROGRAMMERS: Mark Jansen
7 * PanosePitchTest by Katayama Hirofumi MZ, licensed under CC BY
16 static void test_font_caps(HDC hdc
)
19 TEXTMETRICA tm
= { 0 };
22 HFONT font
= CreateFont(0, 0, 0, 0, FW_DONTCARE
, FALSE
, FALSE
, FALSE
, DEFAULT_CHARSET
,
23 OUT_DEFAULT_PRECIS
, CLIP_DEFAULT_PRECIS
, DEFAULT_QUALITY
, DEFAULT_PITCH
, TEXT("PanosePitchTest"));
27 old
= SelectObject(hdc
, font
);
29 memset(&tm
, 0xaa, sizeof(tm
));
30 ret
= GetTextMetricsA(hdc
, &tm
);
33 SetLastError(0xdeadbeef);
34 ret
= GetTextFaceA(hdc
, sizeof(name
), name
);
35 ok(ret
, "GetTextFaceA error %lu\n", GetLastError());
38 ok_str(name
, "PanosePitchTest");
41 ok_int(tm
.tmHeight
, 11);
42 ok_int(tm
.tmAscent
, 11);
43 ok_int(tm
.tmDescent
, 0);
44 ok_int(tm
.tmInternalLeading
, -5);
45 ok_int(tm
.tmExternalLeading
, 1);
46 ok_int(tm
.tmAveCharWidth
, 8);
47 ok_int(tm
.tmMaxCharWidth
, 11);
48 ok_int(tm
.tmWeight
, FW_NORMAL
);
49 ok_int(tm
.tmOverhang
, 0);
50 ok_int(tm
.tmDigitizedAspectX
, 96);
51 ok_int(tm
.tmDigitizedAspectY
, 96);
52 ok_int(tm
.tmFirstChar
, 63);
53 ok_int(tm
.tmLastChar
, 65);
54 ok_int(tm
.tmDefaultChar
, 165);
55 ok_int(tm
.tmBreakChar
, 65);
56 ok_int(tm
.tmItalic
, 0);
57 ok_int(tm
.tmUnderlined
, 0);
58 ok_int(tm
.tmStruckOut
, 0);
59 ok_hex(tm
.tmPitchAndFamily
, TMPF_TRUETYPE
| TMPF_VECTOR
);
60 ok_int(tm
.tmCharSet
, SHIFTJIS_CHARSET
);
62 SelectObject(hdc
, old
);
66 font
= CreateFont(0, 0, 0, 0, FW_DONTCARE
, FALSE
, FALSE
, FALSE
, DEFAULT_CHARSET
,
67 OUT_DEFAULT_PRECIS
, CLIP_DEFAULT_PRECIS
, DEFAULT_QUALITY
, DEFAULT_PITCH
, TEXT("@PanosePitchTest"));
71 old
= SelectObject(hdc
, font
);
73 memset(&tm
, 0xaa, sizeof(tm
));
74 ret
= GetTextMetricsA(hdc
, &tm
);
77 SetLastError(0xdeadbeef);
78 ret
= GetTextFaceA(hdc
, sizeof(name
), name
);
79 ok(ret
, "GetTextFaceA error %lu\n", GetLastError());
82 ok_str(name
, "@PanosePitchTest");
85 ok_int(tm
.tmHeight
, 11);
86 ok_int(tm
.tmAscent
, 11);
87 ok_int(tm
.tmDescent
, 0);
88 ok_int(tm
.tmInternalLeading
, -5);
89 ok_int(tm
.tmExternalLeading
, 1);
90 ok_int(tm
.tmAveCharWidth
, 8);
91 ok_int(tm
.tmMaxCharWidth
, 11);
92 ok_int(tm
.tmWeight
, FW_NORMAL
);
93 ok_int(tm
.tmOverhang
, 0);
94 ok_int(tm
.tmDigitizedAspectX
, 96);
95 ok_int(tm
.tmDigitizedAspectY
, 96);
96 ok_int(tm
.tmFirstChar
, 63);
97 ok_int(tm
.tmLastChar
, 65);
98 ok_int(tm
.tmDefaultChar
, 165);
99 ok_int(tm
.tmBreakChar
, 65);
100 ok_int(tm
.tmItalic
, 0);
101 ok_int(tm
.tmUnderlined
, 0);
102 ok_int(tm
.tmStruckOut
, 0);
103 ok_hex(tm
.tmPitchAndFamily
, TMPF_TRUETYPE
| TMPF_VECTOR
);
104 ok_int(tm
.tmCharSet
, SHIFTJIS_CHARSET
);
106 SelectObject(hdc
, old
);
111 /* Not working as of 2017-04-08 on ReactOS */
112 static BOOL
is_font_available(HDC hdc
, const char* fontName
)
117 HFONT font
= CreateFontA(0, 0, 0, 0, FW_DONTCARE
, FALSE
, FALSE
, FALSE
, DEFAULT_CHARSET
,
118 OUT_DEFAULT_PRECIS
, CLIP_DEFAULT_PRECIS
, DEFAULT_QUALITY
, DEFAULT_PITCH
, fontName
);
119 HGDIOBJ old
= SelectObject(hdc
, font
);
122 SetLastError(0xdeadbeef);
124 ret
= GetTextFaceA(hdc
, sizeof(name
), name
);
125 ok(ret
, "GetTextFaceA error %lu\n", GetLastError());
126 SelectObject(hdc
, old
);
131 return !_strcmpi(name
, fontName
);
138 START_TEST(AddFontMemResourceEx
)
144 DWORD dwSize
, dwNumFonts
;
149 HDC hdc
= CreateCompatibleDC(NULL
);
150 BOOL is_font_available_broken
= is_font_available(hdc
, "Nonexisting font name here");
152 ok(!is_font_available_broken
, "Validating font is broken! (CORE-13053) !\n");
154 if (is_font_available_broken
|| !is_font_available(hdc
, "PanosePitchTest"))
156 mod
= GetModuleHandle(NULL
);
157 hRsrc
= FindResource(mod
, TEXT("PanosePitchTest.ttf"), MAKEINTRESOURCE(RT_RCDATA
));
159 hTemplate
= LoadResource(mod
, hRsrc
);
160 dwSize
= SizeofResource(mod
, hRsrc
);
161 pFont
= LockResource(hTemplate
);
164 hFont
= AddFontMemResourceEx(pFont
, dwSize
, NULL
, &dwNumFonts
);
165 ok_int(dwNumFonts
, 2);
166 ok(hFont
!= NULL
, "Expected valid handle\n");
171 RemoveFontMemResourceEx(hFont
);
172 if (!is_font_available_broken
)
174 ok (!is_font_available(hdc
, "PanosePitchTest"), "Expected font to be unregistered again\n");
178 skip("Font unregister test\n");
182 UnlockResource(hTemplate
);
183 FreeResource(hTemplate
);
187 skip("Font PanosePitchTest already available\n");