xref: /aosp_15_r20/external/fonttools/Tests/designspaceLib/statNames_test.py (revision e1fe3e4ad2793916b15cccdc4a7da52a7e1dd0e9)
1from fontTools.designspaceLib import DesignSpaceDocument
2from fontTools.designspaceLib.statNames import StatNames, getStatNames
3
4from .fixtures import datadir
5
6
7def test_instance_getStatNames(datadir):
8    doc = DesignSpaceDocument.fromfile(datadir / "test_v5_sourceserif.designspace")
9
10    assert getStatNames(doc, doc.instances[0].getFullUserLocation(doc)) == StatNames(
11        familyNames={"en": "Source Serif 4"},
12        styleNames={"en": "Caption ExtraLight"},
13        postScriptFontName="SourceSerif4-CaptionExtraLight",
14        styleMapFamilyNames={"en": "Source Serif 4 Caption ExtraLight"},
15        styleMapStyleName="regular",
16    )
17
18
19def test_not_all_ordering_specified_and_translations(datadir):
20    doc = DesignSpaceDocument.fromfile(datadir / "test_v5.designspace")
21
22    assert getStatNames(doc, {"Weight": 200, "Width": 125, "Italic": 1}) == StatNames(
23        familyNames={
24            "en": "MasterFamilyName",
25            "fr": "Montserrat",
26            "ja": "モンセラート",
27        },
28        styleNames={
29            "fr": "Wide Extra léger Italic",
30            "de": "Wide Extraleicht Italic",
31            "en": "Wide Extra Light Italic",
32        },
33        postScriptFontName="MasterFamilyName-WideExtraLightItalic",
34        styleMapFamilyNames={
35            "en": "MasterFamilyName Wide Extra Light",
36            "fr": "Montserrat Wide Extra léger",
37            "de": "MasterFamilyName Wide Extraleicht",
38            "ja": "モンセラート Wide Extra Light",
39        },
40        styleMapStyleName="italic",
41    )
42
43
44def test_detect_ribbi_aktiv(datadir):
45    doc = DesignSpaceDocument.fromfile(datadir / "test_v5_aktiv.designspace")
46
47    assert getStatNames(doc, {"Weight": 600, "Width": 125, "Italic": 1}) == StatNames(
48        familyNames={"en": "Aktiv Grotesk"},
49        styleNames={"en": "Ex SemiBold Italic"},
50        postScriptFontName="AktivGrotesk-ExSemiBoldItalic",
51        styleMapFamilyNames={"en": "Aktiv Grotesk Ex SemiBold"},
52        styleMapStyleName="italic",
53    )
54
55    assert getStatNames(doc, {"Weight": 700, "Width": 75, "Italic": 1}) == StatNames(
56        familyNames={"en": "Aktiv Grotesk"},
57        styleNames={"en": "Cd Bold Italic"},
58        postScriptFontName="AktivGrotesk-CdBoldItalic",
59        styleMapFamilyNames={"en": "Aktiv Grotesk Cd"},
60        styleMapStyleName="bold italic",
61    )
62
63
64def test_detect_ribbi_recursive(datadir):
65    doc = DesignSpaceDocument.fromfile(datadir / "test_v5.designspace")
66
67    assert getStatNames(doc, {"Weight": 700, "Width": 125, "Italic": 1}) == StatNames(
68        familyNames={
69            "en": "MasterFamilyName",
70            "fr": "Montserrat",
71            "ja": "モンセラート",
72        },
73        styleNames={
74            "en": "Wide Bold Italic",
75        },
76        postScriptFontName="MasterFamilyName-WideBoldItalic",
77        styleMapFamilyNames={
78            "en": "MasterFamilyName Wide",
79            "fr": "Montserrat Wide",
80            "ja": "モンセラート Wide",
81        },
82        styleMapStyleName="bold italic",
83    )
84
85
86def test_getStatNames_on_ds4_doesnt_make_up_bad_names(datadir):
87    """See this issue on GitHub: https://github.com/googlefonts/ufo2ft/issues/630
88
89    When as in the example, there's no STAT data present, the getStatName
90    shouldn't try making up a postscript name.
91    """
92    doc = DesignSpaceDocument.fromfile(datadir / "DS5BreakTest.designspace")
93
94    assert getStatNames(doc, {"Weight": 600, "Width": 125, "Italic": 1}) == StatNames(
95        familyNames={"en": "DS5BreakTest"},
96        styleNames={},
97        postScriptFontName=None,
98        styleMapFamilyNames={},
99        styleMapStyleName=None,
100    )
101