1 /* 2 * PROJECT: ReactOS API tests 3 * LICENSE: GPL - See COPYING in the top level directory 4 * PURPOSE: Test for NtGdiAddFontResourceW 5 * PROGRAMMERS: Víctor Martínez Calvo ( victor.martinez@reactos.org ) 6 */ 7 8 #include "precomp.h" 9 10 #include <ndk/rtlfuncs.h> 11 12 INT 13 APIENTRY 14 NtGdiAddFontResourceW( 15 _In_reads_(cwc) WCHAR *pwszFiles, 16 _In_ ULONG cwc, 17 _In_ ULONG cFiles, 18 _In_ FLONG f, 19 _In_ DWORD dwPidTid, 20 _In_opt_ DESIGNVECTOR *pdv); 21 22 void Test_NtGdiAddFontResourceW() 23 { 24 WCHAR lpszFontPath[MAX_PATH]; 25 WCHAR lpszFontSearch[MAX_PATH]; 26 27 INT ret; 28 UNICODE_STRING NtAbsPath; 29 WIN32_FIND_DATAW FindFileData; 30 HANDLE hFind; 31 ULONG cwc; 32 33 // Create "Font" folder Path 34 GetWindowsDirectoryW(lpszFontPath, MAX_PATH); 35 StringCbCatW(lpszFontPath, sizeof(lpszFontPath), L"\\Fonts\\"); 36 37 // Search first .ttf file in Fonts Path 38 StringCbCopyW(lpszFontSearch, sizeof(lpszFontSearch), lpszFontPath); 39 StringCbCatW(lpszFontSearch, sizeof(lpszFontSearch), L"*.ttf"); 40 41 hFind = FindFirstFileW(lpszFontSearch, &FindFileData); 42 43 if (hFind == INVALID_HANDLE_VALUE) 44 { 45 skip("Unable to find fonts in Font directory!\n"); 46 return; 47 } 48 49 // File found. Create FontPath to File. 50 StringCbCatW(lpszFontPath, sizeof(lpszFontPath), FindFileData.cFileName); 51 52 // Fail due "cwc" being zero. 53 SetLastError(0xdeaddead); 54 RtlInitUnicodeString(&NtAbsPath, NULL); 55 RtlDosPathNameToNtPathName_U(lpszFontPath, &NtAbsPath, NULL, NULL); 56 cwc = 0; 57 ret = NtGdiAddFontResourceW(NtAbsPath.Buffer, cwc, 1, 0, 0, 0); 58 59 ok(ret == 0, "Expected 0 files added. Added: %d\n", ret); 60 ok(GetLastError() == 0xdeaddead, "Expected 0xdeaddead. Obtained: 0x%lx\n", GetLastError()); 61 62 RtlFreeUnicodeString(&NtAbsPath); 63 64 // "cwc" must count the null terminator. Otherwise fails. 65 SetLastError(0xdeaddead); 66 RtlInitUnicodeString(&NtAbsPath, NULL); 67 RtlDosPathNameToNtPathName_U(lpszFontPath, &NtAbsPath, NULL, NULL); 68 cwc = NtAbsPath.Length / sizeof(WCHAR); 69 ret = NtGdiAddFontResourceW(NtAbsPath.Buffer, cwc, 1, 0, 0, 0); 70 71 ok(ret == 0, "Expected 0 files added. Added: %d\n", ret); 72 ok(GetLastError() == 0xdeaddead, "Expected 0xdeaddead. Obtained: 0x%lx\n", GetLastError()); 73 74 RtlFreeUnicodeString(&NtAbsPath); 75 76 // Correct "cwc" value. 77 SetLastError(0xdeaddead); 78 RtlInitUnicodeString(&NtAbsPath, NULL); 79 RtlDosPathNameToNtPathName_U(lpszFontPath, &NtAbsPath, NULL, NULL); 80 cwc = NtAbsPath.Length / sizeof(WCHAR) + 1; 81 ret = NtGdiAddFontResourceW(NtAbsPath.Buffer, cwc, 1, 0, 0, 0); 82 83 ok(ret == 1, "Expected 1 files added. Added: %d\n", ret); 84 ok(GetLastError() == 0xdeaddead, "Expected 0xdeaddead. Obtained: 0x%lx\n", GetLastError()); 85 86 RtlFreeUnicodeString(&NtAbsPath); 87 88 // Test an invalid pointer. 89 SetLastError(0xdeadbeef); 90 ret = NtGdiAddFontResourceW((PVOID)-4, 123, 1, 0, 0, NULL); 91 92 ok(ret == 0, "Expected 0 files added. Added: %d\n", ret); 93 ok(GetLastError() == 0xdeadbeef, "Expected 0xdeadbeef. Obtained: 0x%lx\n", GetLastError()); 94 } 95 96 START_TEST(NtGdiAddFontResource) 97 { 98 Test_NtGdiAddFontResourceW(); 99 } 100