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 f_f_i c_t".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_buildAttachList_empty(self): self.assertIsNone(builder.buildAttachList({}, self.GLYPHMAP)) def test_buildAttachPoint(self): attachPoint = builder.buildAttachPoint([7, 3]) self.assertEqual(getXML(attachPoint.toXML), '' ' ' ' ' ' ' '') def test_buildCaretValueForCoord(self): caret = builder.buildCaretValueForCoord(500) self.assertEqual(getXML(caret.toXML), '' ' ' '') def test_buildCaretValueForPoint(self): caret = builder.buildCaretValueForPoint(23) self.assertEqual(getXML(caret.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_buildLigCaretList(self): carets = builder.buildLigCaretList( {"f_f_i": [300, 600]}, {"c_t": [42]}, self.GLYPHMAP) self.assertEqual(getXML(carets.toXML), '' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '') def test_buildLigCaretList_bothCoordsAndPointsForSameGlyph(self): carets = builder.buildLigCaretList( {"f_f_i": [300]}, {"f_f_i": [7]}, self.GLYPHMAP) self.assertEqual(getXML(carets.toXML), '' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '') def test_buildLigCaretList_empty(self): self.assertIsNone(builder.buildLigCaretList({}, {}, self.GLYPHMAP)) def test_buildLigCaretList_None(self): self.assertIsNone(builder.buildLigCaretList(None, None, self.GLYPHMAP)) def test_buildLigGlyph_coords(self): lig = builder.buildLigGlyph([500, 800], None) self.assertEqual(getXML(lig.toXML), '' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '') def test_buildLigGlyph_empty(self): self.assertIsNone(builder.buildLigGlyph([], [])) def test_buildLigGlyph_None(self): self.assertIsNone(builder.buildLigGlyph(None, None)) def test_buildLigGlyph_points(self): lig = builder.buildLigGlyph(None, [2]) self.assertEqual(getXML(lig.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()