+static void create_testfontfile(const WCHAR *filename, int resource, WCHAR pathW[MAX_PATH])
+{
+ DWORD written;
+ HANDLE file;
+ HRSRC res;
+ void *ptr;
+
+ GetTempPathW(MAX_PATH, pathW);
+ lstrcatW(pathW, filename);
+
+ file = CreateFileW(pathW, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0);
+ ok(file != INVALID_HANDLE_VALUE, "file creation failed, at %s, error %d\n", wine_dbgstr_w(pathW), GetLastError());
+
+ res = FindResourceA(GetModuleHandleA(NULL), MAKEINTRESOURCEA(resource), (LPCSTR)RT_RCDATA);
+ ok(res != 0, "couldn't find resource\n");
+ ptr = LockResource(LoadResource(GetModuleHandleA(NULL), res));
+ WriteFile(file, ptr, SizeofResource(GetModuleHandleA(NULL), res), &written, NULL);
+ ok(written == SizeofResource(GetModuleHandleA(NULL), res), "couldn't write resource\n");
+ CloseHandle(file);
+}
+
+#define DELETE_FONTFILE(filename) _delete_testfontfile(filename, __LINE__)
+static void _delete_testfontfile(const WCHAR *filename, int line)
+{
+ BOOL ret = DeleteFileW(filename);
+ ok_(__FILE__,line)(ret, "failed to delete file %s, error %d\n", wine_dbgstr_w(filename), GetLastError());
+}
+
+static void test_long_name(void)
+{
+ WCHAR path[MAX_PATH];
+ static const WCHAR path_longname[] = {'w','i','n','e','_','l','o','n','g','n','a','m','e','.','t','t','f',0};
+ GpStatus stat;
+ GpFontCollection *fonts;
+ INT num_families;
+ GpFontFamily *family;
+ WCHAR family_name[LF_FACESIZE];
+ GpFont *font;
+
+ stat = GdipNewPrivateFontCollection(&fonts);
+ ok(stat == Ok, "GdipNewPrivateFontCollection failed: %d\n", stat);
+
+ create_testfontfile(path_longname, 1, path);
+
+ stat = GdipPrivateAddFontFile(fonts, path);
+ ok(stat == Ok, "GdipPrivateAddFontFile failed: %d\n", stat);
+
+ stat = GdipGetFontCollectionFamilyCount(fonts, &num_families);
+ ok(stat == Ok, "GdipGetFontCollectionFamilyCount failed: %d\n", stat);
+
+ ok(num_families == 1, "expected num_families to be 1, got %d\n", num_families);
+
+ stat = GdipGetFontCollectionFamilyList(fonts, num_families, &family, &num_families);
+ ok(stat == Ok, "GdipGetFontCollectionFamilyList failed: %d\n", stat);
+
+ stat = GdipGetFamilyName(family, family_name, LANG_NEUTRAL);
+ ok(stat == Ok, "GdipGetFamilyName failed: %d\n", stat);
+
+ stat = GdipCreateFont(family, 256.0, FontStyleRegular, UnitPixel, &font);
+ ok(stat == Ok, "GdipCreateFont failed: %d\n", stat);
+
+ /* Cleanup */
+
+ stat = GdipDeleteFont(font);
+ ok(stat == Ok, "GdipDeleteFont failed: %d\n", stat);
+
+ stat = GdipDeletePrivateFontCollection(&fonts);
+ ok(stat == Ok, "GdipDeletePrivateFontCollection failed: %d\n", stat);
+
+ DELETE_FONTFILE(path);
+}
+