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