aboutsummaryrefslogtreecommitdiff
path: root/Tests/subset/subset_test.py
diff options
context:
space:
mode:
Diffstat (limited to 'Tests/subset/subset_test.py')
-rw-r--r--Tests/subset/subset_test.py63
1 files changed, 57 insertions, 6 deletions
diff --git a/Tests/subset/subset_test.py b/Tests/subset/subset_test.py
index facafb2a..7efcb698 100644
--- a/Tests/subset/subset_test.py
+++ b/Tests/subset/subset_test.py
@@ -819,13 +819,20 @@ class SubsetTest:
if not have_uharfbuzz:
pytest.skip("uharfbuzz is not installed")
if not ok:
- # pretend hb.repack returns an error
+ # pretend hb.repack/repack_with_tag return an error
import uharfbuzz as hb
def mock_repack(data, obj_list):
raise hb.RepackerError("mocking")
monkeypatch.setattr(hb, "repack", mock_repack)
+
+ if hasattr(hb, "repack_with_tag"): # uharfbuzz >= 0.30.0
+
+ def mock_repack_with_tag(tag, data, obj_list):
+ raise hb.RepackerError("mocking")
+
+ monkeypatch.setattr(hb, "repack_with_tag", mock_repack_with_tag)
else:
if have_uharfbuzz:
# pretend uharfbuzz is not installed
@@ -879,8 +886,8 @@ class SubsetTest:
# test we emit a log.error if hb.repack fails (and we don't if successful)
assert (
(
- "hb.repack failed to serialize 'GSUB', reverting to "
- "pure-python serializer; the error message was: RepackerError: mocking"
+ "hb.repack failed to serialize 'GSUB', attempting fonttools resolutions "
+ "; the error message was: RepackerError: mocking"
) in caplog.text
) ^ ok
@@ -953,7 +960,8 @@ def test_subset_feature_variations_drop_all(featureVarsTestFont):
# https://github.com/fonttools/fonttools/issues/1881#issuecomment-619415044
-def test_subset_single_pos_format():
+@pytest.fixture
+def singlepos2_font():
fb = FontBuilder(unitsPerEm=1000)
fb.setupGlyphOrder([".notdef", "a", "b", "c"])
fb.setupCharacterMap({ord("a"): "a", ord("b"): "b", ord("c"): "c"})
@@ -971,8 +979,11 @@ def test_subset_single_pos_format():
fb.save(buf)
buf.seek(0)
- font = TTFont(buf)
+ return TTFont(buf)
+
+def test_subset_single_pos_format(singlepos2_font):
+ font = singlepos2_font
# The input font has a SinglePos Format 2 subtable where each glyph has
# different ValueRecords
assert getXML(font["GPOS"].table.LookupList.Lookup[0].toXML, font) == [
@@ -1018,6 +1029,46 @@ def test_subset_single_pos_format():
'</Lookup>',
]
+def test_subset_single_pos_format2_all_None(singlepos2_font):
+ # https://github.com/fonttools/fonttools/issues/2602
+ font = singlepos2_font
+ gpos = font["GPOS"].table
+ subtable = gpos.LookupList.Lookup[0].SubTable[0]
+ assert subtable.Format == 2
+ # Hack a SinglePosFormat2 with ValueFormat = 0; our own buildSinglePos
+ # never makes these as a SinglePosFormat1 is more compact, but they can
+ # be found in the wild.
+ subtable.Value = [None] * subtable.ValueCount
+ subtable.ValueFormat = 0
+
+ assert getXML(subtable.toXML, font) == [
+ '<SinglePos Format="2">',
+ ' <Coverage>',
+ ' <Glyph value="a"/>',
+ ' <Glyph value="b"/>',
+ ' <Glyph value="c"/>',
+ ' </Coverage>',
+ ' <ValueFormat value="0"/>',
+ ' <!-- ValueCount=3 -->',
+ '</SinglePos>',
+ ]
+
+ options = subset.Options()
+ subsetter = subset.Subsetter(options)
+ subsetter.populate(unicodes=[ord("a"), ord("c")])
+ subsetter.subset(font)
+
+ # Check it was downgraded to Format1 after subsetting
+ assert getXML(font["GPOS"].table.LookupList.Lookup[0].SubTable[0].toXML, font) == [
+ '<SinglePos Format="1">',
+ ' <Coverage>',
+ ' <Glyph value="a"/>',
+ ' <Glyph value="c"/>',
+ ' </Coverage>',
+ ' <ValueFormat value="0"/>',
+ '</SinglePos>',
+ ]
+
@pytest.fixture
def ttf_path(tmp_path):
@@ -1426,7 +1477,7 @@ def test_subset_svg_missing_lxml(ttf_path):
font["SVG "].docList = [('<svg><g id="glyph1"/></svg>', 1, 1)]
font.save(ttf_path)
- with pytest.raises(ModuleNotFoundError):
+ with pytest.raises(ImportError):
subset.main([str(ttf_path), "--gids=0,1"])