FontMgrTest.cpp 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723
  1. /*
  2. * Copyright 2013 Google Inc.
  3. *
  4. * Use of this source code is governed by a BSD-style license that can be
  5. * found in the LICENSE file.
  6. */
  7. #include "include/core/SkFont.h"
  8. #include "include/core/SkFontMgr.h"
  9. #include "include/core/SkPaint.h"
  10. #include "include/core/SkStream.h"
  11. #include "include/core/SkTypeface.h"
  12. #include "src/core/SkAdvancedTypefaceMetrics.h"
  13. #include "tests/Test.h"
  14. #include "tools/flags/CommandLineFlags.h"
  15. #include <initializer_list>
  16. #include <limits>
  17. #include <vector>
  18. static void test_font(skiatest::Reporter* reporter) {
  19. SkFont font(nullptr, 24);
  20. //REPORTER_ASSERT(reporter, SkTypeface::GetDefaultTypeface() == font.getTypeface());
  21. REPORTER_ASSERT(reporter, 24 == font.getSize());
  22. REPORTER_ASSERT(reporter, 1 == font.getScaleX());
  23. REPORTER_ASSERT(reporter, 0 == font.getSkewX());
  24. uint16_t glyphs[5];
  25. sk_bzero(glyphs, sizeof(glyphs));
  26. // Check that no glyphs are copied with insufficient storage.
  27. int count = font.textToGlyphs("Hello", 5, SkTextEncoding::kUTF8, glyphs, 2);
  28. REPORTER_ASSERT(reporter, 5 == count);
  29. for (const auto glyph : glyphs) { REPORTER_ASSERT(reporter, glyph == 0); }
  30. SkAssertResult(font.textToGlyphs("Hello", 5, SkTextEncoding::kUTF8, glyphs,
  31. SK_ARRAY_COUNT(glyphs)) == count);
  32. for (int i = 0; i < count; ++i) {
  33. REPORTER_ASSERT(reporter, 0 != glyphs[i]);
  34. }
  35. REPORTER_ASSERT(reporter, glyphs[0] != glyphs[1]); // 'h' != 'e'
  36. REPORTER_ASSERT(reporter, glyphs[2] == glyphs[3]); // 'l' == 'l'
  37. const SkFont newFont(font.makeWithSize(36));
  38. REPORTER_ASSERT(reporter, font.getTypefaceOrDefault() == newFont.getTypefaceOrDefault());
  39. REPORTER_ASSERT(reporter, 36 == newFont.getSize()); // double check we haven't changed
  40. REPORTER_ASSERT(reporter, 24 == font.getSize()); // double check we haven't changed
  41. }
  42. /*
  43. * If the font backend is going to "alias" some font names to other fonts
  44. * (e.g. sans -> Arial) then we want to at least get the same typeface back
  45. * if we request the alias name multiple times.
  46. */
  47. static void test_alias_names(skiatest::Reporter* reporter) {
  48. const char* inNames[] = {
  49. "sans", "sans-serif", "serif", "monospace", "times", "helvetica"
  50. };
  51. for (size_t i = 0; i < SK_ARRAY_COUNT(inNames); ++i) {
  52. sk_sp<SkTypeface> first(SkTypeface::MakeFromName(inNames[i], SkFontStyle()));
  53. if (nullptr == first.get()) {
  54. continue;
  55. }
  56. for (int j = 0; j < 10; ++j) {
  57. sk_sp<SkTypeface> face(SkTypeface::MakeFromName(inNames[i], SkFontStyle()));
  58. #if 0
  59. SkString name;
  60. face->getFamilyName(&name);
  61. printf("request %s, received %s, first id %x received %x\n",
  62. inNames[i], name.c_str(), first->uniqueID(), face->uniqueID());
  63. #endif
  64. REPORTER_ASSERT(reporter, first->uniqueID() == face->uniqueID());
  65. }
  66. }
  67. }
  68. static void test_fontiter(skiatest::Reporter* reporter, bool verbose) {
  69. sk_sp<SkFontMgr> fm(SkFontMgr::RefDefault());
  70. int count = fm->countFamilies();
  71. for (int i = 0; i < count; ++i) {
  72. SkString fname;
  73. fm->getFamilyName(i, &fname);
  74. sk_sp<SkFontStyleSet> fnset(fm->matchFamily(fname.c_str()));
  75. sk_sp<SkFontStyleSet> set(fm->createStyleSet(i));
  76. REPORTER_ASSERT(reporter, fnset->count() == set->count());
  77. if (verbose) {
  78. SkDebugf("[%2d] %s\n", i, fname.c_str());
  79. }
  80. for (int j = 0; j < set->count(); ++j) {
  81. SkString sname;
  82. SkFontStyle fs;
  83. set->getStyle(j, &fs, &sname);
  84. // REPORTER_ASSERT(reporter, sname.size() > 0);
  85. sk_sp<SkTypeface> face(set->createTypeface(j));
  86. // REPORTER_ASSERT(reporter, face.get());
  87. if (verbose) {
  88. SkDebugf("\t[%d] %s [%3d %d %d]\n", j, sname.c_str(),
  89. fs.weight(), fs.width(), fs.slant());
  90. }
  91. }
  92. }
  93. }
  94. static void test_match(skiatest::Reporter* reporter) {
  95. sk_sp<SkFontMgr> fm(SkFontMgr::RefDefault());
  96. sk_sp<SkFontStyleSet> styleSet(fm->matchFamily(nullptr));
  97. REPORTER_ASSERT(reporter, styleSet);
  98. }
  99. static void test_matchStyleCSS3(skiatest::Reporter* reporter) {
  100. static const SkFontStyle invalidFontStyle(101, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
  101. class TestTypeface : public SkTypeface {
  102. public:
  103. TestTypeface(const SkFontStyle& fontStyle) : SkTypeface(fontStyle, false){}
  104. protected:
  105. std::unique_ptr<SkStreamAsset> onOpenStream(int* ttcIndex) const override { return nullptr; }
  106. sk_sp<SkTypeface> onMakeClone(const SkFontArguments& args) const override {
  107. return sk_ref_sp(this);
  108. }
  109. SkScalerContext* onCreateScalerContext(const SkScalerContextEffects&,
  110. const SkDescriptor*) const override {
  111. return nullptr;
  112. }
  113. void onFilterRec(SkScalerContextRec*) const override { }
  114. std::unique_ptr<SkAdvancedTypefaceMetrics> onGetAdvancedMetrics() const override {
  115. return nullptr;
  116. }
  117. void onGetFontDescriptor(SkFontDescriptor*, bool*) const override { }
  118. void onCharsToGlyphs(const SkUnichar* chars, int count, SkGlyphID glyphs[]) const override {
  119. sk_bzero(glyphs, count * sizeof(glyphs[0]));
  120. }
  121. int onCountGlyphs() const override { return 0; }
  122. void getPostScriptGlyphNames(SkString*) const override {}
  123. void getGlyphToUnicodeMap(SkUnichar*) const override {}
  124. int onGetUPEM() const override { return 0; }
  125. class EmptyLocalizedStrings : public SkTypeface::LocalizedStrings {
  126. public:
  127. bool next(SkTypeface::LocalizedString*) override { return false; }
  128. };
  129. void onGetFamilyName(SkString* familyName) const override {
  130. familyName->reset();
  131. }
  132. SkTypeface::LocalizedStrings* onCreateFamilyNameIterator() const override {
  133. return new EmptyLocalizedStrings;
  134. }
  135. int onGetVariationDesignPosition(
  136. SkFontArguments::VariationPosition::Coordinate coordinates[],
  137. int coordinateCount) const override
  138. {
  139. return 0;
  140. }
  141. int onGetVariationDesignParameters(SkFontParameters::Variation::Axis parameters[],
  142. int parameterCount) const override
  143. {
  144. return -1;
  145. }
  146. int onGetTableTags(SkFontTableTag tags[]) const override { return 0; }
  147. size_t onGetTableData(SkFontTableTag, size_t, size_t, void*) const override {
  148. return 0;
  149. }
  150. };
  151. class TestFontStyleSet : public SkFontStyleSet {
  152. public:
  153. TestFontStyleSet(std::initializer_list<SkFontStyle> styles) : fStyles(styles) {}
  154. int count() override { return static_cast<int>(fStyles.size()); }
  155. void getStyle(int index, SkFontStyle* style, SkString*) override {
  156. if (style) {
  157. *style = fStyles[index];
  158. }
  159. }
  160. SkTypeface* createTypeface(int index) override {
  161. if (index < 0 || this->count() <= index) {
  162. return new TestTypeface(invalidFontStyle);
  163. }
  164. return new TestTypeface(fStyles[index]);
  165. }
  166. SkTypeface* matchStyle(const SkFontStyle& pattern) override {
  167. return this->matchStyleCSS3(pattern);
  168. }
  169. private:
  170. std::vector<SkFontStyle> fStyles;
  171. };
  172. SkFontStyle condensed_normal_100(SkFontStyle::kThin_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kUpright_Slant);
  173. SkFontStyle condensed_normal_900(SkFontStyle::kBlack_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kUpright_Slant);
  174. SkFontStyle condensed_italic_100(SkFontStyle::kThin_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kItalic_Slant);
  175. SkFontStyle condensed_italic_900(SkFontStyle::kBlack_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kItalic_Slant);
  176. SkFontStyle condensed_obliqu_100(SkFontStyle::kThin_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kOblique_Slant);
  177. SkFontStyle condensed_obliqu_900(SkFontStyle::kBlack_Weight, SkFontStyle::kCondensed_Width, SkFontStyle::kOblique_Slant);
  178. SkFontStyle expanded_normal_100(SkFontStyle::kThin_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kUpright_Slant);
  179. SkFontStyle expanded_normal_900(SkFontStyle::kBlack_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kUpright_Slant);
  180. SkFontStyle expanded_italic_100(SkFontStyle::kThin_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kItalic_Slant);
  181. SkFontStyle expanded_italic_900(SkFontStyle::kBlack_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kItalic_Slant);
  182. SkFontStyle expanded_obliqu_100(SkFontStyle::kThin_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kOblique_Slant);
  183. SkFontStyle expanded_obliqu_900(SkFontStyle::kBlack_Weight, SkFontStyle::kExpanded_Width, SkFontStyle::kOblique_Slant);
  184. SkFontStyle normal_normal_100(SkFontStyle::kThin_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
  185. SkFontStyle normal_normal_300(SkFontStyle::kLight_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
  186. SkFontStyle normal_normal_400(SkFontStyle::kNormal_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
  187. SkFontStyle normal_normal_500(SkFontStyle::kMedium_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
  188. SkFontStyle normal_normal_600(SkFontStyle::kSemiBold_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
  189. SkFontStyle normal_normal_900(SkFontStyle::kBlack_Weight, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant);
  190. struct StyleSetTest {
  191. TestFontStyleSet styleSet;
  192. struct Case {
  193. SkFontStyle pattern;
  194. SkFontStyle expectedResult;
  195. };
  196. std::vector<Case> cases;
  197. } tests[] = {
  198. {
  199. { condensed_normal_100,condensed_normal_900,condensed_italic_100,condensed_italic_900,
  200. expanded_normal_100, expanded_normal_900, expanded_italic_100, expanded_italic_900 },
  201. {
  202. { condensed_normal_100, condensed_normal_100 },
  203. { condensed_normal_900, condensed_normal_900 },
  204. { condensed_italic_100, condensed_italic_100 },
  205. { condensed_italic_900, condensed_italic_900 },
  206. { expanded_normal_100, expanded_normal_100 },
  207. { expanded_normal_900, expanded_normal_900 },
  208. { expanded_italic_100, expanded_italic_100 },
  209. { expanded_italic_900, expanded_italic_900 },
  210. },
  211. },
  212. {
  213. { condensed_normal_100,condensed_italic_100,expanded_normal_100,expanded_italic_100 },
  214. {
  215. { condensed_normal_100, condensed_normal_100 },
  216. { condensed_normal_900, condensed_normal_100 },
  217. { condensed_italic_100, condensed_italic_100 },
  218. { condensed_italic_900, condensed_italic_100 },
  219. { expanded_normal_100, expanded_normal_100 },
  220. { expanded_normal_900, expanded_normal_100 },
  221. { expanded_italic_100, expanded_italic_100 },
  222. { expanded_italic_900, expanded_italic_100 },
  223. },
  224. },
  225. {
  226. { condensed_normal_900,condensed_italic_900,expanded_normal_900,expanded_italic_900 },
  227. {
  228. { condensed_normal_100, condensed_normal_900 },
  229. { condensed_normal_900, condensed_normal_900 },
  230. { condensed_italic_100, condensed_italic_900 },
  231. { condensed_italic_900, condensed_italic_900 },
  232. { expanded_normal_100, expanded_normal_900 },
  233. { expanded_normal_900, expanded_normal_900 },
  234. { expanded_italic_100, expanded_italic_900 },
  235. { expanded_italic_900, expanded_italic_900 },
  236. },
  237. },
  238. {
  239. { condensed_normal_100,condensed_normal_900,expanded_normal_100,expanded_normal_900 },
  240. {
  241. { condensed_normal_100, condensed_normal_100 },
  242. { condensed_normal_900, condensed_normal_900 },
  243. { condensed_italic_100, condensed_normal_100 },
  244. { condensed_italic_900, condensed_normal_900 },
  245. { expanded_normal_100, expanded_normal_100 },
  246. { expanded_normal_900, expanded_normal_900 },
  247. { expanded_italic_100, expanded_normal_100 },
  248. { expanded_italic_900, expanded_normal_900 },
  249. },
  250. },
  251. {
  252. { condensed_normal_100,expanded_normal_100 },
  253. {
  254. { condensed_normal_100, condensed_normal_100 },
  255. { condensed_normal_900, condensed_normal_100 },
  256. { condensed_italic_100, condensed_normal_100 },
  257. { condensed_italic_900, condensed_normal_100 },
  258. { expanded_normal_100, expanded_normal_100 },
  259. { expanded_normal_900, expanded_normal_100 },
  260. { expanded_italic_100, expanded_normal_100 },
  261. { expanded_italic_900, expanded_normal_100 },
  262. },
  263. },
  264. {
  265. { condensed_normal_900,expanded_normal_900 },
  266. {
  267. { condensed_normal_100, condensed_normal_900 },
  268. { condensed_normal_900, condensed_normal_900 },
  269. { condensed_italic_100, condensed_normal_900 },
  270. { condensed_italic_900, condensed_normal_900 },
  271. { expanded_normal_100, expanded_normal_900 },
  272. { expanded_normal_900, expanded_normal_900 },
  273. { expanded_italic_100, expanded_normal_900 },
  274. { expanded_italic_900, expanded_normal_900 },
  275. },
  276. },
  277. {
  278. { condensed_italic_100,condensed_italic_900,expanded_italic_100,expanded_italic_900 },
  279. {
  280. { condensed_normal_100, condensed_italic_100 },
  281. { condensed_normal_900, condensed_italic_900 },
  282. { condensed_italic_100, condensed_italic_100 },
  283. { condensed_italic_900, condensed_italic_900 },
  284. { expanded_normal_100, expanded_italic_100 },
  285. { expanded_normal_900, expanded_italic_900 },
  286. { expanded_italic_100, expanded_italic_100 },
  287. { expanded_italic_900, expanded_italic_900 },
  288. },
  289. },
  290. {
  291. { condensed_italic_100,expanded_italic_100 },
  292. {
  293. { condensed_normal_100, condensed_italic_100 },
  294. { condensed_normal_900, condensed_italic_100 },
  295. { condensed_italic_100, condensed_italic_100 },
  296. { condensed_italic_900, condensed_italic_100 },
  297. { expanded_normal_100, expanded_italic_100 },
  298. { expanded_normal_900, expanded_italic_100 },
  299. { expanded_italic_100, expanded_italic_100 },
  300. { expanded_italic_900, expanded_italic_100 },
  301. },
  302. },
  303. {
  304. { condensed_italic_900,expanded_italic_900 },
  305. {
  306. { condensed_normal_100, condensed_italic_900 },
  307. { condensed_normal_900, condensed_italic_900 },
  308. { condensed_italic_100, condensed_italic_900 },
  309. { condensed_italic_900, condensed_italic_900 },
  310. { expanded_normal_100, expanded_italic_900 },
  311. { expanded_normal_900, expanded_italic_900 },
  312. { expanded_italic_100, expanded_italic_900 },
  313. { expanded_italic_900, expanded_italic_900 },
  314. },
  315. },
  316. {
  317. { condensed_normal_100,condensed_normal_900,condensed_italic_100,condensed_italic_900 },
  318. {
  319. { condensed_normal_100, condensed_normal_100 },
  320. { condensed_normal_900, condensed_normal_900 },
  321. { condensed_italic_100, condensed_italic_100 },
  322. { condensed_italic_900, condensed_italic_900 },
  323. { expanded_normal_100, condensed_normal_100 },
  324. { expanded_normal_900, condensed_normal_900 },
  325. { expanded_italic_100, condensed_italic_100 },
  326. { expanded_italic_900, condensed_italic_900 },
  327. },
  328. },
  329. {
  330. { condensed_normal_100,condensed_italic_100 },
  331. {
  332. { condensed_normal_100, condensed_normal_100 },
  333. { condensed_normal_900, condensed_normal_100 },
  334. { condensed_italic_100, condensed_italic_100 },
  335. { condensed_italic_900, condensed_italic_100 },
  336. { expanded_normal_100, condensed_normal_100 },
  337. { expanded_normal_900, condensed_normal_100 },
  338. { expanded_italic_100, condensed_italic_100 },
  339. { expanded_italic_900, condensed_italic_100 },
  340. },
  341. },
  342. {
  343. { condensed_normal_900,condensed_italic_900 },
  344. {
  345. { condensed_normal_100, condensed_normal_900 },
  346. { condensed_normal_900, condensed_normal_900 },
  347. { condensed_italic_100, condensed_italic_900 },
  348. { condensed_italic_900, condensed_italic_900 },
  349. { expanded_normal_100, condensed_normal_900 },
  350. { expanded_normal_900, condensed_normal_900 },
  351. { expanded_italic_100, condensed_italic_900 },
  352. { expanded_italic_900, condensed_italic_900 },
  353. },
  354. },
  355. {
  356. { condensed_normal_100,condensed_normal_900 },
  357. {
  358. { condensed_normal_100, condensed_normal_100 },
  359. { condensed_normal_900, condensed_normal_900 },
  360. { condensed_italic_100, condensed_normal_100 },
  361. { condensed_italic_900, condensed_normal_900 },
  362. { expanded_normal_100, condensed_normal_100 },
  363. { expanded_normal_900, condensed_normal_900 },
  364. { expanded_italic_100, condensed_normal_100 },
  365. { expanded_italic_900, condensed_normal_900 },
  366. },
  367. },
  368. {
  369. { condensed_normal_100 },
  370. {
  371. { condensed_normal_100, condensed_normal_100 },
  372. { condensed_normal_900, condensed_normal_100 },
  373. { condensed_italic_100, condensed_normal_100 },
  374. { condensed_italic_900, condensed_normal_100 },
  375. { expanded_normal_100, condensed_normal_100 },
  376. { expanded_normal_900, condensed_normal_100 },
  377. { expanded_italic_100, condensed_normal_100 },
  378. { expanded_italic_900, condensed_normal_100 },
  379. },
  380. },
  381. {
  382. { condensed_normal_900 },
  383. {
  384. { condensed_normal_100, condensed_normal_900 },
  385. { condensed_normal_900, condensed_normal_900 },
  386. { condensed_italic_100, condensed_normal_900 },
  387. { condensed_italic_900, condensed_normal_900 },
  388. { expanded_normal_100, condensed_normal_900 },
  389. { expanded_normal_900, condensed_normal_900 },
  390. { expanded_italic_100, condensed_normal_900 },
  391. { expanded_italic_900, condensed_normal_900 },
  392. },
  393. },
  394. {
  395. { condensed_italic_100,condensed_italic_900 },
  396. {
  397. { condensed_normal_100, condensed_italic_100 },
  398. { condensed_normal_900, condensed_italic_900 },
  399. { condensed_italic_100, condensed_italic_100 },
  400. { condensed_italic_900, condensed_italic_900 },
  401. { expanded_normal_100, condensed_italic_100 },
  402. { expanded_normal_900, condensed_italic_900 },
  403. { expanded_italic_100, condensed_italic_100 },
  404. { expanded_italic_900, condensed_italic_900 },
  405. },
  406. },
  407. {
  408. { condensed_italic_100 },
  409. {
  410. { condensed_normal_100, condensed_italic_100 },
  411. { condensed_normal_900, condensed_italic_100 },
  412. { condensed_italic_100, condensed_italic_100 },
  413. { condensed_italic_900, condensed_italic_100 },
  414. { expanded_normal_100, condensed_italic_100 },
  415. { expanded_normal_900, condensed_italic_100 },
  416. { expanded_italic_100, condensed_italic_100 },
  417. { expanded_italic_900, condensed_italic_100 },
  418. },
  419. },
  420. {
  421. { condensed_italic_900 },
  422. {
  423. { condensed_normal_100, condensed_italic_900 },
  424. { condensed_normal_900, condensed_italic_900 },
  425. { condensed_italic_100, condensed_italic_900 },
  426. { condensed_italic_900, condensed_italic_900 },
  427. { expanded_normal_100, condensed_italic_900 },
  428. { expanded_normal_900, condensed_italic_900 },
  429. { expanded_italic_100, condensed_italic_900 },
  430. { expanded_italic_900, condensed_italic_900 },
  431. },
  432. },
  433. {
  434. { expanded_normal_100,expanded_normal_900,
  435. expanded_italic_100,expanded_italic_900 },
  436. {
  437. { condensed_normal_100, expanded_normal_100 },
  438. { condensed_normal_900, expanded_normal_900 },
  439. { condensed_italic_100, expanded_italic_100 },
  440. { condensed_italic_900, expanded_italic_900 },
  441. { condensed_obliqu_100, expanded_italic_100 },
  442. { condensed_obliqu_900, expanded_italic_900 },
  443. { expanded_normal_100, expanded_normal_100 },
  444. { expanded_normal_900, expanded_normal_900 },
  445. { expanded_italic_100, expanded_italic_100 },
  446. { expanded_italic_900, expanded_italic_900 },
  447. { expanded_obliqu_100, expanded_italic_100 },
  448. { expanded_obliqu_900, expanded_italic_900 },
  449. },
  450. },
  451. {
  452. { expanded_normal_100,expanded_italic_100 },
  453. {
  454. { condensed_normal_100, expanded_normal_100 },
  455. { condensed_normal_900, expanded_normal_100 },
  456. { condensed_italic_100, expanded_italic_100 },
  457. { condensed_italic_900, expanded_italic_100 },
  458. { expanded_normal_100, expanded_normal_100 },
  459. { expanded_normal_900, expanded_normal_100 },
  460. { expanded_italic_100, expanded_italic_100 },
  461. { expanded_italic_900, expanded_italic_100 },
  462. },
  463. },
  464. {
  465. { expanded_normal_900,expanded_italic_900 },
  466. {
  467. { condensed_normal_100, expanded_normal_900 },
  468. { condensed_normal_900, expanded_normal_900 },
  469. { condensed_italic_100, expanded_italic_900 },
  470. { condensed_italic_900, expanded_italic_900 },
  471. { expanded_normal_100, expanded_normal_900 },
  472. { expanded_normal_900, expanded_normal_900 },
  473. { expanded_italic_100, expanded_italic_900 },
  474. { expanded_italic_900, expanded_italic_900 },
  475. },
  476. },
  477. {
  478. { expanded_normal_100,expanded_normal_900 },
  479. {
  480. { condensed_normal_100, expanded_normal_100 },
  481. { condensed_normal_900, expanded_normal_900 },
  482. { condensed_italic_100, expanded_normal_100 },
  483. { condensed_italic_900, expanded_normal_900 },
  484. { expanded_normal_100, expanded_normal_100 },
  485. { expanded_normal_900, expanded_normal_900 },
  486. { expanded_italic_100, expanded_normal_100 },
  487. { expanded_italic_900, expanded_normal_900 },
  488. },
  489. },
  490. {
  491. { expanded_normal_100 },
  492. {
  493. { condensed_normal_100, expanded_normal_100 },
  494. { condensed_normal_900, expanded_normal_100 },
  495. { condensed_italic_100, expanded_normal_100 },
  496. { condensed_italic_900, expanded_normal_100 },
  497. { expanded_normal_100, expanded_normal_100 },
  498. { expanded_normal_900, expanded_normal_100 },
  499. { expanded_italic_100, expanded_normal_100 },
  500. { expanded_italic_900, expanded_normal_100 },
  501. },
  502. },
  503. {
  504. { expanded_normal_900 },
  505. {
  506. { condensed_normal_100, expanded_normal_900 },
  507. { condensed_normal_900, expanded_normal_900 },
  508. { condensed_italic_100, expanded_normal_900 },
  509. { condensed_italic_900, expanded_normal_900 },
  510. { expanded_normal_100, expanded_normal_900 },
  511. { expanded_normal_900, expanded_normal_900 },
  512. { expanded_italic_100, expanded_normal_900 },
  513. { expanded_italic_900, expanded_normal_900 },
  514. },
  515. },
  516. {
  517. { expanded_italic_100,expanded_italic_900 },
  518. {
  519. { condensed_normal_100, expanded_italic_100 },
  520. { condensed_normal_900, expanded_italic_900 },
  521. { condensed_italic_100, expanded_italic_100 },
  522. { condensed_italic_900, expanded_italic_900 },
  523. { expanded_normal_100, expanded_italic_100 },
  524. { expanded_normal_900, expanded_italic_900 },
  525. { expanded_italic_100, expanded_italic_100 },
  526. { expanded_italic_900, expanded_italic_900 },
  527. },
  528. },
  529. {
  530. { expanded_italic_100 },
  531. {
  532. { condensed_normal_100, expanded_italic_100 },
  533. { condensed_normal_900, expanded_italic_100 },
  534. { condensed_italic_100, expanded_italic_100 },
  535. { condensed_italic_900, expanded_italic_100 },
  536. { expanded_normal_100, expanded_italic_100 },
  537. { expanded_normal_900, expanded_italic_100 },
  538. { expanded_italic_100, expanded_italic_100 },
  539. { expanded_italic_900, expanded_italic_100 },
  540. },
  541. },
  542. {
  543. { expanded_italic_900 },
  544. {
  545. { condensed_normal_100, expanded_italic_900 },
  546. { condensed_normal_900, expanded_italic_900 },
  547. { condensed_italic_100, expanded_italic_900 },
  548. { condensed_italic_900, expanded_italic_900 },
  549. { expanded_normal_100, expanded_italic_900 },
  550. { expanded_normal_900, expanded_italic_900 },
  551. { expanded_italic_100, expanded_italic_900 },
  552. { expanded_italic_900, expanded_italic_900 },
  553. },
  554. },
  555. {
  556. { normal_normal_100, normal_normal_900 },
  557. {
  558. { normal_normal_300, normal_normal_100 },
  559. { normal_normal_400, normal_normal_100 },
  560. { normal_normal_500, normal_normal_100 },
  561. { normal_normal_600, normal_normal_900 },
  562. },
  563. },
  564. {
  565. { normal_normal_100, normal_normal_400, normal_normal_900 },
  566. {
  567. { normal_normal_300, normal_normal_100 },
  568. { normal_normal_400, normal_normal_400 },
  569. { normal_normal_500, normal_normal_400 },
  570. { normal_normal_600, normal_normal_900 },
  571. },
  572. },
  573. {
  574. { normal_normal_100, normal_normal_500, normal_normal_900 },
  575. {
  576. { normal_normal_300, normal_normal_100 },
  577. { normal_normal_400, normal_normal_500 },
  578. { normal_normal_500, normal_normal_500 },
  579. { normal_normal_600, normal_normal_900 },
  580. },
  581. },
  582. {
  583. { },
  584. {
  585. { normal_normal_300, invalidFontStyle },
  586. { normal_normal_400, invalidFontStyle },
  587. { normal_normal_500, invalidFontStyle },
  588. { normal_normal_600, invalidFontStyle },
  589. },
  590. },
  591. {
  592. { expanded_normal_100,expanded_normal_900,
  593. expanded_italic_100,expanded_italic_900,
  594. expanded_obliqu_100,expanded_obliqu_900, },
  595. {
  596. { condensed_normal_100, expanded_normal_100 },
  597. { condensed_normal_900, expanded_normal_900 },
  598. { condensed_italic_100, expanded_italic_100 },
  599. { condensed_italic_900, expanded_italic_900 },
  600. { condensed_obliqu_100, expanded_obliqu_100 },
  601. { condensed_obliqu_900, expanded_obliqu_900 },
  602. { expanded_normal_100, expanded_normal_100 },
  603. { expanded_normal_900, expanded_normal_900 },
  604. { expanded_italic_100, expanded_italic_100 },
  605. { expanded_italic_900, expanded_italic_900 },
  606. { expanded_obliqu_100, expanded_obliqu_100 },
  607. { expanded_obliqu_900, expanded_obliqu_900 },
  608. },
  609. },
  610. {
  611. { expanded_normal_100,expanded_normal_900,
  612. expanded_obliqu_100,expanded_obliqu_900, },
  613. {
  614. { condensed_normal_100, expanded_normal_100 },
  615. { condensed_normal_900, expanded_normal_900 },
  616. { condensed_italic_100, expanded_obliqu_100 },
  617. { condensed_italic_900, expanded_obliqu_900 },
  618. { condensed_obliqu_100, expanded_obliqu_100 },
  619. { condensed_obliqu_900, expanded_obliqu_900 },
  620. { expanded_normal_100, expanded_normal_100 },
  621. { expanded_normal_900, expanded_normal_900 },
  622. { expanded_italic_100, expanded_obliqu_100 },
  623. { expanded_italic_900, expanded_obliqu_900 },
  624. { expanded_obliqu_100, expanded_obliqu_100 },
  625. { expanded_obliqu_900, expanded_obliqu_900 },
  626. },
  627. },
  628. {
  629. { expanded_italic_100,expanded_italic_900,
  630. expanded_obliqu_100,expanded_obliqu_900, },
  631. {
  632. { condensed_normal_100, expanded_obliqu_100 },
  633. { condensed_normal_900, expanded_obliqu_900 },
  634. { condensed_italic_100, expanded_italic_100 },
  635. { condensed_italic_900, expanded_italic_900 },
  636. { condensed_obliqu_100, expanded_obliqu_100 },
  637. { condensed_obliqu_900, expanded_obliqu_900 },
  638. { expanded_normal_100, expanded_obliqu_100 },
  639. { expanded_normal_900, expanded_obliqu_900 },
  640. { expanded_italic_100, expanded_italic_100 },
  641. { expanded_italic_900, expanded_italic_900 },
  642. { expanded_obliqu_100, expanded_obliqu_100 },
  643. { expanded_obliqu_900, expanded_obliqu_900 },
  644. },
  645. },
  646. };
  647. for (StyleSetTest& test : tests) {
  648. for (const StyleSetTest::Case& testCase : test.cases) {
  649. sk_sp<SkTypeface> typeface(test.styleSet.matchStyle(testCase.pattern));
  650. if (typeface) {
  651. REPORTER_ASSERT(reporter, typeface->fontStyle() == testCase.expectedResult);
  652. } else {
  653. REPORTER_ASSERT(reporter, invalidFontStyle == testCase.expectedResult);
  654. }
  655. }
  656. }
  657. }
  658. DEFINE_bool(verboseFontMgr, false, "run verbose fontmgr tests.");
  659. DEF_TEST(FontMgr, reporter) {
  660. test_match(reporter);
  661. test_matchStyleCSS3(reporter);
  662. test_fontiter(reporter, FLAGS_verboseFontMgr);
  663. test_alias_names(reporter);
  664. test_font(reporter);
  665. }