diff --git a/Tests/otlLib/builder_test.py b/Tests/otlLib/builder_test.py index 20130e8cb..548a31e9f 100644 --- a/Tests/otlLib/builder_test.py +++ b/Tests/otlLib/builder_test.py @@ -918,7 +918,6 @@ class BuilderTest(object): ("A", "zero"): (d0, d50), ("A", "one"): (None, d20), ("B", "five"): (d8020, d50), - }, self.GLYPHMAP, ) @@ -1120,262 +1119,309 @@ class ClassDefBuilderTest(object): buildStatTable_test_data = [ - ([ - dict( - tag="wght", - name="Weight", - values=[ - dict(value=100, name='Thin'), - dict(value=400, name='Regular', flags=0x2), - dict(value=900, name='Black')])], None, "Regular", [ - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ']), - ([ - dict( - tag="wght", - name=dict(en="Weight", nl="Gewicht"), - values=[ - dict(value=100, name=dict(en='Thin', nl='Dun')), - dict(value=400, name='Regular', flags=0x2), - dict(value=900, name='Black'), - ]), - dict( - tag="wdth", - name="Width", - values=[ - dict(value=50, name='Condensed'), - dict(value=100, name='Regular', flags=0x2), - dict(value=200, name='Extended')])], None, 2, [ - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ']), - ([ - dict( - tag="wght", - name="Weight", - values=[ - dict(value=400, name='Regular', flags=0x2), - dict(value=600, linkedValue=650, name='Bold')])], None, 18, [ - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ']), - ([ - dict( - tag="opsz", - name="Optical Size", - values=[ - dict(nominalValue=6, rangeMaxValue=10, name='Small'), - dict(rangeMinValue=10, nominalValue=14, rangeMaxValue=24, name='Text', flags=0x2), - dict(rangeMinValue=24, nominalValue=600, name='Display')])], None, 2, [ - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ']), - ([ - dict( - tag="wght", - name="Weight", - ordering=1, - values=[]), - dict( - tag="ABCD", - name="ABCDTest", - ordering=0, - values=[ - dict(value=100, name="Regular", flags=0x2)])], - [dict(location=dict(wght=300, ABCD=100), name='Regular ABCD')], 18, [ - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ']), + ( + [ + dict( + tag="wght", + name="Weight", + values=[ + dict(value=100, name="Thin"), + dict(value=400, name="Regular", flags=0x2), + dict(value=900, name="Black"), + ], + ) + ], + None, + "Regular", + [ + " ", + ' ', + ' ', + " ", + " ", + ' ', + ' ', + ' ', + ' ', + " ", + " ", + " ", + " ", + ' ', + ' ', + ' ', + ' ', + ' ', + " ", + ' ', + ' ', + ' ', + ' ', + ' ', + " ", + ' ', + ' ', + ' ', + ' ', + ' ', + " ", + " ", + ' ', + " ", + ], + ), + ( + [ + dict( + tag="wght", + name=dict(en="Weight", nl="Gewicht"), + values=[ + dict(value=100, name=dict(en="Thin", nl="Dun")), + dict(value=400, name="Regular", flags=0x2), + dict(value=900, name="Black"), + ], + ), + dict( + tag="wdth", + name="Width", + values=[ + dict(value=50, name="Condensed"), + dict(value=100, name="Regular", flags=0x2), + dict(value=200, name="Extended"), + ], + ), + ], + None, + 2, + [ + " ", + ' ', + ' ', + " ", + " ", + ' ', + ' ', + ' ', + ' ', + " ", + ' ', + ' ', + ' ', + ' ', + " ", + " ", + " ", + " ", + ' ', + ' ', + ' ', + ' ', + ' ', + " ", + ' ', + ' ', + ' ', + ' ', + ' ', + " ", + ' ', + ' ', + ' ', + ' ', + ' ', + " ", + ' ', + ' ', + ' ', + ' ', + ' ', + " ", + ' ', + ' ', + ' ', + ' ', + ' ', + " ", + ' ', + ' ', + ' ', + ' ', + ' ', + " ", + " ", + ' ', + " ", + ], + ), + ( + [ + dict( + tag="wght", + name="Weight", + values=[ + dict(value=400, name="Regular", flags=0x2), + dict(value=600, linkedValue=650, name="Bold"), + ], + ) + ], + None, + 18, + [ + " ", + ' ', + ' ', + " ", + " ", + ' ', + ' ', + ' ', + ' ', + " ", + " ", + " ", + " ", + ' ', + ' ', + ' ', + ' ', + ' ', + " ", + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + " ", + " ", + ' ', + " ", + ], + ), + ( + [ + dict( + tag="opsz", + name="Optical Size", + values=[ + dict(nominalValue=6, rangeMaxValue=10, name="Small"), + dict( + rangeMinValue=10, + nominalValue=14, + rangeMaxValue=24, + name="Text", + flags=0x2, + ), + dict(rangeMinValue=24, nominalValue=600, name="Display"), + ], + ) + ], + None, + 2, + [ + " ", + ' ', + ' ', + " ", + " ", + ' ', + ' ', + ' ', + ' ', + " ", + " ", + " ", + " ", + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + " ", + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + " ", + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + " ", + " ", + ' ', + " ", + ], + ), + ( + [ + dict(tag="wght", name="Weight", ordering=1, values=[]), + dict( + tag="ABCD", + name="ABCDTest", + ordering=0, + values=[dict(value=100, name="Regular", flags=0x2)], + ), + ], + [dict(location=dict(wght=300, ABCD=100), name="Regular ABCD")], + 18, + [ + " ", + ' ', + ' ', + " ", + " ", + ' ', + ' ', + ' ', + ' ', + " ", + ' ', + ' ', + ' ', + ' ', + " ", + " ", + " ", + " ", + ' ', + " ", + ' ', + ' ', + ' ', + ' ', + ' ', + " ", + ' ', + ' ', + ' ', + " ", + " ", + ' ', + ' ', + ' ', + ' ', + ' ', + " ", + " ", + ' ', + " ", + ], + ), ] -@pytest.mark.parametrize("axes, axisValues, elidedFallbackName, expected_ttx", buildStatTable_test_data) +@pytest.mark.parametrize( + "axes, axisValues, elidedFallbackName, expected_ttx", buildStatTable_test_data +) def test_buildStatTable(axes, axisValues, elidedFallbackName, expected_ttx): font = ttLib.TTFont() font["name"] = ttLib.newTable("name") @@ -1414,7 +1460,13 @@ def test_buildStatTable_platform_specific_names(): wght_values = [ dict(nominalValue=200, rangeMinValue=200, rangeMaxValue=250, name="ExtraLight"), dict(nominalValue=300, rangeMinValue=250, rangeMaxValue=350, name="Light"), - dict(nominalValue=400, rangeMinValue=350, rangeMaxValue=450, name="Regular", flags=0x2), + dict( + nominalValue=400, + rangeMinValue=350, + rangeMaxValue=450, + name="Regular", + flags=0x2, + ), dict(nominalValue=500, rangeMinValue=450, rangeMaxValue=650, name="Medium"), dict(nominalValue=700, rangeMinValue=650, rangeMaxValue=750, name="Bold"), dict(nominalValue=800, rangeMinValue=750, rangeMaxValue=850, name="ExtraBold"), @@ -1430,15 +1482,15 @@ def test_buildStatTable_platform_specific_names(): ), ] - font_obj["name"].setName('ExtraLight', 260, 3, 1, 0x409) - font_obj["name"].setName('Light', 261, 3, 1, 0x409) - font_obj["name"].setName('Regular', 262, 3, 1, 0x409) - font_obj["name"].setName('Medium', 263, 3, 1, 0x409) - font_obj["name"].setName('Bold', 264, 3, 1, 0x409) - font_obj["name"].setName('ExtraBold', 265, 3, 1, 0x409) - font_obj["name"].setName('Black', 266, 3, 1, 0x409) + font_obj["name"].setName("ExtraLight", 260, 3, 1, 0x409) + font_obj["name"].setName("Light", 261, 3, 1, 0x409) + font_obj["name"].setName("Regular", 262, 3, 1, 0x409) + font_obj["name"].setName("Medium", 263, 3, 1, 0x409) + font_obj["name"].setName("Bold", 264, 3, 1, 0x409) + font_obj["name"].setName("ExtraBold", 265, 3, 1, 0x409) + font_obj["name"].setName("Black", 266, 3, 1, 0x409) - font_obj["name"].setName('Weight', 270, 3, 1, 0x409) + font_obj["name"].setName("Weight", 270, 3, 1, 0x409) expected_names = [x.string for x in font_obj["name"].names] @@ -1450,7 +1502,7 @@ def test_buildStatTable_platform_specific_names(): assert expected_names == actual_names font_obj["name"].removeNames(nameID=270) - expected_names = [x.string for x in font_obj["name"].names] + ['Weight'] + expected_names = [x.string for x in font_obj["name"].names] + ["Weight"] builder.buildStatTable(font_obj, AXES, windowsNames=True, macNames=False) actual_names = [x.string for x in font_obj["name"].names] @@ -1459,14 +1511,32 @@ def test_buildStatTable_platform_specific_names(): builder.buildStatTable(font_obj, AXES, windowsNames=True, macNames=True) actual_names = [x.string for x in font_obj["name"].names] - expected_names = ['Weight', 'Weight', 'Weight', - 'ExtraLight', 'ExtraLight', 'ExtraLight', - 'Light', 'Light', 'Light', - 'Regular', 'Regular', 'Regular', - 'Medium', 'Medium', 'Medium', - 'Bold', 'Bold', 'Bold', - 'ExtraBold', 'ExtraBold', 'ExtraBold', - 'Black', 'Black', 'Black'] + expected_names = [ + "Weight", + "Weight", + "Weight", + "ExtraLight", + "ExtraLight", + "ExtraLight", + "Light", + "Light", + "Light", + "Regular", + "Regular", + "Regular", + "Medium", + "Medium", + "Medium", + "Bold", + "Bold", + "Bold", + "ExtraBold", + "ExtraBold", + "ExtraBold", + "Black", + "Black", + "Black", + ] # Because there is an inconsistency in the names add new name IDs # for each platform -> windowsNames=True, macNames=True assert sorted(expected_names) == sorted(actual_names) @@ -1482,7 +1552,7 @@ def test_stat_infinities(): class ChainContextualRulesetTest(object): def test_makeRulesets(self): font = ttLib.TTFont() - font.setGlyphOrder(["a","b","c","d","A","B","C","D","E"]) + font.setGlyphOrder(["a", "b", "c", "d", "A", "B", "C", "D", "E"]) sb = builder.ChainContextSubstBuilder(font, None) prefix, input_, suffix, lookups = [["a"], ["b"]], [["c"]], [], [None] sb.rules.append(builder.ChainContextualRule(prefix, input_, suffix, lookups)) @@ -1495,7 +1565,7 @@ class ChainContextualRulesetTest(object): # Second subtable has some glyph classes prefix, input_, suffix, lookups = [["A"]], [["E"]], [], [None] sb.rules.append(builder.ChainContextualRule(prefix, input_, suffix, lookups)) - prefix, input_, suffix, lookups = [["A"]], [["C","D"]], [], [None] + prefix, input_, suffix, lookups = [["A"]], [["C", "D"]], [], [None] sb.rules.append(builder.ChainContextualRule(prefix, input_, suffix, lookups)) prefix, input_, suffix, lookups = [["A", "B"]], [["E"]], [], [None] sb.rules.append(builder.ChainContextualRule(prefix, input_, suffix, lookups)) @@ -1505,7 +1575,7 @@ class ChainContextualRulesetTest(object): # Third subtable has no pre/post context prefix, input_, suffix, lookups = [], [["E"]], [], [None] sb.rules.append(builder.ChainContextualRule(prefix, input_, suffix, lookups)) - prefix, input_, suffix, lookups = [], [["C","D"]], [], [None] + prefix, input_, suffix, lookups = [], [["C", "D"]], [], [None] sb.rules.append(builder.ChainContextualRule(prefix, input_, suffix, lookups)) rulesets = sb.rulesets() @@ -1513,7 +1583,7 @@ class ChainContextualRulesetTest(object): assert rulesets[0].hasPrefixOrSuffix assert not rulesets[0].hasAnyGlyphClasses cd = rulesets[0].format2ClassDefs() - assert set(cd[0].classes()[1:]) == set([("d",),("b",),("a",)]) + assert set(cd[0].classes()[1:]) == set([("d",), ("b",), ("a",)]) assert set(cd[1].classes()[1:]) == set([("c",)]) assert set(cd[2].classes()[1:]) == set() @@ -1526,7 +1596,7 @@ class ChainContextualRulesetTest(object): assert rulesets[2].format2ClassDefs() cd = rulesets[2].format2ClassDefs() assert set(cd[0].classes()[1:]) == set() - assert set(cd[1].classes()[1:]) == set([("C","D"), ("E",)]) + assert set(cd[1].classes()[1:]) == set([("C", "D"), ("E",)]) assert set(cd[2].classes()[1:]) == set()