fpparsettf_test.pas 59 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993
  1. unit fpparsettf_test;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils
  6. {$ifdef fptest}
  7. ,TestFramework
  8. {$else}
  9. ,fpcunit, testregistry
  10. {$endif}
  11. ,fpparsettf
  12. ;
  13. type
  14. { so we can access the protected methods }
  15. TMyTFFileInfo = class(TTFFileInfo);
  16. TBaseTestParseTTF = class(TTestCase)
  17. private
  18. FFileInfo: TMyTFFileInfo;
  19. protected
  20. procedure SetUp; override;
  21. procedure TearDown; override;
  22. procedure LoadFont(const AFilename: string);
  23. public
  24. property FI: TMyTFFileInfo read FFileInfo;
  25. end;
  26. TTestEmptyParseTTF = class(TBaseTestParseTTF)
  27. published
  28. procedure TestEmptyTables;
  29. procedure TestEmptyDirectory;
  30. end;
  31. TTestLiberationFont = class(TBaseTestParseTTF)
  32. protected
  33. procedure SetUp; override;
  34. published
  35. { Offset Table }
  36. procedure TestDirectory_FontVersion;
  37. procedure TestDirectory_NumTables;
  38. procedure TestDirectory_SearchRange;
  39. procedure TestDirectory_EntrySelector;
  40. procedure TestDirectory_RangeShift;
  41. { THead data structure tests }
  42. procedure TestHead_FileVersion;
  43. procedure TestHead_FontRevision;
  44. procedure TestHead_CheckSumAdjustment;
  45. procedure TestHead_MagicNumber;
  46. procedure TestHead_Flags;
  47. procedure TestHead_UnitsPerEm;
  48. procedure TestHead_Created;
  49. procedure TestHead_Modified;
  50. procedure TestHead_BBox_xMin;
  51. procedure TestHead_BBox_yMin;
  52. procedure TestHead_BBox_xMax;
  53. procedure TestHead_BBox_yMax;
  54. procedure TestHead_MacStyle;
  55. procedure TestHead_LowestRecPPEM;
  56. procedure TestHead_FontDirectionHint;
  57. procedure TestHead_IndexToLocFormat;
  58. procedure TestHead_glyphDataFormat;
  59. { THHead data structure tests }
  60. procedure TestHHead_TableVersion;
  61. procedure TestHHead_Ascender;
  62. procedure TestHHead_Descender;
  63. procedure TestHHead_LineGap;
  64. procedure TestHHead_AdvanceWidthMax;
  65. procedure TestHHead_MinLeftSideBearing;
  66. procedure TestHHead_MinRightSideBearing;
  67. procedure TestHHead_XMaxExtent;
  68. procedure TestHHead_CaretSlopeRise;
  69. procedure TestHHead_CaretSlopeRun;
  70. procedure TestHHead_Reserved;
  71. procedure TestHHead_metricDataFormat;
  72. procedure TestHHead_numberOfHMetrics;
  73. { TCmapHeader data structure tests }
  74. procedure TestCMap_version;
  75. procedure TestCMap_SubTableCount;
  76. { TCmapSubTableEntry data structure tests }
  77. procedure TestCMapSubTables_1;
  78. procedure TestCMapSubTables_2;
  79. procedure TestCMapSubTables_3;
  80. { CmapUnicodeMap data structure tests }
  81. procedure TestCmapUnicodeMap_Format;
  82. procedure TestCmapUnicodeMap_Length;
  83. procedure TestCmapUnicodeMap_SegmentCount2;
  84. procedure TestCmapUnicodeMap_SearchRange;
  85. procedure TestCmapUnicodeMap_EntrySelector;
  86. procedure TestCmapUnicodeMap_RangeShift;
  87. { TUnicodeMapSegment data structure tests }
  88. procedure TestUnicodeMapSegment_1_StartCode;
  89. procedure TestUnicodeMapSegment_1_EndCode;
  90. procedure TestUnicodeMapSegment_1_IDDelta;
  91. procedure TestUnicodeMapSegment_1_IDRangeOffset;
  92. procedure TestUnicodeMapSegment_2_StartCode;
  93. procedure TestUnicodeMapSegment_2_EndCode;
  94. procedure TestUnicodeMapSegment_2_IDDelta;
  95. procedure TestUnicodeMapSegment_2_IDRangeOffset;
  96. procedure TestUnicodeMapSegment_127_StartCode;
  97. procedure TestUnicodeMapSegment_127_EndCode;
  98. procedure TestUnicodeMapSegment_127_IDDelta;
  99. procedure TestUnicodeMapSegment_127_IDRangeOffset;
  100. { hmtx - Horizontal Metrics data structure tests }
  101. procedure TestWidths_Size;
  102. procedure TestWidths_HorMetric_0_AdvanceWidth;
  103. procedure TestWidths_HorMetric_0_LSB;
  104. procedure TestWidths_HorMetric_1_AdvanceWidth;
  105. procedure TestWidths_HorMetric_1_LSB;
  106. procedure TestWidths_HorMetric_2586_AdvanceWidth;
  107. procedure TestWidths_HorMetric_2586_LSB;
  108. { maxp - Maximum Profile data structure tests }
  109. procedure TestMaxP_VersionNumber;
  110. procedure TestMaxP_numGlyphs;
  111. procedure TestMaxP_maxPoints;
  112. procedure TestMaxP_maxContours;
  113. procedure TestMaxP_maxCompositePoints;
  114. procedure TestMaxP_maxCompositeContours;
  115. procedure TestMaxP_maxZones;
  116. procedure TestMaxP_maxTwilightPoints;
  117. procedure TestMaxP_maxStorage;
  118. procedure TestMaxP_maxFunctionDefs;
  119. procedure TestMaxP_maxInstructionDefs;
  120. procedure TestMaxP_maxStackElements;
  121. procedure TestMaxP_maxSizeOfInstructions;
  122. procedure TestMaxP_maxComponentElements;
  123. procedure TestMaxP_maxComponentDepth;
  124. { OS2Data - OS/2 Data structure tests }
  125. procedure TestOS2Data_version;
  126. procedure TestOS2Data_xAvgCharWidth;
  127. procedure TestOS2Data_usWeightClass;
  128. procedure TestOS2Data_usWidthClass;
  129. procedure TestOS2Data_fsType;
  130. procedure TestOS2Data_ySubscriptXSize;
  131. Procedure TestOS2Data_ySubscriptYSize;
  132. Procedure TestOS2Data_ySubscriptXOffset;
  133. Procedure TestOS2Data_ySubscriptYOffset;
  134. Procedure TestOS2Data_ySuperscriptXSize;
  135. Procedure TestOS2Data_ySuperscriptYSize;
  136. Procedure TestOS2Data_ySuperscriptXOffset;
  137. Procedure TestOS2Data_ySuperscriptYOffset;
  138. Procedure TestOS2Data_yStrikeoutSize;
  139. Procedure TestOS2Data_yStrikeoutPosition;
  140. Procedure TestOS2Data_sFamilyClass;
  141. procedure TestOS2Data_Panose;
  142. procedure TestOS2Data_ulUnicodeRange1;
  143. procedure TestOS2Data_ulUnicodeRange2;
  144. procedure TestOS2Data_ulUnicodeRange3;
  145. procedure TestOS2Data_ulUnicodeRange4;
  146. procedure TestOS2Data_achVendID;
  147. procedure TestOS2Data_fsSelection;
  148. procedure TestOS2Data_usFirstCharIndex;
  149. procedure TestOS2Data_usLastCharIndex;
  150. procedure TestOS2Data_sTypoAscender;
  151. procedure TestOS2Data_sTypoDescender;
  152. procedure TestOS2Data_sTypoLineGap;
  153. procedure TestOS2Data_usWinAscent;
  154. procedure TestOS2Data_usWinDescent;
  155. procedure TestOS2Data_ulCodePageRange1;
  156. procedure TestOS2Data_ulCodePageRange2;
  157. procedure TestOS2Data_sxHeight;
  158. procedure TestOS2Data_sCapHeight;
  159. procedure TestOS2Data_usDefaultChar;
  160. procedure TestOS2Data_usBreakChar;
  161. procedure TestOS2Data_usMaxContext;
  162. { PostScript data structure }
  163. procedure TestPostScript_Format;
  164. procedure TestPostScript_ItalicAngle;
  165. procedure TestPostScript_UnderlinePosition;
  166. procedure TestPostScript_underlineThickness;
  167. procedure TestPostScript_isFixedPitch;
  168. procedure TestPostScript_minMemType42;
  169. procedure TestPostScript_maxMemType42;
  170. procedure TestPostScript_minMemType1;
  171. procedure TestPostScript_maxMemType1;
  172. { Utility functions }
  173. procedure TestGetGlyphIndex;
  174. procedure TestGetAdvanceWidth;
  175. { General info }
  176. procedure TestPostScriptName;
  177. procedure TestFamilyName;
  178. procedure TestHumanFriendlyName;
  179. end;
  180. TTestLiberationItalicFont = class(TBaseTestParseTTF)
  181. protected
  182. procedure SetUp; override;
  183. published
  184. { PostScript data structure }
  185. procedure TestPostScript_ItalicAngle;
  186. { General info }
  187. procedure TestPostScriptName;
  188. procedure TestFamilyName;
  189. procedure TestHumanFriendlyName;
  190. end;
  191. TTestFreeSansFont = class(TBaseTestParseTTF)
  192. protected
  193. procedure SetUp; override;
  194. published
  195. { Offset Table }
  196. procedure TestDirectory_FontVersion;
  197. procedure TestDirectory_NumTables;
  198. procedure TestDirectory_SearchRange;
  199. procedure TestDirectory_EntrySelector;
  200. procedure TestDirectory_RangeShift;
  201. { THead data structure tests }
  202. procedure TestHead_FileVersion;
  203. procedure TestHead_FontRevision;
  204. procedure TestHead_CheckSumAdjustment;
  205. procedure TestHead_MagicNumber;
  206. procedure TestHead_Flags;
  207. procedure TestHead_UnitsPerEm;
  208. procedure TestHead_Created;
  209. procedure TestHead_Modified;
  210. procedure TestHead_BBox_xMin;
  211. procedure TestHead_BBox_yMin;
  212. procedure TestHead_BBox_xMax;
  213. procedure TestHead_BBox_yMax;
  214. procedure TestHead_MacStyle;
  215. procedure TestHead_LowestRecPPEM;
  216. procedure TestHead_FontDirectionHint;
  217. procedure TestHead_IndexToLocFormat;
  218. procedure TestHead_glyphDataFormat;
  219. { THHead data structure tests }
  220. procedure TestHHead_TableVersion;
  221. procedure TestHHead_Ascender;
  222. procedure TestHHead_Descender;
  223. procedure TestHHead_LineGap;
  224. procedure TestHHead_AdvanceWidthMax;
  225. procedure TestHHead_MinLeftSideBearing;
  226. procedure TestHHead_MinRightSideBearing;
  227. procedure TestHHead_XMaxExtent;
  228. procedure TestHHead_CaretSlopeRise;
  229. procedure TestHHead_CaretSlopeRun;
  230. procedure TestHHead_Reserved;
  231. procedure TestHHead_metricDataFormat;
  232. procedure TestHHead_numberOfHMetrics;
  233. { TCmapHeader data structure tests }
  234. procedure TestCMap_version;
  235. procedure TestCMap_SubTableCount;
  236. { TCmapSubTableEntry data structure tests }
  237. procedure TestCMapSubTables_1;
  238. procedure TestCMapSubTables_2;
  239. procedure TestCMapSubTables_3;
  240. procedure TestCMapSubTables_4;
  241. procedure TestCMapSubTables_5;
  242. { CmapUnicodeMap data structure tests }
  243. procedure TestCmapUnicodeMap_Format;
  244. procedure TestCmapUnicodeMap_Length;
  245. procedure TestCmapUnicodeMap_SegmentCount2;
  246. procedure TestCmapUnicodeMap_SearchRange;
  247. procedure TestCmapUnicodeMap_EntrySelector;
  248. procedure TestCmapUnicodeMap_RangeShift;
  249. { TUnicodeMapSegment data structure tests }
  250. procedure TestUnicodeMapSegment_1_StartCode;
  251. procedure TestUnicodeMapSegment_1_EndCode;
  252. procedure TestUnicodeMapSegment_1_IDDelta;
  253. procedure TestUnicodeMapSegment_1_IDRangeOffset;
  254. procedure TestUnicodeMapSegment_2_StartCode;
  255. procedure TestUnicodeMapSegment_2_EndCode;
  256. procedure TestUnicodeMapSegment_2_IDDelta;
  257. procedure TestUnicodeMapSegment_2_IDRangeOffset;
  258. procedure TestUnicodeMapSegment_127_StartCode;
  259. procedure TestUnicodeMapSegment_127_EndCode;
  260. procedure TestUnicodeMapSegment_127_IDDelta;
  261. procedure TestUnicodeMapSegment_127_IDRangeOffset;
  262. { hmtx - Horizontal Metrics data structure tests }
  263. procedure TestWidths_Size;
  264. procedure TestWidths_HorMetric_0_AdvanceWidth;
  265. procedure TestWidths_HorMetric_0_LSB;
  266. procedure TestWidths_HorMetric_1_AdvanceWidth;
  267. procedure TestWidths_HorMetric_1_LSB;
  268. procedure TestWidths_HorMetric_2586_AdvanceWidth;
  269. procedure TestWidths_HorMetric_2586_LSB;
  270. { maxp - Maximum Profile data structure tests }
  271. procedure TestMaxP_VersionNumber;
  272. procedure TestMaxP_numGlyphs;
  273. procedure TestMaxP_maxPoints;
  274. procedure TestMaxP_maxContours;
  275. procedure TestMaxP_maxCompositePoints;
  276. procedure TestMaxP_maxCompositeContours;
  277. procedure TestMaxP_maxZones;
  278. procedure TestMaxP_maxTwilightPoints;
  279. procedure TestMaxP_maxStorage;
  280. procedure TestMaxP_maxFunctionDefs;
  281. procedure TestMaxP_maxInstructionDefs;
  282. procedure TestMaxP_maxStackElements;
  283. procedure TestMaxP_maxSizeOfInstructions;
  284. procedure TestMaxP_maxComponentElements;
  285. procedure TestMaxP_maxComponentDepth;
  286. { OS2Data - OS/2 Data structure tests }
  287. procedure TestOS2Data_version;
  288. procedure TestOS2Data_xAvgCharWidth;
  289. procedure TestOS2Data_usWeightClass;
  290. procedure TestOS2Data_usWidthClass;
  291. procedure TestOS2Data_fsType;
  292. procedure TestOS2Data_ySubscriptXSize;
  293. Procedure TestOS2Data_ySubscriptYSize;
  294. Procedure TestOS2Data_ySubscriptXOffset;
  295. Procedure TestOS2Data_ySubscriptYOffset;
  296. Procedure TestOS2Data_ySuperscriptXSize;
  297. Procedure TestOS2Data_ySuperscriptYSize;
  298. Procedure TestOS2Data_ySuperscriptXOffset;
  299. Procedure TestOS2Data_ySuperscriptYOffset;
  300. Procedure TestOS2Data_yStrikeoutSize;
  301. Procedure TestOS2Data_yStrikeoutPosition;
  302. Procedure TestOS2Data_sFamilyClass;
  303. procedure TestOS2Data_Panose;
  304. procedure TestOS2Data_ulUnicodeRange1;
  305. procedure TestOS2Data_ulUnicodeRange2;
  306. procedure TestOS2Data_ulUnicodeRange3;
  307. procedure TestOS2Data_ulUnicodeRange4;
  308. procedure TestOS2Data_achVendID;
  309. procedure TestOS2Data_fsSelection;
  310. procedure TestOS2Data_usFirstCharIndex;
  311. procedure TestOS2Data_usLastCharIndex;
  312. procedure TestOS2Data_sTypoAscender;
  313. procedure TestOS2Data_sTypoDescender;
  314. procedure TestOS2Data_sTypoLineGap;
  315. procedure TestOS2Data_usWinAscent;
  316. procedure TestOS2Data_usWinDescent;
  317. procedure TestOS2Data_ulCodePageRange1;
  318. procedure TestOS2Data_ulCodePageRange2;
  319. procedure TestOS2Data_sxHeight;
  320. procedure TestOS2Data_sCapHeight;
  321. procedure TestOS2Data_usDefaultChar;
  322. procedure TestOS2Data_usBreakChar;
  323. procedure TestOS2Data_usMaxContext;
  324. { PostScript data structure }
  325. procedure TestPostScript_Format;
  326. procedure TestPostScript_ItalicAngle;
  327. procedure TestPostScript_UnderlinePosition;
  328. procedure TestPostScript_underlineThickness;
  329. procedure TestPostScript_isFixedPitch;
  330. procedure TestPostScript_minMemType42;
  331. procedure TestPostScript_maxMemType42;
  332. procedure TestPostScript_minMemType1;
  333. procedure TestPostScript_maxMemType1;
  334. { General info }
  335. procedure TestPostScriptName;
  336. procedure TestFamilyName;
  337. procedure TestHumanFriendlyName;
  338. end;
  339. implementation
  340. uses
  341. dateutils
  342. ,strutils
  343. ;
  344. const
  345. cFont1 = 'fonts' + PathDelim + 'LiberationSans-Regular.ttf';
  346. cFont2 = 'fonts' + PathDelim + 'FreeSans.ttf';
  347. cFont3 = 'fonts' + PathDelim + 'LiberationSans-Italic.ttf';
  348. { TTestEmptyParseTTF }
  349. procedure TBaseTestParseTTF.SetUp;
  350. begin
  351. FFileInfo := TMyTFFileInfo.Create;
  352. end;
  353. procedure TBaseTestParseTTF.TearDown;
  354. begin
  355. FFileInfo.Free;
  356. end;
  357. procedure TBaseTestParseTTF.LoadFont(const AFilename: string);
  358. begin
  359. Assert(FFileInfo <> nil, 'FFileInfo has not been instantiated');
  360. FFileInfo.LoadFromFile(AFilename);
  361. end;
  362. procedure TTestEmptyParseTTF.TestEmptyTables;
  363. begin
  364. AssertTrue('Failed on 1', Length(FI.Tables) = 0)
  365. end;
  366. procedure TTestEmptyParseTTF.TestEmptyDirectory;
  367. begin
  368. AssertEquals('Failed on 1', 0, FI.Directory.FontVersion.Major);
  369. AssertEquals('Failed on 2', 0, FI.Directory.FontVersion.Minor);
  370. AssertEquals('Failed on 3', 0, FI.Directory.Numtables);
  371. end;
  372. { TTestLiberationFont }
  373. procedure TTestLiberationFont.SetUp;
  374. begin
  375. inherited SetUp;
  376. LoadFont(cFont1);
  377. end;
  378. procedure TTestLiberationFont.TestDirectory_FontVersion;
  379. begin
  380. AssertEquals('Failed on 0', '00010000', IntToHex(FI.Directory.FontVersion.Version, 8));
  381. AssertEquals('Failed on Major Version', 1, FI.Directory.FontVersion.Major);
  382. AssertEquals('Failed on Minor Version', 0, FI.Directory.FontVersion.Minor);
  383. end;
  384. procedure TTestLiberationFont.TestDirectory_NumTables;
  385. begin
  386. AssertEquals('Failed on Numtables', 19, Int(FI.Directory.Numtables));
  387. end;
  388. procedure TTestLiberationFont.TestDirectory_SearchRange;
  389. begin
  390. AssertEquals('Failed on SearchRange', 256, Int(FI.Directory.SearchRange));
  391. end;
  392. procedure TTestLiberationFont.TestDirectory_EntrySelector;
  393. begin
  394. AssertEquals('Failed on EntrySelector', 4, Int(FI.Directory.EntrySelector));
  395. end;
  396. procedure TTestLiberationFont.TestDirectory_RangeShift;
  397. begin
  398. AssertEquals('Failed on RangeShift', 48, Int(FI.Directory.RangeShift));
  399. end;
  400. procedure TTestLiberationFont.TestHead_FileVersion;
  401. begin
  402. AssertEquals('Failed on 1', '00010000', IntToHex(FI.Head.FileVersion.Version, 8));
  403. AssertEquals('Failed on 2', 1, FI.Head.FileVersion.Major);
  404. AssertEquals('Failed on 3', 0, FI.Head.FileVersion.Minor);
  405. end;
  406. procedure TTestLiberationFont.TestHead_FontRevision;
  407. begin
  408. AssertEquals('Failed on 1', '00020000', IntToHex(FI.Head.FontRevision.Version, 8));
  409. AssertEquals('Failed on 2', 2, FI.Head.FontRevision.Major);
  410. AssertEquals('Failed on 3', 0, FI.Head.FontRevision.Minor);
  411. end;
  412. procedure TTestLiberationFont.TestHead_CheckSumAdjustment;
  413. begin
  414. AssertEquals('Failed on 1', $D6572D59, FI.Head.CheckSumAdjustment);
  415. end;
  416. procedure TTestLiberationFont.TestHead_MagicNumber;
  417. begin
  418. AssertEquals('Failed on 1', $5F0F3CF5, FI.Head.MagicNumber);
  419. end;
  420. procedure TTestLiberationFont.TestHead_Flags;
  421. begin
  422. AssertEquals('Failed on 1', $021F, FI.Head.Flags);
  423. end;
  424. procedure TTestLiberationFont.TestHead_UnitsPerEm;
  425. begin
  426. AssertEquals('Failed on 1', 2048, FI.Head.UnitsPerEm);
  427. end;
  428. procedure TTestLiberationFont.TestHead_Created;
  429. var
  430. dt: TDateTime;
  431. s: string;
  432. begin
  433. // LONGDATETIME: Date represented in number of seconds since 12:00 midnight,
  434. // January 1, 1904. The value is represented as a signed 64-bit integer.
  435. dt := MacToDateTime(FI.Head.Created);
  436. // value verified with Microsoft's ttfdump tool and GMT timezone (no daylight saving applied).
  437. // created: Thu Oct 04 11:02:31 2012
  438. // modified: Thu Oct 04 11:02:31 2012
  439. AssertEquals('Failed on 1', EncodeDateTime(2012, 10, 4, 11, 2, 31, 0), dt);
  440. // Instead we use this - which shows human readable dates.
  441. s := FormatDateTime('yyyy-mm-dd hh:nn:ss', dt);
  442. AssertEquals('Failed on 2', '2012-10-04 11:02:31', s);
  443. end;
  444. procedure TTestLiberationFont.TestHead_Modified;
  445. var
  446. dt: TDateTime;
  447. s: string;
  448. begin
  449. // value verified with Microsoft's ttfdump tool and GMT timezone (no daylight saving applied).
  450. // created: Thu Oct 04 11:02:31 2012
  451. // modified: Thu Oct 04 11:02:31 2012
  452. dt := MacToDateTime(FI.Head.Modified);
  453. s := FormatDateTime('yyyy-mm-dd hh:nn:ss', dt);
  454. AssertEquals('Failed on 2', '2012-10-04 11:02:31', s);
  455. end;
  456. procedure TTestLiberationFont.TestHead_BBox_xMin;
  457. begin
  458. AssertEquals('Failed on 1', -1114, FI.Head.BBox[0]);
  459. end;
  460. procedure TTestLiberationFont.TestHead_BBox_yMin;
  461. begin
  462. AssertEquals('Failed on 1', -621, FI.Head.BBox[1]);
  463. end;
  464. procedure TTestLiberationFont.TestHead_BBox_xMax;
  465. begin
  466. AssertEquals('Failed on 1', 2666, FI.Head.BBox[2]);
  467. end;
  468. procedure TTestLiberationFont.TestHead_BBox_yMax;
  469. begin
  470. AssertEquals('Failed on 1', 2007, FI.Head.BBox[3]);
  471. end;
  472. procedure TTestLiberationFont.TestHead_MacStyle;
  473. begin
  474. AssertEquals('Failed on 1', $0000, FI.Head.MacStyle);
  475. end;
  476. procedure TTestLiberationFont.TestHead_LowestRecPPEM;
  477. begin
  478. AssertEquals('Failed on 1', 8, FI.Head.LowestRecPPEM);
  479. end;
  480. procedure TTestLiberationFont.TestHead_FontDirectionHint;
  481. begin
  482. AssertEquals('Failed on 1', 0, FI.Head.FontDirectionHint);
  483. end;
  484. procedure TTestLiberationFont.TestHead_IndexToLocFormat;
  485. begin
  486. AssertEquals('Failed on 1', 1, FI.Head.IndexToLocFormat);
  487. end;
  488. procedure TTestLiberationFont.TestHead_glyphDataFormat;
  489. begin
  490. AssertEquals('Failed on 1', 0, FI.Head.glyphDataFormat);
  491. end;
  492. procedure TTestLiberationFont.TestHHead_TableVersion;
  493. begin
  494. AssertEquals('Failed on 1', '00010000', IntToHex(FI.HHead.TableVersion.Version, 8));
  495. AssertEquals('Failed on 2', 1, FI.HHead.TableVersion.Major);
  496. AssertEquals('Failed on 3', 0, FI.HHead.TableVersion.Minor);
  497. end;
  498. procedure TTestLiberationFont.TestHHead_Ascender;
  499. begin
  500. AssertEquals('Failed on 1', 1854, FI.HHead.Ascender);
  501. end;
  502. procedure TTestLiberationFont.TestHHead_Descender;
  503. begin
  504. AssertEquals('Failed on 1', -434, FI.HHead.Descender);
  505. end;
  506. procedure TTestLiberationFont.TestHHead_LineGap;
  507. begin
  508. AssertEquals('Failed on 1', 67, FI.HHead.LineGap);
  509. end;
  510. procedure TTestLiberationFont.TestHHead_AdvanceWidthMax;
  511. begin
  512. AssertEquals('Failed on 1', 2740, FI.HHead.AdvanceWidthMax);
  513. end;
  514. procedure TTestLiberationFont.TestHHead_MinLeftSideBearing;
  515. begin
  516. AssertEquals('Failed on 1', -1114, FI.HHead.MinLeftSideBearing);
  517. end;
  518. procedure TTestLiberationFont.TestHHead_MinRightSideBearing;
  519. begin
  520. AssertEquals('Failed on 1', -1414, FI.HHead.MinRightSideBearing);
  521. end;
  522. procedure TTestLiberationFont.TestHHead_XMaxExtent;
  523. begin
  524. AssertEquals('Failed on 1', 2666, FI.HHead.XMaxExtent);
  525. end;
  526. procedure TTestLiberationFont.TestHHead_CaretSlopeRise;
  527. begin
  528. AssertEquals('Failed on 1', 1, FI.HHead.CaretSlopeRise);
  529. end;
  530. procedure TTestLiberationFont.TestHHead_CaretSlopeRun;
  531. begin
  532. AssertEquals('Failed on 1', 0, FI.HHead.CaretSlopeRun);
  533. end;
  534. procedure TTestLiberationFont.TestHHead_Reserved;
  535. begin
  536. AssertEquals('Failed on 1', 0, FI.HHead.Reserved[0]);
  537. AssertEquals('Failed on 2', 0, FI.HHead.Reserved[1]);
  538. AssertEquals('Failed on 3', 0, FI.HHead.Reserved[2]);
  539. AssertEquals('Failed on 4', 0, FI.HHead.Reserved[3]);
  540. AssertEquals('Failed on 5', 0, FI.HHead.Reserved[4]);
  541. end;
  542. procedure TTestLiberationFont.TestHHead_metricDataFormat;
  543. begin
  544. AssertEquals('Failed on 1', 0, FI.HHead.metricDataFormat);
  545. end;
  546. procedure TTestLiberationFont.TestHHead_numberOfHMetrics;
  547. begin
  548. AssertEquals('Failed on 1', 2587, FI.HHead.numberOfHMetrics);
  549. end;
  550. procedure TTestLiberationFont.TestCMap_version;
  551. begin
  552. AssertEquals('Failed on 1', '0000', IntToHex(FI.CmapH.Version, 4));
  553. AssertEquals('Failed on 2', 0, FI.CmapH.Version);
  554. end;
  555. procedure TTestLiberationFont.TestCMap_SubTableCount;
  556. begin
  557. AssertEquals('Failed on 1', 3, FI.CmapH.SubTableCount);
  558. end;
  559. procedure TTestLiberationFont.TestCMapSubTables_1;
  560. var
  561. lSubTable: TCmapSubTableEntry;
  562. begin
  563. lSubTable := FI.CmapSubtables[0];
  564. AssertEquals('Failed on 1', 0, lSubTable.PlatformID);
  565. AssertEquals('Failed on 2', 3, lSubTable.EncodingID);
  566. AssertEquals('Failed on 3', '0000001C', IntToHex(lSubTable.Offset, 8));
  567. end;
  568. procedure TTestLiberationFont.TestCMapSubTables_2;
  569. var
  570. lSubTable: TCmapSubTableEntry;
  571. begin
  572. lSubTable := FI.CmapSubtables[1];
  573. AssertEquals('Failed on 1', 1, lSubTable.PlatformID);
  574. AssertEquals('Failed on 2', 0, lSubTable.EncodingID);
  575. AssertEquals('Failed on 3', '00000424', IntToHex(lSubTable.Offset, 8));
  576. end;
  577. procedure TTestLiberationFont.TestCMapSubTables_3;
  578. var
  579. lSubTable: TCmapSubTableEntry;
  580. begin
  581. lSubTable := FI.CmapSubtables[2];
  582. AssertEquals('Failed on 1', 3, lSubTable.PlatformID);
  583. AssertEquals('Failed on 2', 1, lSubTable.EncodingID);
  584. AssertEquals('Failed on 3', '0000001C', IntToHex(lSubTable.Offset, 8));
  585. end;
  586. procedure TTestLiberationFont.TestCmapUnicodeMap_Format;
  587. begin
  588. AssertEquals('Failed on 1', 4, FI.CmapUnicodeMap.Format);
  589. end;
  590. procedure TTestLiberationFont.TestCmapUnicodeMap_Length;
  591. begin
  592. AssertEquals('Failed on 1', 1032, FI.CmapUnicodeMap.Length);
  593. end;
  594. procedure TTestLiberationFont.TestCmapUnicodeMap_SegmentCount2;
  595. begin
  596. AssertEquals('Failed on 1', 254, FI.CmapUnicodeMap.SegmentCount2);
  597. end;
  598. procedure TTestLiberationFont.TestCmapUnicodeMap_SearchRange;
  599. begin
  600. AssertEquals('Failed on 1', 128, FI.CmapUnicodeMap.SearchRange);
  601. end;
  602. procedure TTestLiberationFont.TestCmapUnicodeMap_EntrySelector;
  603. begin
  604. AssertEquals('Failed on 1', 6, FI.CmapUnicodeMap.EntrySelector);
  605. end;
  606. procedure TTestLiberationFont.TestCmapUnicodeMap_RangeShift;
  607. begin
  608. AssertEquals('Failed on 1', 126, FI.CmapUnicodeMap.RangeShift);
  609. end;
  610. procedure TTestLiberationFont.TestUnicodeMapSegment_1_StartCode;
  611. begin
  612. AssertEquals('Failed on 1', '0020', IntToHex(FI.CmapUnicodeMapSegments[0].StartCode, 4));
  613. end;
  614. procedure TTestLiberationFont.TestUnicodeMapSegment_1_EndCode;
  615. begin
  616. AssertEquals('Failed on 1', '007E', IntToHex(FI.CmapUnicodeMapSegments[0].EndCode, 4));
  617. end;
  618. procedure TTestLiberationFont.TestUnicodeMapSegment_1_IDDelta;
  619. begin
  620. AssertEquals('Failed on 1', -29, FI.CmapUnicodeMapSegments[0].IDDelta);
  621. end;
  622. procedure TTestLiberationFont.TestUnicodeMapSegment_1_IDRangeOffset;
  623. begin
  624. AssertEquals('Failed on 1', 0, FI.CmapUnicodeMapSegments[0].IDRangeOffset);
  625. end;
  626. procedure TTestLiberationFont.TestUnicodeMapSegment_2_StartCode;
  627. begin
  628. AssertEquals('Failed on 1', '00A0', IntToHex(FI.CmapUnicodeMapSegments[1].StartCode, 4));
  629. end;
  630. procedure TTestLiberationFont.TestUnicodeMapSegment_2_EndCode;
  631. begin
  632. AssertEquals('Failed on 1', '036F', IntToHex(FI.CmapUnicodeMapSegments[1].EndCode, 4));
  633. end;
  634. procedure TTestLiberationFont.TestUnicodeMapSegment_2_IDDelta;
  635. begin
  636. AssertEquals('Failed on 1', -62, FI.CmapUnicodeMapSegments[1].IDDelta);
  637. end;
  638. procedure TTestLiberationFont.TestUnicodeMapSegment_2_IDRangeOffset;
  639. begin
  640. AssertEquals('Failed on 1', 0, FI.CmapUnicodeMapSegments[1].IDRangeOffset);
  641. end;
  642. procedure TTestLiberationFont.TestUnicodeMapSegment_127_StartCode;
  643. begin
  644. AssertEquals('Failed on 1', 'FFFF', IntToHex(FI.CmapUnicodeMapSegments[126].StartCode, 4));
  645. end;
  646. procedure TTestLiberationFont.TestUnicodeMapSegment_127_EndCode;
  647. begin
  648. AssertEquals('Failed on 1', 'FFFF', IntToHex(FI.CmapUnicodeMapSegments[126].EndCode, 4));
  649. end;
  650. procedure TTestLiberationFont.TestUnicodeMapSegment_127_IDDelta;
  651. begin
  652. AssertEquals('Failed on 1', 1, FI.CmapUnicodeMapSegments[126].IDDelta);
  653. end;
  654. procedure TTestLiberationFont.TestUnicodeMapSegment_127_IDRangeOffset;
  655. begin
  656. AssertEquals('Failed on 1', 0, FI.CmapUnicodeMapSegments[126].IDRangeOffset);
  657. end;
  658. procedure TTestLiberationFont.TestWidths_Size;
  659. begin
  660. AssertEquals('Failed on 1', 2587, Length(FI.Widths));
  661. end;
  662. procedure TTestLiberationFont.TestWidths_HorMetric_0_AdvanceWidth;
  663. begin
  664. AssertEquals('Failed on 1', 1536, FI.Widths[0].AdvanceWidth);
  665. end;
  666. procedure TTestLiberationFont.TestWidths_HorMetric_0_LSB;
  667. begin
  668. AssertEquals('Failed on 1', 205, FI.Widths[0].LSB);
  669. end;
  670. procedure TTestLiberationFont.TestWidths_HorMetric_1_AdvanceWidth;
  671. begin
  672. AssertEquals('Failed on 1', 0, FI.Widths[1].AdvanceWidth);
  673. end;
  674. procedure TTestLiberationFont.TestWidths_HorMetric_1_LSB;
  675. begin
  676. AssertEquals('Failed on 1', 0, FI.Widths[1].LSB);
  677. end;
  678. procedure TTestLiberationFont.TestWidths_HorMetric_2586_AdvanceWidth;
  679. begin
  680. AssertEquals('Failed on 1', 1140, FI.Widths[2586].AdvanceWidth);
  681. end;
  682. procedure TTestLiberationFont.TestWidths_HorMetric_2586_LSB;
  683. begin
  684. AssertEquals('Failed on 1', 86, FI.Widths[2586].LSB);
  685. end;
  686. procedure TTestLiberationFont.TestMaxP_VersionNumber;
  687. begin
  688. AssertEquals('Failed on 1', '00010000', IntToHex(FI.MaxP.VersionNumber.Version, 8));
  689. AssertEquals('Failed on 2', 1, FI.MaxP.VersionNumber.Major);
  690. AssertEquals('Failed on 3', 0, FI.MaxP.VersionNumber.Minor);
  691. end;
  692. procedure TTestLiberationFont.TestMaxP_numGlyphs;
  693. begin
  694. AssertEquals('Failed on 1', 2587, FI.MaxP.numGlyphs);
  695. end;
  696. procedure TTestLiberationFont.TestMaxP_maxPoints;
  697. begin
  698. AssertEquals('Failed on 1', 338, FI.MaxP.maxPoints);
  699. end;
  700. procedure TTestLiberationFont.TestMaxP_maxContours;
  701. begin
  702. AssertEquals('Failed on 1', 84, FI.MaxP.maxContours);
  703. end;
  704. procedure TTestLiberationFont.TestMaxP_maxCompositePoints;
  705. begin
  706. AssertEquals('Failed on 1', 92, FI.MaxP.maxCompositePoints);
  707. end;
  708. procedure TTestLiberationFont.TestMaxP_maxCompositeContours;
  709. begin
  710. AssertEquals('Failed on 1', 6, FI.MaxP.maxCompositeContours);
  711. end;
  712. procedure TTestLiberationFont.TestMaxP_maxZones;
  713. begin
  714. AssertEquals('Failed on 1', 2, FI.MaxP.maxZones);
  715. end;
  716. procedure TTestLiberationFont.TestMaxP_maxTwilightPoints;
  717. begin
  718. AssertEquals('Failed on 1', 16, FI.MaxP.maxTwilightPoints);
  719. end;
  720. procedure TTestLiberationFont.TestMaxP_maxStorage;
  721. begin
  722. AssertEquals('Failed on 1', 47, FI.MaxP.maxStorage);
  723. end;
  724. procedure TTestLiberationFont.TestMaxP_maxFunctionDefs;
  725. begin
  726. AssertEquals('Failed on 1', 92, FI.MaxP.maxFunctionDefs);
  727. end;
  728. procedure TTestLiberationFont.TestMaxP_maxInstructionDefs;
  729. begin
  730. AssertEquals('Failed on 1', 0, FI.MaxP.maxInstructionDefs);
  731. end;
  732. procedure TTestLiberationFont.TestMaxP_maxStackElements;
  733. begin
  734. AssertEquals('Failed on 1', 676, FI.MaxP.maxStackElements);
  735. end;
  736. procedure TTestLiberationFont.TestMaxP_maxSizeOfInstructions;
  737. begin
  738. AssertEquals('Failed on 1', 516, FI.MaxP.maxSizeOfInstructions);
  739. end;
  740. procedure TTestLiberationFont.TestMaxP_maxComponentElements;
  741. begin
  742. AssertEquals('Failed on 1', 4, FI.MaxP.maxComponentElements);
  743. end;
  744. procedure TTestLiberationFont.TestMaxP_maxComponentDepth;
  745. begin
  746. AssertEquals('Failed on 1', 1, FI.MaxP.maxComponentDepth);
  747. end;
  748. procedure TTestLiberationFont.TestOS2Data_version;
  749. begin
  750. AssertEquals('Failed on 1', 3, FI.OS2Data.version);
  751. end;
  752. procedure TTestLiberationFont.TestOS2Data_xAvgCharWidth;
  753. begin
  754. AssertEquals('Failed on 1', 1186, FI.OS2Data.xAvgCharWidth);
  755. end;
  756. procedure TTestLiberationFont.TestOS2Data_usWeightClass;
  757. begin
  758. AssertEquals('Failed on 1', 400, FI.OS2Data.usWeightClass);
  759. end;
  760. procedure TTestLiberationFont.TestOS2Data_usWidthClass;
  761. begin
  762. AssertEquals('Failed on 1', 5, FI.OS2Data.usWidthClass);
  763. end;
  764. procedure TTestLiberationFont.TestOS2Data_fsType;
  765. begin
  766. AssertEquals('Failed on 1', '0000', IntToHex(FI.OS2Data.fsType, 4));
  767. end;
  768. procedure TTestLiberationFont.TestOS2Data_ySubscriptXSize;
  769. begin
  770. AssertEquals('Failed on 1', 1434, FI.OS2Data.ySubscriptXSize);
  771. end;
  772. procedure TTestLiberationFont.TestOS2Data_ySubscriptYSize;
  773. begin
  774. AssertEquals('Failed on 1', 1331, FI.OS2Data.ySubscriptYSize);
  775. end;
  776. procedure TTestLiberationFont.TestOS2Data_ySubscriptXOffset;
  777. begin
  778. AssertEquals('Failed on 1', 0, FI.OS2Data.ySubscriptXOffset);
  779. end;
  780. procedure TTestLiberationFont.TestOS2Data_ySubscriptYOffset;
  781. begin
  782. AssertEquals('Failed on 1', 283, FI.OS2Data.ySubscriptYOffset);
  783. end;
  784. procedure TTestLiberationFont.TestOS2Data_ySuperscriptXSize;
  785. begin
  786. AssertEquals('Failed on 1', 1434, FI.OS2Data.ySuperscriptXSize);
  787. end;
  788. procedure TTestLiberationFont.TestOS2Data_ySuperscriptYSize;
  789. begin
  790. AssertEquals('Failed on 1', 1331, FI.OS2Data.ySuperscriptYSize);
  791. end;
  792. procedure TTestLiberationFont.TestOS2Data_ySuperscriptXOffset;
  793. begin
  794. AssertEquals('Failed on 1', 0, FI.OS2Data.ySuperscriptXOffset);
  795. end;
  796. procedure TTestLiberationFont.TestOS2Data_ySuperscriptYOffset;
  797. begin
  798. AssertEquals('Failed on 1', 977, FI.OS2Data.ySuperscriptYOffset);
  799. end;
  800. procedure TTestLiberationFont.TestOS2Data_yStrikeoutSize;
  801. begin
  802. AssertEquals('Failed on 1', 102, FI.OS2Data.yStrikeoutSize);
  803. end;
  804. procedure TTestLiberationFont.TestOS2Data_yStrikeoutPosition;
  805. begin
  806. AssertEquals('Failed on 1', 530, FI.OS2Data.yStrikeoutPosition);
  807. end;
  808. procedure TTestLiberationFont.TestOS2Data_sFamilyClass;
  809. begin
  810. AssertEquals('Failed on 1', 5, Lo(FI.OS2Data.sFamilyClass));
  811. AssertEquals('Failed on 2', 8, Hi(FI.OS2Data.sFamilyClass));
  812. AssertEquals('Failed on 3', '0805', IntToHex(FI.OS2Data.sFamilyClass, 4));
  813. end;
  814. procedure TTestLiberationFont.TestOS2Data_Panose;
  815. begin
  816. AssertEquals('Failed on 1', 2, FI.OS2Data.panose[0]);
  817. AssertEquals('Failed on 2', 11, FI.OS2Data.panose[1]);
  818. AssertEquals('Failed on 3', 6, FI.OS2Data.panose[2]);
  819. AssertEquals('Failed on 4', 4, FI.OS2Data.panose[3]);
  820. AssertEquals('Failed on 5', 2, FI.OS2Data.panose[4]);
  821. AssertEquals('Failed on 6', 2, FI.OS2Data.panose[5]);
  822. AssertEquals('Failed on 7', 2, FI.OS2Data.panose[6]);
  823. AssertEquals('Failed on 8', 2, FI.OS2Data.panose[7]);
  824. AssertEquals('Failed on 9', 2, FI.OS2Data.panose[8]);
  825. AssertEquals('Failed on 10', 4, FI.OS2Data.panose[9]);
  826. end;
  827. procedure TTestLiberationFont.TestOS2Data_ulUnicodeRange1;
  828. begin
  829. // AssertEquals('Failed on 1', '1110 0000 0000 0000 0000 1010 1111 1111', IntToBin(FI.OS2Data.ulUnicodeRange1, 32, 4));
  830. AssertEquals('Failed on 2', 'E0000AFF', IntToHex(FI.OS2Data.ulUnicodeRange1, 8));
  831. end;
  832. procedure TTestLiberationFont.TestOS2Data_ulUnicodeRange2;
  833. begin
  834. AssertEquals('Failed on 1', '0101 0000 0000 0000 0111 1000 1111 1111', IntToBin(FI.OS2Data.ulUnicodeRange2, 32, 4));
  835. AssertEquals('Failed on 2', '500078FF', IntToHex(FI.OS2Data.ulUnicodeRange2, 8));
  836. end;
  837. procedure TTestLiberationFont.TestOS2Data_ulUnicodeRange3;
  838. begin
  839. AssertEquals('Failed on 1', '0000 0000 0000 0000 0000 0000 0010 0001', IntToBin(FI.OS2Data.ulUnicodeRange3, 32, 4));
  840. AssertEquals('Failed on 2', '00000021', IntToHex(FI.OS2Data.ulUnicodeRange3, 8));
  841. end;
  842. procedure TTestLiberationFont.TestOS2Data_ulUnicodeRange4;
  843. begin
  844. AssertEquals('Failed on 1', '0000 0000 0000 0000 0000 0000 0000 0000', IntToBin(FI.OS2Data.ulUnicodeRange4, 32, 4));
  845. AssertEquals('Failed on 2', '00000000', IntToHex(FI.OS2Data.ulUnicodeRange4, 8));
  846. end;
  847. procedure TTestLiberationFont.TestOS2Data_achVendID;
  848. var
  849. s: string;
  850. begin
  851. s := FI.OS2Data.achVendID[0] + FI.OS2Data.achVendID[1] + FI.OS2Data.achVendID[2] +
  852. FI.OS2Data.achVendID[3];
  853. AssertEquals('Failed on 1', '1ASC', s);
  854. end;
  855. procedure TTestLiberationFont.TestOS2Data_fsSelection;
  856. begin
  857. AssertEquals('Failed on 1', '0040', IntToHex(FI.OS2Data.fsSelection, 4));
  858. end;
  859. procedure TTestLiberationFont.TestOS2Data_usFirstCharIndex;
  860. begin
  861. AssertEquals('Failed on 1', '0020', IntToHex(FI.OS2Data.usFirstCharIndex, 4));
  862. end;
  863. procedure TTestLiberationFont.TestOS2Data_usLastCharIndex;
  864. begin
  865. AssertEquals('Failed on 1', 'FFFC', IntToHex(FI.OS2Data.usLastCharIndex, 4));
  866. end;
  867. procedure TTestLiberationFont.TestOS2Data_sTypoAscender;
  868. begin
  869. AssertEquals('Failed on 1', 1491, FI.OS2Data.sTypoAscender);
  870. end;
  871. procedure TTestLiberationFont.TestOS2Data_sTypoDescender;
  872. begin
  873. AssertEquals('Failed on 1', -431, FI.OS2Data.sTypoDescender);
  874. end;
  875. procedure TTestLiberationFont.TestOS2Data_sTypoLineGap;
  876. begin
  877. AssertEquals('Failed on 1', 307, FI.OS2Data.sTypoLineGap);
  878. end;
  879. procedure TTestLiberationFont.TestOS2Data_usWinAscent;
  880. begin
  881. AssertEquals('Failed on 1', 1854, FI.OS2Data.usWinAscent);
  882. end;
  883. procedure TTestLiberationFont.TestOS2Data_usWinDescent;
  884. begin
  885. AssertEquals('Failed on 1', 434, FI.OS2Data.usWinDescent);
  886. end;
  887. procedure TTestLiberationFont.TestOS2Data_ulCodePageRange1;
  888. begin
  889. AssertEquals('Failed on 1', '600001BF', IntToHex(FI.OS2Data.ulCodePageRange1, 8));
  890. end;
  891. procedure TTestLiberationFont.TestOS2Data_ulCodePageRange2;
  892. begin
  893. AssertEquals('Failed on 1', 'DFF70000', IntToHex(FI.OS2Data.ulCodePageRange2, 8));
  894. end;
  895. procedure TTestLiberationFont.TestOS2Data_sxHeight;
  896. begin
  897. AssertEquals('Failed on 1', 1082, FI.OS2Data.sxHeight);
  898. end;
  899. procedure TTestLiberationFont.TestOS2Data_sCapHeight;
  900. begin
  901. AssertEquals('Failed on 1', 1409, FI.OS2Data.sCapHeight);
  902. end;
  903. procedure TTestLiberationFont.TestOS2Data_usDefaultChar;
  904. begin
  905. AssertEquals('Failed on 1', '0000', IntToHex(FI.OS2Data.usDefaultChar, 4));
  906. end;
  907. procedure TTestLiberationFont.TestOS2Data_usBreakChar;
  908. begin
  909. AssertEquals('Failed on 1', '0020', IntToHex(FI.OS2Data.usBreakChar, 4));
  910. end;
  911. procedure TTestLiberationFont.TestOS2Data_usMaxContext;
  912. begin
  913. AssertEquals('Failed on 1', 14, FI.OS2Data.usMaxContext);
  914. end;
  915. procedure TTestLiberationFont.TestPostScript_Format;
  916. begin
  917. AssertEquals('Failed on 1', '00020000', IntToHex(FI.PostScript.Format.Version, 8));
  918. AssertEquals('Failed on 2', 2, FI.PostScript.Format.Major);
  919. AssertEquals('Failed on 3', 0, FI.PostScript.Format.Minor);
  920. end;
  921. procedure TTestLiberationFont.TestPostScript_ItalicAngle;
  922. begin
  923. AssertEquals('Failed on 1', 0.0, FI.PostScript.ItalicAngle);
  924. end;
  925. procedure TTestLiberationFont.TestPostScript_UnderlinePosition;
  926. begin
  927. AssertEquals('Failed on 1', -217, FI.PostScript.UnderlinePosition);
  928. end;
  929. procedure TTestLiberationFont.TestPostScript_underlineThickness;
  930. begin
  931. AssertEquals('Failed on 1', 150, FI.PostScript.underlineThickness);
  932. end;
  933. procedure TTestLiberationFont.TestPostScript_isFixedPitch;
  934. begin
  935. AssertEquals('Failed on 1', 0, FI.PostScript.isFixedPitch);
  936. end;
  937. procedure TTestLiberationFont.TestPostScript_minMemType42;
  938. begin
  939. AssertEquals('Failed on 1', 0, FI.PostScript.minMemType42);
  940. end;
  941. procedure TTestLiberationFont.TestPostScript_maxMemType42;
  942. begin
  943. AssertEquals('Failed on 1', 0, FI.PostScript.maxMemType42);
  944. end;
  945. procedure TTestLiberationFont.TestPostScript_minMemType1;
  946. begin
  947. AssertEquals('Failed on 1', 0, FI.PostScript.minMemType1);
  948. end;
  949. procedure TTestLiberationFont.TestPostScript_maxMemType1;
  950. begin
  951. AssertEquals('Failed on 1', 0, FI.PostScript.maxMemType1);
  952. end;
  953. procedure TTestLiberationFont.TestGetGlyphIndex;
  954. begin
  955. AssertEquals('Failed on 1.1', 67, Ord('C'));
  956. AssertEquals('Failed on 1.2', 111, Ord('o'));
  957. AssertEquals('Failed on 2.1', 38, FI.GetGlyphIndex(Ord('C')));
  958. AssertEquals('Failed on 2.2', 82, FI.GetGlyphIndex(Ord('o')));
  959. AssertEquals('Failed on 2.3', 88, FI.GetGlyphIndex(Ord('u')));
  960. AssertEquals('Failed on 2.4', 87, FI.GetGlyphIndex(Ord('t')));
  961. AssertEquals('Failed on 2.5', 85, FI.GetGlyphIndex(Ord('r')));
  962. AssertEquals('Failed on 2.6', 92, FI.GetGlyphIndex(Ord('y')));
  963. AssertEquals('Failed on 2.7', 3, FI.GetGlyphIndex(Ord(' ')));
  964. AssertEquals('Failed on 2.8', 51, FI.GetGlyphIndex(Ord('P')));
  965. AssertEquals('Failed on 2.9', 80, FI.GetGlyphIndex(Ord('m')));
  966. AssertEquals('Failed on 2.10', 79, FI.GetGlyphIndex(Ord('l')));
  967. AssertEquals('Failed on 2.11', 19, FI.GetGlyphIndex(Ord('0')));
  968. AssertEquals('Failed on 2.12', 20, FI.GetGlyphIndex(Ord('1')));
  969. end;
  970. procedure TTestLiberationFont.TestGetAdvanceWidth;
  971. begin
  972. AssertEquals('Failed on 1', 1479, FI.GetAdvanceWidth(38)); // 'C'
  973. AssertEquals('Failed on 2', 1139, FI.GetAdvanceWidth(82)); // 'o'
  974. AssertEquals('Failed on 3', 1139, FI.GetAdvanceWidth(88)); // 'u'
  975. AssertEquals('Failed on 4', 569, FI.GetAdvanceWidth(87)); // 't'
  976. AssertEquals('Failed on 5', 682, FI.GetAdvanceWidth(85)); // 'r'
  977. AssertEquals('Failed on 6', 1024, FI.GetAdvanceWidth(92)); // 'y'
  978. AssertEquals('Failed on 7', 569, FI.GetAdvanceWidth(3)); // ' '
  979. AssertEquals('Failed on 8', 1366, FI.GetAdvanceWidth(51)); // 'P'
  980. AssertEquals('Failed on 9', 1706, FI.GetAdvanceWidth(80)); // 'm'
  981. AssertEquals('Failed on 10', 455, FI.GetAdvanceWidth(79)); // 'l'
  982. AssertEquals('Failed on 11', 1139, FI.GetAdvanceWidth(19)); // '0'
  983. AssertEquals('Failed on 12', 1139, FI.GetAdvanceWidth(20)); // '1'
  984. end;
  985. procedure TTestLiberationFont.TestPostScriptName;
  986. begin
  987. AssertEquals('Failed on 1', 'LiberationSans', FI.PostScriptName);
  988. end;
  989. procedure TTestLiberationFont.TestFamilyName;
  990. begin
  991. AssertEquals('Failed on 1', 'Liberation Sans', FI.FamilyName);
  992. end;
  993. procedure TTestLiberationFont.TestHumanFriendlyName;
  994. begin
  995. AssertEquals('Failed on 1', 'Liberation Sans', FI.HumanFriendlyName);
  996. end;
  997. { TTestLiberationItalicFont }
  998. procedure TTestLiberationItalicFont.SetUp;
  999. begin
  1000. inherited SetUp;
  1001. AssertTrue('Failed to find TTF font file <' + cFont3 + '>' + LineEnding +
  1002. 'You can download it from [https://fedorahosted.org/releases/l/i/liberation-fonts/liberation-fonts-ttf-2.00.1.tar.gz]',
  1003. FileExists(cFont3) = True);
  1004. LoadFont(cFont3);
  1005. end;
  1006. procedure TTestLiberationItalicFont.TestPostScript_ItalicAngle;
  1007. begin
  1008. AssertEquals('Failed on 1', -12.0, FI.PostScript.ItalicAngle / 65536.0);
  1009. AssertEquals('Failed on 2', -12.0, FI.ItalicAngle);
  1010. end;
  1011. procedure TTestLiberationItalicFont.TestPostScriptName;
  1012. begin
  1013. AssertEquals('Failed on 1', 'LiberationSans-Italic', FI.PostScriptName);
  1014. end;
  1015. procedure TTestLiberationItalicFont.TestFamilyName;
  1016. begin
  1017. AssertEquals('Failed on 1', 'Liberation Sans', FI.FamilyName);
  1018. end;
  1019. procedure TTestLiberationItalicFont.TestHumanFriendlyName;
  1020. begin
  1021. AssertEquals('Failed on 1', 'Liberation Sans Italic', FI.HumanFriendlyName);
  1022. end;
  1023. { TTestFreeSansFont }
  1024. procedure TTestFreeSansFont.SetUp;
  1025. begin
  1026. inherited SetUp;
  1027. AssertTrue('Failed to find TTF font file <' + cFont2 + '>' + LineEnding +
  1028. 'You can download it from [http://ftp.gnu.org/gnu/freefont/freefont-ttf-20140503.zip]',
  1029. FileExists(cFont2) = True);
  1030. LoadFont(cFont2);
  1031. end;
  1032. procedure TTestFreeSansFont.TestDirectory_FontVersion;
  1033. begin
  1034. AssertEquals('Failed on 0', '00010000', IntToHex(FI.Directory.FontVersion.Version, 8));
  1035. AssertEquals('Failed on Major Version', 1, FI.Directory.FontVersion.Major);
  1036. AssertEquals('Failed on Minor Version', 0, FI.Directory.FontVersion.Minor);
  1037. end;
  1038. procedure TTestFreeSansFont.TestDirectory_NumTables;
  1039. begin
  1040. AssertEquals('Failed on Numtables', 19, Int(FI.Directory.Numtables));
  1041. end;
  1042. procedure TTestFreeSansFont.TestDirectory_SearchRange;
  1043. begin
  1044. AssertEquals('Failed on SearchRange', 256, Int(FI.Directory.SearchRange));
  1045. end;
  1046. procedure TTestFreeSansFont.TestDirectory_EntrySelector;
  1047. begin
  1048. AssertEquals('Failed on EntrySelector', 4, Int(FI.Directory.EntrySelector));
  1049. end;
  1050. procedure TTestFreeSansFont.TestDirectory_RangeShift;
  1051. begin
  1052. AssertEquals('Failed on RangeShift', 48, Int(FI.Directory.RangeShift));
  1053. end;
  1054. procedure TTestFreeSansFont.TestHead_FileVersion;
  1055. begin
  1056. AssertEquals('Failed on 1', '00010000', IntToHex(FI.Head.FileVersion.Version, 8));
  1057. AssertEquals('Failed on 2', 1, FI.Head.FileVersion.Major);
  1058. AssertEquals('Failed on 3', 0, FI.Head.FileVersion.Minor);
  1059. end;
  1060. procedure TTestFreeSansFont.TestHead_FontRevision;
  1061. begin
  1062. { graemeg (2015-09-11): Microsoft's ttfdump tools says the version of this
  1063. font is 412.2 and Linux's FontForge says it is 412.2268. I'm making the
  1064. assumption that Microsoft's tool simply truncated the version number to
  1065. one decimal. }
  1066. AssertEquals('Failed on 1', 412, FI.Head.FontRevision.Major);
  1067. AssertEquals('Failed on 2', 2268, FI.Head.FontRevision.Minor);
  1068. end;
  1069. procedure TTestFreeSansFont.TestHead_CheckSumAdjustment;
  1070. begin
  1071. AssertEquals('Failed on 1', $BDD896C1, FI.Head.CheckSumAdjustment);
  1072. end;
  1073. procedure TTestFreeSansFont.TestHead_MagicNumber;
  1074. begin
  1075. AssertEquals('Failed on 1', $5F0F3CF5, FI.Head.MagicNumber);
  1076. end;
  1077. procedure TTestFreeSansFont.TestHead_Flags;
  1078. begin
  1079. AssertEquals('Failed on 1', $021F, FI.Head.Flags);
  1080. end;
  1081. procedure TTestFreeSansFont.TestHead_UnitsPerEm;
  1082. begin
  1083. AssertEquals('Failed on 1', 1000, FI.Head.UnitsPerEm);
  1084. end;
  1085. procedure TTestFreeSansFont.TestHead_Created;
  1086. var
  1087. dt: TDateTime;
  1088. s: string;
  1089. begin
  1090. // LONGDATETIME: Date represented in number of seconds since 12:00 midnight,
  1091. // January 1, 1904. The value is represented as a signed 64-bit integer.
  1092. // value verified with Microsoft's ttfdump tool and GMT timezone (no daylight saving applied).
  1093. // created: Thu May 03 13:34:25 2012
  1094. // modified: Thu May 03 13:34:25 2012
  1095. dt := MacToDateTime(FI.Head.Created);
  1096. // We don't use this AssertEquals() because it shows a huge Double data-type
  1097. // value as the result.
  1098. AssertEquals('Failed on 1', EncodeDateTime(2012, 5, 3, 13, 34, 25, 0), dt);
  1099. // Instead we use this - which shows human readable dates.
  1100. s := FormatDateTime('yyyy-mm-dd hh:nn:ss', dt);
  1101. AssertEquals('Failed on 2', '2012-05-03 13:34:25', s);
  1102. end;
  1103. procedure TTestFreeSansFont.TestHead_Modified;
  1104. var
  1105. dt: TDateTime;
  1106. s: string;
  1107. begin
  1108. // value verified with Microsoft's ttfdump tool and GMT timezone (no daylight saving applied).
  1109. // created: Thu May 03 13:34:25 2012
  1110. // modified: Thu May 03 13:34:25 2012
  1111. dt := MacToDateTime(FI.Head.Modified);
  1112. s := FormatDateTime('yyyy-mm-dd hh:nn:ss', dt);
  1113. AssertEquals('Failed on 2', '2012-05-03 13:34:25', s);
  1114. end;
  1115. procedure TTestFreeSansFont.TestHead_BBox_xMin;
  1116. begin
  1117. AssertEquals('Failed on 1', -1166, FI.Head.BBox[0]);
  1118. end;
  1119. procedure TTestFreeSansFont.TestHead_BBox_yMin;
  1120. begin
  1121. AssertEquals('Failed on 1', -638, FI.Head.BBox[1]);
  1122. end;
  1123. procedure TTestFreeSansFont.TestHead_BBox_xMax;
  1124. begin
  1125. AssertEquals('Failed on 1', 2260, FI.Head.BBox[2]);
  1126. end;
  1127. procedure TTestFreeSansFont.TestHead_BBox_yMax;
  1128. begin
  1129. AssertEquals('Failed on 1', 1050, FI.Head.BBox[3]);
  1130. end;
  1131. procedure TTestFreeSansFont.TestHead_MacStyle;
  1132. begin
  1133. AssertEquals('Failed on 1', $0000, FI.Head.MacStyle);
  1134. end;
  1135. procedure TTestFreeSansFont.TestHead_LowestRecPPEM;
  1136. begin
  1137. AssertEquals('Failed on 1', 8, FI.Head.LowestRecPPEM);
  1138. end;
  1139. procedure TTestFreeSansFont.TestHead_FontDirectionHint;
  1140. begin
  1141. AssertEquals('Failed on 1', 0, FI.Head.FontDirectionHint);
  1142. end;
  1143. procedure TTestFreeSansFont.TestHead_IndexToLocFormat;
  1144. begin
  1145. AssertEquals('Failed on 1', 1, FI.Head.IndexToLocFormat);
  1146. end;
  1147. procedure TTestFreeSansFont.TestHead_glyphDataFormat;
  1148. begin
  1149. AssertEquals('Failed on 1', 0, FI.Head.glyphDataFormat);
  1150. end;
  1151. procedure TTestFreeSansFont.TestHHead_TableVersion;
  1152. begin
  1153. AssertEquals('Failed on 1', '00010000', IntToHex(FI.HHead.TableVersion.Version, 8));
  1154. AssertEquals('Failed on 2', 1, FI.HHead.TableVersion.Major);
  1155. AssertEquals('Failed on 3', 0, FI.HHead.TableVersion.Minor);
  1156. end;
  1157. procedure TTestFreeSansFont.TestHHead_Ascender;
  1158. begin
  1159. AssertEquals('Failed on 1', 900, FI.HHead.Ascender);
  1160. end;
  1161. procedure TTestFreeSansFont.TestHHead_Descender;
  1162. begin
  1163. AssertEquals('Failed on 1', -200, FI.HHead.Descender);
  1164. end;
  1165. procedure TTestFreeSansFont.TestHHead_LineGap;
  1166. begin
  1167. AssertEquals('Failed on 1', 100, FI.HHead.LineGap);
  1168. end;
  1169. procedure TTestFreeSansFont.TestHHead_AdvanceWidthMax;
  1170. begin
  1171. AssertEquals('Failed on 1', 2256, FI.HHead.AdvanceWidthMax);
  1172. end;
  1173. procedure TTestFreeSansFont.TestHHead_MinLeftSideBearing;
  1174. begin
  1175. AssertEquals('Failed on 1', -1166, FI.HHead.MinLeftSideBearing);
  1176. end;
  1177. procedure TTestFreeSansFont.TestHHead_MinRightSideBearing;
  1178. begin
  1179. AssertEquals('Failed on 1', -724, FI.HHead.MinRightSideBearing);
  1180. end;
  1181. procedure TTestFreeSansFont.TestHHead_XMaxExtent;
  1182. begin
  1183. AssertEquals('Failed on 1', 2260, FI.HHead.XMaxExtent);
  1184. end;
  1185. procedure TTestFreeSansFont.TestHHead_CaretSlopeRise;
  1186. begin
  1187. AssertEquals('Failed on 1', 1, FI.HHead.CaretSlopeRise);
  1188. end;
  1189. procedure TTestFreeSansFont.TestHHead_CaretSlopeRun;
  1190. begin
  1191. AssertEquals('Failed on 1', 0, FI.HHead.CaretSlopeRun);
  1192. end;
  1193. procedure TTestFreeSansFont.TestHHead_Reserved;
  1194. begin
  1195. AssertEquals('Failed on 1', 0, FI.HHead.Reserved[0]);
  1196. AssertEquals('Failed on 2', 0, FI.HHead.Reserved[1]);
  1197. AssertEquals('Failed on 3', 0, FI.HHead.Reserved[2]);
  1198. AssertEquals('Failed on 4', 0, FI.HHead.Reserved[3]);
  1199. AssertEquals('Failed on 5', 0, FI.HHead.Reserved[4]);
  1200. end;
  1201. procedure TTestFreeSansFont.TestHHead_metricDataFormat;
  1202. begin
  1203. AssertEquals('Failed on 1', 0, FI.HHead.metricDataFormat);
  1204. end;
  1205. procedure TTestFreeSansFont.TestHHead_numberOfHMetrics;
  1206. begin
  1207. AssertEquals('Failed on 1', 6272, FI.HHead.numberOfHMetrics);
  1208. end;
  1209. procedure TTestFreeSansFont.TestCMap_version;
  1210. begin
  1211. AssertEquals('Failed on 1', '0000', IntToHex(FI.CmapH.Version, 4));
  1212. AssertEquals('Failed on 2', 0, FI.CmapH.Version);
  1213. end;
  1214. procedure TTestFreeSansFont.TestCMap_SubTableCount;
  1215. begin
  1216. AssertEquals('Failed on 1', 5, FI.CmapH.SubTableCount);
  1217. end;
  1218. procedure TTestFreeSansFont.TestCMapSubTables_1;
  1219. var
  1220. lSubTable: TCmapSubTableEntry;
  1221. begin
  1222. lSubTable := FI.CmapSubtables[0];
  1223. AssertEquals('Failed on 1', 0, lSubTable.PlatformID);
  1224. AssertEquals('Failed on 2', 3, lSubTable.EncodingID);
  1225. AssertEquals('Failed on 3', '0000002C', IntToHex(lSubTable.Offset, 8));
  1226. end;
  1227. procedure TTestFreeSansFont.TestCMapSubTables_2;
  1228. var
  1229. lSubTable: TCmapSubTableEntry;
  1230. begin
  1231. lSubTable := FI.CmapSubtables[1];
  1232. AssertEquals('Failed on 1', 0, lSubTable.PlatformID);
  1233. AssertEquals('Failed on 2', 10, lSubTable.EncodingID);
  1234. AssertEquals('Failed on 3', '00000644', IntToHex(lSubTable.Offset, 8));
  1235. end;
  1236. procedure TTestFreeSansFont.TestCMapSubTables_3;
  1237. var
  1238. lSubTable: TCmapSubTableEntry;
  1239. begin
  1240. lSubTable := FI.CmapSubtables[2];
  1241. AssertEquals('Failed on 1', 1, lSubTable.PlatformID);
  1242. AssertEquals('Failed on 2', 0, lSubTable.EncodingID);
  1243. AssertEquals('Failed on 3', '00000FA8', IntToHex(lSubTable.Offset, 8));
  1244. end;
  1245. procedure TTestFreeSansFont.TestCMapSubTables_4;
  1246. var
  1247. lSubTable: TCmapSubTableEntry;
  1248. begin
  1249. lSubTable := FI.CmapSubtables[3];
  1250. AssertEquals('Failed on 1', 3, lSubTable.PlatformID);
  1251. AssertEquals('Failed on 2', 1, lSubTable.EncodingID);
  1252. AssertEquals('Failed on 3', '0000002C', IntToHex(lSubTable.Offset, 8));
  1253. end;
  1254. procedure TTestFreeSansFont.TestCMapSubTables_5;
  1255. var
  1256. lSubTable: TCmapSubTableEntry;
  1257. begin
  1258. lSubTable := FI.CmapSubtables[4];
  1259. AssertEquals('Failed on 1', 3, lSubTable.PlatformID);
  1260. AssertEquals('Failed on 2', 10, lSubTable.EncodingID);
  1261. AssertEquals('Failed on 3', '00000644', IntToHex(lSubTable.Offset, 8));
  1262. end;
  1263. procedure TTestFreeSansFont.TestCmapUnicodeMap_Format;
  1264. begin
  1265. AssertEquals('Failed on 1', 4, FI.CmapUnicodeMap.Format);
  1266. end;
  1267. procedure TTestFreeSansFont.TestCmapUnicodeMap_Length;
  1268. begin
  1269. AssertEquals('Failed on 1', 1560, FI.CmapUnicodeMap.Length);
  1270. end;
  1271. procedure TTestFreeSansFont.TestCmapUnicodeMap_SegmentCount2;
  1272. begin
  1273. AssertEquals('Failed on 1', 386, FI.CmapUnicodeMap.SegmentCount2);
  1274. end;
  1275. procedure TTestFreeSansFont.TestCmapUnicodeMap_SearchRange;
  1276. begin
  1277. AssertEquals('Failed on 1', 256, FI.CmapUnicodeMap.SearchRange);
  1278. end;
  1279. procedure TTestFreeSansFont.TestCmapUnicodeMap_EntrySelector;
  1280. begin
  1281. AssertEquals('Failed on 1', 7, FI.CmapUnicodeMap.EntrySelector);
  1282. end;
  1283. procedure TTestFreeSansFont.TestCmapUnicodeMap_RangeShift;
  1284. begin
  1285. AssertEquals('Failed on 1', 130, FI.CmapUnicodeMap.RangeShift);
  1286. end;
  1287. procedure TTestFreeSansFont.TestUnicodeMapSegment_1_StartCode;
  1288. begin
  1289. AssertEquals('Failed on 1', '0020', IntToHex(FI.CmapUnicodeMapSegments[0].StartCode, 4));
  1290. end;
  1291. procedure TTestFreeSansFont.TestUnicodeMapSegment_1_EndCode;
  1292. begin
  1293. AssertEquals('Failed on 1', '007E', IntToHex(FI.CmapUnicodeMapSegments[0].EndCode, 4));
  1294. end;
  1295. procedure TTestFreeSansFont.TestUnicodeMapSegment_1_IDDelta;
  1296. begin
  1297. AssertEquals('Failed on 1', -29, FI.CmapUnicodeMapSegments[0].IDDelta);
  1298. end;
  1299. procedure TTestFreeSansFont.TestUnicodeMapSegment_1_IDRangeOffset;
  1300. begin
  1301. AssertEquals('Failed on 1', 0, FI.CmapUnicodeMapSegments[0].IDRangeOffset);
  1302. end;
  1303. procedure TTestFreeSansFont.TestUnicodeMapSegment_2_StartCode;
  1304. begin
  1305. AssertEquals('Failed on 1', '00A0', IntToHex(FI.CmapUnicodeMapSegments[1].StartCode, 4));
  1306. end;
  1307. procedure TTestFreeSansFont.TestUnicodeMapSegment_2_EndCode;
  1308. begin
  1309. AssertEquals('Failed on 1', '01BB', IntToHex(FI.CmapUnicodeMapSegments[1].EndCode, 4));
  1310. end;
  1311. procedure TTestFreeSansFont.TestUnicodeMapSegment_2_IDDelta;
  1312. begin
  1313. AssertEquals('Failed on 1', -62, FI.CmapUnicodeMapSegments[1].IDDelta);
  1314. end;
  1315. procedure TTestFreeSansFont.TestUnicodeMapSegment_2_IDRangeOffset;
  1316. begin
  1317. AssertEquals('Failed on 1', 0, FI.CmapUnicodeMapSegments[1].IDRangeOffset);
  1318. end;
  1319. procedure TTestFreeSansFont.TestUnicodeMapSegment_127_StartCode;
  1320. begin
  1321. AssertEquals('Failed on 1', '2190', IntToHex(FI.CmapUnicodeMapSegments[126].StartCode, 4));
  1322. end;
  1323. procedure TTestFreeSansFont.TestUnicodeMapSegment_127_EndCode;
  1324. begin
  1325. AssertEquals('Failed on 1', '2199', IntToHex(FI.CmapUnicodeMapSegments[126].EndCode, 4));
  1326. end;
  1327. procedure TTestFreeSansFont.TestUnicodeMapSegment_127_IDDelta;
  1328. begin
  1329. AssertEquals('Failed on 1', -5123, FI.CmapUnicodeMapSegments[126].IDDelta);
  1330. end;
  1331. procedure TTestFreeSansFont.TestUnicodeMapSegment_127_IDRangeOffset;
  1332. begin
  1333. AssertEquals('Failed on 1', 0, FI.CmapUnicodeMapSegments[126].IDRangeOffset);
  1334. end;
  1335. procedure TTestFreeSansFont.TestWidths_Size;
  1336. begin
  1337. AssertEquals('Failed on 1', 6272, Length(FI.Widths));
  1338. end;
  1339. procedure TTestFreeSansFont.TestWidths_HorMetric_0_AdvanceWidth;
  1340. begin
  1341. AssertEquals('Failed on 1', 800, FI.Widths[0].AdvanceWidth);
  1342. end;
  1343. procedure TTestFreeSansFont.TestWidths_HorMetric_0_LSB;
  1344. begin
  1345. AssertEquals('Failed on 1', 35, FI.Widths[0].LSB);
  1346. end;
  1347. procedure TTestFreeSansFont.TestWidths_HorMetric_1_AdvanceWidth;
  1348. begin
  1349. AssertEquals('Failed on 1', 0, FI.Widths[1].AdvanceWidth);
  1350. end;
  1351. procedure TTestFreeSansFont.TestWidths_HorMetric_1_LSB;
  1352. begin
  1353. AssertEquals('Failed on 1', 0, FI.Widths[1].LSB);
  1354. end;
  1355. procedure TTestFreeSansFont.TestWidths_HorMetric_2586_AdvanceWidth;
  1356. begin
  1357. AssertEquals('Failed on 1', 516, FI.Widths[2586].AdvanceWidth);
  1358. end;
  1359. procedure TTestFreeSansFont.TestWidths_HorMetric_2586_LSB;
  1360. begin
  1361. AssertEquals('Failed on 1', 50, FI.Widths[2586].LSB);
  1362. end;
  1363. procedure TTestFreeSansFont.TestMaxP_VersionNumber;
  1364. begin
  1365. AssertEquals('Failed on 1', '00010000', IntToHex(FI.MaxP.VersionNumber.Version, 8));
  1366. AssertEquals('Failed on 2', 1, FI.MaxP.VersionNumber.Major);
  1367. AssertEquals('Failed on 3', 0, FI.MaxP.VersionNumber.Minor);
  1368. end;
  1369. procedure TTestFreeSansFont.TestMaxP_numGlyphs;
  1370. begin
  1371. AssertEquals('Failed on 1', 6272, FI.MaxP.numGlyphs);
  1372. end;
  1373. procedure TTestFreeSansFont.TestMaxP_maxPoints;
  1374. begin
  1375. AssertEquals('Failed on 1', 439, FI.MaxP.maxPoints);
  1376. end;
  1377. procedure TTestFreeSansFont.TestMaxP_maxContours;
  1378. begin
  1379. AssertEquals('Failed on 1', 100, FI.MaxP.maxContours);
  1380. end;
  1381. procedure TTestFreeSansFont.TestMaxP_maxCompositePoints;
  1382. begin
  1383. AssertEquals('Failed on 1', 117, FI.MaxP.maxCompositePoints);
  1384. end;
  1385. procedure TTestFreeSansFont.TestMaxP_maxCompositeContours;
  1386. begin
  1387. AssertEquals('Failed on 1', 8, FI.MaxP.maxCompositeContours);
  1388. end;
  1389. procedure TTestFreeSansFont.TestMaxP_maxZones;
  1390. begin
  1391. AssertEquals('Failed on 1', 2, FI.MaxP.maxZones);
  1392. end;
  1393. procedure TTestFreeSansFont.TestMaxP_maxTwilightPoints;
  1394. begin
  1395. AssertEquals('Failed on 1', 1, FI.MaxP.maxTwilightPoints);
  1396. end;
  1397. procedure TTestFreeSansFont.TestMaxP_maxStorage;
  1398. begin
  1399. AssertEquals('Failed on 1', 2, FI.MaxP.maxStorage);
  1400. end;
  1401. procedure TTestFreeSansFont.TestMaxP_maxFunctionDefs;
  1402. begin
  1403. AssertEquals('Failed on 1', 22, FI.MaxP.maxFunctionDefs);
  1404. end;
  1405. procedure TTestFreeSansFont.TestMaxP_maxInstructionDefs;
  1406. begin
  1407. AssertEquals('Failed on 1', 0, FI.MaxP.maxInstructionDefs);
  1408. end;
  1409. procedure TTestFreeSansFont.TestMaxP_maxStackElements;
  1410. begin
  1411. AssertEquals('Failed on 1', 256, FI.MaxP.maxStackElements);
  1412. end;
  1413. procedure TTestFreeSansFont.TestMaxP_maxSizeOfInstructions;
  1414. begin
  1415. AssertEquals('Failed on 1', 1424, FI.MaxP.maxSizeOfInstructions);
  1416. end;
  1417. procedure TTestFreeSansFont.TestMaxP_maxComponentElements;
  1418. begin
  1419. AssertEquals('Failed on 1', 8, FI.MaxP.maxComponentElements);
  1420. end;
  1421. procedure TTestFreeSansFont.TestMaxP_maxComponentDepth;
  1422. begin
  1423. AssertEquals('Failed on 1', 4, FI.MaxP.maxComponentDepth);
  1424. end;
  1425. procedure TTestFreeSansFont.TestOS2Data_version;
  1426. begin
  1427. AssertEquals('Failed on 1', 3, FI.OS2Data.version);
  1428. end;
  1429. procedure TTestFreeSansFont.TestOS2Data_xAvgCharWidth;
  1430. begin
  1431. AssertEquals('Failed on 1', 657, FI.OS2Data.xAvgCharWidth);
  1432. end;
  1433. procedure TTestFreeSansFont.TestOS2Data_usWeightClass;
  1434. begin
  1435. AssertEquals('Failed on 1', 400, FI.OS2Data.usWeightClass);
  1436. end;
  1437. procedure TTestFreeSansFont.TestOS2Data_usWidthClass;
  1438. begin
  1439. AssertEquals('Failed on 1', 5, FI.OS2Data.usWidthClass);
  1440. end;
  1441. procedure TTestFreeSansFont.TestOS2Data_fsType;
  1442. begin
  1443. AssertEquals('Failed on 1', '0000', IntToHex(FI.OS2Data.fsType, 4));
  1444. end;
  1445. procedure TTestFreeSansFont.TestOS2Data_ySubscriptXSize;
  1446. begin
  1447. AssertEquals('Failed on 1', 650, FI.OS2Data.ySubscriptXSize);
  1448. end;
  1449. procedure TTestFreeSansFont.TestOS2Data_ySubscriptYSize;
  1450. begin
  1451. AssertEquals('Failed on 1', 666, FI.OS2Data.ySubscriptYSize);
  1452. end;
  1453. procedure TTestFreeSansFont.TestOS2Data_ySubscriptXOffset;
  1454. begin
  1455. AssertEquals('Failed on 1', 0, FI.OS2Data.ySubscriptXOffset);
  1456. end;
  1457. procedure TTestFreeSansFont.TestOS2Data_ySubscriptYOffset;
  1458. begin
  1459. AssertEquals('Failed on 1', 200, FI.OS2Data.ySubscriptYOffset);
  1460. end;
  1461. procedure TTestFreeSansFont.TestOS2Data_ySuperscriptXSize;
  1462. begin
  1463. AssertEquals('Failed on 1', 650, FI.OS2Data.ySuperscriptXSize);
  1464. end;
  1465. procedure TTestFreeSansFont.TestOS2Data_ySuperscriptYSize;
  1466. begin
  1467. AssertEquals('Failed on 1', 666, FI.OS2Data.ySuperscriptYSize);
  1468. end;
  1469. procedure TTestFreeSansFont.TestOS2Data_ySuperscriptXOffset;
  1470. begin
  1471. AssertEquals('Failed on 1', 0, FI.OS2Data.ySuperscriptXOffset);
  1472. end;
  1473. procedure TTestFreeSansFont.TestOS2Data_ySuperscriptYOffset;
  1474. begin
  1475. AssertEquals('Failed on 1', 390, FI.OS2Data.ySuperscriptYOffset);
  1476. end;
  1477. procedure TTestFreeSansFont.TestOS2Data_yStrikeoutSize;
  1478. begin
  1479. AssertEquals('Failed on 1', 49, FI.OS2Data.yStrikeoutSize);
  1480. end;
  1481. procedure TTestFreeSansFont.TestOS2Data_yStrikeoutPosition;
  1482. begin
  1483. AssertEquals('Failed on 1', 258, FI.OS2Data.yStrikeoutPosition);
  1484. end;
  1485. procedure TTestFreeSansFont.TestOS2Data_sFamilyClass;
  1486. begin
  1487. AssertEquals('Failed on 1', 8, Hi(FI.OS2Data.sFamilyClass));
  1488. AssertEquals('Failed on 2', 5, Lo(FI.OS2Data.sFamilyClass));
  1489. AssertEquals('Failed on 3', '0805', IntToHex(FI.OS2Data.sFamilyClass, 4));
  1490. end;
  1491. procedure TTestFreeSansFont.TestOS2Data_Panose;
  1492. begin
  1493. AssertEquals('Failed on 1', 2, FI.OS2Data.panose[0]);
  1494. AssertEquals('Failed on 2', 11, FI.OS2Data.panose[1]);
  1495. AssertEquals('Failed on 3', 5, FI.OS2Data.panose[2]);
  1496. AssertEquals('Failed on 4', 4, FI.OS2Data.panose[3]);
  1497. AssertEquals('Failed on 5', 2, FI.OS2Data.panose[4]);
  1498. AssertEquals('Failed on 6', 2, FI.OS2Data.panose[5]);
  1499. AssertEquals('Failed on 7', 2, FI.OS2Data.panose[6]);
  1500. AssertEquals('Failed on 8', 2, FI.OS2Data.panose[7]);
  1501. AssertEquals('Failed on 9', 2, FI.OS2Data.panose[8]);
  1502. AssertEquals('Failed on 10', 4, FI.OS2Data.panose[9]);
  1503. end;
  1504. procedure TTestFreeSansFont.TestOS2Data_ulUnicodeRange1;
  1505. begin
  1506. AssertEquals('Failed on 1', 'E4839EFF', IntToHex(FI.OS2Data.ulUnicodeRange1, 8));
  1507. end;
  1508. procedure TTestFreeSansFont.TestOS2Data_ulUnicodeRange2;
  1509. begin
  1510. AssertEquals('Failed on 1', '4600FDFF', IntToHex(FI.OS2Data.ulUnicodeRange2, 8));
  1511. end;
  1512. procedure TTestFreeSansFont.TestOS2Data_ulUnicodeRange3;
  1513. begin
  1514. AssertEquals('Failed on 1', '000030A0', IntToHex(FI.OS2Data.ulUnicodeRange3, 8));
  1515. end;
  1516. procedure TTestFreeSansFont.TestOS2Data_ulUnicodeRange4;
  1517. begin
  1518. AssertEquals('Failed on 1', '00000584', IntToHex(FI.OS2Data.ulUnicodeRange4, 8));
  1519. end;
  1520. procedure TTestFreeSansFont.TestOS2Data_achVendID;
  1521. var
  1522. s: string;
  1523. begin
  1524. s := FI.OS2Data.achVendID[0] + FI.OS2Data.achVendID[1] + FI.OS2Data.achVendID[2] +
  1525. FI.OS2Data.achVendID[3];
  1526. AssertEquals('Failed on 1', 'GNU ', s);
  1527. end;
  1528. procedure TTestFreeSansFont.TestOS2Data_fsSelection;
  1529. begin
  1530. AssertEquals('Failed on 1', '0040', IntToHex(FI.OS2Data.fsSelection, 4));
  1531. end;
  1532. procedure TTestFreeSansFont.TestOS2Data_usFirstCharIndex;
  1533. begin
  1534. AssertEquals('Failed on 1', '0020', IntToHex(FI.OS2Data.usFirstCharIndex, 4));
  1535. end;
  1536. procedure TTestFreeSansFont.TestOS2Data_usLastCharIndex;
  1537. begin
  1538. AssertEquals('Failed on 1', 'FFFF', IntToHex(FI.OS2Data.usLastCharIndex, 4));
  1539. end;
  1540. procedure TTestFreeSansFont.TestOS2Data_sTypoAscender;
  1541. begin
  1542. AssertEquals('Failed on 1', 800, FI.OS2Data.sTypoAscender);
  1543. end;
  1544. procedure TTestFreeSansFont.TestOS2Data_sTypoDescender;
  1545. begin
  1546. AssertEquals('Failed on 1', -200, FI.OS2Data.sTypoDescender);
  1547. end;
  1548. procedure TTestFreeSansFont.TestOS2Data_sTypoLineGap;
  1549. begin
  1550. AssertEquals('Failed on 1', 100, FI.OS2Data.sTypoLineGap);
  1551. end;
  1552. procedure TTestFreeSansFont.TestOS2Data_usWinAscent;
  1553. begin
  1554. AssertEquals('Failed on 1', 900, FI.OS2Data.usWinAscent);
  1555. end;
  1556. procedure TTestFreeSansFont.TestOS2Data_usWinDescent;
  1557. begin
  1558. AssertEquals('Failed on 1', 300, FI.OS2Data.usWinDescent);
  1559. end;
  1560. procedure TTestFreeSansFont.TestOS2Data_ulCodePageRange1;
  1561. begin
  1562. AssertEquals('Failed on 1', '600001BF', IntToHex(FI.OS2Data.ulCodePageRange1, 8));
  1563. end;
  1564. procedure TTestFreeSansFont.TestOS2Data_ulCodePageRange2;
  1565. begin
  1566. AssertEquals('Failed on 1', 'DFF70000', IntToHex(FI.OS2Data.ulCodePageRange2, 8));
  1567. end;
  1568. procedure TTestFreeSansFont.TestOS2Data_sxHeight;
  1569. begin
  1570. AssertEquals('Failed on 1', 524, FI.OS2Data.sxHeight);
  1571. end;
  1572. procedure TTestFreeSansFont.TestOS2Data_sCapHeight;
  1573. begin
  1574. AssertEquals('Failed on 1', 729, FI.OS2Data.sCapHeight);
  1575. end;
  1576. procedure TTestFreeSansFont.TestOS2Data_usDefaultChar;
  1577. begin
  1578. AssertEquals('Failed on 1', '0000', IntToHex(FI.OS2Data.usDefaultChar, 4));
  1579. end;
  1580. procedure TTestFreeSansFont.TestOS2Data_usBreakChar;
  1581. begin
  1582. AssertEquals('Failed on 1', '0020', IntToHex(FI.OS2Data.usBreakChar, 4));
  1583. end;
  1584. procedure TTestFreeSansFont.TestOS2Data_usMaxContext;
  1585. begin
  1586. AssertEquals('Failed on 1', 10, FI.OS2Data.usMaxContext);
  1587. end;
  1588. procedure TTestFreeSansFont.TestPostScript_Format;
  1589. begin
  1590. AssertEquals('Failed on 1', '00020000', IntToHex(FI.PostScript.Format.Version, 8));
  1591. AssertEquals('Failed on 2', 2, FI.PostScript.Format.Major);
  1592. AssertEquals('Failed on 3', 0, FI.PostScript.Format.Minor);
  1593. end;
  1594. procedure TTestFreeSansFont.TestPostScript_ItalicAngle;
  1595. begin
  1596. AssertEquals('Failed on 1', 0.0, FI.PostScript.ItalicAngle);
  1597. end;
  1598. procedure TTestFreeSansFont.TestPostScript_UnderlinePosition;
  1599. begin
  1600. AssertEquals('Failed on 1', -176, FI.PostScript.UnderlinePosition);
  1601. end;
  1602. procedure TTestFreeSansFont.TestPostScript_underlineThickness;
  1603. begin
  1604. AssertEquals('Failed on 1', 50, FI.PostScript.underlineThickness);
  1605. end;
  1606. procedure TTestFreeSansFont.TestPostScript_isFixedPitch;
  1607. begin
  1608. AssertEquals('Failed on 1', 0, FI.PostScript.isFixedPitch);
  1609. end;
  1610. procedure TTestFreeSansFont.TestPostScript_minMemType42;
  1611. begin
  1612. AssertEquals('Failed on 1', 0, FI.PostScript.minMemType42);
  1613. end;
  1614. procedure TTestFreeSansFont.TestPostScript_maxMemType42;
  1615. begin
  1616. AssertEquals('Failed on 1', 0, FI.PostScript.maxMemType42);
  1617. end;
  1618. procedure TTestFreeSansFont.TestPostScript_minMemType1;
  1619. begin
  1620. AssertEquals('Failed on 1', 0, FI.PostScript.minMemType1);
  1621. end;
  1622. procedure TTestFreeSansFont.TestPostScript_maxMemType1;
  1623. begin
  1624. AssertEquals('Failed on 1', 0, FI.PostScript.maxMemType1);
  1625. end;
  1626. procedure TTestFreeSansFont.TestPostScriptName;
  1627. begin
  1628. AssertEquals('Failed on 1', 'FreeSans', FI.PostScriptName);
  1629. end;
  1630. procedure TTestFreeSansFont.TestFamilyName;
  1631. begin
  1632. AssertEquals('Failed on 1', 'FreeSans', FI.FamilyName);
  1633. end;
  1634. procedure TTestFreeSansFont.TestHumanFriendlyName;
  1635. begin
  1636. AssertEquals('Failed on 1', 'FreeSans', FI.HumanFriendlyName);
  1637. end;
  1638. initialization
  1639. RegisterTest({$ifdef fptest}'fpParseTTF',{$endif}TTestEmptyParseTTF{$ifdef fptest}.Suite{$endif});
  1640. RegisterTest({$ifdef fptest}'fpParseTTF',{$endif}TTestLiberationFont{$ifdef fptest}.Suite{$endif});
  1641. RegisterTest({$ifdef fptest}'fpParseTTF',{$endif}TTestFreeSansFont{$ifdef fptest}.Suite{$endif});
  1642. RegisterTest({$ifdef fptest}'fpParseTTF',{$endif}TTestLiberationItalicFont{$ifdef fptest}.Suite{$endif});
  1643. end.