aboutsummaryrefslogtreecommitdiff
path: root/Tests/mtiLib/mti_test.py
diff options
context:
space:
mode:
Diffstat (limited to 'Tests/mtiLib/mti_test.py')
-rw-r--r--Tests/mtiLib/mti_test.py565
1 files changed, 424 insertions, 141 deletions
diff --git a/Tests/mtiLib/mti_test.py b/Tests/mtiLib/mti_test.py
index 8a80113c..a4cc098c 100644
--- a/Tests/mtiLib/mti_test.py
+++ b/Tests/mtiLib/mti_test.py
@@ -1,120 +1,396 @@
from fontTools.misc.xmlWriter import XMLWriter
from fontTools.ttLib import TTFont
+from fontTools.feaLib.lookupDebugInfo import LOOKUP_DEBUG_ENV_VAR
from fontTools import mtiLib
import difflib
from io import StringIO
import os
import sys
-import unittest
-
-
-class MtiTest(unittest.TestCase):
-
- GLYPH_ORDER = ['.notdef',
- 'a', 'b', 'pakannada', 'phakannada', 'vakannada', 'pevowelkannada',
- 'phevowelkannada', 'vevowelkannada', 'uvowelsignkannada', 'uuvowelsignkannada',
- 'uvowelsignaltkannada', 'uuvowelsignaltkannada', 'uuvowelsignsinh',
- 'uvowelsignsinh', 'rakarsinh', 'zero', 'one', 'two', 'three', 'four', 'five',
- 'six', 'seven', 'eight', 'nine', 'slash', 'fraction', 'A', 'B', 'C', 'fi',
- 'fl', 'breve', 'acute', 'uniFB01', 'ffi', 'grave', 'commaacent', 'dotbelow',
- 'dotabove', 'cedilla', 'commaaccent', 'Acircumflex', 'V', 'T', 'acircumflex',
- 'Aacute', 'Agrave', 'O', 'Oacute', 'Ograve', 'Ocircumflex', 'aacute', 'agrave',
- 'aimatrabindigurmukhi', 'aimatragurmukhi', 'aimatratippigurmukhi',
- 'aumatrabindigurmukhi', 'aumatragurmukhi', 'bindigurmukhi',
- 'eematrabindigurmukhi', 'eematragurmukhi', 'eematratippigurmukhi',
- 'oomatrabindigurmukhi', 'oomatragurmukhi', 'oomatratippigurmukhi',
- 'lagurmukhi', 'lanuktagurmukhi', 'nagurmukhi', 'nanuktagurmukhi',
- 'ngagurmukhi', 'nganuktagurmukhi', 'nnagurmukhi', 'nnanuktagurmukhi',
- 'tthagurmukhi', 'tthanuktagurmukhi', 'bsuperior', 'isuperior', 'vsuperior',
- 'wsuperior', 'periodsuperior', 'osuperior', 'tsuperior', 'dollarsuperior',
- 'fsuperior', 'gsuperior', 'zsuperior', 'dsuperior', 'psuperior', 'hsuperior',
- 'oesuperior', 'aesuperior', 'centsuperior', 'esuperior', 'lsuperior',
- 'qsuperior', 'csuperior', 'asuperior', 'commasuperior', 'xsuperior',
- 'egravesuperior', 'usuperior', 'rsuperior', 'nsuperior', 'ssuperior',
- 'msuperior', 'jsuperior', 'ysuperior', 'ksuperior', 'guilsinglright',
- 'guilsinglleft', 'uniF737', 'uniE11C', 'uniE11D', 'uniE11A', 'uni2077',
- 'uni2087', 'uniE11B', 'uniE119', 'uniE0DD', 'uniE0DE', 'uniF736', 'uniE121',
- 'uniE122', 'uniE11F', 'uni2076', 'uni2086', 'uniE120', 'uniE11E', 'uniE0DB',
- 'uniE0DC', 'uniF733', 'uniE12B', 'uniE12C', 'uniE129', 'uni00B3', 'uni2083',
- 'uniE12A', 'uniE128', 'uniF732', 'uniE133', 'uniE134', 'uniE131', 'uni00B2',
- 'uni2082', 'uniE132', 'uniE130', 'uniE0F9', 'uniF734', 'uniE0D4', 'uniE0D5',
- 'uniE0D2', 'uni2074', 'uni2084', 'uniE0D3', 'uniE0D1', 'uniF730', 'uniE13D',
- 'uniE13E', 'uniE13A', 'uni2070', 'uni2080', 'uniE13B', 'uniE139', 'uniE13C',
- 'uniF739', 'uniE0EC', 'uniE0ED', 'uniE0EA', 'uni2079', 'uni2089', 'uniE0EB',
- 'uniE0E9', 'uniF735', 'uniE0CD', 'uniE0CE', 'uniE0CB', 'uni2075', 'uni2085',
- 'uniE0CC', 'uniE0CA', 'uniF731', 'uniE0F3', 'uniE0F4', 'uniE0F1', 'uni00B9',
- 'uni2081', 'uniE0F2', 'uniE0F0', 'uniE0F8', 'uniF738', 'uniE0C0', 'uniE0C1',
- 'uniE0BE', 'uni2078', 'uni2088', 'uniE0BF', 'uniE0BD', 'I', 'Ismall', 't', 'i',
- 'f', 'IJ', 'J', 'IJsmall', 'Jsmall', 'tt', 'ij', 'j', 'ffb', 'ffh', 'h', 'ffk',
- 'k', 'ffl', 'l', 'fft', 'fb', 'ff', 'fh', 'fj', 'fk', 'ft', 'janyevoweltelugu',
- 'kassevoweltelugu', 'jaivoweltelugu', 'nyasubscripttelugu', 'kaivoweltelugu',
- 'ssasubscripttelugu', 'bayi1', 'jeemi1', 'kafi1', 'ghafi1', 'laami1', 'kafm1',
- 'ghafm1', 'laamm1', 'rayf2', 'reyf2', 'yayf2', 'zayf2', 'fayi1', 'ayehf2',
- 'hamzayeharabf2', 'hamzayehf2', 'yehf2', 'ray', 'rey', 'zay', 'yay', 'dal',
- 'del', 'zal', 'rayf1', 'reyf1', 'yayf1', 'zayf1', 'ayehf1', 'hamzayeharabf1',
- 'hamzayehf1', 'yehf1', 'dal1', 'del1', 'zal1', 'onehalf', 'onehalf.alt',
- 'onequarter', 'onequarter.alt', 'threequarters', 'threequarters.alt',
- 'AlefSuperiorNS', 'DammaNS', 'DammaRflxNS', 'DammatanNS', 'Fatha2dotsNS',
- 'FathaNS', 'FathatanNS', 'FourDotsAboveNS', 'HamzaAboveNS', 'MaddaNS',
- 'OneDotAbove2NS', 'OneDotAboveNS', 'ShaddaAlefNS', 'ShaddaDammaNS',
- 'ShaddaDammatanNS', 'ShaddaFathatanNS', 'ShaddaKasraNS', 'ShaddaKasratanNS',
- 'ShaddaNS', 'SharetKafNS', 'SukunNS', 'ThreeDotsDownAboveNS',
- 'ThreeDotsUpAboveNS', 'TwoDotsAboveNS', 'TwoDotsVerticalAboveNS', 'UltapeshNS',
- 'WaslaNS', 'AinIni.12m_MeemFin.02', 'AinIni_YehBarreeFin',
- 'AinMed_YehBarreeFin', 'BehxIni_MeemFin', 'BehxIni_NoonGhunnaFin',
- 'BehxIni_RehFin', 'BehxIni_RehFin.b', 'BehxMed_MeemFin.py',
- 'BehxMed_NoonGhunnaFin', 'BehxMed_NoonGhunnaFin.cup', 'BehxMed_RehFin',
- 'BehxMed_RehFin.cup', 'BehxMed_YehxFin', 'FehxMed_YehBarreeFin',
- 'HahIni_YehBarreeFin', 'KafIni_YehBarreeFin', 'KafMed.12_YehxFin.01',
- 'KafMed_MeemFin', 'KafMed_YehBarreeFin', 'LamAlefFin', 'LamAlefFin.cup',
- 'LamAlefFin.cut', 'LamAlefFin.short', 'LamAlefSep', 'LamIni_MeemFin',
- 'LamIni_YehBarreeFin', 'LamMed_MeemFin', 'LamMed_MeemFin.b', 'LamMed_YehxFin',
- 'LamMed_YehxFin.cup', 'TahIni_YehBarreeFin', 'null', 'CR', 'space',
- 'exclam', 'quotedbl', 'numbersign',
+import pytest
+
+
+@pytest.fixture(autouse=True)
+def set_lookup_debug_env_var(monkeypatch):
+ monkeypatch.setenv(LOOKUP_DEBUG_ENV_VAR, "1")
+
+
+class MtiTest:
+ GLYPH_ORDER = [
+ ".notdef",
+ "a",
+ "b",
+ "pakannada",
+ "phakannada",
+ "vakannada",
+ "pevowelkannada",
+ "phevowelkannada",
+ "vevowelkannada",
+ "uvowelsignkannada",
+ "uuvowelsignkannada",
+ "uvowelsignaltkannada",
+ "uuvowelsignaltkannada",
+ "uuvowelsignsinh",
+ "uvowelsignsinh",
+ "rakarsinh",
+ "zero",
+ "one",
+ "two",
+ "three",
+ "four",
+ "five",
+ "six",
+ "seven",
+ "eight",
+ "nine",
+ "slash",
+ "fraction",
+ "A",
+ "B",
+ "C",
+ "fi",
+ "fl",
+ "breve",
+ "acute",
+ "uniFB01",
+ "ffi",
+ "grave",
+ "commaacent",
+ "dotbelow",
+ "dotabove",
+ "cedilla",
+ "commaaccent",
+ "Acircumflex",
+ "V",
+ "T",
+ "acircumflex",
+ "Aacute",
+ "Agrave",
+ "O",
+ "Oacute",
+ "Ograve",
+ "Ocircumflex",
+ "aacute",
+ "agrave",
+ "aimatrabindigurmukhi",
+ "aimatragurmukhi",
+ "aimatratippigurmukhi",
+ "aumatrabindigurmukhi",
+ "aumatragurmukhi",
+ "bindigurmukhi",
+ "eematrabindigurmukhi",
+ "eematragurmukhi",
+ "eematratippigurmukhi",
+ "oomatrabindigurmukhi",
+ "oomatragurmukhi",
+ "oomatratippigurmukhi",
+ "lagurmukhi",
+ "lanuktagurmukhi",
+ "nagurmukhi",
+ "nanuktagurmukhi",
+ "ngagurmukhi",
+ "nganuktagurmukhi",
+ "nnagurmukhi",
+ "nnanuktagurmukhi",
+ "tthagurmukhi",
+ "tthanuktagurmukhi",
+ "bsuperior",
+ "isuperior",
+ "vsuperior",
+ "wsuperior",
+ "periodsuperior",
+ "osuperior",
+ "tsuperior",
+ "dollarsuperior",
+ "fsuperior",
+ "gsuperior",
+ "zsuperior",
+ "dsuperior",
+ "psuperior",
+ "hsuperior",
+ "oesuperior",
+ "aesuperior",
+ "centsuperior",
+ "esuperior",
+ "lsuperior",
+ "qsuperior",
+ "csuperior",
+ "asuperior",
+ "commasuperior",
+ "xsuperior",
+ "egravesuperior",
+ "usuperior",
+ "rsuperior",
+ "nsuperior",
+ "ssuperior",
+ "msuperior",
+ "jsuperior",
+ "ysuperior",
+ "ksuperior",
+ "guilsinglright",
+ "guilsinglleft",
+ "uniF737",
+ "uniE11C",
+ "uniE11D",
+ "uniE11A",
+ "uni2077",
+ "uni2087",
+ "uniE11B",
+ "uniE119",
+ "uniE0DD",
+ "uniE0DE",
+ "uniF736",
+ "uniE121",
+ "uniE122",
+ "uniE11F",
+ "uni2076",
+ "uni2086",
+ "uniE120",
+ "uniE11E",
+ "uniE0DB",
+ "uniE0DC",
+ "uniF733",
+ "uniE12B",
+ "uniE12C",
+ "uniE129",
+ "uni00B3",
+ "uni2083",
+ "uniE12A",
+ "uniE128",
+ "uniF732",
+ "uniE133",
+ "uniE134",
+ "uniE131",
+ "uni00B2",
+ "uni2082",
+ "uniE132",
+ "uniE130",
+ "uniE0F9",
+ "uniF734",
+ "uniE0D4",
+ "uniE0D5",
+ "uniE0D2",
+ "uni2074",
+ "uni2084",
+ "uniE0D3",
+ "uniE0D1",
+ "uniF730",
+ "uniE13D",
+ "uniE13E",
+ "uniE13A",
+ "uni2070",
+ "uni2080",
+ "uniE13B",
+ "uniE139",
+ "uniE13C",
+ "uniF739",
+ "uniE0EC",
+ "uniE0ED",
+ "uniE0EA",
+ "uni2079",
+ "uni2089",
+ "uniE0EB",
+ "uniE0E9",
+ "uniF735",
+ "uniE0CD",
+ "uniE0CE",
+ "uniE0CB",
+ "uni2075",
+ "uni2085",
+ "uniE0CC",
+ "uniE0CA",
+ "uniF731",
+ "uniE0F3",
+ "uniE0F4",
+ "uniE0F1",
+ "uni00B9",
+ "uni2081",
+ "uniE0F2",
+ "uniE0F0",
+ "uniE0F8",
+ "uniF738",
+ "uniE0C0",
+ "uniE0C1",
+ "uniE0BE",
+ "uni2078",
+ "uni2088",
+ "uniE0BF",
+ "uniE0BD",
+ "I",
+ "Ismall",
+ "t",
+ "i",
+ "f",
+ "IJ",
+ "J",
+ "IJsmall",
+ "Jsmall",
+ "tt",
+ "ij",
+ "j",
+ "ffb",
+ "ffh",
+ "h",
+ "ffk",
+ "k",
+ "ffl",
+ "l",
+ "fft",
+ "fb",
+ "ff",
+ "fh",
+ "fj",
+ "fk",
+ "ft",
+ "janyevoweltelugu",
+ "kassevoweltelugu",
+ "jaivoweltelugu",
+ "nyasubscripttelugu",
+ "kaivoweltelugu",
+ "ssasubscripttelugu",
+ "bayi1",
+ "jeemi1",
+ "kafi1",
+ "ghafi1",
+ "laami1",
+ "kafm1",
+ "ghafm1",
+ "laamm1",
+ "rayf2",
+ "reyf2",
+ "yayf2",
+ "zayf2",
+ "fayi1",
+ "ayehf2",
+ "hamzayeharabf2",
+ "hamzayehf2",
+ "yehf2",
+ "ray",
+ "rey",
+ "zay",
+ "yay",
+ "dal",
+ "del",
+ "zal",
+ "rayf1",
+ "reyf1",
+ "yayf1",
+ "zayf1",
+ "ayehf1",
+ "hamzayeharabf1",
+ "hamzayehf1",
+ "yehf1",
+ "dal1",
+ "del1",
+ "zal1",
+ "onehalf",
+ "onehalf.alt",
+ "onequarter",
+ "onequarter.alt",
+ "threequarters",
+ "threequarters.alt",
+ "AlefSuperiorNS",
+ "DammaNS",
+ "DammaRflxNS",
+ "DammatanNS",
+ "Fatha2dotsNS",
+ "FathaNS",
+ "FathatanNS",
+ "FourDotsAboveNS",
+ "HamzaAboveNS",
+ "MaddaNS",
+ "OneDotAbove2NS",
+ "OneDotAboveNS",
+ "ShaddaAlefNS",
+ "ShaddaDammaNS",
+ "ShaddaDammatanNS",
+ "ShaddaFathatanNS",
+ "ShaddaKasraNS",
+ "ShaddaKasratanNS",
+ "ShaddaNS",
+ "SharetKafNS",
+ "SukunNS",
+ "ThreeDotsDownAboveNS",
+ "ThreeDotsUpAboveNS",
+ "TwoDotsAboveNS",
+ "TwoDotsVerticalAboveNS",
+ "UltapeshNS",
+ "WaslaNS",
+ "AinIni.12m_MeemFin.02",
+ "AinIni_YehBarreeFin",
+ "AinMed_YehBarreeFin",
+ "BehxIni_MeemFin",
+ "BehxIni_NoonGhunnaFin",
+ "BehxIni_RehFin",
+ "BehxIni_RehFin.b",
+ "BehxMed_MeemFin.py",
+ "BehxMed_NoonGhunnaFin",
+ "BehxMed_NoonGhunnaFin.cup",
+ "BehxMed_RehFin",
+ "BehxMed_RehFin.cup",
+ "BehxMed_YehxFin",
+ "FehxMed_YehBarreeFin",
+ "HahIni_YehBarreeFin",
+ "KafIni_YehBarreeFin",
+ "KafMed.12_YehxFin.01",
+ "KafMed_MeemFin",
+ "KafMed_YehBarreeFin",
+ "LamAlefFin",
+ "LamAlefFin.cup",
+ "LamAlefFin.cut",
+ "LamAlefFin.short",
+ "LamAlefSep",
+ "LamIni_MeemFin",
+ "LamIni_YehBarreeFin",
+ "LamMed_MeemFin",
+ "LamMed_MeemFin.b",
+ "LamMed_YehxFin",
+ "LamMed_YehxFin.cup",
+ "TahIni_YehBarreeFin",
+ "null",
+ "CR",
+ "space",
+ "exclam",
+ "quotedbl",
+ "numbersign",
]
# Feature files in data/*.txt; output gets compared to data/*.ttx.
TESTS = {
- None: (
- 'mti/cmap',
+ None: ("mti/cmap",),
+ "cmap": ("mti/cmap",),
+ "GSUB": (
+ "featurename-backward",
+ "featurename-forward",
+ "lookupnames-backward",
+ "lookupnames-forward",
+ "mixed-toplevels",
+ "mti/scripttable",
+ "mti/chainedclass",
+ "mti/chainedcoverage",
+ "mti/chained-glyph",
+ "mti/gsubalternate",
+ "mti/gsubligature",
+ "mti/gsubmultiple",
+ "mti/gsubreversechanined",
+ "mti/gsubsingle",
),
- 'cmap': (
- 'mti/cmap',
+ "GPOS": (
+ "mti/scripttable",
+ "mti/chained-glyph",
+ "mti/gposcursive",
+ "mti/gposkernset",
+ "mti/gposmarktobase",
+ "mti/gpospairclass",
+ "mti/gpospairglyph",
+ "mti/gpossingle",
+ "mti/mark-to-ligature",
),
- 'GSUB': (
- 'featurename-backward',
- 'featurename-forward',
- 'lookupnames-backward',
- 'lookupnames-forward',
- 'mixed-toplevels',
-
- 'mti/scripttable',
- 'mti/chainedclass',
- 'mti/chainedcoverage',
- 'mti/chained-glyph',
- 'mti/gsubalternate',
- 'mti/gsubligature',
- 'mti/gsubmultiple',
- 'mti/gsubreversechanined',
- 'mti/gsubsingle',
- ),
- 'GPOS': (
- 'mti/scripttable',
- 'mti/chained-glyph',
- 'mti/gposcursive',
- 'mti/gposkernset',
- 'mti/gposmarktobase',
- 'mti/gpospairclass',
- 'mti/gpospairglyph',
- 'mti/gpossingle',
- 'mti/mark-to-ligature',
- ),
- 'GDEF': (
- 'mti/gdefattach',
- 'mti/gdefclasses',
- 'mti/gdefligcaret',
- 'mti/gdefmarkattach',
- 'mti/gdefmarkfilter',
+ "GDEF": (
+ "mti/gdefattach",
+ "mti/gdefclasses",
+ "mti/gdefligcaret",
+ "mti/gdefmarkattach",
+ "mti/gdefmarkfilter",
),
}
# TODO:
@@ -125,33 +401,21 @@ class MtiTest(unittest.TestCase):
# 'mti/contextcoverage'
# 'mti/context-glyph'
- def __init__(self, methodName):
- unittest.TestCase.__init__(self, methodName)
- # Python 3 renamed assertRaisesRegexp to assertRaisesRegex,
- # and fires deprecation warnings if a program uses the old name.
- if not hasattr(self, "assertRaisesRegex"):
- self.assertRaisesRegex = self.assertRaisesRegexp
-
- def setUp(self):
- pass
-
- def tearDown(self):
- pass
-
@staticmethod
def getpath(testfile):
path, _ = os.path.split(__file__)
return os.path.join(path, "data", testfile)
def expect_ttx(self, expected_ttx, actual_ttx, fromfile=None, tofile=None):
- expected = [l+'\n' for l in expected_ttx.split('\n')]
- actual = [l+'\n' for l in actual_ttx.split('\n')]
+ expected = [l + "\n" for l in expected_ttx.split("\n")]
+ actual = [l + "\n" for l in actual_ttx.split("\n")]
if actual != expected:
- sys.stderr.write('\n')
+ sys.stderr.write("\n")
for line in difflib.unified_diff(
- expected, actual, fromfile=fromfile, tofile=tofile):
+ expected, actual, fromfile=fromfile, tofile=tofile
+ ):
sys.stderr.write(line)
- self.fail("TTX output is different from expected")
+ pytest.fail("TTX output is different from expected")
@classmethod
def create_font(celf):
@@ -160,18 +424,19 @@ class MtiTest(unittest.TestCase):
return font
def check_mti_file(self, name, tableTag=None):
-
- xml_expected_path = self.getpath("%s.ttx" % name + ('.'+tableTag if tableTag is not None else ''))
- with open(xml_expected_path, 'rt', encoding="utf-8") as xml_expected_file:
+ xml_expected_path = self.getpath(
+ "%s.ttx" % name + ("." + tableTag if tableTag is not None else "")
+ )
+ with open(xml_expected_path, "rt", encoding="utf-8") as xml_expected_file:
xml_expected = xml_expected_file.read()
font = self.create_font()
- with open(self.getpath("%s.txt" % name), 'rt', encoding="utf-8") as f:
+ with open(self.getpath("%s.txt" % name), "rt", encoding="utf-8") as f:
table = mtiLib.build(f, font, tableTag=tableTag)
if tableTag is not None:
- self.assertEqual(tableTag, table.tableTag)
+ assert tableTag == table.tableTag
tableTag = table.tableTag
# Make sure it compiles.
@@ -183,22 +448,29 @@ class MtiTest(unittest.TestCase):
# XML from built object.
writer = XMLWriter(StringIO())
- writer.begintag(tableTag); writer.newline()
+ writer.begintag(tableTag)
+ writer.newline()
table.toXML(writer, font)
- writer.endtag(tableTag); writer.newline()
+ writer.endtag(tableTag)
+ writer.newline()
xml_built = writer.file.getvalue()
# XML from decompiled object.
writer = XMLWriter(StringIO())
- writer.begintag(tableTag); writer.newline()
+ writer.begintag(tableTag)
+ writer.newline()
decompiled.toXML(writer, font)
- writer.endtag(tableTag); writer.newline()
+ writer.endtag(tableTag)
+ writer.newline()
xml_binary = writer.file.getvalue()
- self.expect_ttx(xml_binary, xml_built, fromfile='decompiled', tofile='built')
- self.expect_ttx(xml_expected, xml_built, fromfile=xml_expected_path, tofile='built')
+ self.expect_ttx(xml_binary, xml_built, fromfile="decompiled", tofile="built")
+ self.expect_ttx(
+ xml_expected, xml_built, fromfile=xml_expected_path, tofile="built"
+ )
from fontTools.misc import xmlReader
+
f = StringIO()
f.write(xml_expected)
f.seek(0)
@@ -209,26 +481,37 @@ class MtiTest(unittest.TestCase):
# XML from object read from XML.
writer = XMLWriter(StringIO())
- writer.begintag(tableTag); writer.newline()
+ writer.begintag(tableTag)
+ writer.newline()
font2[tableTag].toXML(writer, font)
- writer.endtag(tableTag); writer.newline()
+ writer.endtag(tableTag)
+ writer.newline()
xml_fromxml = writer.file.getvalue()
- self.expect_ttx(xml_expected, xml_fromxml, fromfile=xml_expected_path, tofile='fromxml')
+ self.expect_ttx(
+ xml_expected, xml_fromxml, fromfile=xml_expected_path, tofile="fromxml"
+ )
+
def generate_mti_file_test(name, tableTag=None):
- return lambda self: self.check_mti_file(os.path.join(*name.split('/')), tableTag=tableTag)
+ return lambda self: self.check_mti_file(
+ os.path.join(*name.split("/")), tableTag=tableTag
+ )
-for tableTag,tests in MtiTest.TESTS.items():
+for tableTag, tests in MtiTest.TESTS.items():
for name in tests:
- setattr(MtiTest, "test_MtiFile_%s%s" % (name, '_'+tableTag if tableTag else ''),
- generate_mti_file_test(name, tableTag=tableTag))
+ setattr(
+ MtiTest,
+ "test_MtiFile_%s%s" % (name, "_" + tableTag if tableTag else ""),
+ generate_mti_file_test(name, tableTag=tableTag),
+ )
if __name__ == "__main__":
if len(sys.argv) > 1:
from fontTools.mtiLib import main
+
font = MtiTest.create_font()
sys.exit(main(sys.argv[1:], font))
- sys.exit(unittest.main())
+ sys.exit(pytest.main(sys.argv))