aboutsummaryrefslogtreecommitdiff
path: root/Tests/ttLib/tables/_k_e_r_n_test.py
diff options
context:
space:
mode:
Diffstat (limited to 'Tests/ttLib/tables/_k_e_r_n_test.py')
-rw-r--r--Tests/ttLib/tables/_k_e_r_n_test.py264
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))