From 94a70f1b9f0407dfe335f70dbfd3a73bbb26afc0 Mon Sep 17 00:00:00 2001 From: Roozbeh Pournader Date: Wed, 7 Jan 2015 00:21:02 -0800 Subject: Move the exhaustive tests to a different make targe. Plus some cleanup in imports. --- scripts/run_exhaustive_tests.py | 77 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 scripts/run_exhaustive_tests.py (limited to 'scripts/run_exhaustive_tests.py') diff --git a/scripts/run_exhaustive_tests.py b/scripts/run_exhaustive_tests.py new file mode 100644 index 0000000..cdc770b --- /dev/null +++ b/scripts/run_exhaustive_tests.py @@ -0,0 +1,77 @@ +#!/usr/bin/python +"""Test general health of the fonts.""" + +import glob +import json +import unittest + +from fontTools import ttLib +from nototools import coverage +from nototools import render +from nototools import unicode_data + + +def load_fonts(): + """Load all major fonts.""" + all_font_files = (glob.glob('out/RobotoTTF/*.ttf') + + glob.glob('out/RobotoCondensedTTF/*.ttf')) + all_fonts = [ttLib.TTFont(font) for font in all_font_files] + assert len(all_font_files) == 18 + return all_font_files, all_fonts + + +class TestSpacingMarks(unittest.TestCase): + """Tests that spacing marks are indeed spacing.""" + + def setUp(self): + self.font_files, _ = load_fonts() + charset = coverage.character_set(self.font_files[0]) + self.marks_to_test = [char for char in charset + if unicode_data.category(char) in ['Lm', 'Sk']] + self.advance_cache = {} + + def get_advances(self, text, font): + """Get a list of horizontal advances for text rendered in a font.""" + try: + return self.advance_cache[(text, font)] + except KeyError: + hb_output = render.run_harfbuzz_on_text(text, font, '') + hb_output = json.loads(hb_output) + advances = [glyph['ax'] for glyph in hb_output] + self.advance_cache[(text, font)] = advances + return advances + + def test_individual_spacing_marks(self): + """Tests that spacing marks are spacing by themselves.""" + for font in self.font_files: + print 'Testing %s for stand-alone spacing marks...' % font + for mark in self.marks_to_test: + mark = unichr(mark) + advances = self.get_advances(mark, font) + assert len(advances) == 1 + self.assertNotEqual(advances[0], 0) + + def test_spacing_marks_in_combination(self): + """Tests that spacing marks do not combine with base letters.""" + for font in self.font_files: + print 'Testing %s for spacing marks in combination...' % font + for base_letter in (u'A\u00C6BCDEFGHIJKLMNO\u00D8\u01A0PRST' + u'U\u01AFVWXYZ' + u'a\u00E6bcdefghi\u0131j\u0237klmn' + u'o\u00F8\u01A1prs\u017Ftu\u01B0vwxyz' + u'\u03D2'): + print 'Testing %s combinations' % base_letter + for mark in self.marks_to_test: + if mark == 0x02DE: + # Skip rhotic hook, as it's perhaps OK for it to form + # ligatures + continue + mark = unichr(mark) + advances = self.get_advances(base_letter + mark, font) + self.assertEqual(len(advances), 2, + 'The sequence <%04X, %04X> combines, ' + 'but it should not' % (ord(base_letter), ord(mark))) + + +if __name__ == '__main__': + unittest.main() -- cgit v1.2.3