From d590feba999c99ab74da400fdc8d148dc63a3433 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Tue, 2 Apr 2024 11:42:42 -0600 Subject: [PATCH] [avar] Add test for ttGlyphSet support --- Tests/ttLib/tables/_a_v_a_r_test.py | 28 +++++++++++++++++- .../tables/data/Amstelvar-avar2.subset.ttf | Bin 0 -> 9348 bytes 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 Tests/ttLib/tables/data/Amstelvar-avar2.subset.ttf diff --git a/Tests/ttLib/tables/_a_v_a_r_test.py b/Tests/ttLib/tables/_a_v_a_r_test.py index dbe07b3a5..2c41bdf64 100644 --- a/Tests/ttLib/tables/_a_v_a_r_test.py +++ b/Tests/ttLib/tables/_a_v_a_r_test.py @@ -2,6 +2,7 @@ from fontTools.misc.testTools import parseXML from fontTools.misc.textTools import deHexStr from fontTools.misc.xmlWriter import XMLWriter from fontTools.misc.fixedTools import floatToFixed as fl2fi +from fontTools.pens.statisticsPen import StatisticsPen from fontTools.ttLib import TTFont, TTLibError import fontTools.ttLib.tables.otTables as otTables from fontTools.ttLib.tables._a_v_a_r import table__a_v_a_r @@ -9,9 +10,12 @@ from fontTools.ttLib.tables._f_v_a_r import table__f_v_a_r, Axis import fontTools.varLib.models as models import fontTools.varLib.varStore as varStore from io import BytesIO +import os import unittest +DATA_DIR = os.path.join(os.path.abspath(os.path.dirname(__file__)), "data") + TEST_DATA = deHexStr( "00 01 00 00 00 00 00 02 " "00 04 C0 00 C0 00 00 00 00 00 13 33 33 33 40 00 40 00 " @@ -100,7 +104,7 @@ class AxisVariationTableTest(unittest.TestCase): class Avar2Test(unittest.TestCase): - def test(self): + def test_roundtrip(self): axisTags = ["wght", "wdth"] fvar = table__f_v_a_r() for tag in axisTags: @@ -173,6 +177,28 @@ class Avar2Test(unittest.TestCase): assert avar.table.VarStore.VarRegionList.RegionAxisCount == 2 assert avar.table.VarStore.VarRegionList.RegionCount == 1 + def test_ttGlyphSet(self): + ttf = os.path.join(DATA_DIR, "Amstelvar-avar2.subset.ttf") + font = TTFont(ttf) + + regular = font.getGlyphSet() + black = font.getGlyphSet(location={"wght": 900}) + expanded = font.getGlyphSet(location={"wdth": 125}) + + regularStats = StatisticsPen() + blackStats = StatisticsPen() + expandedStats = StatisticsPen() + + for glyph in "Test": + regular[glyph].draw(regularStats) + black[glyph].draw(blackStats) + expanded[glyph].draw(expandedStats) + + assert abs(regularStats.area) < abs(blackStats.area) + assert abs(expandedStats.area) < abs(blackStats.area) + + assert regularStats.meanX < expandedStats.meanX + if __name__ == "__main__": import sys diff --git a/Tests/ttLib/tables/data/Amstelvar-avar2.subset.ttf b/Tests/ttLib/tables/data/Amstelvar-avar2.subset.ttf new file mode 100644 index 0000000000000000000000000000000000000000..13610487134ff7da81b53058cac37294efb23608 GIT binary patch literal 9348 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