[SPIDER]
[reactos.git] / rostests / apitests / gdi32 / CreateFontIndirect.c
1 /*
2 * PROJECT: ReactOS api tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PURPOSE: Test for CreateFontIndirect
5 * PROGRAMMERS: Timo Kreuzer
6 */
7
8 #include <apitest.h>
9
10 #include <wingdi.h>
11
12 void
13 Test_CreateFontIndirectA(void)
14 {
15 LOGFONTA logfont;
16 HFONT hFont;
17 ULONG ret;
18 ENUMLOGFONTEXDVW elfedv2;
19
20 logfont.lfHeight = 12;
21 logfont.lfWidth = 0;
22 logfont.lfEscapement = 0;
23 logfont.lfOrientation = 0;
24 logfont.lfWeight = FW_NORMAL;
25 logfont.lfItalic = 0;
26 logfont.lfUnderline = 0;
27 logfont.lfStrikeOut = 0;
28 logfont.lfCharSet = DEFAULT_CHARSET;
29 logfont.lfOutPrecision = OUT_DEFAULT_PRECIS;
30 logfont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
31 logfont.lfQuality = PROOF_QUALITY;
32 logfont.lfPitchAndFamily = DEFAULT_PITCH;
33 memset(logfont.lfFaceName, 'A', LF_FACESIZE);
34 hFont = CreateFontIndirectA(&logfont);
35 ok(hFont != 0, "CreateFontIndirectA failed\n");
36
37 memset(&elfedv2, 0, sizeof(elfedv2));
38 ret = GetObjectW(hFont, sizeof(elfedv2), &elfedv2);
39 ok(ret == sizeof(ENUMLOGFONTEXW) + 2*sizeof(DWORD), "ret = %ld\n", ret);
40 ok(elfedv2.elfEnumLogfontEx.elfLogFont.lfFaceName[LF_FACESIZE-1] == 0, "\n");
41 ok(elfedv2.elfEnumLogfontEx.elfFullName[0] == 0, "\n");
42 }
43
44 void
45 Test_CreateFontIndirectW(void)
46 {
47 LOGFONTW logfont;
48 HFONT hFont;
49 ULONG ret;
50 ENUMLOGFONTEXDVW elfedv2;
51
52 logfont.lfHeight = 12;
53 logfont.lfWidth = 0;
54 logfont.lfEscapement = 0;
55 logfont.lfOrientation = 0;
56 logfont.lfWeight = FW_NORMAL;
57 logfont.lfItalic = 0;
58 logfont.lfUnderline = 0;
59 logfont.lfStrikeOut = 0;
60 logfont.lfCharSet = DEFAULT_CHARSET;
61 logfont.lfOutPrecision = OUT_DEFAULT_PRECIS;
62 logfont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
63 logfont.lfQuality = PROOF_QUALITY;
64 logfont.lfPitchAndFamily = DEFAULT_PITCH;
65 memset(logfont.lfFaceName, 'A', LF_FACESIZE * 2);
66 hFont = CreateFontIndirectW(&logfont);
67 ok(hFont != 0, "CreateFontIndirectW failed\n");
68
69 memset(&elfedv2, 0, sizeof(elfedv2));
70 ret = GetObjectW(hFont, sizeof(elfedv2), &elfedv2);
71 ok(ret == sizeof(ENUMLOGFONTEXW) + 2*sizeof(DWORD), "\n");
72 ok(elfedv2.elfEnumLogfontEx.elfLogFont.lfFaceName[LF_FACESIZE-1] == ((WCHAR)'A' << 8) + 'A', "\n");
73 ok(elfedv2.elfEnumLogfontEx.elfFullName[0] == 0, "\n");
74 /* Theres a bunch of data in elfFullName ... */
75 }
76
77 void
78 Test_CreateFontIndirectExA(void)
79 {
80 ENUMLOGFONTEXDVA elfedva, elfedva2;
81 ENUMLOGFONTEXDVW elfedvw;
82 ENUMLOGFONTEXA *penumlfa;
83 LOGFONTA *plogfonta;
84 HFONT hFont;
85 ULONG ret;
86
87 memset(&elfedva, 0, sizeof(elfedva));
88 penumlfa = &elfedva.elfEnumLogfontEx;
89 plogfonta = &elfedva.elfEnumLogfontEx.elfLogFont;
90
91 plogfonta->lfHeight = 12;
92 plogfonta->lfWidth = 0;
93 plogfonta->lfEscapement = 0;
94 plogfonta->lfOrientation = 0;
95 plogfonta->lfWeight = FW_NORMAL;
96 plogfonta->lfItalic = 0;
97 plogfonta->lfUnderline = 0;
98 plogfonta->lfStrikeOut = 0;
99 plogfonta->lfCharSet = DEFAULT_CHARSET;
100 plogfonta->lfOutPrecision = OUT_DEFAULT_PRECIS;
101 plogfonta->lfClipPrecision = CLIP_DEFAULT_PRECIS;
102 plogfonta->lfQuality = PROOF_QUALITY;
103 plogfonta->lfPitchAndFamily = DEFAULT_PITCH;
104
105 memset(plogfonta->lfFaceName, 'A', LF_FACESIZE * sizeof(WCHAR));
106 memset(penumlfa->elfFullName, 'B', LF_FULLFACESIZE * sizeof(WCHAR));
107
108 hFont = CreateFontIndirectExA(&elfedva);
109 ok(hFont != 0, "CreateFontIndirectExA failed\n");
110
111 ret = GetObjectW(hFont, sizeof(elfedvw), &elfedvw);
112 ok(ret == sizeof(ENUMLOGFONTEXW) + 2*sizeof(DWORD), "\n");
113 ok(elfedvw.elfEnumLogfontEx.elfLogFont.lfFaceName[LF_FACESIZE-1] == 0, "\n");
114 ok(elfedvw.elfEnumLogfontEx.elfFullName[LF_FULLFACESIZE-1] == 0, "\n");
115
116 memset(&elfedva2, 0, sizeof(elfedva2));
117 ret = GetObjectA(hFont, sizeof(elfedva2), &elfedva2);
118 ok(ret == sizeof(ENUMLOGFONTEXDVA), "ret = %ld\n", ret);
119 ok(elfedva2.elfEnumLogfontEx.elfLogFont.lfFaceName[LF_FACESIZE-1] == 0, "\n");
120 ok(elfedva2.elfEnumLogfontEx.elfFullName[LF_FULLFACESIZE-1] == 0, "\n");
121 }
122
123 void
124 Test_CreateFontIndirectExW(void)
125 {
126 ENUMLOGFONTEXDVW elfedv, elfedv2;
127 ENUMLOGFONTEXDVA elfedva;
128 ENUMLOGFONTEXW *penumlfw;
129 LOGFONTW *plogfontw;
130 HFONT hFont;
131 ULONG ret;
132
133 memset(&elfedv, 0, sizeof(elfedv));
134 penumlfw = &elfedv.elfEnumLogfontEx;
135 plogfontw = &elfedv.elfEnumLogfontEx.elfLogFont;
136
137 plogfontw->lfHeight = 12;
138 plogfontw->lfWidth = 0;
139 plogfontw->lfEscapement = 0;
140 plogfontw->lfOrientation = 0;
141 plogfontw->lfWeight = FW_NORMAL;
142 plogfontw->lfItalic = 0;
143 plogfontw->lfUnderline = 0;
144 plogfontw->lfStrikeOut = 0;
145 plogfontw->lfCharSet = DEFAULT_CHARSET;
146 plogfontw->lfOutPrecision = OUT_DEFAULT_PRECIS;
147 plogfontw->lfClipPrecision = CLIP_DEFAULT_PRECIS;
148 plogfontw->lfQuality = PROOF_QUALITY;
149 plogfontw->lfPitchAndFamily = DEFAULT_PITCH;
150
151 memset(plogfontw->lfFaceName, 'A', LF_FACESIZE * sizeof(WCHAR));
152 memset(penumlfw->elfFullName, 'B', LF_FULLFACESIZE * sizeof(WCHAR));
153
154 hFont = CreateFontIndirectExW(&elfedv);
155 ok(hFont != 0, "CreateFontIndirectExW failed\n");
156
157 memset(&elfedv2, 0, sizeof(elfedv2));
158 ret = GetObjectW(hFont, sizeof(elfedv2), &elfedv2);
159 ok(ret == sizeof(ENUMLOGFONTEXW) + 2*sizeof(DWORD), "\n");
160 ok(elfedv2.elfEnumLogfontEx.elfLogFont.lfFaceName[LF_FACESIZE-1] == ((WCHAR)'A' << 8) + 'A', "\n");
161 ok(elfedv2.elfEnumLogfontEx.elfFullName[LF_FULLFACESIZE-1] == ((WCHAR)'B' << 8) + 'B', "\n");
162
163 memset(&elfedva, 0, sizeof(elfedva));
164 ret = GetObjectA(hFont, sizeof(elfedva), &elfedva);
165 ok(ret == sizeof(ENUMLOGFONTEXDVA), "\n");
166 ok(elfedva.elfEnumLogfontEx.elfLogFont.lfFaceName[LF_FACESIZE-1] == '?', "\n");
167 ok(elfedva.elfEnumLogfontEx.elfFullName[LF_FULLFACESIZE-1] == 0, "\n");
168 }
169
170
171 START_TEST(CreateFontIndirect)
172 {
173 Test_CreateFontIndirectA();
174 Test_CreateFontIndirectW();
175 Test_CreateFontIndirectExA();
176 Test_CreateFontIndirectExW();
177 }
178