def test_useProductionNames(self): for value in (True, False): glyphs_param = ("Don't use Production Names", value) set_custom_params(self.ufo, parsed=[glyphs_param]) self.assertIn(UFO2FT_USE_PROD_NAMES_KEY, self.ufo.lib) self.assertEqual(self.ufo.lib[UFO2FT_USE_PROD_NAMES_KEY], not value)
def test_normalizes_curved_quotes_in_names(self): master = GSFontMaster() master.customParameters = [ GSCustomParameter(name='‘bad’', value=1), GSCustomParameter(name='“also bad”', value=2) ] set_custom_params(self.ufo, data=master) self.assertIn(GLYPHS_PREFIX + "'bad'", self.ufo.lib) self.assertIn(GLYPHS_PREFIX + '"also bad"', self.ufo.lib)
def test_gasp_table(self): gasp_table = {'65535': '15', '20': '7', '8': '10'} set_custom_params(self.ufo, parsed=[('GASP Table', gasp_table)]) ufo_range_records = self.ufo.info.openTypeGaspRangeRecords self.assertIsNotNone(ufo_range_records) self.assertEqual(len(ufo_range_records), 3) rec1, rec2, rec3 = ufo_range_records self.assertEqual(rec1['rangeMaxPPEM'], 8) self.assertEqual(rec1['rangeGaspBehavior'], [1, 3]) self.assertEqual(rec2['rangeMaxPPEM'], 20) self.assertEqual(rec2['rangeGaspBehavior'], [0, 1, 2]) self.assertEqual(rec3['rangeMaxPPEM'], 65535) self.assertEqual(rec3['rangeGaspBehavior'], [0, 1, 2, 3])
def test_parse_glyphs_filter(self, mock_parse_glyphs_filter): filter1 = ('PreFilter', 'AddExtremes') filter2 = ( 'Filter', 'Transformations;OffsetX:40;OffsetY:60;include:uni0334,uni0335') filter3 = ( 'Filter', 'Transformations;OffsetX:10;OffsetY:-10;exclude:uni0334,uni0335') set_custom_params(self.ufo, parsed=[filter1, filter2, filter3]) self.assertEqual(mock_parse_glyphs_filter.call_count, 3) self.assertEqual(mock_parse_glyphs_filter.call_args_list[0], mock.call(filter1[1], is_pre=True)) self.assertEqual(mock_parse_glyphs_filter.call_args_list[1], mock.call(filter2[1], is_pre=False)) self.assertEqual(mock_parse_glyphs_filter.call_args_list[2], mock.call(filter3[1], is_pre=False))
def test_replace_feature(self): self.ufo.features.text = dedent(""" feature liga { # only the first match is replaced sub f i by fi; } liga; feature calt { sub e' t' c by ampersand; } calt; feature liga { sub f l by fl; } liga; """) repl = "liga; sub f f by ff;" set_custom_params(self.ufo, parsed=[("Replace Feature", repl)]) self.assertEqual( self.ufo.features.text, dedent(""" feature liga { sub f f by ff; } liga; feature calt { sub e' t' c by ampersand; } calt; feature liga { sub f l by fl; } liga; """)) # only replace feature body if tag already present original = self.ufo.features.text repl = "numr; sub one by one.numr;\nsub two by two.numr;\n" set_custom_params(self.ufo, parsed=[("Replace Feature", repl)]) self.assertEqual(self.ufo.features.text, original)
def apply_instance_data(instance_data): """Open instances, apply data, and re-save. Args: instance_data: List of (path, data) tuples, one for each instance. Returns: List of opened and updated instance UFOs. """ from defcon import Font instance_ufos = [] for path, data in instance_data: ufo = Font(path) set_weight_class(ufo, data) set_width_class(ufo, data) set_custom_params(ufo, data=data) ufo.save() instance_ufos.append(ufo) return instance_ufos
def test_set_fsSelection_flags(self): self.assertEqual(self.ufo.info.openTypeOS2Selection, None) set_custom_params(self.ufo, parsed=[('Has WWS Names', False)]) self.assertEqual(self.ufo.info.openTypeOS2Selection, None) set_custom_params(self.ufo, parsed=[('Use Typo Metrics', True)]) self.assertEqual(self.ufo.info.openTypeOS2Selection, [7]) self.ufo = Font() set_custom_params(self.ufo, parsed=[('Has WWS Names', True), ('Use Typo Metrics', True)]) self.assertEqual(self.ufo.info.openTypeOS2Selection, [8, 7])
def test_xHeight(self): set_custom_params(self.ufo, parsed=[('xHeight', '500')]) self.assertEqual(self.ufo.info.xHeight, 500)
def test_set_disable_last_change(self): set_custom_params(self.ufo, parsed=[('Disable Last Change', True)]) self.assertEqual(True, self.ufo.lib[GLYPHS_PREFIX + 'disablesLastChange'])
def test_set_disables_nice_names(self): set_custom_params(self.ufo, parsed=[('disablesNiceNames', False)]) self.assertEqual(True, self.ufo.lib[GLYPHS_PREFIX + 'useNiceNames'])
def test_set_openTypeOS2CodePageRanges(self): set_custom_params(self.ufo, parsed=[('openTypeOS2CodePageRanges', [0, 1])]) self.assertEqual(self.ufo.info.openTypeOS2CodePageRanges, [0, 1])
def test_underlineThickness(self): set_custom_params(self.ufo, parsed=[('underlineThickness', 100)]) self.assertEqual(self.ufo.info.postscriptUnderlineThickness, 100) set_custom_params(self.ufo, parsed=[('underlineThickness', 0)]) self.assertEqual(self.ufo.info.postscriptUnderlineThickness, 0)
def test_underlinePosition(self): set_custom_params(self.ufo, parsed=[('underlinePosition', -2)]) self.assertEqual(self.ufo.info.postscriptUnderlinePosition, -2) set_custom_params(self.ufo, parsed=[('underlinePosition', 1)]) self.assertEqual(self.ufo.info.postscriptUnderlinePosition, 1)
def test_set_glyphOrder(self): set_custom_params(self.ufo, parsed=[('glyphOrder', ['A', 'B'])]) self.assertEqual(self.ufo.lib[PUBLIC_PREFIX + 'glyphOrder'], ['A', 'B'])