def test__render_characters(self): screen_line = { 0: anim.CharacterCell('A', 'red', 'white'), 1: anim.CharacterCell('B', 'blue', 'white'), 2: anim.CharacterCell('C', 'blue', 'white'), 7: anim.CharacterCell('D', 'green', 'white'), 8: anim.CharacterCell('E', 'green', 'white'), 9: anim.CharacterCell('F', 'green', 'white'), 10: anim.CharacterCell('G', 'green', 'white'), 11: anim.CharacterCell('H', 'red', 'white'), 20: anim.CharacterCell(' ', 'black', 'black') } with self.subTest(case='Content'): cell_width = 8 texts = anim._render_characters(screen_line, 1.23, cell_width) sorted_texts = sorted(texts, key=lambda x: x.text) [text_a, text_bc, text_defg, text_h, text_space] = sorted_texts self.assertEqual(text_a.text, 'A') self.assertEqual(text_a.attribs['fill'], 'red') self.assertEqual(text_a.attribs['x'], '0') self.assertEqual(text_bc.text, 'BC') self.assertEqual(text_bc.attribs['fill'], 'blue') self.assertEqual(text_bc.attribs['x'], '8') self.assertEqual(text_defg.text, 'DEFG') self.assertEqual(text_defg.attribs['fill'], 'green') self.assertEqual(text_defg.attribs['x'], '56') def test_serialize_css_dict(self): css = {
1: anim.CharacterCell('B', 'blue', 'white'), 2: anim.CharacterCell('C', 'blue', 'white'), 7: anim.CharacterCell('D', '#00FF00', 'white'), 8: anim.CharacterCell('E', '#00FF00', 'white'), 9: anim.CharacterCell('F', '#00FF00', 'white'), 10: anim.CharacterCell('G', '#00FF00', 'white'), 20: anim.CharacterCell('H', 'black', 'black', bold=True), 30: anim.CharacterCell('I', 'black', 'black', italics=True), 40: anim.CharacterCell('J', 'black', 'black', underscore=True), 50: anim.CharacterCell('K', 'black', 'black', strikethrough=True), 60: anim.CharacterCell('L', 'black', 'black', underscore=True, strikethrough=True), } with self.subTest(case='Content'): cell_width = 8 texts = {t.text: t for t in anim._render_characters(screen_line, cell_width)} self.assertEqual(texts['A'].attrib['class'], 'red') self.assertEqual(texts['A'].attrib['x'], '0') # Style attributes should not appear for normal text self.assertNotIn('font-weight', texts['A'].attrib) self.assertNotIn('font-style', texts['A'].attrib) self.assertNotIn('text-decoration', texts['A'].attrib) self.assertEqual(texts['BC'].attrib['class'], 'blue') self.assertEqual(texts['BC'].attrib['x'], '8') self.assertEqual(texts['DEFG'].attrib['fill'], '#00FF00') self.assertEqual(texts['DEFG'].attrib['x'], '56') self.assertEqual(texts['H'].attrib['font-weight'], 'bold') self.assertEqual(texts['I'].attrib['font-style'], 'italic') self.assertIn('underline', texts['J'].attrib['text-decoration'].split()) self.assertIn('line-through', texts['K'].attrib['text-decoration'].split())
anim.CharacterCell('J', 'black', 'black', underscore=True), 50: anim.CharacterCell('K', 'black', 'black', strikethrough=True), 60: anim.CharacterCell('L', 'black', 'black', underscore=True, strikethrough=True), } with self.subTest(case='Content'): cell_width = 8 texts = { t.text: t for t in anim._render_characters(screen_line, cell_width) } self.assertEqual(texts['A'].attrib['class'], 'red') self.assertEqual(texts['A'].attrib['x'], '0') # Style attributes should not appear for normal text self.assertNotIn('font-weight', texts['A'].attrib) self.assertNotIn('font-style', texts['A'].attrib) self.assertNotIn('text-decoration', texts['A'].attrib) self.assertEqual(texts['BC'].attrib['class'], 'blue') self.assertEqual(texts['BC'].attrib['x'], '8') self.assertEqual(texts['DEFG'].attrib['fill'], '#00FF00') self.assertEqual(texts['DEFG'].attrib['x'], '56') self.assertEqual(texts['H'].attrib['font-weight'], 'bold') self.assertEqual(texts['I'].attrib['font-style'], 'italic') self.assertIn('underline',