from fontTools.ttLib import TTFont from fontTools.ttLib import ttGlyphSet from fontTools.pens.recordingPen import RecordingPen import os import pytest class TTGlyphSetTest(object): @staticmethod def getpath(testfile): path = os.path.dirname(__file__) return os.path.join(path, "data", testfile) @pytest.mark.parametrize( "location, expected", [ ( None, [ ('moveTo', ((175, 0),)), ('lineTo', ((367, 0),)), ('lineTo', ((367, 1456),)), ('lineTo', ((175, 1456),)), ('closePath', ()) ] ), ( {}, [ ('moveTo', ((175, 0),)), ('lineTo', ((367, 0),)), ('lineTo', ((367, 1456),)), ('lineTo', ((175, 1456),)), ('closePath', ()) ] ), ( {'wght': 100}, [ ('moveTo', ((175, 0),)), ('lineTo', ((271, 0),)), ('lineTo', ((271, 1456),)), ('lineTo', ((175, 1456),)), ('closePath', ()) ] ), ( {'wght': 1000}, [ ('moveTo', ((128, 0),)), ('lineTo', ((550, 0),)), ('lineTo', ((550, 1456),)), ('lineTo', ((128, 1456),)), ('closePath', ()) ] ), ( {'wght': 1000, 'wdth': 25}, [ ('moveTo', ((140, 0),)), ('lineTo', ((553, 0),)), ('lineTo', ((553, 1456),)), ('lineTo', ((140, 1456),)), ('closePath', ()) ] ), ( {'wght': 1000, 'wdth': 50}, [ ('moveTo', ((136, 0),)), ('lineTo', ((552, 0),)), ('lineTo', ((552, 1456),)), ('lineTo', ((136, 1456),)), ('closePath', ()) ] ), ] ) def test_glyphset( self, location, expected ): # TODO: also test loading CFF-flavored fonts font = TTFont(self.getpath("I.ttf")) glyphset = font.getGlyphSet(location=location) assert isinstance(glyphset, ttGlyphSet._TTGlyphSet) if location: assert isinstance(glyphset, ttGlyphSet._TTVarGlyphSet) assert list(glyphset.keys()) == [".notdef", "I"] assert "I" in glyphset assert glyphset.has_key("I") # we should really get rid of this... assert len(glyphset) == 2 pen = RecordingPen() glyph = glyphset['I'] assert glyphset.get("foobar") is None assert isinstance(glyph, ttGlyphSet._TTGlyph) if location: assert isinstance(glyph, ttGlyphSet._TTVarGlyphGlyf) else: assert isinstance(glyph, ttGlyphSet._TTGlyphGlyf) glyph.draw(pen) actual = pen.value assert actual == expected, (location, actual, expected)