fpparsettf_test.pas 56 KB

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