reactos/rostests/apitests/gdi32/EnumFontFamilies.c
Thomas Faber d5b17b9082 [GDI32]
- Return 1 on failure in IntEnumFontFamilies, as shown by the test
CORE-8628 #resolve

svn path=/trunk/; revision=64720
2014-10-13 14:06:40 +00:00

175 lines
4.2 KiB
C

/*
* PROJECT: ReactOS API tests
* LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory
* PURPOSE: Test for EnumFontFamilies[Ex]
* PROGRAMMERS: Thomas Faber <thomas.faber@reactos.org>
*/
#include <apitest.h>
#include <wingdi.h>
#include <winddi.h>
#include <strsafe.h>
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 1\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 1\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 1\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 1\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);
}