File: TestFontOverlapPrevention.cpp

package info (click to toggle)
firefox 147.0.3-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,683,320 kB
  • sloc: cpp: 7,607,359; javascript: 6,533,295; ansic: 3,775,223; python: 1,415,500; xml: 634,561; asm: 438,949; java: 186,241; sh: 62,752; makefile: 18,079; objc: 13,092; perl: 12,808; yacc: 4,583; cs: 3,846; pascal: 3,448; lex: 1,720; ruby: 1,003; php: 436; lisp: 258; awk: 247; sql: 66; sed: 54; csh: 10; exp: 6
file content (78 lines) | stat: -rw-r--r-- 2,471 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/* vim:set ts=2 sw=2 sts=2 et: */
/* Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/
 */

#include "gtest/gtest.h"
#include <vector>
#include <string>

#define StandardFonts
#ifdef XP_WIN
#  include "../thebes/StandardFonts-win10.inc"
#elif defined(XP_MACOSX)
#  include "../thebes/StandardFonts-macos.inc"
#elif defined(XP_LINUX)
#  include "../thebes/StandardFonts-linux.inc"
#elif defined(XP_ANDROID)
#  include "../thebes/StandardFonts-android.inc"
#endif
#undef StandardFonts

// Helper to collect FONT_RULE font names
std::vector<std::string> GetFontRuleNames() {
  std::vector<std::string> fontRuleNames;
#undef FONT_RULE
#define FONT_RULE(fontName, ...) fontRuleNames.push_back(fontName);
#define FontInclusionByLocaleRules

#ifdef XP_WIN
#  include "../thebes/StandardFonts-win10.inc"
#elif defined(XP_MACOSX)
#  include "../thebes/StandardFonts-macos.inc"
#elif defined(XP_LINUX)
#  include "../thebes/StandardFonts-linux.inc"
#elif defined(XP_ANDROID)
#  include "../thebes/StandardFonts-android.inc"
#endif

#undef FontInclusionByLocaleRules
#undef FONT_RULE
  return fontRuleNames;
}

/*
 * This test verifies that the font names defined in the language pack
 * (kLangPackFonts) do not overlap with the font names defined by FONT_RULE
 * macros in the platform-specific standard font inclusion files.
 *
 * The code in gfxDWriteFontList::GetVisibilityForFamily assumes that a font is
 * not in both lists.
 */

TEST(StandardFontsTest, LangPackAndFontRuleNoOverlap)
{
  // Get LangPack font names
  std::set<std::string> langPackFonts;
  for (const char* font : kLangPackFonts) {
    langPackFonts.insert(font);
  }

  // Get FONT_RULE font names
  std::vector<std::string> fontRuleNames = GetFontRuleNames();

  // Check for overlap
  for (const auto& font : fontRuleNames) {
    auto it = std::find_if(langPackFonts.begin(), langPackFonts.end(),
                           [&font](const std::string& langPackFont) {
                             return std::equal(
                                 font.begin(), font.end(), langPackFont.begin(),
                                 langPackFont.end(), [](char a, char b) {
                                   return tolower(a) == tolower(b);
                                 });
                           });
    ASSERT_EQ(it, langPackFonts.end())
        << "Font '" << font
        << "' is in both kLangPackFonts and FONT_RULE (case insensitive)";
  }
}