from __future__ import print_function, division, absolute_import
from __future__ import unicode_literals
from fontTools.misc.testTools import getXML
from fontTools.otlLib import builder
import unittest
class BuilderTest(unittest.TestCase):
GLYPHS = ".notdef space zero one two three four five six".split()
GLYPHMAP = {name: num for num, name in enumerate(GLYPHS)}
ANCHOR1 = builder.buildAnchor(11, -11)
ANCHOR2 = builder.buildAnchor(22, -22)
ANCHOR3 = builder.buildAnchor(33, -33)
def test_buildAnchor_format1(self):
anchor = builder.buildAnchor(23, 42)
self.assertEqual(getXML(anchor.toXML),
''
' '
' '
'')
def test_buildAnchor_format2(self):
anchor = builder.buildAnchor(23, 42, point=17)
self.assertEqual(getXML(anchor.toXML),
''
' '
' '
' '
'')
def test_buildAnchor_format3(self):
anchor = builder.buildAnchor(
23, 42,
deviceX=builder.buildDevice([(1, 1), (0, 0)]),
deviceY=builder.buildDevice([(7, 7)]))
self.assertEqual(getXML(anchor.toXML),
''
' '
' '
' '
' '
' '
' '
' '
' '
' '
' '
' '
' '
' '
' '
'')
def test_buildAttachList(self):
attachList = builder.buildAttachList({
"zero": [23, 7], "one": [1],
}, self.GLYPHMAP)
self.assertEqual(getXML(attachList.toXML),
''
' '
' '
' '
' '
' '
' '
' '
' '
' '
' '
' '
' '
' '
' '
'')
def test_buildCoverage(self):
cov = builder.buildCoverage({"two", "four"}, {"two": 2, "four": 4})
self.assertEqual(getXML(cov.toXML),
''
' '
' '
'')
def test_buildCursivePos(self):
pos = builder.buildCursivePos({
"two": (self.ANCHOR1, self.ANCHOR2),
"four": (self.ANCHOR3, self.ANCHOR1)
}, self.GLYPHMAP)
self.assertEqual(getXML(pos.toXML),
''
' '
' '
' '
' '
' '
' '
' '
' '
' '
' '
' '
' '
' '
' '
' '
' '
' '
' '
' '
' '
' '
' '
' '
' '
' '
'')
def test_buildDevice_format1(self):
device = builder.buildDevice([(1, 1), (0, 0)])
self.assertEqual(getXML(device.toXML),
''
' '
' '
' '
' '
'')
def test_buildDevice_format2(self):
device = builder.buildDevice([(1, 2), (-1, 1), (0, 0)])
self.assertEqual(getXML(device.toXML),
''
' '
' '
' '
' '
'')
def test_buildDevice_format3(self):
device = builder.buildDevice([(5, 3), (1, 77)])
self.assertEqual(getXML(device.toXML),
''
' '
' '
' '
' '
'')
def test_buildSinglePos(self):
subtables = builder.buildSinglePos({
"one": builder.buildValue({"XPlacement": 500}),
"two": builder.buildValue({"XPlacement": 500}),
"three": builder.buildValue({"XPlacement": 200}),
"four": builder.buildValue({"XPlacement": 400}),
"five": builder.buildValue({"XPlacement": 500}),
"six": builder.buildValue({"YPlacement": -6}),
}, self.GLYPHMAP)
self.assertEqual(''.join([getXML(t.toXML) for t in subtables]),
''
' '
' '
' '
' '
' '
' '
' '
''
''
' '
' '
' '
' '
' '
' '
' '
' '
''
''
' '
' '
' '
' '
' '
'')
def test_buildSinglePos_ValueFormat0(self):
subtables = builder.buildSinglePos({
"zero": builder.buildValue({})
}, self.GLYPHMAP)
self.assertEqual(''.join([getXML(t.toXML) for t in subtables]),
''
' '
' '
' '
' '
'')
def test_buildSinglePosSubtable_format1(self):
subtable = builder.buildSinglePosSubtable({
"one": builder.buildValue({"XPlacement": 777}),
"two": builder.buildValue({"XPlacement": 777}),
}, self.GLYPHMAP)
self.assertEqual(getXML(subtable.toXML),
''
' '
' '
' '
' '
' '
' '
'')
def test_buildSinglePosSubtable_format2(self):
subtable = builder.buildSinglePosSubtable({
"one": builder.buildValue({"XPlacement": 777}),
"two": builder.buildValue({"YPlacement": -888}),
}, self.GLYPHMAP)
self.maxDiff = None
self.assertEqual(getXML(subtable.toXML),
''
' '
' '
' '
' '
' '
' '
' '
' '
'')
def test_buildValue(self):
value = builder.buildValue({"XPlacement": 7, "YPlacement": 23})
func = lambda writer, font: value.toXML(writer, font, valueName="Val")
self.assertEqual(getXML(func),
'')
def test_getLigatureKey(self):
components = lambda s: [tuple(word) for word in s.split()]
c = components("fi fl ff ffi fff")
c.sort(key=builder._getLigatureKey)
self.assertEqual(c, components("fff ffi ff fi fl"))
def test_getSinglePosValueKey(self):
device = builder.buildDevice([(10, 1), (11, 3)])
a1 = builder.buildValue({"XPlacement": 500, "XPlaDevice": device})
a2 = builder.buildValue({"XPlacement": 500, "XPlaDevice": device})
b = builder.buildValue({"XPlacement": 500})
keyA1 = builder._getSinglePosValueKey(a1)
keyA2 = builder._getSinglePosValueKey(a1)
keyB = builder._getSinglePosValueKey(b)
self.assertEqual(keyA1, keyA2)
self.assertEqual(hash(keyA1), hash(keyA2))
self.assertNotEqual(keyA1, keyB)
self.assertNotEqual(hash(keyA1), hash(keyB))
if __name__ == "__main__":
unittest.main()