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(GetLastError() == 0xE000BEEF, "GetLastError() == %ld\n", GetLastError()); 36 ret2 = ret; 37 38 SetLastError(0xE000BEEF); 39 ret = GetTextFaceW(hDC, -1, NULL); 40 TEST(ret != 0); 41 TEST(ret == ret2); 42 ok(GetLastError() == 0xE000BEEF, "GetLastError() == %ld\n", GetLastError()); 43 ret2 = ret; 44 45 SetLastError(0xE000BEEF); 46 ret = GetTextFaceW(hDC, 10000, NULL); 47 TEST(ret != 0); 48 TEST(ret == ret2); 49 ok(GetLastError() == 0xE000BEEF, "GetLastError() == %ld\n", GetLastError()); 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 TEST(Buffer[ret - 1] == 0); 58 ok(GetLastError() == 0xE000BEEF, "GetLastError() == %ld\n", GetLastError()); 59 60 SetLastError(0xE000BEEF); 61 ret = GetTextFaceW(hDC, 1, Buffer); 62 TEST(ret == 1); 63 TEST(Buffer[ret - 1] == 0); 64 ok(GetLastError() == 0xE000BEEF, "GetLastError() == %ld\n", GetLastError()); 65 66 SetLastError(0xE000BEEF); 67 ret = GetTextFaceW(hDC, 2, Buffer); 68 TEST(ret == 2); 69 TEST(Buffer[ret - 1] == 0); 70 ok(GetLastError() == 0xE000BEEF, "GetLastError() == %ld\n", GetLastError()); 71 72 /* Whether invalid buffer sizes are correctly ignored */ 73 SetLastError(0xE000BEEF); 74 ret = GetTextFaceW(hDC, 0, Buffer); 75 TEST(ret == 0); 76 ok(GetLastError() == ERROR_INVALID_PARAMETER, "GetLastError() == %ld\n", GetLastError()); 77 78 SetLastError(0xE000BEEF); 79 ret = GetTextFaceW(hDC, -1, Buffer); 80 TEST(ret == 0); 81 ok(GetLastError() == ERROR_INVALID_PARAMETER, "GetLastError() == %ld\n", GetLastError()); 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 returns. 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 } 153