diff options
author | Roozbeh Pournader <roozbeh@google.com> | 2015-04-24 01:11:10 -0700 |
---|---|---|
committer | Roozbeh Pournader <roozbeh@google.com> | 2015-04-24 01:11:10 -0700 |
commit | 16032d5e0f1170a493e317f3c7fe6ff2c7f2e0d5 (patch) | |
tree | 308d2a31664167060511122ecca16936b6ffdb38 /scripts | |
parent | 426d835d159819f1d40d3c8e88ac6cdd6a937a3c (diff) |
Add test for soft-dotted characters.
The test is added to run_exhaustive_tests.py, and checks all
combinations of soft-dotted characters with combining marks above.
It's disabled for now, since the fonts fail it.
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/layout.py | 13 | ||||
-rwxr-xr-x | scripts/run_exhaustive_tests.py | 33 |
2 files changed, 46 insertions, 0 deletions
diff --git a/scripts/layout.py b/scripts/layout.py index f65cf01..dc85ed2 100644 --- a/scripts/layout.py +++ b/scripts/layout.py @@ -32,3 +32,16 @@ def get_advances(text, font): _advance_cache[(text, font)] = advances return advances +_shape_cache = {} +def get_shapes(text, font): + """Get a list of shaped glyphs for text rendered in a font.""" + try: + return _shape_cache[(text, font)] + except KeyError: + pass + + hb_output = render.run_harfbuzz_on_text(text, font, None) + hb_output = json.loads(hb_output) + shapes = [glyph['g'] for glyph in hb_output] + _shape_cache[(text, font)] = shapes + return shapes diff --git a/scripts/run_exhaustive_tests.py b/scripts/run_exhaustive_tests.py index 02d1583..5cda50c 100755 --- a/scripts/run_exhaustive_tests.py +++ b/scripts/run_exhaustive_tests.py @@ -76,5 +76,38 @@ class TestSpacingMarks(unittest.TestCase): 'but it should not' % (ord(base_letter), ord(mark))) +class TestSoftDottedChars(unittest.TestCase): + """Tests that soft-dotted characters lose their dots.""" + + 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.combining(char) == 230] + self.advance_cache = {} + + def test_combinations(self): + """Tests that soft-dotted characters lose their dots when combined.""" + + return # FIXME: Test is currently disabled, since the fonts fail it + + for font in self.font_files: + print 'Testing %s for soft-dotted combinations...' % font + + # TODO: replace the following list with actual derivation based on + # Unicode's soft-dotted property + for base_letter in (u'ij\u012F\u0249\u0268\u029D\u02B2\u03F3\u0456' + u'\u0458\u1D62\u1D96\u1DA4\u1DA8\u1E2D\u1ECB' + u'\u2071\u2C7C'): + print 'Testing %s combinations' % base_letter.encode('UTF-8') + for mark in self.marks_to_test: + mark = unichr(mark) + letter_only = layout.get_advances(base_letter, font) + combination = layout.get_advances(base_letter + mark, font) + self.assertNotEqual(combination[0], letter_only[0], + "The sequence <%04X, %04X> doesn't lose its dot, " + "but it should" % (ord(base_letter), ord(mark))) + + if __name__ == '__main__': unittest.main() |