[CRT] Massively improve performance of rand_s
[reactos.git] / modules / rostests / apitests / gdi32 / GetTextFace.c
1 /*
2 * PROJECT: ReactOS api tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PURPOSE: Test for GetTextFace
5 * PROGRAMMERS: Timo Kreuzer
6 * Katayama Hirofumi MZ
7 * Doug Lyons
8 */
9
10 #include "precomp.h"
11
12 /* Exported by gdi32.dll but undocumented */
13 INT
14 WINAPI
15 GetTextFaceAliasW(
16 IN HDC hdc,
17 IN INT c,
18 OUT LPWSTR lpAliasName);
19
20 void Test_GetTextFace(void)
21 {
22 HDC hDC;
23 INT ret;
24 INT ret2;
25 WCHAR Buffer[20];
26
27 hDC = CreateCompatibleDC(NULL);
28 ok(hDC != 0, "CreateCompatibleDC failed, skipping tests.\n");
29 if (!hDC) return;
30
31 /* Whether asking for the string size (NULL buffer) ignores the size argument */
32 SetLastError(0xE000BEEF);
33 ret = GetTextFaceW(hDC, 0, NULL);
34 TEST(ret != 0);
35 ok_err(0xE000BEEF);
36 ret2 = ret;
37
38 SetLastError(0xE000BEEF);
39 ret = GetTextFaceW(hDC, -1, NULL);
40 TEST(ret != 0);
41 ok_int(ret, ret2);
42 ok_err(0xE000BEEF);
43 ret2 = ret;
44
45 SetLastError(0xE000BEEF);
46 ret = GetTextFaceW(hDC, 10000, NULL);
47 TEST(ret != 0);
48 ok_int(ret, ret2);
49 ok_err(0xE000BEEF);
50 ret2 = ret;
51
52 /* Whether the buffer is correctly filled */
53 SetLastError(0xE000BEEF);
54 ret = GetTextFaceW(hDC, 20, Buffer);
55 TEST(ret != 0);
56 TEST(ret <= 20);
57 ok_int(Buffer[ret - 1], 0);
58 ok_err(0xE000BEEF);
59
60 SetLastError(0xE000BEEF);
61 ret = GetTextFaceW(hDC, 1, Buffer);
62 ok_int(ret, 1);
63 ok_int(Buffer[ret - 1], 0);
64 ok_err(0xE000BEEF);
65
66 SetLastError(0xE000BEEF);
67 ret = GetTextFaceW(hDC, 2, Buffer);
68 ok_int(ret, 2);
69 ok_int(Buffer[ret - 1], 0);
70 ok_err(0xE000BEEF);
71
72 /* Whether invalid buffer sizes are correctly ignored */
73 SetLastError(0xE000BEEF);
74 ret = GetTextFaceW(hDC, 0, Buffer);
75 ok_int(ret, 0);
76 ok_err(ERROR_INVALID_PARAMETER);
77
78 SetLastError(0xE000BEEF);
79 ret = GetTextFaceW(hDC, -1, Buffer);
80 ok_int(ret, 0);
81 ok_err(ERROR_INVALID_PARAMETER);
82
83 DeleteDC(hDC);
84 }
85
86 void Test_GetTextFaceAliasW(void)
87 {
88 HDC hDC;
89 INT ret;
90 INT ret2;
91 UINT i;
92 LOGFONTW lf;
93 HFONT hFontOld, hFont;
94 WCHAR buf1[LF_FACESIZE];
95 WCHAR buf2[LF_FACESIZE];
96
97 static struct
98 {
99 LPCWSTR lpFaceName;
100 LPCWSTR lpExpectedFaceName;
101 LPCWSTR lpExpectedAlias;
102 } FaceTests[] =
103 {
104 {L"Arial", L"Arial", L"Arial"},
105 {L"Tahoma", L"Tahoma", L"Tahoma"},
106 // {L"Tahoma Bold", L"MS Sans Serif", L"MS Sans Serif"}, // That's what Windows 2003 and 7/10 returns. But not WHS testbot.
107 {L"Helv", L"Helv", L"Helv"},
108 {L"Tms Rmn", L"Tms Rmn", L"Tms Rmn"},
109 {L"Times", L"Times", L"Times"},
110 {L"invalid", L"MS Sans Serif", L"MS Sans Serif"}
111 };
112
113 hDC = CreateCompatibleDC(NULL);
114 ok(hDC != 0, "CreateCompatibleDC failed, skipping tests.\n");
115 if (!hDC) return;
116
117 for (i = 0; i < ARRAYSIZE(FaceTests); ++i)
118 {
119 ZeroMemory(&lf, sizeof(lf));
120 StringCchCopyW(lf.lfFaceName, ARRAYSIZE(lf.lfFaceName), FaceTests[i].lpFaceName);
121
122 hFont = CreateFontIndirectW(&lf);
123 if (!hFont)
124 {
125 trace("Failed to create font '%S'!\n", lf.lfFaceName);
126 continue;
127 }
128
129 hFontOld = SelectObject(hDC, hFont);
130
131 ret = GetTextFaceW(hDC, ARRAYSIZE(buf1), buf1);
132 ok(ret != 0, "%S GetTextFaceW failed.\n", FaceTests[i].lpFaceName);
133 ok(wcscmp(buf1, FaceTests[i].lpExpectedFaceName) == 0, "'%S' GetTextFaceW failed, got '%S', expected '%S'.\n",
134 FaceTests[i].lpFaceName, buf1, FaceTests[i].lpExpectedFaceName);
135
136 ret2 = GetTextFaceAliasW(hDC, ARRAYSIZE(buf2), buf2);
137 ok(ret2 != 0, "%S GetTextFaceAliasW failed.\n", FaceTests[i].lpFaceName);
138 ok(wcscmp(buf2, FaceTests[i].lpExpectedAlias) == 0, "'%S' GetTextFaceAliasW failed, got '%S', expected '%S'.\n",
139 FaceTests[i].lpFaceName, buf2, FaceTests[i].lpExpectedAlias);
140
141 SelectObject(hDC, hFontOld);
142 DeleteObject(hFont);
143 }
144
145 DeleteDC(hDC);
146 }
147
148 START_TEST(GetTextFace)
149 {
150 Test_GetTextFace();
151 Test_GetTextFaceAliasW();
152 }