From 964df076e18d978a38537abb49276f45ff6a8b32 Mon Sep 17 00:00:00 2001 From: Cosimo Lupo Date: Mon, 5 Sep 2022 17:14:50 +0100 Subject: [PATCH] varLib_test: test we don't add no-op DeltaSetIndexMap when not needed https://github.com/fonttools/fonttools/issues/2800 --- Tests/varLib/varLib_test.py | 39 ++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/Tests/varLib/varLib_test.py b/Tests/varLib/varLib_test.py index 29f909ae62..a567057897 100644 --- a/Tests/varLib/varLib_test.py +++ b/Tests/varLib/varLib_test.py @@ -1,7 +1,10 @@ +from fontTools.colorLib.builder import buildCOLR from fontTools.ttLib import TTFont, newTable -from fontTools.varLib import build, load_designspace +from fontTools.ttLib.tables import otTables as ot +from fontTools.varLib import build, load_designspace, _add_COLR from fontTools.varLib.errors import VarLibValidationError import fontTools.varLib.errors as varLibErrors +from fontTools.varLib.models import VariationModel from fontTools.varLib.mutator import instantiateVariableFont from fontTools.varLib import main as varLib_main, load_masters from fontTools.varLib import set_default_weight_width_slant @@ -10,6 +13,7 @@ ) from fontTools.feaLib.builder import addOpenTypeFeaturesFromString import difflib +from copy import deepcopy from io import BytesIO import os import shutil @@ -985,5 +989,38 @@ def test_all(self, ttFont): assert ttFont["post"].italicAngle == -12.0 +def test_variable_COLR_without_VarIndexMap(): + # test we don't add a no-op VarIndexMap to variable COLR when not needed + # https://github.com/fonttools/fonttools/issues/2800 + + font1 = TTFont() + font1.setGlyphOrder([".notdef", "A"]) + font1["COLR"] = buildCOLR({"A": (ot.PaintFormat.PaintSolid, 0, 1.0)}) + # font2 == font1 except for PaintSolid.Alpha + font2 = deepcopy(font1) + font2["COLR"].table.BaseGlyphList.BaseGlyphPaintRecord[0].Paint.Alpha = 0.0 + master_fonts = [font1, font2] + + varfont = deepcopy(font1) + axis_order = ["XXXX"] + model = VariationModel([{}, {"XXXX": 1.0}], axis_order) + + _add_COLR(varfont, model, master_fonts, axis_order) + + colr = varfont["COLR"].table + + assert len(colr.BaseGlyphList.BaseGlyphPaintRecord) == 1 + baserec = colr.BaseGlyphList.BaseGlyphPaintRecord[0] + assert baserec.Paint.Format == ot.PaintFormat.PaintVarSolid + assert baserec.Paint.VarIndexBase == 0 + + assert colr.VarStore is not None + assert len(colr.VarStore.VarData) == 1 + assert len(colr.VarStore.VarData[0].Item) == 1 + assert colr.VarStore.VarData[0].Item[0] == [-16384] + + assert colr.VarIndexMap is None + + if __name__ == "__main__": sys.exit(unittest.main())