diff options
Diffstat (limited to 'scripts/run_web_tests.py')
-rwxr-xr-x | scripts/run_web_tests.py | 96 |
1 files changed, 93 insertions, 3 deletions
diff --git a/scripts/run_web_tests.py b/scripts/run_web_tests.py index 779abdc..fdf0fe6 100755 --- a/scripts/run_web_tests.py +++ b/scripts/run_web_tests.py @@ -1,12 +1,15 @@ #!/usr/bin/python -"""Test assumptions that Android relies on.""" +"""Test assumptions that web fonts rely on.""" import glob +import json import unittest from fontTools import ttLib from nototools import coverage from nototools import font_data +from nototools import render +from nototools import unicode_data def load_fonts(): @@ -111,6 +114,45 @@ class TestDigitWidths(unittest.TestCase): self.assertEqual(len(set(widths)), 1) +class TestNames(unittest.TestCase): + """Tests various strings in the name table.""" + + def setUp(self): + self.family_name = 'RobotoDraft' + _, self.fonts = load_fonts() + self.names = [] + for font in self.fonts: + self.names.append(font_data.get_name_records(font)) + + def test_copyright(self): + """Tests the copyright message.""" + for records in self.names: + self.assertEqual( + records[0], + 'Copyright 2014 Google Inc. All Rights Reserved.') + + def test_family_name(self): + """Tests the family name.""" + for records in self.names: + self.assertEqual(records[1], self.family_name) + if 16 in records: + self.assertEqual(records[16], self.family_name) + + def test_unique_identifier_and_full_name(self): + """Tests the unique identifier and full name.""" + for records in self.names: + expected_name = records[1] + ' ' + records[2] + self.assertEqual(records[3], expected_name) + self.assertEqual(records[4], expected_name) + self.assertFalse(records.has_key(18)) + + def test_postscript_name(self): + """Tests the postscript name.""" + for records in self.names: + expected_name = records[1] + '-' + records[2].replace(' ', '') + self.assertEqual(records[6], expected_name) + + class TestHints(unittest.TestCase): """Tests hints.""" @@ -121,9 +163,9 @@ class TestHints(unittest.TestCase): bad_glyphs = ['uniFB01', 'uniFB02', 'uniFB03', 'uniFB04', 'uniFFFC', 'uni048C'] self.known_missing_hints = [ - (g, 'Roboto Light Italic') for g in bad_glyphs] + (g, 'RobotoDraft Light Italic') for g in bad_glyphs] - def test_digit_widths(self): + def test_existance_of_hints(self): """Tests all glyphs and makes sure non-composite ones have hints.""" missing_hints = [] for font in self.fonts: @@ -139,5 +181,53 @@ class TestHints(unittest.TestCase): self.assertTrue(missing_hints <= self.known_missing_hints) +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: + 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() |