def test_returns_all_not_found_fonts(self): loader = FontLoader(None, True) data = { StyleInfo('Jorvik', 0, False): UsageData(), StyleInfo('Random font', 0, False): UsageData() } found, not_found = loader.get_fonts_for_list(data) self.assertEqual(2, len(not_found))
def test_returns_all_found_fonts(self): loader = FontLoader([get_file_in_test_directory('')], True) data = { StyleInfo('Jorvik Informal V2', 0, False): UsageData(), StyleInfo('Random font', 0, False): UsageData() } found, not_found = loader.get_fonts_for_list(data) self.assertEqual(1, len(found)) self.assertIn('Jorvik Informal V2', list(found.values())[0].names)
def test_does_not_add_same_font_twice(self): loader = FontLoader( [get_file_in_test_directory(''), get_file_in_test_directory('')], True) data = { StyleInfo('Jorvik', 0, False): UsageData(), StyleInfo('Jorvik informal', 0, False): UsageData() } found, not_found = loader.get_fonts_for_list(data) self.assertEqual(1, len(found))
def test_hash_differs_if_any_of_styles_differ(self): info1 = StyleInfo('font', False, False) info2 = StyleInfo('font', True, False) info3 = StyleInfo('font', False, True) info4 = StyleInfo('font', True, True) self.assertNotEqual(hash(info1), hash(info2)) self.assertNotEqual(hash(info1), hash(info3)) self.assertNotEqual(hash(info1), hash(info4)) self.assertNotEqual(hash(info2), hash(info3)) self.assertNotEqual(hash(info2), hash(info4)) self.assertNotEqual(hash(info3), hash(info4))
def test_finds_all_required_fonts(self): loader = FontLoader(None, True) loader.fonts.append( FontInfo(['Arial'], False, False, FontWeight.FW_NORMAL, 'random', '1')) loader.fonts.append( FontInfo(['Arial Black'], False, False, FontWeight.FW_NORMAL, 'random', '2')) data = { StyleInfo('Arial', 0, False): UsageData(), StyleInfo('Arial Black', 0, False): UsageData() } found, not_found = loader.get_fonts_for_list(data) self.assertEqual(2, len(found))
def test_find_all_unique_plain_text_characters(self): styles = {'style' : StyleInfo('Font', FontWeight.FW_NORMAL, False)} used_styles = defaultdict(UsageData) event = AssParser.AssEvent(1, 'style','randommmm' ,False) AssParser.process_event(event, used_styles, styles) result = list(used_styles.values())[0] self.assertSequenceEqual({'r','a', 'n', 'd','o','m'}, result.chars)
def test_replaces_h_with_tab(self): styles = {'style' : StyleInfo('Font', FontWeight.FW_NORMAL, False)} used_styles = defaultdict(UsageData) event = AssParser.AssEvent(1, 'style',r'lolol\hlolol' ,False) AssParser.process_event(event, used_styles, styles) result = list(used_styles.values())[0] self.assertSequenceEqual({'l','o', "\xA0"}, result.chars)
def test_does_not_include_new_lines(self): styles = {'style' : StyleInfo('Font', FontWeight.FW_NORMAL, False)} used_styles = defaultdict(UsageData) event = AssParser.AssEvent(1, 'style',r'rardo\nmm\Nmm' ,False) AssParser.process_event(event, used_styles, styles) result = list(used_styles.values())[0] self.assertSequenceEqual({'r','a', 'd','o','m'}, result.chars)
def test_returns_only_appropriate_font(self): loader = FontLoader(None, True) loader.fonts.append( FontInfo(['Arial'], False, False, FontWeight.FW_NORMAL, 'random', '1')) loader.fonts.append( FontInfo(['Arial Black'], False, False, FontWeight.FW_NORMAL, 'random', '2')) data = {StyleInfo('Arial', 0, False): UsageData()} found, not_found = loader.get_fonts_for_list(data) self.assertEqual(1, len(found))
def test_from_ass_returns_correct_weight_if_it_is_zero_in_script(self): item = StyleInfo.from_ass('font', '0', '-1') self.assertEqual(item.bold, 0)
def test_from_ass_returns_italic_if_it_is_minus_one_in_script(self): item = StyleInfo.from_ass('font', '-123123123', '-1') self.assertTrue(item.italic)
def test_clone_returns_new_object(self): original = StyleInfo('font', False, False) new = original.clone() self.assertEqual(original, new) original.bold = 12 self.assertNotEqual(original, new)
def test_hash_differs_if_font_name_differs(self): info1 = StyleInfo('font', False, True) info2 = StyleInfo('font2', False, True) self.assertNotEqual(hash(info1), hash(info2))
def test_correctly_processes_double_font_italic_overrides(self): styles = {'style' : StyleInfo('Font', 0, False)} used_styles = defaultdict(UsageData) event = AssParser.AssEvent(1, 'style',r'{\an5\blur1.1\fs90\pos(970,454)\1a&H12}She {\i1\b1}is{\i0\b0} annoying.' ,False) AssParser.process_event(event, used_styles, styles) self.assertEqual(len(used_styles), 2)
def test_from_ass_returns_italic_if_it_is_minus_one_in_script(self): item = StyleInfo.from_ass("font", "-123123123", "-1") self.assertTrue(item.italic)
def test_performs_case_insensitive_search(self): loader = FontLoader([get_file_in_test_directory('')], True) data = {StyleInfo('JoRvIk INFormAl v2', 0, False): UsageData()} found, not_found = loader.get_fonts_for_list(data) self.assertEqual(1, len(found))
def test_equals_returns_false_on_not_equal_items(self): info1 = StyleInfo('font', False, False) info2 = StyleInfo('font1', False, False) self.assertNotEqual(info1, info2)
def test_from_ass_returns_correct_weight_if_it_number_in_script(self): item = StyleInfo.from_ass("font", "123", "-1") self.assertEqual(item.bold, 123)
def test_from_ass_returns_correct_weight_if_it_is_zero_in_script(self): item = StyleInfo.from_ass("font", "0", "-1") self.assertEqual(item.bold, 0)
def test_from_ass_returns_correct_weight_if_it_number_in_script(self): item = StyleInfo.from_ass('font', '123', '-1') self.assertEqual(item.bold, 123)
def test_hash_for_object_does_not_change(self): info1 = StyleInfo('font', False, True) self.assertEqual(hash(info1), hash(info1))
def test_equals_returns_true_on_equal_items(self): info1 = StyleInfo('font', False, True) info2 = StyleInfo('font', False, True) self.assertEqual(info1, info2)
def test_clone_returns_new_object(self): original = StyleInfo("font", False, False) new = original.clone() self.assertEqual(original, new) original.bold = 12 self.assertNotEqual(original, new)