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