diff options
author | Roozbeh Pournader <roozbeh@google.com> | 2015-01-06 23:51:39 -0800 |
---|---|---|
committer | James Godfrey-Kittle <jamesgk@google.com> | 2015-04-16 12:16:24 -0700 |
commit | 869aa8e9958ba11e3e627672908ac81b616dbe7b (patch) | |
tree | 6b3c83a5e40f04d41380d934485816b031def6f5 /scripts/run_general_tests.py | |
parent | 3c963abcf66d44c1587376e7d245b889ae62401a (diff) |
Move tests for spacing marks to general tests.
Also add test for font vendor ID in the OS/2 table and remove
no-longer-necessary touchups from touchup_for_android.py.
Diffstat (limited to 'scripts/run_general_tests.py')
-rwxr-xr-x | scripts/run_general_tests.py | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/scripts/run_general_tests.py b/scripts/run_general_tests.py index f032762..df2a16f 100755 --- a/scripts/run_general_tests.py +++ b/scripts/run_general_tests.py @@ -63,6 +63,11 @@ class TestMetaInfo(unittest.TestCase): for font in self.fonts: self.assertEqual(font['OS/2'].fsType, 0) + def test_vendor_id(self): + """Tests the vendor ID of the fonts to be 'GOOG'.""" + for font in self.fonts: + self.assertEqual(font['OS/2'].achVendID, 'GOOG') + class TestDigitWidths(unittest.TestCase): """Tests the width of digits.""" @@ -104,5 +109,58 @@ class TestCharacterCoverage(unittest.TestCase): 'U+2117 not found in %s.' % font_data.font_name(font)) +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() |