fpparsettf_test.pas 57 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 := EncodeDateTime(1904, 1, 1, 0, 0, 0, 0);
  424. //s := FormatDateTime('yyyy-mm-dd hh:nn:ss', dt);
  425. //AssertEquals('Failed on 1', '1904-01-01 00:00:00', s);
  426. //dt := IncSecond(dt, FI.Head.Created);
  427. // The above code equates to using MacToDateTime()
  428. dt := MacToDateTime(FI.Head.Created);
  429. // We don't use this AssertEquals() because it shows a huge Double data-type
  430. // value as the result.
  431. //AssertEquals('Failed on 1', EncodeDateTime(2012, 10, 4, 20, 2, 31, 0), dt);
  432. // Instead we use this - which shows human readable dates.
  433. s := FormatDateTime('yyyy-mm-dd hh:nn:ss', dt);
  434. AssertEquals('Failed on 2', '2012-10-04 20:02:31', s);
  435. end;
  436. procedure TTestLiberationFont.TestHead_Modified;
  437. var
  438. dt: TDateTime;
  439. s: string;
  440. begin
  441. dt := MacToDateTime(FI.Head.Modified);
  442. s := FormatDateTime('yyyy-mm-dd hh:nn:ss', dt);
  443. AssertEquals('Failed on 2', '2012-10-04 20:02:31', s);
  444. end;
  445. procedure TTestLiberationFont.TestHead_BBox_xMin;
  446. begin
  447. AssertEquals('Failed on 1', -1114, FI.Head.BBox[0]);
  448. end;
  449. procedure TTestLiberationFont.TestHead_BBox_yMin;
  450. begin
  451. AssertEquals('Failed on 1', -621, FI.Head.BBox[1]);
  452. end;
  453. procedure TTestLiberationFont.TestHead_BBox_xMax;
  454. begin
  455. AssertEquals('Failed on 1', 2666, FI.Head.BBox[2]);
  456. end;
  457. procedure TTestLiberationFont.TestHead_BBox_yMax;
  458. begin
  459. AssertEquals('Failed on 1', 2007, FI.Head.BBox[3]);
  460. end;
  461. procedure TTestLiberationFont.TestHead_MacStyle;
  462. begin
  463. AssertEquals('Failed on 1', $0000, FI.Head.MacStyle);
  464. end;
  465. procedure TTestLiberationFont.TestHead_LowestRecPPEM;
  466. begin
  467. AssertEquals('Failed on 1', 8, FI.Head.LowestRecPPEM);
  468. end;
  469. procedure TTestLiberationFont.TestHead_FontDirectionHint;
  470. begin
  471. AssertEquals('Failed on 1', 0, FI.Head.FontDirectionHint);
  472. end;
  473. procedure TTestLiberationFont.TestHead_IndexToLocFormat;
  474. begin
  475. AssertEquals('Failed on 1', 1, FI.Head.IndexToLocFormat);
  476. end;
  477. procedure TTestLiberationFont.TestHead_glyphDataFormat;
  478. begin
  479. AssertEquals('Failed on 1', 0, FI.Head.glyphDataFormat);
  480. end;
  481. procedure TTestLiberationFont.TestHHead_TableVersion;
  482. begin
  483. AssertEquals('Failed on 1', '00010000', IntToHex(FI.HHead.TableVersion.Version, 8));
  484. AssertEquals('Failed on 2', 1, FI.HHead.TableVersion.Major);
  485. AssertEquals('Failed on 3', 0, FI.HHead.TableVersion.Minor);
  486. end;
  487. procedure TTestLiberationFont.TestHHead_Ascender;
  488. begin
  489. AssertEquals('Failed on 1', 1854, FI.HHead.Ascender);
  490. end;
  491. procedure TTestLiberationFont.TestHHead_Descender;
  492. begin
  493. AssertEquals('Failed on 1', -434, FI.HHead.Descender);
  494. end;
  495. procedure TTestLiberationFont.TestHHead_LineGap;
  496. begin
  497. AssertEquals('Failed on 1', 67, FI.HHead.LineGap);
  498. end;
  499. procedure TTestLiberationFont.TestHHead_AdvanceWidthMax;
  500. begin
  501. AssertEquals('Failed on 1', 2740, FI.HHead.AdvanceWidthMax);
  502. end;
  503. procedure TTestLiberationFont.TestHHead_MinLeftSideBearing;
  504. begin
  505. AssertEquals('Failed on 1', -1114, FI.HHead.MinLeftSideBearing);
  506. end;
  507. procedure TTestLiberationFont.TestHHead_MinRightSideBearing;
  508. begin
  509. AssertEquals('Failed on 1', -1414, FI.HHead.MinRightSideBearing);
  510. end;
  511. procedure TTestLiberationFont.TestHHead_XMaxExtent;
  512. begin
  513. AssertEquals('Failed on 1', 2666, FI.HHead.XMaxExtent);
  514. end;
  515. procedure TTestLiberationFont.TestHHead_CaretSlopeRise;
  516. begin
  517. AssertEquals('Failed on 1', 1, FI.HHead.CaretSlopeRise);
  518. end;
  519. procedure TTestLiberationFont.TestHHead_CaretSlopeRun;
  520. begin
  521. AssertEquals('Failed on 1', 0, FI.HHead.CaretSlopeRun);
  522. end;
  523. procedure TTestLiberationFont.TestHHead_Reserved;
  524. begin
  525. AssertEquals('Failed on 1', 0, FI.HHead.Reserved[0]);
  526. AssertEquals('Failed on 2', 0, FI.HHead.Reserved[1]);
  527. AssertEquals('Failed on 3', 0, FI.HHead.Reserved[2]);
  528. AssertEquals('Failed on 4', 0, FI.HHead.Reserved[3]);
  529. AssertEquals('Failed on 5', 0, FI.HHead.Reserved[4]);
  530. end;
  531. procedure TTestLiberationFont.TestHHead_metricDataFormat;
  532. begin
  533. AssertEquals('Failed on 1', 0, FI.HHead.metricDataFormat);
  534. end;
  535. procedure TTestLiberationFont.TestHHead_numberOfHMetrics;
  536. begin
  537. AssertEquals('Failed on 1', 2587, FI.HHead.numberOfHMetrics);
  538. end;
  539. procedure TTestLiberationFont.TestCMap_version;
  540. begin
  541. AssertEquals('Failed on 1', '0000', IntToHex(FI.CmapH.Version, 4));
  542. AssertEquals('Failed on 2', 0, FI.CmapH.Version);
  543. end;
  544. procedure TTestLiberationFont.TestCMap_SubTableCount;
  545. begin
  546. AssertEquals('Failed on 1', 3, FI.CmapH.SubTableCount);
  547. end;
  548. procedure TTestLiberationFont.TestCMapSubTables_1;
  549. var
  550. lSubTable: TCmapSubTableEntry;
  551. begin
  552. lSubTable := FI.CmapSubtables[0];
  553. AssertEquals('Failed on 1', 0, lSubTable.PlatformID);
  554. AssertEquals('Failed on 2', 3, lSubTable.EncodingID);
  555. AssertEquals('Failed on 3', '0000001C', IntToHex(lSubTable.Offset, 8));
  556. end;
  557. procedure TTestLiberationFont.TestCMapSubTables_2;
  558. var
  559. lSubTable: TCmapSubTableEntry;
  560. begin
  561. lSubTable := FI.CmapSubtables[1];
  562. AssertEquals('Failed on 1', 1, lSubTable.PlatformID);
  563. AssertEquals('Failed on 2', 0, lSubTable.EncodingID);
  564. AssertEquals('Failed on 3', '00000424', IntToHex(lSubTable.Offset, 8));
  565. end;
  566. procedure TTestLiberationFont.TestCMapSubTables_3;
  567. var
  568. lSubTable: TCmapSubTableEntry;
  569. begin
  570. lSubTable := FI.CmapSubtables[2];
  571. AssertEquals('Failed on 1', 3, lSubTable.PlatformID);
  572. AssertEquals('Failed on 2', 1, lSubTable.EncodingID);
  573. AssertEquals('Failed on 3', '0000001C', IntToHex(lSubTable.Offset, 8));
  574. end;
  575. procedure TTestLiberationFont.TestCmapUnicodeMap_Format;
  576. begin
  577. AssertEquals('Failed on 1', 4, FI.CmapUnicodeMap.Format);
  578. end;
  579. procedure TTestLiberationFont.TestCmapUnicodeMap_Length;
  580. begin
  581. AssertEquals('Failed on 1', 1032, FI.CmapUnicodeMap.Length);
  582. end;
  583. procedure TTestLiberationFont.TestCmapUnicodeMap_SegmentCount2;
  584. begin
  585. AssertEquals('Failed on 1', 254, FI.CmapUnicodeMap.SegmentCount2);
  586. end;
  587. procedure TTestLiberationFont.TestCmapUnicodeMap_SearchRange;
  588. begin
  589. AssertEquals('Failed on 1', 128, FI.CmapUnicodeMap.SearchRange);
  590. end;
  591. procedure TTestLiberationFont.TestCmapUnicodeMap_EntrySelector;
  592. begin
  593. AssertEquals('Failed on 1', 6, FI.CmapUnicodeMap.EntrySelector);
  594. end;
  595. procedure TTestLiberationFont.TestCmapUnicodeMap_RangeShift;
  596. begin
  597. AssertEquals('Failed on 1', 126, FI.CmapUnicodeMap.RangeShift);
  598. end;
  599. procedure TTestLiberationFont.TestUnicodeMapSegment_1_StartCode;
  600. begin
  601. AssertEquals('Failed on 1', '0020', IntToHex(FI.CmapUnicodeMapSegments[0].StartCode, 4));
  602. end;
  603. procedure TTestLiberationFont.TestUnicodeMapSegment_1_EndCode;
  604. begin
  605. AssertEquals('Failed on 1', '007E', IntToHex(FI.CmapUnicodeMapSegments[0].EndCode, 4));
  606. end;
  607. procedure TTestLiberationFont.TestUnicodeMapSegment_1_IDDelta;
  608. begin
  609. AssertEquals('Failed on 1', -29, FI.CmapUnicodeMapSegments[0].IDDelta);
  610. end;
  611. procedure TTestLiberationFont.TestUnicodeMapSegment_1_IDRangeOffset;
  612. begin
  613. AssertEquals('Failed on 1', 0, FI.CmapUnicodeMapSegments[0].IDRangeOffset);
  614. end;
  615. procedure TTestLiberationFont.TestUnicodeMapSegment_2_StartCode;
  616. begin
  617. AssertEquals('Failed on 1', '00A0', IntToHex(FI.CmapUnicodeMapSegments[1].StartCode, 4));
  618. end;
  619. procedure TTestLiberationFont.TestUnicodeMapSegment_2_EndCode;
  620. begin
  621. AssertEquals('Failed on 1', '036F', IntToHex(FI.CmapUnicodeMapSegments[1].EndCode, 4));
  622. end;
  623. procedure TTestLiberationFont.TestUnicodeMapSegment_2_IDDelta;
  624. begin
  625. AssertEquals('Failed on 1', -62, FI.CmapUnicodeMapSegments[1].IDDelta);
  626. end;
  627. procedure TTestLiberationFont.TestUnicodeMapSegment_2_IDRangeOffset;
  628. begin
  629. AssertEquals('Failed on 1', 0, FI.CmapUnicodeMapSegments[1].IDRangeOffset);
  630. end;
  631. procedure TTestLiberationFont.TestUnicodeMapSegment_127_StartCode;
  632. begin
  633. AssertEquals('Failed on 1', 'FFFF', IntToHex(FI.CmapUnicodeMapSegments[126].StartCode, 4));
  634. end;
  635. procedure TTestLiberationFont.TestUnicodeMapSegment_127_EndCode;
  636. begin
  637. AssertEquals('Failed on 1', 'FFFF', IntToHex(FI.CmapUnicodeMapSegments[126].EndCode, 4));
  638. end;
  639. procedure TTestLiberationFont.TestUnicodeMapSegment_127_IDDelta;
  640. begin
  641. AssertEquals('Failed on 1', 1, FI.CmapUnicodeMapSegments[126].IDDelta);
  642. end;
  643. procedure TTestLiberationFont.TestUnicodeMapSegment_127_IDRangeOffset;
  644. begin
  645. AssertEquals('Failed on 1', 0, FI.CmapUnicodeMapSegments[126].IDRangeOffset);
  646. end;
  647. procedure TTestLiberationFont.TestWidths_Size;
  648. begin
  649. AssertEquals('Failed on 1', 2587, Length(FI.Widths));
  650. end;
  651. procedure TTestLiberationFont.TestWidths_HorMetric_0_AdvanceWidth;
  652. begin
  653. AssertEquals('Failed on 1', 1536, FI.Widths[0].AdvanceWidth);
  654. end;
  655. procedure TTestLiberationFont.TestWidths_HorMetric_0_LSB;
  656. begin
  657. AssertEquals('Failed on 1', 205, FI.Widths[0].LSB);
  658. end;
  659. procedure TTestLiberationFont.TestWidths_HorMetric_1_AdvanceWidth;
  660. begin
  661. AssertEquals('Failed on 1', 0, FI.Widths[1].AdvanceWidth);
  662. end;
  663. procedure TTestLiberationFont.TestWidths_HorMetric_1_LSB;
  664. begin
  665. AssertEquals('Failed on 1', 0, FI.Widths[1].LSB);
  666. end;
  667. procedure TTestLiberationFont.TestWidths_HorMetric_2586_AdvanceWidth;
  668. begin
  669. AssertEquals('Failed on 1', 1140, FI.Widths[2586].AdvanceWidth);
  670. end;
  671. procedure TTestLiberationFont.TestWidths_HorMetric_2586_LSB;
  672. begin
  673. AssertEquals('Failed on 1', 86, FI.Widths[2586].LSB);
  674. end;
  675. procedure TTestLiberationFont.TestMaxP_VersionNumber;
  676. begin
  677. AssertEquals('Failed on 1', '00010000', IntToHex(FI.MaxP.VersionNumber.Version, 8));
  678. AssertEquals('Failed on 2', 1, FI.MaxP.VersionNumber.Major);
  679. AssertEquals('Failed on 3', 0, FI.MaxP.VersionNumber.Minor);
  680. end;
  681. procedure TTestLiberationFont.TestMaxP_numGlyphs;
  682. begin
  683. AssertEquals('Failed on 1', 2587, FI.MaxP.numGlyphs);
  684. end;
  685. procedure TTestLiberationFont.TestMaxP_maxPoints;
  686. begin
  687. AssertEquals('Failed on 1', 338, FI.MaxP.maxPoints);
  688. end;
  689. procedure TTestLiberationFont.TestMaxP_maxContours;
  690. begin
  691. AssertEquals('Failed on 1', 84, FI.MaxP.maxContours);
  692. end;
  693. procedure TTestLiberationFont.TestMaxP_maxCompositePoints;
  694. begin
  695. AssertEquals('Failed on 1', 92, FI.MaxP.maxCompositePoints);
  696. end;
  697. procedure TTestLiberationFont.TestMaxP_maxCompositeContours;
  698. begin
  699. AssertEquals('Failed on 1', 6, FI.MaxP.maxCompositeContours);
  700. end;
  701. procedure TTestLiberationFont.TestMaxP_maxZones;
  702. begin
  703. AssertEquals('Failed on 1', 2, FI.MaxP.maxZones);
  704. end;
  705. procedure TTestLiberationFont.TestMaxP_maxTwilightPoints;
  706. begin
  707. AssertEquals('Failed on 1', 16, FI.MaxP.maxTwilightPoints);
  708. end;
  709. procedure TTestLiberationFont.TestMaxP_maxStorage;
  710. begin
  711. AssertEquals('Failed on 1', 47, FI.MaxP.maxStorage);
  712. end;
  713. procedure TTestLiberationFont.TestMaxP_maxFunctionDefs;
  714. begin
  715. AssertEquals('Failed on 1', 92, FI.MaxP.maxFunctionDefs);
  716. end;
  717. procedure TTestLiberationFont.TestMaxP_maxInstructionDefs;
  718. begin
  719. AssertEquals('Failed on 1', 0, FI.MaxP.maxInstructionDefs);
  720. end;
  721. procedure TTestLiberationFont.TestMaxP_maxStackElements;
  722. begin
  723. AssertEquals('Failed on 1', 676, FI.MaxP.maxStackElements);
  724. end;
  725. procedure TTestLiberationFont.TestMaxP_maxSizeOfInstructions;
  726. begin
  727. AssertEquals('Failed on 1', 516, FI.MaxP.maxSizeOfInstructions);
  728. end;
  729. procedure TTestLiberationFont.TestMaxP_maxComponentElements;
  730. begin
  731. AssertEquals('Failed on 1', 4, FI.MaxP.maxComponentElements);
  732. end;
  733. procedure TTestLiberationFont.TestMaxP_maxComponentDepth;
  734. begin
  735. AssertEquals('Failed on 1', 1, FI.MaxP.maxComponentDepth);
  736. end;
  737. procedure TTestLiberationFont.TestOS2Data_version;
  738. begin
  739. AssertEquals('Failed on 1', 3, FI.OS2Data.version);
  740. end;
  741. procedure TTestLiberationFont.TestOS2Data_xAvgCharWidth;
  742. begin
  743. AssertEquals('Failed on 1', 1186, FI.OS2Data.xAvgCharWidth);
  744. end;
  745. procedure TTestLiberationFont.TestOS2Data_usWeightClass;
  746. begin
  747. AssertEquals('Failed on 1', 400, FI.OS2Data.usWeightClass);
  748. end;
  749. procedure TTestLiberationFont.TestOS2Data_usWidthClass;
  750. begin
  751. AssertEquals('Failed on 1', 5, FI.OS2Data.usWidthClass);
  752. end;
  753. procedure TTestLiberationFont.TestOS2Data_fsType;
  754. begin
  755. AssertEquals('Failed on 1', '0000', IntToHex(FI.OS2Data.fsType, 4));
  756. end;
  757. procedure TTestLiberationFont.TestOS2Data_ySubscriptXSize;
  758. begin
  759. AssertEquals('Failed on 1', 1434, FI.OS2Data.ySubscriptXSize);
  760. end;
  761. procedure TTestLiberationFont.TestOS2Data_ySubscriptYSize;
  762. begin
  763. AssertEquals('Failed on 1', 1331, FI.OS2Data.ySubscriptYSize);
  764. end;
  765. procedure TTestLiberationFont.TestOS2Data_ySubscriptXOffset;
  766. begin
  767. AssertEquals('Failed on 1', 0, FI.OS2Data.ySubscriptXOffset);
  768. end;
  769. procedure TTestLiberationFont.TestOS2Data_ySubscriptYOffset;
  770. begin
  771. AssertEquals('Failed on 1', 283, FI.OS2Data.ySubscriptYOffset);
  772. end;
  773. procedure TTestLiberationFont.TestOS2Data_ySuperscriptXSize;
  774. begin
  775. AssertEquals('Failed on 1', 1434, FI.OS2Data.ySuperscriptXSize);
  776. end;
  777. procedure TTestLiberationFont.TestOS2Data_ySuperscriptYSize;
  778. begin
  779. AssertEquals('Failed on 1', 1331, FI.OS2Data.ySuperscriptYSize);
  780. end;
  781. procedure TTestLiberationFont.TestOS2Data_ySuperscriptXOffset;
  782. begin
  783. AssertEquals('Failed on 1', 0, FI.OS2Data.ySuperscriptXOffset);
  784. end;
  785. procedure TTestLiberationFont.TestOS2Data_ySuperscriptYOffset;
  786. begin
  787. AssertEquals('Failed on 1', 977, FI.OS2Data.ySuperscriptYOffset);
  788. end;
  789. procedure TTestLiberationFont.TestOS2Data_yStrikeoutSize;
  790. begin
  791. AssertEquals('Failed on 1', 102, FI.OS2Data.yStrikeoutSize);
  792. end;
  793. procedure TTestLiberationFont.TestOS2Data_yStrikeoutPosition;
  794. begin
  795. AssertEquals('Failed on 1', 530, FI.OS2Data.yStrikeoutPosition);
  796. end;
  797. procedure TTestLiberationFont.TestOS2Data_sFamilyClass;
  798. begin
  799. AssertEquals('Failed on 1', 5, Lo(FI.OS2Data.sFamilyClass));
  800. AssertEquals('Failed on 2', 8, Hi(FI.OS2Data.sFamilyClass));
  801. AssertEquals('Failed on 3', '0805', IntToHex(FI.OS2Data.sFamilyClass, 4));
  802. end;
  803. procedure TTestLiberationFont.TestOS2Data_Panose;
  804. begin
  805. AssertEquals('Failed on 1', 2, FI.OS2Data.panose[0]);
  806. AssertEquals('Failed on 2', 11, FI.OS2Data.panose[1]);
  807. AssertEquals('Failed on 3', 6, FI.OS2Data.panose[2]);
  808. AssertEquals('Failed on 4', 4, FI.OS2Data.panose[3]);
  809. AssertEquals('Failed on 5', 2, FI.OS2Data.panose[4]);
  810. AssertEquals('Failed on 6', 2, FI.OS2Data.panose[5]);
  811. AssertEquals('Failed on 7', 2, FI.OS2Data.panose[6]);
  812. AssertEquals('Failed on 8', 2, FI.OS2Data.panose[7]);
  813. AssertEquals('Failed on 9', 2, FI.OS2Data.panose[8]);
  814. AssertEquals('Failed on 10', 4, FI.OS2Data.panose[9]);
  815. end;
  816. procedure TTestLiberationFont.TestOS2Data_ulUnicodeRange1;
  817. begin
  818. AssertEquals('Failed on 1', '1110 0000 0000 0000 0000 1010 1111 1111', IntToBin(FI.OS2Data.ulUnicodeRange1, 32, 4));
  819. AssertEquals('Failed on 2', 'E0000AFF', IntToHex(FI.OS2Data.ulUnicodeRange1, 8));
  820. end;
  821. procedure TTestLiberationFont.TestOS2Data_ulUnicodeRange2;
  822. begin
  823. AssertEquals('Failed on 1', '0101 0000 0000 0000 0111 1000 1111 1111', IntToBin(FI.OS2Data.ulUnicodeRange2, 32, 4));
  824. AssertEquals('Failed on 2', '500078FF', IntToHex(FI.OS2Data.ulUnicodeRange2, 8));
  825. end;
  826. procedure TTestLiberationFont.TestOS2Data_ulUnicodeRange3;
  827. begin
  828. AssertEquals('Failed on 1', '0000 0000 0000 0000 0000 0000 0010 0001', IntToBin(FI.OS2Data.ulUnicodeRange3, 32, 4));
  829. AssertEquals('Failed on 2', '00000021', IntToHex(FI.OS2Data.ulUnicodeRange3, 8));
  830. end;
  831. procedure TTestLiberationFont.TestOS2Data_ulUnicodeRange4;
  832. begin
  833. AssertEquals('Failed on 1', '0000 0000 0000 0000 0000 0000 0000 0000', IntToBin(FI.OS2Data.ulUnicodeRange4, 32, 4));
  834. AssertEquals('Failed on 2', '00000000', IntToHex(FI.OS2Data.ulUnicodeRange4, 8));
  835. end;
  836. procedure TTestLiberationFont.TestOS2Data_achVendID;
  837. var
  838. s: string;
  839. begin
  840. s := FI.OS2Data.achVendID[0] + FI.OS2Data.achVendID[1] + FI.OS2Data.achVendID[2] +
  841. FI.OS2Data.achVendID[3];
  842. AssertEquals('Failed on 1', '1ASC', s);
  843. end;
  844. procedure TTestLiberationFont.TestOS2Data_fsSelection;
  845. begin
  846. AssertEquals('Failed on 1', '0040', IntToHex(FI.OS2Data.fsSelection, 4));
  847. end;
  848. procedure TTestLiberationFont.TestOS2Data_usFirstCharIndex;
  849. begin
  850. AssertEquals('Failed on 1', '0020', IntToHex(FI.OS2Data.usFirstCharIndex, 4));
  851. end;
  852. procedure TTestLiberationFont.TestOS2Data_usLastCharIndex;
  853. begin
  854. AssertEquals('Failed on 1', 'FFFC', IntToHex(FI.OS2Data.usLastCharIndex, 4));
  855. end;
  856. procedure TTestLiberationFont.TestOS2Data_sTypoAscender;
  857. begin
  858. AssertEquals('Failed on 1', 1491, FI.OS2Data.sTypoAscender);
  859. end;
  860. procedure TTestLiberationFont.TestOS2Data_sTypoDescender;
  861. begin
  862. AssertEquals('Failed on 1', -431, FI.OS2Data.sTypoDescender);
  863. end;
  864. procedure TTestLiberationFont.TestOS2Data_sTypoLineGap;
  865. begin
  866. AssertEquals('Failed on 1', 307, FI.OS2Data.sTypoLineGap);
  867. end;
  868. procedure TTestLiberationFont.TestOS2Data_usWinAscent;
  869. begin
  870. AssertEquals('Failed on 1', 1854, FI.OS2Data.usWinAscent);
  871. end;
  872. procedure TTestLiberationFont.TestOS2Data_usWinDescent;
  873. begin
  874. AssertEquals('Failed on 1', 434, FI.OS2Data.usWinDescent);
  875. end;
  876. procedure TTestLiberationFont.TestOS2Data_ulCodePageRange1;
  877. begin
  878. AssertEquals('Failed on 1', '600001BF', IntToHex(FI.OS2Data.ulCodePageRange1, 8));
  879. end;
  880. procedure TTestLiberationFont.TestOS2Data_ulCodePageRange2;
  881. begin
  882. AssertEquals('Failed on 1', 'DFF70000', IntToHex(FI.OS2Data.ulCodePageRange2, 8));
  883. end;
  884. procedure TTestLiberationFont.TestOS2Data_sxHeight;
  885. begin
  886. AssertEquals('Failed on 1', 1082, FI.OS2Data.sxHeight);
  887. end;
  888. procedure TTestLiberationFont.TestOS2Data_sCapHeight;
  889. begin
  890. AssertEquals('Failed on 1', 1409, FI.OS2Data.sCapHeight);
  891. end;
  892. procedure TTestLiberationFont.TestOS2Data_usDefaultChar;
  893. begin
  894. AssertEquals('Failed on 1', '0000', IntToHex(FI.OS2Data.usDefaultChar, 4));
  895. end;
  896. procedure TTestLiberationFont.TestOS2Data_usBreakChar;
  897. begin
  898. AssertEquals('Failed on 1', '0020', IntToHex(FI.OS2Data.usBreakChar, 4));
  899. end;
  900. procedure TTestLiberationFont.TestOS2Data_usMaxContext;
  901. begin
  902. AssertEquals('Failed on 1', 14, FI.OS2Data.usMaxContext);
  903. end;
  904. procedure TTestLiberationFont.TestPostScript_Format;
  905. begin
  906. AssertEquals('Failed on 1', '00020000', IntToHex(FI.PostScript.Format.Version, 8));
  907. AssertEquals('Failed on 2', 2, FI.PostScript.Format.Major);
  908. AssertEquals('Failed on 3', 0, FI.PostScript.Format.Minor);
  909. end;
  910. procedure TTestLiberationFont.TestPostScript_ItalicAngle;
  911. begin
  912. AssertEquals('Failed on 1', 0.0, FI.PostScript.ItalicAngle);
  913. end;
  914. procedure TTestLiberationFont.TestPostScript_UnderlinePosition;
  915. begin
  916. AssertEquals('Failed on 1', -217, FI.PostScript.UnderlinePosition);
  917. end;
  918. procedure TTestLiberationFont.TestPostScript_underlineThickness;
  919. begin
  920. AssertEquals('Failed on 1', 150, FI.PostScript.underlineThickness);
  921. end;
  922. procedure TTestLiberationFont.TestPostScript_isFixedPitch;
  923. begin
  924. AssertEquals('Failed on 1', 0, FI.PostScript.isFixedPitch);
  925. end;
  926. procedure TTestLiberationFont.TestPostScript_minMemType42;
  927. begin
  928. AssertEquals('Failed on 1', 0, FI.PostScript.minMemType42);
  929. end;
  930. procedure TTestLiberationFont.TestPostScript_maxMemType42;
  931. begin
  932. AssertEquals('Failed on 1', 0, FI.PostScript.maxMemType42);
  933. end;
  934. procedure TTestLiberationFont.TestPostScript_minMemType1;
  935. begin
  936. AssertEquals('Failed on 1', 0, FI.PostScript.minMemType1);
  937. end;
  938. procedure TTestLiberationFont.TestPostScript_maxMemType1;
  939. begin
  940. AssertEquals('Failed on 1', 0, FI.PostScript.maxMemType1);
  941. end;
  942. procedure TTestLiberationFont.TestGetGlyphIndex;
  943. begin
  944. AssertEquals('Failed on 1.1', 67, Ord('C'));
  945. AssertEquals('Failed on 1.2', 111, Ord('o'));
  946. AssertEquals('Failed on 2.1', 38, FI.GetGlyphIndex(Ord('C')));
  947. AssertEquals('Failed on 2.2', 82, FI.GetGlyphIndex(Ord('o')));
  948. AssertEquals('Failed on 2.3', 88, FI.GetGlyphIndex(Ord('u')));
  949. AssertEquals('Failed on 2.4', 87, FI.GetGlyphIndex(Ord('t')));
  950. AssertEquals('Failed on 2.5', 85, FI.GetGlyphIndex(Ord('r')));
  951. AssertEquals('Failed on 2.6', 92, FI.GetGlyphIndex(Ord('y')));
  952. AssertEquals('Failed on 2.7', 3, FI.GetGlyphIndex(Ord(' ')));
  953. AssertEquals('Failed on 2.8', 51, FI.GetGlyphIndex(Ord('P')));
  954. AssertEquals('Failed on 2.9', 80, FI.GetGlyphIndex(Ord('m')));
  955. AssertEquals('Failed on 2.10', 79, FI.GetGlyphIndex(Ord('l')));
  956. AssertEquals('Failed on 2.11', 19, FI.GetGlyphIndex(Ord('0')));
  957. AssertEquals('Failed on 2.12', 20, FI.GetGlyphIndex(Ord('1')));
  958. end;
  959. procedure TTestLiberationFont.TestGetAdvanceWidth;
  960. begin
  961. AssertEquals('Failed on 1', 1479, FI.GetAdvanceWidth(38)); // 'C'
  962. AssertEquals('Failed on 2', 1139, FI.GetAdvanceWidth(82)); // 'o'
  963. AssertEquals('Failed on 3', 1139, FI.GetAdvanceWidth(88)); // 'u'
  964. AssertEquals('Failed on 4', 569, FI.GetAdvanceWidth(87)); // 't'
  965. AssertEquals('Failed on 5', 682, FI.GetAdvanceWidth(85)); // 'r'
  966. AssertEquals('Failed on 6', 1024, FI.GetAdvanceWidth(92)); // 'y'
  967. AssertEquals('Failed on 7', 569, FI.GetAdvanceWidth(3)); // ' '
  968. AssertEquals('Failed on 8', 1366, FI.GetAdvanceWidth(51)); // 'P'
  969. AssertEquals('Failed on 9', 1706, FI.GetAdvanceWidth(80)); // 'm'
  970. AssertEquals('Failed on 10', 455, FI.GetAdvanceWidth(79)); // 'l'
  971. AssertEquals('Failed on 11', 1139, FI.GetAdvanceWidth(19)); // '0'
  972. AssertEquals('Failed on 12', 1139, FI.GetAdvanceWidth(20)); // '1'
  973. end;
  974. { TTestLiberationItalicFont }
  975. procedure TTestLiberationItalicFont.SetUp;
  976. begin
  977. inherited SetUp;
  978. AssertTrue('Failed to find TTF font file <' + cFont3 + '>' + LineEnding +
  979. 'You can download it from [https://fedorahosted.org/releases/l/i/liberation-fonts/liberation-fonts-ttf-2.00.1.tar.gz]',
  980. FileExists(cFont3) = True);
  981. LoadFont(cFont3);
  982. end;
  983. procedure TTestLiberationItalicFont.TestPostScript_ItalicAngle;
  984. begin
  985. AssertEquals('Failed on 1', -12.0, FI.PostScript.ItalicAngle / 65536.0);
  986. AssertEquals('Failed on 2', -12.0, FI.ItalicAngle);
  987. end;
  988. { TTestFreeSansFont }
  989. procedure TTestFreeSansFont.SetUp;
  990. begin
  991. inherited SetUp;
  992. AssertTrue('Failed to find TTF font file <' + cFont2 + '>' + LineEnding +
  993. 'You can download it from [http://ftp.gnu.org/gnu/freefont/freefont-ttf-20140503.zip]',
  994. FileExists(cFont2) = True);
  995. LoadFont(cFont2);
  996. end;
  997. procedure TTestFreeSansFont.TestDirectory_FontVersion;
  998. begin
  999. AssertEquals('Failed on 0', '00010000', IntToHex(FI.Directory.FontVersion.Version, 8));
  1000. AssertEquals('Failed on Major Version', 1, FI.Directory.FontVersion.Major);
  1001. AssertEquals('Failed on Minor Version', 0, FI.Directory.FontVersion.Minor);
  1002. end;
  1003. procedure TTestFreeSansFont.TestDirectory_NumTables;
  1004. begin
  1005. AssertEquals('Failed on Numtables', 19, Int(FI.Directory.Numtables));
  1006. end;
  1007. procedure TTestFreeSansFont.TestDirectory_SearchRange;
  1008. begin
  1009. AssertEquals('Failed on SearchRange', 256, Int(FI.Directory.SearchRange));
  1010. end;
  1011. procedure TTestFreeSansFont.TestDirectory_EntrySelector;
  1012. begin
  1013. AssertEquals('Failed on EntrySelector', 4, Int(FI.Directory.EntrySelector));
  1014. end;
  1015. procedure TTestFreeSansFont.TestDirectory_RangeShift;
  1016. begin
  1017. AssertEquals('Failed on RangeShift', 48, Int(FI.Directory.RangeShift));
  1018. end;
  1019. procedure TTestFreeSansFont.TestHead_FileVersion;
  1020. begin
  1021. AssertEquals('Failed on 1', '00010000', IntToHex(FI.Head.FileVersion.Version, 8));
  1022. AssertEquals('Failed on 2', 1, FI.Head.FileVersion.Major);
  1023. AssertEquals('Failed on 3', 0, FI.Head.FileVersion.Minor);
  1024. end;
  1025. procedure TTestFreeSansFont.TestHead_FontRevision;
  1026. begin
  1027. { graemeg (2015-09-11): Microsoft's ttfdump tools says the version of this
  1028. font is 412.2 and Linux's FontForge says it is 412.2268. I'm making the
  1029. assumption that Microsoft's tool simply truncated the version number to
  1030. one decimal. }
  1031. AssertEquals('Failed on 1', 412, FI.Head.FontRevision.Major);
  1032. AssertEquals('Failed on 2', 2268, FI.Head.FontRevision.Minor);
  1033. end;
  1034. procedure TTestFreeSansFont.TestHead_CheckSumAdjustment;
  1035. begin
  1036. AssertEquals('Failed on 1', $BDD896C1, FI.Head.CheckSumAdjustment);
  1037. end;
  1038. procedure TTestFreeSansFont.TestHead_MagicNumber;
  1039. begin
  1040. AssertEquals('Failed on 1', $5F0F3CF5, FI.Head.MagicNumber);
  1041. end;
  1042. procedure TTestFreeSansFont.TestHead_Flags;
  1043. begin
  1044. AssertEquals('Failed on 1', $021F, FI.Head.Flags);
  1045. end;
  1046. procedure TTestFreeSansFont.TestHead_UnitsPerEm;
  1047. begin
  1048. AssertEquals('Failed on 1', 1000, FI.Head.UnitsPerEm);
  1049. end;
  1050. procedure TTestFreeSansFont.TestHead_Created;
  1051. var
  1052. dt: TDateTime;
  1053. s: string;
  1054. begin
  1055. // LONGDATETIME: Date represented in number of seconds since 12:00 midnight,
  1056. // January 1, 1904. The value is represented as a signed 64-bit integer.
  1057. //dt := EncodeDateTime(1904, 1, 1, 0, 0, 0, 0);
  1058. //s := FormatDateTime('yyyy-mm-dd hh:nn:ss', dt);
  1059. //AssertEquals('Failed on 1', '1904-01-01 00:00:00', s);
  1060. //dt := IncSecond(dt, FI.Head.Created);
  1061. // The above code equates to using MacToDateTime()
  1062. dt := MacToDateTime(FI.Head.Created);
  1063. // We don't use this AssertEquals() because it shows a huge Double data-type
  1064. // value as the result.
  1065. //AssertEquals('Failed on 1', EncodeDateTime(2012, 10, 4, 20, 2, 31, 0), dt);
  1066. // Instead we use this - which shows human readable dates.
  1067. s := FormatDateTime('yyyy-mm-dd hh:nn:ss', dt);
  1068. AssertEquals('Failed on 2', '2012-05-02 22:34:25', s);
  1069. end;
  1070. procedure TTestFreeSansFont.TestHead_Modified;
  1071. var
  1072. dt: TDateTime;
  1073. s: string;
  1074. begin
  1075. dt := MacToDateTime(FI.Head.Modified);
  1076. s := FormatDateTime('yyyy-mm-dd hh:nn:ss', dt);
  1077. AssertEquals('Failed on 2', '2012-05-02 22: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.