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