| from __future__ import print_function, division, absolute_import, unicode_literals |
| from fontTools.misc.py23 import * |
| from fontTools.misc.testTools import parseXML |
| from fontTools.misc.textTools import deHexStr |
| from fontTools.misc.xmlWriter import XMLWriter |
| from fontTools.ttLib import TTLibError |
| from fontTools.ttLib.tables._a_v_a_r import table__a_v_a_r |
| from fontTools.ttLib.tables._f_v_a_r import table__f_v_a_r, Axis |
| import collections |
| import logging |
| import unittest |
| |
| |
| TEST_DATA = deHexStr( |
| "00 01 00 00 00 00 00 02 " |
| "00 04 C0 00 C0 00 00 00 00 00 13 33 33 33 40 00 40 00 " |
| "00 03 C0 00 C0 00 00 00 00 00 40 00 40 00") |
| |
| |
| class AxisVariationTableTest(unittest.TestCase): |
| def test_compile(self): |
| avar = table__a_v_a_r() |
| avar.segments["wdth"] = {-1.0: -1.0, 0.0: 0.0, 0.3: 0.8, 1.0: 1.0} |
| avar.segments["wght"] = {-1.0: -1.0, 0.0: 0.0, 1.0: 1.0} |
| self.assertEqual(TEST_DATA, avar.compile(self.makeFont(["wdth", "wght"]))) |
| |
| def test_decompile(self): |
| avar = table__a_v_a_r() |
| avar.decompile(TEST_DATA, self.makeFont(["wdth", "wght"])) |
| self.assertEqual({ |
| "wdth": {-1.0: -1.0, 0.0: 0.0, 0.3: 0.8, 1.0: 1.0}, |
| "wght": {-1.0: -1.0, 0.0: 0.0, 1.0: 1.0} |
| }, avar.segments) |
| |
| def test_decompile_unsupportedVersion(self): |
| avar = table__a_v_a_r() |
| font = self.makeFont(["wdth", "wght"]) |
| self.assertRaises(TTLibError, avar.decompile, deHexStr("02 01 03 06 00 00 00 00"), font) |
| |
| def test_toXML(self): |
| avar = table__a_v_a_r() |
| avar.segments["opsz"] = {-1.0: -1.0, 0.0: 0.0, 0.3: 0.8, 1.0: 1.0} |
| writer = XMLWriter(BytesIO()) |
| avar.toXML(writer, self.makeFont(["opsz"])) |
| self.assertEqual([ |
| '<segment axis="opsz">', |
| '<mapping from="-1.0" to="-1.0"/>', |
| '<mapping from="0.0" to="0.0"/>', |
| '<mapping from="0.3" to="0.8"/>', |
| '<mapping from="1.0" to="1.0"/>', |
| '</segment>' |
| ], self.xml_lines(writer)) |
| |
| def test_fromXML(self): |
| avar = table__a_v_a_r() |
| for name, attrs, content in parseXML( |
| '<segment axis="wdth">' |
| ' <mapping from="-1.0" to="-1.0"/>' |
| ' <mapping from="0.0" to="0.0"/>' |
| ' <mapping from="0.7" to="0.2"/>' |
| ' <mapping from="1.0" to="1.0"/>' |
| '</segment>'): |
| avar.fromXML(name, attrs, content, ttFont=None) |
| self.assertEqual({"wdth": {-1: -1, 0: 0, 0.7: 0.2, 1.0: 1.0}}, |
| avar.segments) |
| |
| @staticmethod |
| def makeFont(axisTags): |
| """['opsz', 'wdth'] --> ttFont""" |
| fvar = table__f_v_a_r() |
| for tag in axisTags: |
| axis = Axis() |
| axis.axisTag = tag |
| fvar.axes.append(axis) |
| return {"fvar": fvar} |
| |
| @staticmethod |
| def xml_lines(writer): |
| content = writer.file.getvalue().decode("utf-8") |
| return [line.strip() for line in content.splitlines()][1:] |
| |
| |
| if __name__ == "__main__": |
| import sys |
| sys.exit(unittest.main()) |