From b3d6868516545f51bf3464016aa62201b42bcc22 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Fri, 26 Aug 2022 21:38:58 -0600 Subject: [PATCH] [ttGlyphSet_test] Test CFF2 variations --- Tests/ttLib/data/I.otf | Bin 0 -> 3716 bytes Tests/ttLib/ttGlyphSet_test.py | 141 +++++++++++++++++++++------------ 2 files changed, 90 insertions(+), 51 deletions(-) create mode 100644 Tests/ttLib/data/I.otf diff --git a/Tests/ttLib/data/I.otf b/Tests/ttLib/data/I.otf new file mode 100644 index 0000000000000000000000000000000000000000..41c653477d8b7e7fbf6b96644d731676b6fee836 GIT binary patch literal 3716 zcmb_edr(}}8UN0``{J;H4MB(*8gF2wnh+pcf+WT^Jd+q;Q=q7+)(~EsCOl?YS?EyI zghbuDkcc6(-3se;GS!YIQ>Eji)5b}i+NzzVWBW&)q#dVDr_ zo%ZaWbHDfFeBU|u`kR{kCETmro5G2EPFKzQ(5V zrq|d0{v@0|0{l-c{Vl=VZtpPcvHg8&Fx~AU&7ff4;bFmmO>Kpo7w7{0?&p`Xm@1l;Z>{Of9?t)J;l}N> z9WI&6!@!J)jYu=GvV~04Qp3}RALF|W>sS}g88}RWDul!Fy^_#_>D&HEs)`yCy&d=e z$b4R?Mm`Q(kIHpXc~6X?DngtfJ6uMTdqLT4KE+qa$2+Ll9ID-BR}{{PeJqahstP~C z-9@{UOCMd~T@!xIk`b4bDF|xt!a9)IkOzrK+E;&p% zNiltKbUA&YU=Iro1Uf@_a8!hT=d~7md$O*;F_H#MEJ;bqnA~M6=Vjz3Tw(=aw#qpv z$k9b<;m$yaUI+Q;z3bEwwkFid`lbekjM2ucunAO`<#-5(aAM`N%a}`~U_D`BQl!Em zcL9cQvrpxR7M3Q`QDegkcpkCR!uX_Rh*cH_k2t5i3%omA3)n~X6^>Ql>~Va8dpH9% z-AeVepZY06Q}mJ{Pl%Nx<@o_7+aTdI;suVbG---R;iwrm?hR8em1AdIi7e`_;0zd7 zwMAMw=fSv<5BG;+mJ||1H)9$-BZP5BFur?{rV#Hcf>< z_>*;ViyZSf=d$9lpsq*D<>_^Dn|yu`;JajC?zL|}pvk~@51$;`F0VwRd2-G9@qs+) zd@u4jStQroA&26#-LdJ|MC_f|MEqQ0^q8*ePn^K=SPY9khIy(d2}PJ|(4r3~A$=5( zp)q!pX*|A>?U);zI5ufwx;~oi3@2v0CeOrA#(o>0NK7YObE6X}YoEE}L3fJoPJOj| zO4s|M+4Ax|GYXWV*{Rdv-AVJFZ9>shL^HI!FX-7e$ z9!~!@sYg9w0GeDcb(TNwaaPFuaLJoW7?2q4UoE-d4)MHB=jct`j z3S{`nBTqdX_2{)Sawq#)>y?jRxn1g!O|o_7h3PNInaWr7<9lQt0(v|@y4jF{`@50d zT-H#mzealHn3t1*$knlbn7x}TbECRn?v!6d_&rm*8lc2KGKiv^>N#Jd*kq5|=<1*a^y${bN32jkE`-Iegp^Ng$7vY#C~usg1CUL zSG8KJRv~=pm{kkifL1jPSan^}`ZU_dYjO{wOL|Fm$@1FNBJc1G_^*PU4rIuAhR~7i z$h8lax!*L}M1@q0UkTlbF62IKH8}l?yh6wn(-!c%VC5k6S*ioi0Za{F4285AvlQ!Q z$dz7Wvm7U)g8b0F{{CJYDQi?gvx2JW-&IOOK3uy4Sob48j;F?mKLqHLCy)2Imj(?D sK6NbRLw1`GwYDrm4X-BVh9JEauc#vIH2(_WC)p*1#!hvCcRT3xFK^Jmp#T5? literal 0 HcmV?d00001 diff --git a/Tests/ttLib/ttGlyphSet_test.py b/Tests/ttLib/ttGlyphSet_test.py index bc0bf2ceb..3713b31af 100644 --- a/Tests/ttLib/ttGlyphSet_test.py +++ b/Tests/ttLib/ttGlyphSet_test.py @@ -6,82 +6,116 @@ 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", + "fontfile, location, expected", [ ( + "I.ttf", 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", ()), + ], ), ( + "I.ttf", {}, [ - ('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}, + "I.ttf", + {"wght": 100}, [ - ('moveTo', ((175, 0),)), - ('lineTo', ((271, 0),)), - ('lineTo', ((271, 1456),)), - ('lineTo', ((175, 1456),)), - ('closePath', ()) - ] + ("moveTo", ((175, 0),)), + ("lineTo", ((271, 0),)), + ("lineTo", ((271, 1456),)), + ("lineTo", ((175, 1456),)), + ("closePath", ()), + ], ), ( - {'wght': 1000}, + "I.ttf", + {"wght": 1000}, [ - ('moveTo', ((128, 0),)), - ('lineTo', ((550, 0),)), - ('lineTo', ((550, 1456),)), - ('lineTo', ((128, 1456),)), - ('closePath', ()) - ] + ("moveTo", ((128, 0),)), + ("lineTo", ((550, 0),)), + ("lineTo", ((550, 1456),)), + ("lineTo", ((128, 1456),)), + ("closePath", ()), + ], ), ( - {'wght': 1000, 'wdth': 25}, + "I.ttf", + {"wght": 1000, "wdth": 25}, [ - ('moveTo', ((140, 0),)), - ('lineTo', ((553, 0),)), - ('lineTo', ((553, 1456),)), - ('lineTo', ((140, 1456),)), - ('closePath', ()) - ] + ("moveTo", ((140, 0),)), + ("lineTo", ((553, 0),)), + ("lineTo", ((553, 1456),)), + ("lineTo", ((140, 1456),)), + ("closePath", ()), + ], ), ( - {'wght': 1000, 'wdth': 50}, + "I.ttf", + {"wght": 1000, "wdth": 50}, [ - ('moveTo', ((136, 0),)), - ('lineTo', ((552, 0),)), - ('lineTo', ((552, 1456),)), - ('lineTo', ((136, 1456),)), - ('closePath', ()) - ] + ("moveTo", ((136, 0),)), + ("lineTo", ((552, 0),)), + ("lineTo", ((552, 1456),)), + ("lineTo", ((136, 1456),)), + ("closePath", ()), + ], ), - ] + ( + "I.otf", + {"wght": 1000}, + [ + ("moveTo", ((179, 74),)), + ("lineTo", ((28, 59),)), + ("lineTo", ((28, 0),)), + ("lineTo", ((367, 0),)), + ("lineTo", ((367, 59),)), + ("lineTo", ((212, 74),)), + ("lineTo", ((179, 74),)), + ("closePath", ()), + ("moveTo", ((179, 578),)), + ("lineTo", ((212, 578),)), + ("lineTo", ((367, 593),)), + ("lineTo", ((367, 652),)), + ("lineTo", ((28, 652),)), + ("lineTo", ((28, 593),)), + ("lineTo", ((179, 578),)), + ("closePath", ()), + ("moveTo", ((98, 310),)), + ("curveTo", ((98, 205), (98, 101), (95, 0))), + ("lineTo", ((299, 0),)), + ("curveTo", ((296, 103), (296, 207), (296, 311))), + ("lineTo", ((296, 342),)), + ("curveTo", ((296, 447), (296, 551), (299, 652))), + ("lineTo", ((95, 652),)), + ("curveTo", ((98, 549), (98, 445), (98, 342))), + ("lineTo", ((98, 310),)), + ("closePath", ()), + ], + ), + ], ) - def test_glyphset( - self, location, expected - ): - # TODO: also test loading CFF-flavored fonts - font = TTFont(self.getpath("I.ttf")) + def test_glyphset(self, fontfile, location, expected): + font = TTFont(self.getpath(fontfile)) glyphset = font.getGlyphSet(location=location) assert isinstance(glyphset, ttGlyphSet._TTGlyphSet) @@ -96,17 +130,22 @@ class TTGlyphSetTest(object): assert len(glyphset) == 2 pen = RecordingPen() - glyph = glyphset['I'] + glyph = glyphset["I"] assert glyphset.get("foobar") is None assert isinstance(glyph, ttGlyphSet._TTGlyph) + is_glyf = fontfile.endswith(".ttf") if location: - assert isinstance(glyph, ttGlyphSet._TTVarGlyphGlyf) + glyphType = ( + ttGlyphSet._TTVarGlyphGlyf if is_glyf else ttGlyphSet._TTVarGlyphCFF + ) else: - assert isinstance(glyph, ttGlyphSet._TTGlyphGlyf) + glyphType = ttGlyphSet._TTGlyphGlyf if is_glyf else ttGlyphSet._TTGlyphCFF + assert isinstance(glyph, glyphType) glyph.draw(pen) actual = pen.value + print(actual) assert actual == expected, (location, actual, expected)