[builder_test] test_pairPos_redefinition_warning

This commit is contained in:
Cosimo Lupo 2018-01-15 18:45:42 +00:00
parent 27d40f5160
commit a4e1d4a2bf
No known key found for this signature in database
GPG Key ID: 59D54DB0C9976482

View File

@ -1,6 +1,7 @@
from __future__ import print_function, division, absolute_import from __future__ import print_function, division, absolute_import
from __future__ import unicode_literals from __future__ import unicode_literals
from fontTools.misc.py23 import * from fontTools.misc.py23 import *
from fontTools.misc.loggingTools import CapturingLogHandler
from fontTools.feaLib.builder import Builder, addOpenTypeFeatures, \ from fontTools.feaLib.builder import Builder, addOpenTypeFeatures, \
addOpenTypeFeaturesFromString addOpenTypeFeaturesFromString
from fontTools.feaLib.error import FeatureLibError from fontTools.feaLib.error import FeatureLibError
@ -13,6 +14,7 @@ import os
import shutil import shutil
import sys import sys
import tempfile import tempfile
import logging
import unittest import unittest
@ -196,16 +198,29 @@ class BuilderTest(unittest.TestCase):
" sub f_f_i by f f i;" " sub f_f_i by f f i;"
"} test;") "} test;")
def test_pairPos_redefinition(self): def test_pairPos_redefinition_warning(self):
self.assertRaisesRegex( # https://github.com/fonttools/fonttools/issues/1147
FeatureLibError, logger = logging.getLogger("fontTools.feaLib.builder")
r"Already defined position for pair A B " with CapturingLogHandler(logger, "WARNING") as captor:
"at .*:2:[0-9]+", # :2: = line 2 # the pair "yacute semicolon" is redefined in the enum pos
self.build, font = self.build(
"feature test {\n" "@Y_LC = [y yacute ydieresis];"
" pos A B 123;\n" # line 2 "@SMALL_PUNC = [comma semicolon period];"
" pos A B 456;\n" "feature kern {"
"} test;\n") " pos yacute semicolon -70;"
" enum pos @Y_LC semicolon -80;"
" pos @Y_LC @SMALL_PUNC -100;"
"} kern;")
captor.assertRegex("Already defined position for pair yacute semicolon")
# the first definition prevails: yacute semicolon -70
st = font["GPOS"].table.LookupList.Lookup[0].SubTable[0]
self.assertEqual(st.Coverage.glyphs[2], "yacute")
self.assertEqual(st.PairSet[2].PairValueRecord[0].SecondGlyph,
"semicolon")
self.assertEqual(vars(st.PairSet[2].PairValueRecord[0].Value1),
{"XAdvance": -70})
def test_singleSubst_multipleSubstitutionsForSameGlyph(self): def test_singleSubst_multipleSubstitutionsForSameGlyph(self):
self.assertRaisesRegex( self.assertRaisesRegex(