2 * PROJECT: ReactOS api tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PURPOSE: Test for CreateFontIndirect
5 * PROGRAMMERS: Timo Kreuzer
12 #define trace_if(val, msg) do { if (!(val)) trace(msg); } while (0)
15 Test_CreateFontIndirectA(void)
20 ENUMLOGFONTEXDVW elfedv2
;
22 logfont
.lfHeight
= 12;
24 logfont
.lfEscapement
= 0;
25 logfont
.lfOrientation
= 0;
26 logfont
.lfWeight
= FW_NORMAL
;
28 logfont
.lfUnderline
= 0;
29 logfont
.lfStrikeOut
= 0;
30 logfont
.lfCharSet
= DEFAULT_CHARSET
;
31 logfont
.lfOutPrecision
= OUT_DEFAULT_PRECIS
;
32 logfont
.lfClipPrecision
= CLIP_DEFAULT_PRECIS
;
33 logfont
.lfQuality
= PROOF_QUALITY
;
34 logfont
.lfPitchAndFamily
= DEFAULT_PITCH
;
35 memset(logfont
.lfFaceName
, 'A', LF_FACESIZE
);
36 hFont
= CreateFontIndirectA(&logfont
);
37 ok(hFont
!= 0, "CreateFontIndirectA failed\n");
39 memset(&elfedv2
, 0, sizeof(elfedv2
));
40 ret
= GetObjectW(hFont
, sizeof(elfedv2
), &elfedv2
);
41 ok(ret
== sizeof(ENUMLOGFONTEXW
) + 2*sizeof(DWORD
), "ret = %ld\n", ret
);
42 ok(elfedv2
.elfEnumLogfontEx
.elfLogFont
.lfFaceName
[LF_FACESIZE
-1] == 0, "\n");
43 ok(elfedv2
.elfEnumLogfontEx
.elfFullName
[0] == 0, "\n");
47 Test_CreateFontIndirectW(void)
52 ENUMLOGFONTEXDVW elfedv2
;
54 logfont
.lfHeight
= 12;
56 logfont
.lfEscapement
= 0;
57 logfont
.lfOrientation
= 0;
58 logfont
.lfWeight
= FW_NORMAL
;
60 logfont
.lfUnderline
= 0;
61 logfont
.lfStrikeOut
= 0;
62 logfont
.lfCharSet
= DEFAULT_CHARSET
;
63 logfont
.lfOutPrecision
= OUT_DEFAULT_PRECIS
;
64 logfont
.lfClipPrecision
= CLIP_DEFAULT_PRECIS
;
65 logfont
.lfQuality
= PROOF_QUALITY
;
66 logfont
.lfPitchAndFamily
= DEFAULT_PITCH
;
67 memset(logfont
.lfFaceName
, 'A', LF_FACESIZE
* 2);
68 hFont
= CreateFontIndirectW(&logfont
);
69 ok(hFont
!= 0, "CreateFontIndirectW failed\n");
71 memset(&elfedv2
, 0, sizeof(elfedv2
));
72 ret
= GetObjectW(hFont
, sizeof(elfedv2
), &elfedv2
);
73 ok(ret
== sizeof(ENUMLOGFONTEXW
) + 2*sizeof(DWORD
), "\n");
74 ok(elfedv2
.elfEnumLogfontEx
.elfLogFont
.lfFaceName
[LF_FACESIZE
-1] == ((WCHAR
)'A' << 8) + 'A', "\n");
75 ok(elfedv2
.elfEnumLogfontEx
.elfFullName
[0] == 0, "\n");
76 /* Theres a bunch of data in elfFullName ... */
80 Test_CreateFontIndirectExA(void)
82 ENUMLOGFONTEXDVA elfedva
, elfedva2
;
83 ENUMLOGFONTEXDVW elfedvw
;
84 ENUMLOGFONTEXA
*penumlfa
;
89 memset(&elfedva
, 0, sizeof(elfedva
));
90 penumlfa
= &elfedva
.elfEnumLogfontEx
;
91 plogfonta
= &elfedva
.elfEnumLogfontEx
.elfLogFont
;
93 plogfonta
->lfHeight
= 12;
94 plogfonta
->lfWidth
= 0;
95 plogfonta
->lfEscapement
= 0;
96 plogfonta
->lfOrientation
= 0;
97 plogfonta
->lfWeight
= FW_NORMAL
;
98 plogfonta
->lfItalic
= 0;
99 plogfonta
->lfUnderline
= 0;
100 plogfonta
->lfStrikeOut
= 0;
101 plogfonta
->lfCharSet
= DEFAULT_CHARSET
;
102 plogfonta
->lfOutPrecision
= OUT_DEFAULT_PRECIS
;
103 plogfonta
->lfClipPrecision
= CLIP_DEFAULT_PRECIS
;
104 plogfonta
->lfQuality
= PROOF_QUALITY
;
105 plogfonta
->lfPitchAndFamily
= DEFAULT_PITCH
;
107 memset(plogfonta
->lfFaceName
, 'A', LF_FACESIZE
* sizeof(WCHAR
));
108 memset(penumlfa
->elfFullName
, 'B', LF_FULLFACESIZE
* sizeof(WCHAR
));
110 hFont
= CreateFontIndirectExA(&elfedva
);
111 ok(hFont
!= 0, "CreateFontIndirectExA failed\n");
113 ret
= GetObjectW(hFont
, sizeof(elfedvw
), &elfedvw
);
114 ok(ret
== sizeof(ENUMLOGFONTEXW
) + 2*sizeof(DWORD
), "\n");
115 ok(elfedvw
.elfEnumLogfontEx
.elfLogFont
.lfFaceName
[LF_FACESIZE
-1] == 0, "\n");
116 ok(elfedvw
.elfEnumLogfontEx
.elfFullName
[LF_FULLFACESIZE
-1] == 0, "\n");
118 memset(&elfedva2
, 0, sizeof(elfedva2
));
119 ret
= GetObjectA(hFont
, sizeof(elfedva2
), &elfedva2
);
120 ok(ret
== sizeof(ENUMLOGFONTEXDVA
), "ret = %ld\n", ret
);
121 ok(elfedva2
.elfEnumLogfontEx
.elfLogFont
.lfFaceName
[LF_FACESIZE
-1] == 0, "\n");
122 ok(elfedva2
.elfEnumLogfontEx
.elfFullName
[LF_FULLFACESIZE
-1] == 0, "\n");
126 Test_CreateFontIndirectExW(void)
128 ENUMLOGFONTEXDVW elfedv
, elfedv2
;
129 ENUMLOGFONTEXDVA elfedva
;
130 ENUMLOGFONTEXW
*penumlfw
;
135 memset(&elfedv
, 0, sizeof(elfedv
));
136 penumlfw
= &elfedv
.elfEnumLogfontEx
;
137 plogfontw
= &elfedv
.elfEnumLogfontEx
.elfLogFont
;
139 plogfontw
->lfHeight
= 12;
140 plogfontw
->lfWidth
= 0;
141 plogfontw
->lfEscapement
= 0;
142 plogfontw
->lfOrientation
= 0;
143 plogfontw
->lfWeight
= FW_NORMAL
;
144 plogfontw
->lfItalic
= 0;
145 plogfontw
->lfUnderline
= 0;
146 plogfontw
->lfStrikeOut
= 0;
147 plogfontw
->lfCharSet
= DEFAULT_CHARSET
;
148 plogfontw
->lfOutPrecision
= OUT_DEFAULT_PRECIS
;
149 plogfontw
->lfClipPrecision
= CLIP_DEFAULT_PRECIS
;
150 plogfontw
->lfQuality
= PROOF_QUALITY
;
151 plogfontw
->lfPitchAndFamily
= DEFAULT_PITCH
;
153 memset(plogfontw
->lfFaceName
, 'A', LF_FACESIZE
* sizeof(WCHAR
));
154 memset(penumlfw
->elfFullName
, 'B', LF_FULLFACESIZE
* sizeof(WCHAR
));
156 hFont
= CreateFontIndirectExW(&elfedv
);
157 ok(hFont
!= 0, "CreateFontIndirectExW failed\n");
159 memset(&elfedv2
, 0, sizeof(elfedv2
));
160 ret
= GetObjectW(hFont
, sizeof(elfedv2
), &elfedv2
);
161 ok(ret
== sizeof(ENUMLOGFONTEXW
) + 2*sizeof(DWORD
), "\n");
162 ok(elfedv2
.elfEnumLogfontEx
.elfLogFont
.lfFaceName
[LF_FACESIZE
-1] == ((WCHAR
)'A' << 8) + 'A', "\n");
163 ok(elfedv2
.elfEnumLogfontEx
.elfFullName
[LF_FULLFACESIZE
-1] == ((WCHAR
)'B' << 8) + 'B', "\n");
165 memset(&elfedva
, 0, sizeof(elfedva
));
166 ret
= GetObjectA(hFont
, sizeof(elfedva
), &elfedva
);
167 ok(ret
== sizeof(ENUMLOGFONTEXDVA
), "\n");
168 ok(elfedva
.elfEnumLogfontEx
.elfLogFont
.lfFaceName
[LF_FACESIZE
-1] == '?', "\n");
169 ok(elfedva
.elfEnumLogfontEx
.elfFullName
[LF_FULLFACESIZE
-1] == 0, "\n");
173 is_truetype_font_proc(const LOGFONTA
*elf
, const TEXTMETRICA
*ntm
,
174 DWORD type
, LPARAM lParam
)
176 if (type
!= TRUETYPE_FONTTYPE
) return 1;
181 static BOOL
is_truetype_font_installed(HDC hDC
, const char *name
)
183 if (!EnumFontFamiliesA(hDC
, name
, is_truetype_font_proc
, 0))
189 is_charset_font_proc(const LOGFONTA
*elf
, const TEXTMETRICA
*ntm
,
190 DWORD type
, LPARAM lParam
)
192 if (ntm
->tmCharSet
== (BYTE
)lParam
)
197 static BOOL
is_charset_font_installed(HDC hDC
, BYTE CharSet
)
199 if (!EnumFontFamiliesA(hDC
, NULL
, is_charset_font_proc
, CharSet
))
204 /* TMPF_FIXED_PITCH is confusing. brain-damaged api */
205 #define _TMPF_VAR_PITCH TMPF_FIXED_PITCH
208 is_fixed_charset_font_proc(const LOGFONTA
*elf
, const TEXTMETRICA
*ntm
,
209 DWORD type
, LPARAM lParam
)
211 if (ntm
->tmCharSet
== (BYTE
)lParam
&& !(ntm
->tmPitchAndFamily
& _TMPF_VAR_PITCH
))
217 is_fixed_charset_font_installed(HDC hDC
, BYTE CharSet
)
219 if (!EnumFontFamiliesA(hDC
, NULL
, is_fixed_charset_font_proc
, CharSet
))
225 Test_FontPresence(void)
229 hDC
= CreateCompatibleDC(NULL
);
231 ok(is_truetype_font_installed(hDC
, "Arial"), "'Arial' is not found\n");
232 ok(is_truetype_font_installed(hDC
, "Courier New"), "'Courier New' is not found\n");
233 ok(is_truetype_font_installed(hDC
, "Marlett"), "'Marlett' is not found\n");
234 ok(is_truetype_font_installed(hDC
, "MS Shell Dlg"), "'MS Shell Dlg' is not found\n");
235 ok(is_truetype_font_installed(hDC
, "Tahoma"), "'Tahoma' is not found\n");
236 ok(is_truetype_font_installed(hDC
, "Times New Roman"), "'Times New Roman' is not found\n");
238 ok(is_charset_font_installed(hDC
, ANSI_CHARSET
), "ANSI_CHARSET fonts are not found\n");
239 ok(is_charset_font_installed(hDC
, SYMBOL_CHARSET
), "SYMBOL_CHARSET fonts are not found\n");
240 trace_if(is_charset_font_installed(hDC
, SHIFTJIS_CHARSET
), "SHIFTJIS_CHARSET fonts are not found\n");
241 trace_if(is_charset_font_installed(hDC
, HANGUL_CHARSET
), "HANGUL_CHARSET fonts are not found\n");
242 trace_if(is_charset_font_installed(hDC
, GB2312_CHARSET
), "GB2312_CHARSET fonts are not found\n");
243 trace_if(is_charset_font_installed(hDC
, CHINESEBIG5_CHARSET
), "CHINESEBIG5_CHARSET fonts are not found\n");
244 ok(is_charset_font_installed(hDC
, OEM_CHARSET
), "OEM_CHARSET fonts are not found\n");
245 trace_if(is_charset_font_installed(hDC
, JOHAB_CHARSET
), "JOHAB_CHARSET fonts are not found\n");
246 trace_if(is_charset_font_installed(hDC
, HEBREW_CHARSET
), "HEBREW_CHARSET fonts are not found\n");
247 trace_if(is_charset_font_installed(hDC
, ARABIC_CHARSET
), "ARABIC_CHARSET fonts are not found\n");
248 trace_if(is_charset_font_installed(hDC
, GREEK_CHARSET
), "GREEK_CHARSET fonts are not found\n");
249 trace_if(is_charset_font_installed(hDC
, TURKISH_CHARSET
), "TURKISH_CHARSET fonts are not found\n");
250 trace_if(is_charset_font_installed(hDC
, VIETNAMESE_CHARSET
), "VIETNAMESE_CHARSET fonts are not found\n");
251 trace_if(is_charset_font_installed(hDC
, THAI_CHARSET
), "THAI_CHARSET fonts are not found\n");
252 trace_if(is_charset_font_installed(hDC
, EASTEUROPE_CHARSET
), "EASTEUROPE_CHARSET fonts are not found\n");
253 trace_if(is_charset_font_installed(hDC
, RUSSIAN_CHARSET
), "RUSSIAN_CHARSET fonts are not found\n");
254 trace_if(is_charset_font_installed(hDC
, MAC_CHARSET
), "MAC_CHARSET fonts are not found\n");
255 trace_if(is_charset_font_installed(hDC
, BALTIC_CHARSET
), "BALTIC_CHARSET fonts are not found\n");
257 ok(is_fixed_charset_font_installed(hDC
, ANSI_CHARSET
), "fixed ANSI_CHARSET fonts are not found\n");
258 trace_if(is_fixed_charset_font_installed(hDC
, SHIFTJIS_CHARSET
), "fixed SHIFTJIS_CHARSET fonts are not found\n");
259 trace_if(is_fixed_charset_font_installed(hDC
, HANGUL_CHARSET
), "fixed HANGUL_CHARSET fonts are not found\n");
260 trace_if(is_fixed_charset_font_installed(hDC
, GB2312_CHARSET
), "fixed GB2312_CHARSET fonts are not found\n");
261 trace_if(is_fixed_charset_font_installed(hDC
, CHINESEBIG5_CHARSET
), "fixed CHINESEBIG5_CHARSET fonts are not found\n");
262 ok(is_fixed_charset_font_installed(hDC
, OEM_CHARSET
), "fixed OEM_CHARSET fonts are not found\n");
263 trace_if(is_fixed_charset_font_installed(hDC
, JOHAB_CHARSET
), "fixed JOHAB_CHARSET fonts are not found\n");
264 trace_if(is_fixed_charset_font_installed(hDC
, HEBREW_CHARSET
), "fixed HEBREW_CHARSET fonts are not found\n");
265 trace_if(is_fixed_charset_font_installed(hDC
, ARABIC_CHARSET
), "fixed ARABIC_CHARSET fonts are not found\n");
266 trace_if(is_fixed_charset_font_installed(hDC
, GREEK_CHARSET
), "fixed GREEK_CHARSET fonts are not found\n");
267 trace_if(is_fixed_charset_font_installed(hDC
, TURKISH_CHARSET
), "fixed TURKISH_CHARSET fonts are not found\n");
268 trace_if(is_fixed_charset_font_installed(hDC
, VIETNAMESE_CHARSET
), "fixed VIETNAMESE_CHARSET fonts are not found\n");
269 trace_if(is_fixed_charset_font_installed(hDC
, THAI_CHARSET
), "fixed THAI_CHARSET fonts are not found\n");
270 trace_if(is_fixed_charset_font_installed(hDC
, EASTEUROPE_CHARSET
), "fixed EASTEUROPE_CHARSET fonts are not found\n");
271 trace_if(is_fixed_charset_font_installed(hDC
, RUSSIAN_CHARSET
), "fixed RUSSIAN_CHARSET fonts are not found\n");
272 trace_if(is_fixed_charset_font_installed(hDC
, MAC_CHARSET
), "fixed MAC_CHARSET fonts are not found\n");
273 trace_if(is_fixed_charset_font_installed(hDC
, BALTIC_CHARSET
), "fixed BALTIC_CHARSET fonts are not found\n");
278 /* NOTE: TMPF_FIXED_PITCH is confusing and brain-dead. */
279 #define _TMPF_VAR_PITCH TMPF_FIXED_PITCH
281 typedef enum TRISTATE
{
287 typedef struct FONT_SEL_TEST
{
288 CHAR FaceNameBefore
[LF_FACESIZE
];
297 TRISTATE ItalicAfter
;
299 BYTE UnderlineBefore
;
300 TRISTATE UnderlineAfter
;
302 BYTE StruckOutBefore
;
303 TRISTATE StruckOutAfter
;
305 TRISTATE FixedPitchBefore
;
306 TRISTATE FixedPitchAfter
;
309 static FONT_SEL_TEST g_Entries
[] =
311 /* Entry #0: default */
314 DEFAULT_CHARSET
, DEFAULT_CHARSET
,
315 TS_UNKNOWN
, TS_FALSE
,
316 TS_UNKNOWN
, TS_FALSE
,
317 TS_UNKNOWN
, TS_FALSE
,
318 TS_UNKNOWN
, TS_FALSE
,
321 /* Entry #1: symbol font*/
324 SYMBOL_CHARSET
, SYMBOL_CHARSET
326 /* Entry #2: non-bold */
329 DEFAULT_CHARSET
, DEFAULT_CHARSET
,
335 DEFAULT_CHARSET
, DEFAULT_CHARSET
,
338 /* Entry #4: non-italic (without specifying bold) */
341 DEFAULT_CHARSET
, DEFAULT_CHARSET
,
342 TS_UNKNOWN
, TS_FALSE
,
345 /* Entry #5: italic (without specifying bold) */
348 DEFAULT_CHARSET
, DEFAULT_CHARSET
,
349 TS_UNKNOWN
, TS_FALSE
,
352 /* Entry #6: non-underline (without specifying bold) */
355 DEFAULT_CHARSET
, DEFAULT_CHARSET
,
356 TS_UNKNOWN
, TS_FALSE
,
360 /* Entry #7: underline (without specifying bold) */
363 DEFAULT_CHARSET
, DEFAULT_CHARSET
,
364 TS_UNKNOWN
, TS_FALSE
,
368 /* Entry #8: struck-out (without specifying bold) */
371 DEFAULT_CHARSET
, DEFAULT_CHARSET
,
372 TS_UNKNOWN
, TS_FALSE
,
377 /* Entry #9: non-struck-out (without specifying bold) */
380 DEFAULT_CHARSET
, DEFAULT_CHARSET
,
381 TS_UNKNOWN
, TS_FALSE
,
386 /* Entry #10: fixed-pitch (without specifying bold) */
389 DEFAULT_CHARSET
, DEFAULT_CHARSET
,
390 TS_UNKNOWN
, TS_FALSE
,
396 /* Entry #11: non-fixed-pitch (without specifying bold) */
399 DEFAULT_CHARSET
, DEFAULT_CHARSET
,
400 TS_UNKNOWN
, TS_FALSE
,
406 /* Entry #12: fixed-pitch and bold */
409 DEFAULT_CHARSET
, DEFAULT_CHARSET
,
416 /* Entry #13: non-fixed-pitch and bold */
419 DEFAULT_CHARSET
, DEFAULT_CHARSET
,
426 /* Entry #14: OEM_CHARSET */
429 OEM_CHARSET
, OEM_CHARSET
,
432 /* Entry #15: OEM_CHARSET and bold */
435 OEM_CHARSET
, OEM_CHARSET
,
438 /* Entry #16: OEM_CHARSET and fixed-pitch */
441 OEM_CHARSET
, OEM_CHARSET
,
442 TS_UNKNOWN
, TS_FALSE
,
448 /* Entry #17: CHINESEBIG5_CHARSET (Chinese) */
451 CHINESEBIG5_CHARSET
, CHINESEBIG5_CHARSET
,
454 /* Entry #18: CHINESEBIG5_CHARSET and bold */
457 CHINESEBIG5_CHARSET
, CHINESEBIG5_CHARSET
,
460 /* Entry #19: CHINESEBIG5_CHARSET and fixed-pitch */
463 CHINESEBIG5_CHARSET
, CHINESEBIG5_CHARSET
,
464 TS_UNKNOWN
, TS_FALSE
,
470 /* Entry #20: GB2312_CHARSET (Chinese) */
473 GB2312_CHARSET
, GB2312_CHARSET
,
476 /* Entry #21: GB2312_CHARSET and bold */
479 GB2312_CHARSET
, GB2312_CHARSET
,
482 /* Entry #22: GB2312_CHARSET and fixed-pitch */
485 GB2312_CHARSET
, GB2312_CHARSET
,
486 TS_UNKNOWN
, TS_FALSE
,
492 /* Entry #23: RUSSIAN_CHARSET (Russian) */
495 RUSSIAN_CHARSET
, RUSSIAN_CHARSET
,
498 /* Entry #24: RUSSIAN_CHARSET and bold */
501 RUSSIAN_CHARSET
, RUSSIAN_CHARSET
,
504 /* Entry #25: RUSSIAN_CHARSET and italic */
507 RUSSIAN_CHARSET
, RUSSIAN_CHARSET
,
508 TS_UNKNOWN
, TS_FALSE
,
511 /* Entry #26: RUSSIAN_CHARSET and fixed-pitch */
514 RUSSIAN_CHARSET
, RUSSIAN_CHARSET
,
515 TS_UNKNOWN
, TS_FALSE
,
521 /* Entry #27: SHIFTJIS_CHARSET (Japanese) */
524 SHIFTJIS_CHARSET
, SHIFTJIS_CHARSET
,
527 /* Entry #28: SHIFTJIS_CHARSET and bold */
530 SHIFTJIS_CHARSET
, SHIFTJIS_CHARSET
,
533 /* Entry #29: SHIFTJIS_CHARSET and fixed-pitch */
536 SHIFTJIS_CHARSET
, SHIFTJIS_CHARSET
,
537 TS_UNKNOWN
, TS_FALSE
,
543 /* Entry #30: HANGUL_CHARSET (Korean) */
546 HANGUL_CHARSET
, HANGUL_CHARSET
,
549 /* Entry #31: HANGUL_CHARSET and bold */
552 HANGUL_CHARSET
, HANGUL_CHARSET
,
555 /* Entry #32: HANGUL_CHARSET and fixed-pitch */
558 HANGUL_CHARSET
, HANGUL_CHARSET
,
559 TS_UNKNOWN
, TS_FALSE
,
565 /* Entry #33: JOHAB_CHARSET (Korean) */
568 JOHAB_CHARSET
, JOHAB_CHARSET
,
569 TS_UNKNOWN
, TS_UNKNOWN
571 /* Entry #34: JOHAB_CHARSET and bold */
574 JOHAB_CHARSET
, JOHAB_CHARSET
,
577 /* Entry #35: JOHAB_CHARSET and fixed-pitch */
580 JOHAB_CHARSET
, JOHAB_CHARSET
,
581 TS_UNKNOWN
, TS_UNKNOWN
,
587 /* Entry #36: THAI_CHARSET (Thai) */
590 THAI_CHARSET
, THAI_CHARSET
,
593 /* Entry #37: THAI_CHARSET and bold */
596 THAI_CHARSET
, THAI_CHARSET
,
599 /* Entry #38: THAI_CHARSET and fixed-pitch */
602 THAI_CHARSET
, THAI_CHARSET
,
603 TS_UNKNOWN
, TS_FALSE
,
609 /* Entry #39: GREEK_CHARSET (Greek) */
612 GREEK_CHARSET
, GREEK_CHARSET
,
615 /* Entry #40: GREEK_CHARSET and bold */
618 GREEK_CHARSET
, GREEK_CHARSET
,
621 /* Entry #41: GREEK_CHARSET and italic */
624 GREEK_CHARSET
, GREEK_CHARSET
,
625 TS_UNKNOWN
, TS_FALSE
,
628 /* Entry #42: GREEK_CHARSET and fixed-pitch */
631 GREEK_CHARSET
, GREEK_CHARSET
,
632 TS_UNKNOWN
, TS_FALSE
,
638 /* Entry #43: "Marlett" */
641 DEFAULT_CHARSET
, SYMBOL_CHARSET
643 /* Entry #43: "Arial" */
646 DEFAULT_CHARSET
, DEFAULT_CHARSET
,
647 TS_UNKNOWN
, TS_FALSE
,
653 /* Entry #44: "Courier" */
656 DEFAULT_CHARSET
, DEFAULT_CHARSET
,
657 TS_UNKNOWN
, TS_FALSE
,
666 Test_FontSelectionEntry(HDC hDC
, UINT nIndex
, FONT_SEL_TEST
*Entry
)
673 ZeroMemory(&lf
, sizeof(lf
));
675 if (Entry
->FaceNameBefore
[0])
676 lstrcpynA(lf
.lfFaceName
, Entry
->FaceNameBefore
, _countof(lf
.lfFaceName
));
678 lf
.lfCharSet
= Entry
->CharSetBefore
;
680 if (Entry
->BoldBefore
== TS_TRUE
)
681 lf
.lfWeight
= FW_BOLD
;
682 else if (Entry
->BoldBefore
== TS_FALSE
)
683 lf
.lfWeight
= FW_NORMAL
;
685 lf
.lfWeight
= FW_DONTCARE
;
687 lf
.lfItalic
= Entry
->ItalicBefore
;
688 lf
.lfUnderline
= Entry
->UnderlineBefore
;
689 lf
.lfStrikeOut
= Entry
->StruckOutBefore
;
691 if (Entry
->FixedPitchBefore
== TS_TRUE
)
692 lf
.lfPitchAndFamily
= FIXED_PITCH
| FF_DONTCARE
;
693 else if (Entry
->FixedPitchBefore
== TS_FALSE
)
694 lf
.lfPitchAndFamily
= VARIABLE_PITCH
| FF_DONTCARE
;
696 lf
.lfPitchAndFamily
= DEFAULT_PITCH
| FF_DONTCARE
;
698 hFont
= CreateFontIndirectA(&lf
);
699 ok(hFont
!= NULL
, "Entry #%u: hFont failed\n", nIndex
);
701 hFontOld
= SelectObject(hDC
, hFont
);
703 ok(GetTextMetricsA(hDC
, &tm
), "Entry #%u: GetTextMetricsA failed\n", nIndex
);
705 if (Entry
->CharSetAfter
!= DEFAULT_CHARSET
)
706 ok(tm
.tmCharSet
== Entry
->CharSetAfter
, "Entry #%u: CharSet mismatched, it was %u\n", nIndex
, tm
.tmCharSet
);
708 if (Entry
->BoldAfter
== TS_TRUE
)
709 ok(tm
.tmWeight
>= FW_BOLD
, "Entry #%u: Weight was non-bold\n", nIndex
);
710 else if (Entry
->BoldAfter
== TS_FALSE
)
711 ok(tm
.tmWeight
<= FW_MEDIUM
, "Entry #%u: Weight was bold\n", nIndex
);
713 if (Entry
->ItalicAfter
== TS_TRUE
)
714 ok(tm
.tmItalic
, "Entry #%u: Italic was non-italic\n", nIndex
);
715 else if (Entry
->ItalicAfter
== TS_FALSE
)
716 ok(!tm
.tmItalic
, "Entry #%u: Italic was italic\n", nIndex
);
718 if (Entry
->UnderlineAfter
== TS_TRUE
)
719 ok(tm
.tmUnderlined
, "Entry #%u: Underlined was FALSE\n", nIndex
);
720 else if (Entry
->UnderlineAfter
== TS_FALSE
)
721 ok(!tm
.tmUnderlined
, "Entry #%u: Underlined was TRUE\n", nIndex
);
723 if (Entry
->StruckOutAfter
== TS_TRUE
)
724 ok(tm
.tmStruckOut
, "Entry #%u: Struck-out was FALSE\n", nIndex
);
725 else if (Entry
->StruckOutAfter
== TS_FALSE
)
726 ok(!tm
.tmStruckOut
, "Entry #%u: Struck-out was TRUE\n", nIndex
);
728 if (Entry
->FixedPitchAfter
== TS_TRUE
)
729 ok(!(tm
.tmPitchAndFamily
& _TMPF_VAR_PITCH
), "Entry #%u: Pitch mismatched, it was non-fixed-pitch\n", nIndex
);
730 else if (Entry
->FixedPitchAfter
== TS_FALSE
)
731 ok((tm
.tmPitchAndFamily
& _TMPF_VAR_PITCH
), "Entry #%u: Pitch mismatched, it was fixed-pitch\n", nIndex
);
733 SelectObject(hDC
, hFontOld
);
738 Test_FontSelection(void)
743 hDC
= CreateCompatibleDC(NULL
);
744 for (nIndex
= 0; nIndex
< _countof(g_Entries
); ++nIndex
)
746 if (!is_charset_font_installed(hDC
, g_Entries
[nIndex
].CharSetBefore
))
747 skip("charset not available: 0x%x\n", g_Entries
[nIndex
].CharSetBefore
);
749 Test_FontSelectionEntry(hDC
, nIndex
, g_Entries
+ nIndex
);
755 START_TEST(CreateFontIndirect
)
757 Test_CreateFontIndirectA();
758 Test_CreateFontIndirectW();
759 Test_CreateFontIndirectExA();
760 Test_CreateFontIndirectExW();
762 Test_FontSelection();