From 00109ad544f23f53746e89026596d65c4b4d4190 Mon Sep 17 00:00:00 2001 From: Thomas Faber Date: Mon, 13 Oct 2014 12:25:30 +0000 Subject: [PATCH] [GDI32_APITEST] - Add a test for EnumFontFamilies* returning no results CORE-8628 svn path=/trunk/; revision=64719 --- rostests/apitests/gdi32/CMakeLists.txt | 1 + rostests/apitests/gdi32/EnumFontFamilies.c | 175 +++++++++++++++++++++ rostests/apitests/gdi32/testlist.c | 2 + 3 files changed, 178 insertions(+) create mode 100644 rostests/apitests/gdi32/EnumFontFamilies.c diff --git a/rostests/apitests/gdi32/CMakeLists.txt b/rostests/apitests/gdi32/CMakeLists.txt index 3607d65df32..b44193adea7 100644 --- a/rostests/apitests/gdi32/CMakeLists.txt +++ b/rostests/apitests/gdi32/CMakeLists.txt @@ -22,6 +22,7 @@ list(APPEND SOURCE EngCreateSemaphore.c EngDeleteSemaphore.c EngReleaseSemaphore.c + EnumFontFamilies.c ExcludeClipRect.c ExtCreatePen.c GdiConvertBitmap.c diff --git a/rostests/apitests/gdi32/EnumFontFamilies.c b/rostests/apitests/gdi32/EnumFontFamilies.c new file mode 100644 index 00000000000..861d320f699 --- /dev/null +++ b/rostests/apitests/gdi32/EnumFontFamilies.c @@ -0,0 +1,175 @@ +/* + * PROJECT: ReactOS API tests + * LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory + * PURPOSE: Test for EnumFontFamilies[Ex] + * PROGRAMMERS: Thomas Faber + */ + +#include + +#include +#include +#include + +static BYTE ContextContinue; +static BYTE ContextStop; + +static int EnumProcCalls; +static ENUMLOGFONTA LastFontA; +static ENUMLOGFONTW LastFontW; + +static +int +CALLBACK +EnumProcA( + _In_ const LOGFONTA *elf, + _In_ const TEXTMETRICA *ntm, + _In_ DWORD FontType, + _In_ LPARAM lParam) +{ + EnumProcCalls++; + + ok(lParam == (LPARAM)&ContextContinue || + lParam == (LPARAM)&ContextStop, + "Context is %p, expected %p or %p\n", + (PVOID)lParam, &ContextContinue, &ContextStop); + + LastFontA = *(ENUMLOGFONTA *)elf; + return lParam == (LPARAM)&ContextContinue ? 7 : 0; +} + +static +int +CALLBACK +EnumProcW( + _In_ const LOGFONTW *elf, + _In_ const TEXTMETRICW *ntm, + _In_ DWORD FontType, + _In_ LPARAM lParam) +{ + EnumProcCalls++; + + ok(lParam == (LPARAM)&ContextContinue || + lParam == (LPARAM)&ContextStop, + "Context is %p, expected %p or %p\n", + (PVOID)lParam, &ContextContinue, &ContextStop); + + LastFontW = *(ENUMLOGFONTW *)elf; + return lParam == (LPARAM)&ContextContinue ? 7 : 0; +} + +static +void +TestEnumFontFamiliesA( + _In_ HDC hdc, + _In_ PCSTR FontName) +{ + int ret; + DWORD error; + + EnumProcCalls = 0; + SetLastError(0xdeadbeef); + ret = EnumFontFamiliesA(hdc, + FontName, + EnumProcA, + (LPARAM)&ContextContinue); + error = GetLastError(); + ok(ret == 1, "ret is %d, expected 0\n", ret); + ok(error == 0xdeadbeef, "error is %lu\n", error); + ok(EnumProcCalls == 0, "EnumProcCalls is %d\n", EnumProcCalls); +} + +static +void +TestEnumFontFamiliesW( + _In_ HDC hdc, + _In_ PCWSTR FontName) +{ + int ret; + DWORD error; + + EnumProcCalls = 0; + SetLastError(0xdeadbeef); + ret = EnumFontFamiliesW(hdc, + FontName, + EnumProcW, + (LPARAM)&ContextContinue); + error = GetLastError(); + ok(ret == 1, "ret is %d, expected 0\n", ret); + ok(error == 0xdeadbeef, "error is %lu\n", error); + ok(EnumProcCalls == 0, "EnumProcCalls is %d\n", EnumProcCalls); +} + +static +void +TestEnumFontFamiliesExA( + _In_ HDC hdc, + _In_ PCSTR FontName) +{ + int ret; + DWORD error; + LOGFONTA lf; + + EnumProcCalls = 0; + ZeroMemory(&lf, sizeof(lf)); + lf.lfCharSet = DEFAULT_CHARSET; + lf.lfPitchAndFamily = 0; + StringCbCopyA(lf.lfFaceName, sizeof(lf.lfFaceName), FontName); + SetLastError(0xdeadbeef); + ret = EnumFontFamiliesExA(hdc, + &lf, + EnumProcA, + (LPARAM)&ContextContinue, + 0); + error = GetLastError(); + ok(ret == 1, "ret is %d, expected 0\n", ret); + ok(error == 0xdeadbeef, "error is %lu\n", error); + ok(EnumProcCalls == 0, "EnumProcCalls is %d\n", EnumProcCalls); +} + +static +void +TestEnumFontFamiliesExW( + _In_ HDC hdc, + _In_ PCWSTR FontName) +{ + int ret; + DWORD error; + LOGFONTW lf; + + EnumProcCalls = 0; + ZeroMemory(&lf, sizeof(lf)); + lf.lfCharSet = DEFAULT_CHARSET; + lf.lfPitchAndFamily = 0; + StringCbCopyW(lf.lfFaceName, sizeof(lf.lfFaceName), FontName); + SetLastError(0xdeadbeef); + ret = EnumFontFamiliesExW(hdc, + &lf, + EnumProcW, + (LPARAM)&ContextContinue, + 0); + error = GetLastError(); + ok(ret == 1, "ret is %d, expected 0\n", ret); + ok(error == 0xdeadbeef, "error is %lu\n", error); + ok(EnumProcCalls == 0, "EnumProcCalls is %d\n", EnumProcCalls); +} + +START_TEST(EnumFontFamilies) +{ + HDC hdc; + + hdc = CreateCompatibleDC(NULL); + if (!hdc) + { + skip("No DC\n"); + return; + } + + TestEnumFontFamiliesA(hdc, "ThisFontDoesNotExist"); + TestEnumFontFamiliesW(hdc, L"ThisFontDoesNotExist"); + TestEnumFontFamiliesExA(hdc, "ThisFontDoesNotExist"); + TestEnumFontFamiliesExW(hdc, L"ThisFontDoesNotExist"); + + DeleteDC(hdc); +} + diff --git a/rostests/apitests/gdi32/testlist.c b/rostests/apitests/gdi32/testlist.c index 9ca6d278ef7..2c2b84777bf 100644 --- a/rostests/apitests/gdi32/testlist.c +++ b/rostests/apitests/gdi32/testlist.c @@ -23,6 +23,7 @@ extern void func_EngAcquireSemaphore(void); extern void func_EngCreateSemaphore(void); extern void func_EngDeleteSemaphore(void); extern void func_EngReleaseSemaphore(void); +extern void func_EnumFontFamilies(void); extern void func_ExcludeClipRect(void); extern void func_ExtCreatePen(void); extern void func_GdiConvertBitmap(void); @@ -85,6 +86,7 @@ const struct test winetest_testlist[] = { "EngCreateSemaphore", func_EngCreateSemaphore }, { "EngDeleteSemaphore", func_EngDeleteSemaphore }, { "EngReleaseSemaphore", func_EngReleaseSemaphore }, + { "EnumFontFamilies", func_EnumFontFamilies }, { "ExcludeClipRect", func_ExcludeClipRect }, { "ExtCreatePen", func_ExtCreatePen }, { "GdiConvertBitmap", func_GdiConvertBitmap }, -- 2.17.1