diff options
Diffstat (limited to 'Tests/ttLib/tables/_k_e_r_n_test.py')
-rw-r--r-- | Tests/ttLib/tables/_k_e_r_n_test.py | 264 |
1 files changed, 131 insertions, 133 deletions
diff --git a/Tests/ttLib/tables/_k_e_r_n_test.py b/Tests/ttLib/tables/_k_e_r_n_test.py index eb48bae6..be0fe9aa 100644 --- a/Tests/ttLib/tables/_k_e_r_n_test.py +++ b/Tests/ttLib/tables/_k_e_r_n_test.py @@ -1,6 +1,5 @@ from fontTools.ttLib import newTable -from fontTools.ttLib.tables._k_e_r_n import ( - KernTable_format_0, KernTable_format_unkown) +from fontTools.ttLib.tables._k_e_r_n import KernTable_format_0, KernTable_format_unkown from fontTools.misc.textTools import deHexStr from fontTools.misc.testTools import FakeFont, getXML, parseXML import itertools @@ -8,19 +7,19 @@ import pytest KERN_VER_0_FMT_0_DATA = deHexStr( - '0000 ' # 0: version=0 - '0001 ' # 2: nTables=1 - '0000 ' # 4: version=0 (bogus field, unused) - '0020 ' # 6: length=32 - '00 ' # 8: format=0 - '01 ' # 9: coverage=1 - '0003 ' # 10: nPairs=3 - '000C ' # 12: searchRange=12 - '0001 ' # 14: entrySelector=1 - '0006 ' # 16: rangeShift=6 - '0004 000C FFD8 ' # 18: l=4, r=12, v=-40 - '0004 001C 0028 ' # 24: l=4, r=28, v=40 - '0005 0028 FFCE ' # 30: l=5, r=40, v=-50 + "0000 " # 0: version=0 + "0001 " # 2: nTables=1 + "0000 " # 4: version=0 (bogus field, unused) + "0020 " # 6: length=32 + "00 " # 8: format=0 + "01 " # 9: coverage=1 + "0003 " # 10: nPairs=3 + "000C " # 12: searchRange=12 + "0001 " # 14: entrySelector=1 + "0006 " # 16: rangeShift=6 + "0004 000C FFD8 " # 18: l=4, r=12, v=-40 + "0004 001C 0028 " # 24: l=4, r=28, v=40 + "0005 0028 FFCE " # 30: l=5, r=40, v=-50 ) assert len(KERN_VER_0_FMT_0_DATA) == 36 @@ -30,23 +29,23 @@ KERN_VER_0_FMT_0_XML = [ ' <pair l="E" r="M" v="-40"/>', ' <pair l="E" r="c" v="40"/>', ' <pair l="F" r="o" v="-50"/>', - '</kernsubtable>', + "</kernsubtable>", ] KERN_VER_1_FMT_0_DATA = deHexStr( - '0001 0000 ' # 0: version=1 - '0000 0001 ' # 4: nTables=1 - '0000 0022 ' # 8: length=34 - '00 ' # 12: coverage=0 - '00 ' # 13: format=0 - '0000 ' # 14: tupleIndex=0 - '0003 ' # 16: nPairs=3 - '000C ' # 18: searchRange=12 - '0001 ' # 20: entrySelector=1 - '0006 ' # 22: rangeShift=6 - '0004 000C FFD8 ' # 24: l=4, r=12, v=-40 - '0004 001C 0028 ' # 30: l=4, r=28, v=40 - '0005 0028 FFCE ' # 36: l=5, r=40, v=-50 + "0001 0000 " # 0: version=1 + "0000 0001 " # 4: nTables=1 + "0000 0022 " # 8: length=34 + "00 " # 12: coverage=0 + "00 " # 13: format=0 + "0000 " # 14: tupleIndex=0 + "0003 " # 16: nPairs=3 + "000C " # 18: searchRange=12 + "0001 " # 20: entrySelector=1 + "0006 " # 22: rangeShift=6 + "0004 000C FFD8 " # 24: l=4, r=12, v=-40 + "0004 001C 0028 " # 30: l=4, r=28, v=40 + "0005 0028 FFCE " # 36: l=5, r=40, v=-50 ) assert len(KERN_VER_1_FMT_0_DATA) == 42 @@ -56,22 +55,22 @@ KERN_VER_1_FMT_0_XML = [ ' <pair l="E" r="M" v="-40"/>', ' <pair l="E" r="c" v="40"/>', ' <pair l="F" r="o" v="-50"/>', - '</kernsubtable>', + "</kernsubtable>", ] KERN_VER_0_FMT_UNKNOWN_DATA = deHexStr( - '0000 ' # 0: version=0 - '0002 ' # 2: nTables=2 - '0000 ' # 4: version=0 - '000A ' # 6: length=10 - '04 ' # 8: format=4 (format 4 doesn't exist) - '01 ' # 9: coverage=1 - '1234 5678 ' # 10: garbage... - '0000 ' # 14: version=0 - '000A ' # 16: length=10 - '05 ' # 18: format=5 (format 5 doesn't exist) - '01 ' # 19: coverage=1 - '9ABC DEF0 ' # 20: garbage... + "0000 " # 0: version=0 + "0002 " # 2: nTables=2 + "0000 " # 4: version=0 + "000A " # 6: length=10 + "04 " # 8: format=4 (format 4 doesn't exist) + "01 " # 9: coverage=1 + "1234 5678 " # 10: garbage... + "0000 " # 14: version=0 + "000A " # 16: length=10 + "05 " # 18: format=5 (format 5 doesn't exist) + "01 " # 19: coverage=1 + "9ABC DEF0 " # 20: garbage... ) assert len(KERN_VER_0_FMT_UNKNOWN_DATA) == 24 @@ -79,29 +78,29 @@ KERN_VER_0_FMT_UNKNOWN_XML = [ '<version value="0"/>', '<kernsubtable format="4">', " <!-- unknown 'kern' subtable format -->", - ' 0000000A 04011234', - ' 5678 ', - '</kernsubtable>', + " 0000000A 04011234", + " 5678 ", + "</kernsubtable>", '<kernsubtable format="5">', "<!-- unknown 'kern' subtable format -->", - ' 0000000A 05019ABC', - ' DEF0 ', - '</kernsubtable>', + " 0000000A 05019ABC", + " DEF0 ", + "</kernsubtable>", ] KERN_VER_1_FMT_UNKNOWN_DATA = deHexStr( - '0001 0000 ' # 0: version=1 - '0000 0002 ' # 4: nTables=2 - '0000 000C ' # 8: length=12 - '00 ' # 12: coverage=0 - '04 ' # 13: format=4 (format 4 doesn't exist) - '0000 ' # 14: tupleIndex=0 - '1234 5678' # 16: garbage... - '0000 000C ' # 20: length=12 - '00 ' # 24: coverage=0 - '05 ' # 25: format=5 (format 5 doesn't exist) - '0000 ' # 26: tupleIndex=0 - '9ABC DEF0 ' # 28: garbage... + "0001 0000 " # 0: version=1 + "0000 0002 " # 4: nTables=2 + "0000 000C " # 8: length=12 + "00 " # 12: coverage=0 + "04 " # 13: format=4 (format 4 doesn't exist) + "0000 " # 14: tupleIndex=0 + "1234 5678" # 16: garbage... + "0000 000C " # 20: length=12 + "00 " # 24: coverage=0 + "05 " # 25: format=5 (format 5 doesn't exist) + "0000 " # 26: tupleIndex=0 + "9ABC DEF0 " # 28: garbage... ) assert len(KERN_VER_1_FMT_UNKNOWN_DATA) == 32 @@ -109,37 +108,39 @@ KERN_VER_1_FMT_UNKNOWN_XML = [ '<version value="1"/>', '<kernsubtable format="4">', " <!-- unknown 'kern' subtable format -->", - ' 0000000C 00040000', - ' 12345678 ', - '</kernsubtable>', + " 0000000C 00040000", + " 12345678 ", + "</kernsubtable>", '<kernsubtable format="5">', " <!-- unknown 'kern' subtable format -->", - ' 0000000C 00050000', - ' 9ABCDEF0 ', - '</kernsubtable>', + " 0000000C 00050000", + " 9ABCDEF0 ", + "</kernsubtable>", ] KERN_VER_0_FMT_0_OVERFLOWING_DATA = deHexStr( - '0000 ' # 0: version=0 - '0001 ' # 2: nTables=1 - '0000 ' # 4: version=0 (bogus field, unused) - '0274 ' # 6: length=628 (bogus value for 66164 % 0x10000) - '00 ' # 8: format=0 - '01 ' # 9: coverage=1 - '2B11 ' # 10: nPairs=11025 - 'C000 ' # 12: searchRange=49152 - '000D ' # 14: entrySelector=13 - '4266 ' # 16: rangeShift=16998 -) + deHexStr(' '.join( - '%04X %04X %04X' % (a, b, 0) - for (a, b) in itertools.product(range(105), repeat=2) -)) + "0000 " # 0: version=0 + "0001 " # 2: nTables=1 + "0000 " # 4: version=0 (bogus field, unused) + "0274 " # 6: length=628 (bogus value for 66164 % 0x10000) + "00 " # 8: format=0 + "01 " # 9: coverage=1 + "2B11 " # 10: nPairs=11025 + "C000 " # 12: searchRange=49152 + "000D " # 14: entrySelector=13 + "4266 " # 16: rangeShift=16998 +) + deHexStr( + " ".join( + "%04X %04X %04X" % (a, b, 0) + for (a, b) in itertools.product(range(105), repeat=2) + ) +) @pytest.fixture def font(): - return FakeFont(list("ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "abcdefghijklmnopqrstuvwxyz")) + return FakeFont(list("ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz")) + @pytest.fixture def overflowing_font(): @@ -147,14 +148,13 @@ def overflowing_font(): class KernTableTest(object): - @pytest.mark.parametrize( "data, version", [ (KERN_VER_0_FMT_0_DATA, 0), (KERN_VER_1_FMT_0_DATA, 1.0), ], - ids=["version_0", "version_1"] + ids=["version_0", "version_1"], ) def test_decompile_single_format_0(self, data, font, version): kern = newTable("kern") @@ -171,11 +171,7 @@ class KernTableTest(object): assert st.coverage == (0 if st.apple else 1) assert st.tupleIndex == (0 if st.apple else None) assert len(st.kernTable) == 3 - assert st.kernTable == { - ('E', 'M'): -40, - ('E', 'c'): 40, - ('F', 'o'): -50 - } + assert st.kernTable == {("E", "M"): -40, ("E", "c"): 40, ("F", "o"): -50} @pytest.mark.parametrize( "version, expected", @@ -183,7 +179,7 @@ class KernTableTest(object): (0, KERN_VER_0_FMT_0_DATA), (1.0, KERN_VER_1_FMT_0_DATA), ], - ids=["version_0", "version_1"] + ids=["version_0", "version_1"], ) def test_compile_single_format_0(self, font, version, expected): kern = newTable("kern") @@ -191,13 +187,9 @@ class KernTableTest(object): apple = version == 1.0 st = KernTable_format_0(apple) kern.kernTables = [st] - st.coverage = (0 if apple else 1) + st.coverage = 0 if apple else 1 st.tupleIndex = 0 if apple else None - st.kernTable = { - ('E', 'M'): -40, - ('E', 'c'): 40, - ('F', 'o'): -50 - } + st.kernTable = {("E", "M"): -40, ("E", "c"): 40, ("F", "o"): -50} data = kern.compile(font) assert data == expected @@ -207,7 +199,7 @@ class KernTableTest(object): (KERN_VER_0_FMT_0_XML, 0), (KERN_VER_1_FMT_0_XML, 1.0), ], - ids=["version_0", "version_1"] + ids=["version_0", "version_1"], ) def test_fromXML_single_format_0(self, xml, font, version): kern = newTable("kern") @@ -223,11 +215,7 @@ class KernTableTest(object): assert st.coverage == (0 if st.apple else 1) assert st.tupleIndex == (0 if st.apple else None) assert len(st.kernTable) == 3 - assert st.kernTable == { - ('E', 'M'): -40, - ('E', 'c'): 40, - ('F', 'o'): -50 - } + assert st.kernTable == {("E", "M"): -40, ("E", "c"): 40, ("F", "o"): -50} @pytest.mark.parametrize( "version, expected", @@ -235,7 +223,7 @@ class KernTableTest(object): (0, KERN_VER_0_FMT_0_XML), (1.0, KERN_VER_1_FMT_0_XML), ], - ids=["version_0", "version_1"] + ids=["version_0", "version_1"], ) def test_toXML_single_format_0(self, font, version, expected): kern = newTable("kern") @@ -245,11 +233,7 @@ class KernTableTest(object): kern.kernTables = [st] st.coverage = 0 if apple else 1 st.tupleIndex = 0 if apple else None - st.kernTable = { - ('E', 'M'): -40, - ('E', 'c'): 40, - ('F', 'o'): -50 - } + st.kernTable = {("E", "M"): -40, ("E", "c"): 40, ("F", "o"): -50} xml = getXML(kern.toXML, font) assert xml == expected @@ -259,10 +243,11 @@ class KernTableTest(object): (KERN_VER_0_FMT_UNKNOWN_DATA, 0, 4, 10), (KERN_VER_1_FMT_UNKNOWN_DATA, 1.0, 8, 12), ], - ids=["version_0", "version_1"] + ids=["version_0", "version_1"], ) def test_decompile_format_unknown( - self, data, font, version, header_length, st_length): + self, data, font, version, header_length, st_length + ): kern = newTable("kern") kern.decompile(data, font) @@ -285,7 +270,7 @@ class KernTableTest(object): (0, 10, KERN_VER_0_FMT_UNKNOWN_DATA), (1.0, 12, KERN_VER_1_FMT_UNKNOWN_DATA), ], - ids=["version_0", "version_1"] + ids=["version_0", "version_1"], ) def test_compile_format_unknown(self, version, st_length, expected): kern = newTable("kern") @@ -296,13 +281,13 @@ class KernTableTest(object): if version > 0: coverage = 0 header_fmt = deHexStr( - "%08X %02X %02X %04X" % ( - st_length, coverage, unknown_fmt, 0)) + "%08X %02X %02X %04X" % (st_length, coverage, unknown_fmt, 0) + ) else: coverage = 1 header_fmt = deHexStr( - "%04X %04X %02X %02X" % ( - 0, st_length, unknown_fmt, coverage)) + "%04X %04X %02X %02X" % (0, st_length, unknown_fmt, coverage) + ) st = KernTable_format_unkown(unknown_fmt) st.data = header_fmt + deHexStr(kern_data) kern.kernTables.append(st) @@ -316,7 +301,7 @@ class KernTableTest(object): (KERN_VER_0_FMT_UNKNOWN_XML, 0, 10), (KERN_VER_1_FMT_UNKNOWN_XML, 1.0, 12), ], - ids=["version_0", "version_1"] + ids=["version_0", "version_1"], ) def test_fromXML_format_unknown(self, xml, font, version, st_length): kern = newTable("kern") @@ -334,8 +319,7 @@ class KernTableTest(object): assert st1.format == 5 assert len(st1.data) == st_length - @pytest.mark.parametrize( - "version", [0, 1.0], ids=["version_0", "version_1"]) + @pytest.mark.parametrize("version", [0, 1.0], ids=["version_0", "version_1"]) def test_toXML_format_unknown(self, font, version): kern = newTable("kern") kern.version = version @@ -348,9 +332,9 @@ class KernTableTest(object): assert xml == [ '<version value="%s"/>' % version, '<kernsubtable format="4">', - ' <!-- unknown \'kern\' subtable format -->', - ' 41424344 ', - '</kernsubtable>', + " <!-- unknown 'kern' subtable format -->", + " 41424344 ", + "</kernsubtable>", ] def test_getkern(self): @@ -371,15 +355,32 @@ class KernTableTest(object): class KernTable_format_0_Test(object): - def test_decompileBadGlyphId(self, font): subtable = KernTable_format_0() subtable.decompile( - b'\x00' + b'\x00' + b'\x00' + b'\x1a' + b'\x00' + b'\x00' + - b'\x00' + b'\x02' + b'\x00' * 6 + - b'\x00' + b'\x01' + b'\x00' + b'\x03' + b'\x00' + b'\x01' + - b'\x00' + b'\x01' + b'\xFF' + b'\xFF' + b'\x00' + b'\x02', - font) + b"\x00" + + b"\x00" + + b"\x00" + + b"\x1a" + + b"\x00" + + b"\x00" + + b"\x00" + + b"\x02" + + b"\x00" * 6 + + b"\x00" + + b"\x01" + + b"\x00" + + b"\x03" + + b"\x00" + + b"\x01" + + b"\x00" + + b"\x01" + + b"\xFF" + + b"\xFF" + + b"\x00" + + b"\x02", + font, + ) assert subtable[("B", "D")] == 1 assert subtable[("B", "glyph65535")] == 2 @@ -392,9 +393,7 @@ class KernTable_format_0_Test(object): st.coverage = 1 st.tupleIndex = None st.kernTable = { - (a, b): 0 - for (a, b) in itertools.product( - font.getGlyphOrder(), repeat=2) + (a, b): 0 for (a, b) in itertools.product(font.getGlyphOrder(), repeat=2) } assert len(st.kernTable) == 11025 data = kern.compile(font) @@ -408,12 +407,11 @@ class KernTable_format_0_Test(object): st = kern.kernTables[0] assert st.kernTable == { - (a, b): 0 - for (a, b) in itertools.product( - font.getGlyphOrder(), repeat=2) + (a, b): 0 for (a, b) in itertools.product(font.getGlyphOrder(), repeat=2) } if __name__ == "__main__": import sys + sys.exit(pytest.main(sys.argv)) |