fpparsettf_test.pas 58 KB

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