[PATCH v2 1/2] gdi32: In AddFaceToList allow fonts with long names and add tests
Nikolay Sivov
nsivov at codeweavers.com
Sat Nov 18 12:28:40 CST 2017
On 11/18/2017 06:06 PM, Fabian Maurer wrote:
> +static BOOL found_font;
> +static INT CALLBACK long_enum_proc(const LOGFONTA *lf, const TEXTMETRICA *tm, DWORD type, LPARAM lparam)
> +{
> + found_font = TRUE;
> + return 1;
> +}
You don't need global variable for that.
> +static void test_long_names(void)
> +{
> + char ttf_name[MAX_PATH];
> + LOGFONTA font = {0};
> + HFONT handle_font;
> + int ret;
> +
> + if (!pAddFontResourceExA || !pRemoveFontResourceExA)
> + {
> + win_skip("AddFontResourceExA is not available on this platform\n");
> + return;
> + }
I don't think this is necessary any more, we should use them directly
now, and assume they are always available.
> +
> + if (!write_ttf_file("wine_longname.ttf", ttf_name))
> + {
> + skip("Failed to create ttf file for testing\n");
> + return;
> + }
> +
> + ret = pAddFontResourceExA(ttf_name, FR_PRIVATE, 0);
> + ok(ret, "AddFontResourceEx() failed\n");
> +
> + strcpy(font.lfFaceName, "wine_3_this_is_a_very_long_name");
> + found_font = FALSE;
> + EnumFontFamiliesExA(GetDC(0), &font, long_enum_proc, 0, 0);
> + ok(found_font == TRUE, "EnumFontFamiliesExA didn't find font.\n");
> +
> + strcpy(font.lfFaceName, "wine_2_this_is_a_very_long_name");
> + found_font = FALSE;
> + EnumFontFamiliesExA(GetDC(0), &font, long_enum_proc, 0, 0);
> + ok(found_font == TRUE, "EnumFontFamiliesExA didn't find font.\n");
I think it's better to release dc properly.
> +
> + handle_font = CreateFontIndirectA(&font);
> + ok(handle_font != NULL, "CreateFontIndirectA failed\n");
> + DeleteObject(handle_font);
> +
> +
> + ret = pRemoveFontResourceExA(ttf_name, 0, 0);
> + ok(!ret, "RemoveFontResourceEx() should fail\n");
> +
> + DeleteFileA(ttf_name);
> +}
Also note that this test does cause additional test failures in existing
tests.
More information about the wine-devel
mailing list