summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorRoozbeh Pournader <roozbeh@google.com>2015-04-24 01:11:10 -0700
committerRoozbeh Pournader <roozbeh@google.com>2015-04-24 01:11:10 -0700
commit16032d5e0f1170a493e317f3c7fe6ff2c7f2e0d5 (patch)
tree308d2a31664167060511122ecca16936b6ffdb38 /scripts
parent426d835d159819f1d40d3c8e88ac6cdd6a937a3c (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.py13
-rwxr-xr-xscripts/run_exhaustive_tests.py33
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()