[GDI32_APITEST]
authorThomas Faber <thomas.faber@reactos.org>
Sat, 25 Apr 2015 10:41:32 +0000 (10:41 +0000)
committerThomas Faber <thomas.faber@reactos.org>
Sat, 25 Apr 2015 10:41:32 +0000 (10:41 +0000)
- Add a test for NtGdiAddFontResourceW. This goes in gdi32_apitest until we fix w32knapi to be Testman-compatible (ROSTESTS-167). Patch by Víctor Martínez Calvo.
ROSTESTS-166 #resolve

svn path=/trunk/; revision=67391

rostests/apitests/gdi32/CMakeLists.txt
rostests/apitests/gdi32/NtGdiAddFontResource.c [new file with mode: 0644]
rostests/apitests/gdi32/testlist.c

index ad05ef1..c502f0d 100644 (file)
@@ -51,6 +51,7 @@ list(APPEND SOURCE
     GetTextExtentExPoint.c
     GetTextFace.c
     MaskBlt.c
+    NtGdiAddFontResource.c
     OffsetClipRgn.c
     OffsetRgn.c
     PaintRgn.c
@@ -71,7 +72,7 @@ list(APPEND SOURCE
     testlist.c)
 
 add_executable(gdi32_apitest ${SOURCE})
-target_link_libraries(gdi32_apitest ${PSEH_LIB})
+target_link_libraries(gdi32_apitest ${PSEH_LIB} win32ksys)
 set_module_type(gdi32_apitest win32cui)
-add_importlibs(gdi32_apitest gdi32 user32 msvcrt kernel32)
+add_importlibs(gdi32_apitest gdi32 user32 msvcrt kernel32 ntdll)
 add_cd_file(TARGET gdi32_apitest DESTINATION reactos/bin FOR all)
diff --git a/rostests/apitests/gdi32/NtGdiAddFontResource.c b/rostests/apitests/gdi32/NtGdiAddFontResource.c
new file mode 100644 (file)
index 0000000..eaded16
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+ * PROJECT:         ReactOS API tests
+ * LICENSE:         GPL - See COPYING in the top level directory
+ * PURPOSE:         Test for NtGdiAddFontResourceW
+ * PROGRAMMERS:     Víctor Martínez Calvo ( victor.martinez@reactos.org )
+ */
+
+#include <apitest.h>
+#include <wingdi.h>
+#include <ndk/rtlfuncs.h>
+#include <strsafe.h>
+
+
+INT
+APIENTRY
+NtGdiAddFontResourceW(
+    _In_reads_(cwc) WCHAR *pwszFiles,
+    _In_ ULONG cwc,
+    _In_ ULONG cFiles,
+    _In_ FLONG f,
+    _In_ DWORD dwPidTid,
+    _In_opt_ DESIGNVECTOR *pdv);
+
+void Test_NtGdiAddFontResourceW()
+{
+    WCHAR lpszFontPath[MAX_PATH];
+    WCHAR lpszFontSearch[MAX_PATH];
+
+    INT ret;
+    UNICODE_STRING NtAbsPath;
+    WIN32_FIND_DATAW FindFileData;
+    HANDLE hFind;
+    ULONG cwc;
+
+    // Create "Font" folder Path
+    GetWindowsDirectoryW(lpszFontPath, MAX_PATH);
+    StringCbCatW(lpszFontPath, sizeof(lpszFontPath), L"\\Fonts\\");
+
+    // Search first .ttf file in Fonts Path
+    StringCbCopyW(lpszFontSearch, sizeof(lpszFontSearch), lpszFontPath);
+    StringCbCatW(lpszFontSearch, sizeof(lpszFontSearch), L"*.ttf");
+
+    hFind = FindFirstFileW(lpszFontSearch, &FindFileData);
+
+    if (hFind == INVALID_HANDLE_VALUE)
+    {
+        skip("Unable to find fonts in Font directory!\n");
+        return;
+    }
+
+    // File found. Create FontPath to File.
+    StringCbCatW(lpszFontPath, sizeof(lpszFontPath), FindFileData.cFileName);
+
+    // Fail due "cwc" being zero.
+    SetLastError(0xdeaddead);
+    RtlInitUnicodeString(&NtAbsPath, NULL);
+    RtlDosPathNameToNtPathName_U(lpszFontPath, &NtAbsPath, NULL, NULL);
+    cwc = 0;
+    ret =  NtGdiAddFontResourceW(NtAbsPath.Buffer, cwc, 1, 0, 0, 0);
+
+    ok(ret == 0, "Expected 0 files added. Added: %d\n", ret);
+    ok(GetLastError() == 0xdeaddead, "Expected 0xdeaddead. Obtained: 0x%lx\n", GetLastError());
+
+    RtlFreeUnicodeString(&NtAbsPath);
+
+    // "cwc" must count the null terminator. Otherwise fails.
+    SetLastError(0xdeaddead);
+    RtlInitUnicodeString(&NtAbsPath, NULL);
+    RtlDosPathNameToNtPathName_U(lpszFontPath, &NtAbsPath, NULL, NULL);
+    cwc = NtAbsPath.Length / sizeof(WCHAR);
+    ret =  NtGdiAddFontResourceW(NtAbsPath.Buffer, cwc, 1, 0, 0, 0);
+
+    ok(ret == 0, "Expected 0 files added. Added: %d\n", ret);
+    ok(GetLastError() == 0xdeaddead, "Expected 0xdeaddead. Obtained: 0x%lx\n", GetLastError());
+
+    RtlFreeUnicodeString(&NtAbsPath);
+
+    // Correct "cwc" value.
+    SetLastError(0xdeaddead);
+    RtlInitUnicodeString(&NtAbsPath, NULL);
+    RtlDosPathNameToNtPathName_U(lpszFontPath, &NtAbsPath, NULL, NULL);
+    cwc = NtAbsPath.Length / sizeof(WCHAR) + 1;
+    ret =  NtGdiAddFontResourceW(NtAbsPath.Buffer, cwc, 1, 0, 0, 0);
+
+    ok(ret == 1, "Expected 1 files added. Added: %d\n", ret);
+    ok(GetLastError() == 0xdeaddead, "Expected 0xdeaddead. Obtained: 0x%lx\n", GetLastError());
+
+    RtlFreeUnicodeString(&NtAbsPath);
+
+    // Test an invalid pointer.
+    SetLastError(0xdeadbeef);
+    ret =  NtGdiAddFontResourceW((PVOID)-4, 123, 1, 0, 0, NULL);
+
+    ok(ret == 0, "Expected 0 files added. Added: %d\n", ret);
+    ok(GetLastError() == 0xdeadbeef, "Expected 0xdeadbeef. Obtained: 0x%lx\n", GetLastError());
+}
+
+START_TEST(NtGdiAddFontResource)
+{
+    Test_NtGdiAddFontResourceW();
+}
index 55a576c..c6acd03 100644 (file)
@@ -52,6 +52,7 @@ extern void func_GetStockObject(void);
 extern void func_GetTextExtentExPoint(void);
 extern void func_GetTextFace(void);
 extern void func_MaskBlt(void);
+extern void func_NtGdiAddFontResource(void);
 extern void func_OffsetClipRgn(void);
 extern void func_OffsetRgn(void);
 extern void func_PaintRgn(void);
@@ -120,6 +121,7 @@ const struct test winetest_testlist[] =
     { "GetTextExtentExPoint", func_GetTextExtentExPoint },
     { "GetTextFace", func_GetTextFace },
     { "MaskBlt", func_MaskBlt },
+    { "NtGdiAddFontResource", func_NtGdiAddFontResource},
     { "OffsetClipRgn", func_OffsetClipRgn },
     { "OffsetRgn", func_OffsetRgn },
     { "PaintRgn", func_PaintRgn },