def test_st_ligatures(self): """Tests that st ligatures are formed by dlig.""" for fontfile in self.fontfiles: for combination in [u'st', u'ſt']: normal = layout.get_glyphs(combination, fontfile) ligated = layout.get_glyphs( combination, fontfile, '--features=dlig') self.assertTrue(len(normal) == 2 and len(ligated) == 1)
def _run_ligature_test(self, sequences_with_params, active): for fontfile in self.fontfiles: for params, sequences in sequences_with_params: for sequence in sequences: if params: output = layout.get_glyphs(sequence, fontfile, params) else: output = layout.get_glyphs(sequence, fontfile) if active: # should ligate with parameters applied expected = 1 err_msg = '%s not ligated in %s with parameters: %s' else: # should not ligate with parameters applied expected = len(sequence) err_msg = '%s ligated in %s with parameters: %s' self.assertEqual(len(output), expected, err_msg % (sequence, fontfile, params))
def run_test(glyph_order, glyph_set, fontfile, tags, proportional=False, oldstyle=False): num = glyph_order[layout.get_glyphs('1', fontfile)[0]] styled = glyph_order[layout.get_glyphs( '1', fontfile, '--features=' + ','.join(tags))[0]] if not (proportional or oldstyle): self.assertEqual(num, styled) else: num, styled = glyph_set[num], glyph_set[styled] if proportional: self.assertNotEqual(num.width, styled.width) if oldstyle: self.assertNotEqual(num._glyph.yMax, styled._glyph.yMax)
def _run_ligature_test(self, sequences_with_params, active): for fontfile in self.fontfiles: for params, sequences in sequences_with_params: for sequence in sequences: if params: output = layout.get_glyphs(sequence, fontfile, params) else: output = layout.get_glyphs(sequence, fontfile) if active: # should ligate with parameters applied expected = 1 err_msg = '%s not ligated in %s with parameters: %s' else: # should not ligate with parameters applied expected = len(sequence) err_msg = '%s ligated in %s with parameters: %s' self.assertEqual(len(output), expected, err_msg % ( sequence, fontfile, params))
def test_smcp_coverage(self): """Tests that smcp is supported for our required set.""" with open('res/smcp_requirements.txt') as smcp_reqs_file: smcp_reqs_list = [] for line in smcp_reqs_file.readlines(): line = line[:line.index(' #')] smcp_reqs_list.append(unichr(int(line, 16))) for fontfile in self.fontfiles: chars_with_no_smcp = [] for char in smcp_reqs_list: normal = layout.get_glyphs(char, fontfile) smcp = layout.get_glyphs(char, fontfile, '--features=smcp') if normal == smcp: chars_with_no_smcp.append(char) self.assertEqual(chars_with_no_smcp, [], ("smcp feature is not applied to '%s'" % u''.join(chars_with_no_smcp).encode('UTF-8')))
def test_combinations(self): """Tests that soft-dotted characters lose their dots when combined.""" 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_glyphs(base_letter, font) combination = layout.get_glyphs(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)))
def test_smcp_coverage(self): """Tests that smcp is supported for our required set.""" with open('res/smcp_requirements.txt') as smcp_reqs_file: smcp_reqs_list = [] for line in smcp_reqs_file.readlines(): line = line[:line.index(' #')] smcp_reqs_list.append(unichr(int(line, 16))) for fontfile in self.fontfiles: chars_with_no_smcp = [] for char in smcp_reqs_list: normal = layout.get_glyphs(char, fontfile) smcp = layout.get_glyphs(char, fontfile, '--features=smcp') if normal == smcp: chars_with_no_smcp.append(char) self.assertEqual( chars_with_no_smcp, [], ("smcp feature is not applied to '%s'" % u''.join(chars_with_no_smcp).encode('UTF-8')))
def run_sub_coverage_test(self, feature, reqs_path): """Tests that a substitution feature is supported for a required set.""" with open(reqs_path) as reqs_file: reqs_list = [] for line in reqs_file.readlines(): input_cp, output_name = line[:line.index(' #')].split() reqs_list.append((unichr(int(input_cp, 16)), output_name)) for fontfile, font in zip(self.fontfiles, self.fonts): glyph_order = font.getGlyphOrder() chars_with_no_sub = [] for char, expected_name in reqs_list: sub = layout.get_glyphs(char, fontfile, '--features=%s' % feature) if glyph_order[sub[0]] != expected_name: chars_with_no_sub.append(char) self.assertEqual( chars_with_no_sub, [], ("%s feature is not applied correctly to '%s'" % (feature, u''.join(chars_with_no_sub).encode('UTF-8'))))
def test_smcp_coverage(self): """Tests that smcp is supported for our required set.""" with open(self.smcp_reqs_path) as smcp_reqs_file: smcp_reqs_list = [] for line in smcp_reqs_file.readlines(): input_cp, output_name = line[:line.index(' #')].split() smcp_reqs_list.append((unichr(int(input_cp, 16)), output_name)) for fontfile, font in zip(self.fontfiles, self.fonts): glyph_order = font.getGlyphOrder() chars_with_no_smcp = [] for char, expected_name in smcp_reqs_list: smcp = layout.get_glyphs(char, fontfile, '--features=smcp') if glyph_order[smcp[0]] != expected_name: chars_with_no_smcp.append(char) self.assertEqual( chars_with_no_smcp, [], ("smcp feature is not applied correctly to '%s'" % u''.join(chars_with_no_smcp).encode('UTF-8')))