Verify that we can see individual parts of timing messages

This commit is contained in:
Rod Sheeter 2016-05-11 17:39:37 -07:00
parent 74e7400097
commit df2c2c7128

View File

@ -2,7 +2,9 @@ from __future__ import print_function, division, absolute_import
from fontTools.misc.py23 import * from fontTools.misc.py23 import *
from fontTools import subset from fontTools import subset
from fontTools.ttLib import TTFont from fontTools.ttLib import TTFont
import contextlib
import difflib import difflib
import logging
import os import os
import shutil import shutil
import sys import sys
@ -10,6 +12,38 @@ import tempfile
import unittest import unittest
class CapturingLogHandler(logging.Handler):
def __init__(self, log_path, level):
self.records = []
self.level = level
self.logger = logging.getLogger(log_path)
def __enter__(self):
self.original_disabled = self.logger.disabled
self.original_level = self.logger.level
self.logger.addHandler(self)
self.logger.level = self.level
self.logger.disabled = False
return self
def __exit__(self, type, value, traceback):
self.logger.removeHandler(self)
self.logger.level = self.original_level
self.logger.disabled = self.logger.disabled
return self
def handle(self, record):
self.records.append(record)
def emit(self, record):
pass
def createLock(self):
self.lock = None
class SubsetTest(unittest.TestCase): class SubsetTest(unittest.TestCase):
def __init__(self, methodName): def __init__(self, methodName):
unittest.TestCase.__init__(self, methodName) unittest.TestCase.__init__(self, methodName)
@ -148,5 +182,28 @@ class SubsetTest(unittest.TestCase):
self.assertTrue("x" in subsetfont['CBDT'].strikeData[0]) self.assertTrue("x" in subsetfont['CBDT'].strikeData[0])
self.assertTrue("y" in subsetfont['CBDT'].strikeData[0]) self.assertTrue("y" in subsetfont['CBDT'].strikeData[0])
def test_timing_publishes_parts(self):
_, fontpath = self.compile_font(self.getpath("TestTTF-Regular.ttx"), ".ttf")
subsetpath = self.temp_path(".ttf")
options = subset.Options()
options.timing = True
subsetter = subset.Subsetter(options)
subsetter.populate(text='ABC')
font = TTFont(fontpath)
with CapturingLogHandler('fontTools.subset.timer', logging.DEBUG) as captor:
captor.logger.propagate = False
subsetter.subset(font)
logs = captor.records
captor.logger.propagate = True
self.assertTrue(len(logs) > 5)
self.assertEqual(len(logs), len([l for l in logs if 'msg' in l.args and 'time' in l.args]))
# Look for a few things we know should happen
self.assertTrue(filter(lambda l: l.args['msg'] == "load 'cmap'", logs))
self.assertTrue(filter(lambda l: l.args['msg'] == "subset 'cmap'", logs))
self.assertTrue(filter(lambda l: l.args['msg'] == "subset 'glyf'", logs))
if __name__ == "__main__": if __name__ == "__main__":
unittest.main() unittest.main()