fpparsettf_test.pas 56 KB

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