def test_extract_titles(self): """ Test the ``extract_titles`` utility. """ document_tree = RootTreeNode() document_tree.new_child(None, TextTreeNode) a1 = document_tree.new_child('title', generate_title_cls(1)) document_tree.new_child(None, TextTreeNode) a2 = document_tree.new_child('title', generate_title_cls(1)) document_tree.new_child(None, TextTreeNode) a3 = document_tree.new_child('title', generate_title_cls(1)) document_tree.new_child(None, TextTreeNode) a4 = document_tree.new_child('title', generate_title_cls(1)) titles = extract_titles(document_tree) self.assertEqual([a1, a2, a3, a4], titles)
def test_render_html_without_permalink(self): """ Test the ``render_html`` when the "id" attribute is not set. """ root_tree_node = RootTreeNode() tree_node = root_tree_node.new_child('h1', generate_title_cls(1), attrs={}) output_result = tree_node.render_html('Hello World!') expected_result = '<h1>Hello World!</h1>\n' self.assertEqual(expected_result, output_result)
def test_constructor(self): """ Test if the constructor set the title level and HTML tag name correctly. """ for level in range(1, 7): cls = generate_title_cls(level) self.assertEqual(cls.title_level, level) self.assertEqual(cls.html_tagname, 'h%d' % level) self.assertEqual('h%d' % level, cls.canonical_tag_name)
def test_generator_cls(self): """ Test the constructor function. """ cls = generate_title_cls(1) self.assertEqual(1, cls.title_level) self.assertEqual('h1', cls.html_tagname) self.assertEqual('h1', cls.canonical_tag_name) self.assertEqual((), cls.alias_tag_names)
def test_render_text_with_permalink(self): """ Test the ``render_text`` when the "id" attribute is set. """ root_tree_node = RootTreeNode() tree_node = root_tree_node.new_child('h1', generate_title_cls(1), attrs={'id': 'test'}) output_result = tree_node.render_text('Hello World!') expected_result = '#[test] Hello World!\n' self.assertEqual(expected_result, output_result)
def test_make_auto_title_ids(self): """ Test the ``make_auto_title_ids`` utility. """ document_tree = RootTreeNode() document_tree.new_child(None, TextTreeNode) a1 = document_tree.new_child('title', generate_title_cls(1)) a1.new_child(None, TextTreeNode, content='Title 1') a2 = document_tree.new_child('title', generate_title_cls(1), attrs={'id': 'title-2-custom'}) a2.new_child(None, TextTreeNode, content='Title 2') a3 = document_tree.new_child('title', generate_title_cls(1)) a3.new_child(None, TextTreeNode, content='Title 3') a4 = document_tree.new_child('title', generate_title_cls(1)) make_auto_title_ids(document_tree) self.assertEqual('title-1', a1.get_permalink_slug()) self.assertEqual('title-2-custom', a2.get_permalink_slug()) self.assertEqual('title-3', a3.get_permalink_slug()) self.assertEqual('', a4.get_permalink_slug())
def test_get_permalink_slug_call_slugify(self): """ Test the ``get_permalink_slug`` method call the ``slugify`` function. """ root_tree_node = RootTreeNode() tree_node = root_tree_node.new_child('h1', generate_title_cls(1), attrs={'id': 'test'}) with unittest.mock.patch('skcode.tags.titles.slugify') as mock_slugify: tree_node.get_permalink_slug() mock_slugify.assert_called_once_with('test')
def test_get_permalink_slug_with_id_set(self): """ Test the ``get_permalink_slug`` when the "id" attribute is set. """ root_tree_node = RootTreeNode() tree_node = root_tree_node.new_child('h1', generate_title_cls(1), attrs={'id': 'test'}) permalink_slug = tree_node.get_permalink_slug() self.assertEqual('test', permalink_slug)
def test_get_permalink_slug_without_value(self): """ Test the ``get_permalink_slug`` when no value is set. """ root_tree_node = RootTreeNode() tree_node = root_tree_node.new_child('h1', generate_title_cls(1), attrs={}) permalink_slug = tree_node.get_permalink_slug() self.assertEqual('', permalink_slug)
def test_render_html_with_permalink(self): """ Test the ``render_html`` when the "id" attribute is set. """ root_tree_node = RootTreeNode() tree_node = root_tree_node.new_child('h1', generate_title_cls(1), attrs={'id': 'test'}) output_result = tree_node.render_html('Hello World!') expected_result = '<h1><a id="test">Hello World!</a></h1>\n' self.assertEqual(expected_result, output_result)
def test_render_text_without_permalink(self): """ Test the ``render_text`` when the "id" attribute is not set. """ root_tree_node = RootTreeNode() tree_node = root_tree_node.new_child('h1', generate_title_cls(1), attrs={}) output_result = tree_node.render_text('Hello World!') expected_result = '# Hello World!\n' self.assertEqual(expected_result, output_result)
def test_get_permalink_slug_with_id_and_tagname_set(self): """ Test the ``get_permalink_slug`` when the tag name and "id" attribute is set. """ root_tree_node = RootTreeNode() tree_node = root_tree_node.new_child('h1', generate_title_cls(1), attrs={'h1': 'test', 'id': 'test2'}) permalink_slug = tree_node.get_permalink_slug() self.assertEqual('test', permalink_slug)
def test_make_titles_hierarchy(self): """ Test the ``make_titles_hierarchy`` utility. """ document_tree = RootTreeNode() a = document_tree.new_child('title', generate_title_cls(3)) b = document_tree.new_child('title', generate_title_cls(4)) c = document_tree.new_child('title', generate_title_cls(1)) d = document_tree.new_child('title', generate_title_cls(2)) e = document_tree.new_child('title', generate_title_cls(3)) f = document_tree.new_child('title', generate_title_cls(2)) g = document_tree.new_child('title', generate_title_cls(3)) h = document_tree.new_child('title', generate_title_cls(1)) i = document_tree.new_child('title', generate_title_cls(2)) j = document_tree.new_child('title', generate_title_cls(1)) k = document_tree.new_child('title', generate_title_cls(1)) l = document_tree.new_child('title', generate_title_cls(3)) m = document_tree.new_child('title', generate_title_cls(4)) n = document_tree.new_child('title', generate_title_cls(2)) titles = [a, b, c, d, e, f, g, h, i, j, k, l, m, n] titles_hierarchy = make_titles_hierarchy(titles) self.assertEqual([(a, [(b, [])]), (c, [(d, [(e, [])]), (f, [(g, [])])]), (h, [(i, [])]), (j, []), (k, [(l, [(m, [])]), (n, [])])], titles_hierarchy)
def test_render_titles_hierarchy_html(self): """ Test the ``render_titles_hierarchy_text`` utility. """ document_tree = RootTreeNode() a = document_tree.new_child('title', generate_title_cls(3), attrs={'id': 'Title a'}) a.new_child(None, TextTreeNode, content='Title a') b = document_tree.new_child('title', generate_title_cls(4), attrs={'id': 'Title b'}) b.new_child(None, TextTreeNode, content='Title b') c = document_tree.new_child('title', generate_title_cls(1), attrs={'id': 'Title c'}) c.new_child(None, TextTreeNode, content='Title c') d = document_tree.new_child('title', generate_title_cls(2), attrs={'id': 'Title d'}) d.new_child(None, TextTreeNode, content='Title d') e = document_tree.new_child('title', generate_title_cls(3), attrs={'id': 'Title e'}) e.new_child(None, TextTreeNode, content='Title e') f = document_tree.new_child('title', generate_title_cls(2), attrs={'id': 'Title f'}) f.new_child(None, TextTreeNode, content='Title f') g = document_tree.new_child('title', generate_title_cls(3), attrs={'id': 'Title g'}) g.new_child(None, TextTreeNode, content='Title g') h = document_tree.new_child('title', generate_title_cls(1), attrs={'id': 'Title h'}) h.new_child(None, TextTreeNode, content='Title h') i = document_tree.new_child('title', generate_title_cls(2), attrs={'id': 'Title i'}) i.new_child(None, TextTreeNode, content='Title i') j = document_tree.new_child('title', generate_title_cls(1), attrs={'id': 'Title j'}) j.new_child(None, TextTreeNode, content='Title j') k = document_tree.new_child('title', generate_title_cls(1), attrs={'id': 'Title k'}) k.new_child(None, TextTreeNode, content='Title k') l = document_tree.new_child('title', generate_title_cls(3), attrs={'id': 'Title l'}) l.new_child(None, TextTreeNode, content='Title l') m = document_tree.new_child('title', generate_title_cls(4), attrs={'id': 'Title m'}) m.new_child(None, TextTreeNode, content='Title m') n = document_tree.new_child('title', generate_title_cls(2)) n.new_child(None, TextTreeNode, content='Title n') titles = [a, b, c, d, e, f, g, h, i, j, k, l, m, n] titles_hierarchy = make_titles_hierarchy(titles) output = render_titles_hierarchy_html(titles_hierarchy) expected_output = """<ul class="titles-summary"> <li class="titles-summary-entry"> <a href="#title-a" class="titles-summary-link">Title a</a> <ul class="titles-summary-subentry"> <li class="titles-summary-entry"> <a href="#title-b" class="titles-summary-link">Title b</a> </li> </ul> </li> <li class="titles-summary-entry"> <a href="#title-c" class="titles-summary-link">Title c</a> <ul class="titles-summary-subentry"> <li class="titles-summary-entry"> <a href="#title-d" class="titles-summary-link">Title d</a> <ul class="titles-summary-subentry"> <li class="titles-summary-entry"> <a href="#title-e" class="titles-summary-link">Title e</a> </li> </ul> </li> <li class="titles-summary-entry"> <a href="#title-f" class="titles-summary-link">Title f</a> <ul class="titles-summary-subentry"> <li class="titles-summary-entry"> <a href="#title-g" class="titles-summary-link">Title g</a> </li> </ul> </li> </ul> </li> <li class="titles-summary-entry"> <a href="#title-h" class="titles-summary-link">Title h</a> <ul class="titles-summary-subentry"> <li class="titles-summary-entry"> <a href="#title-i" class="titles-summary-link">Title i</a> </li> </ul> </li> <li class="titles-summary-entry"> <a href="#title-j" class="titles-summary-link">Title j</a> </li> <li class="titles-summary-entry"> <a href="#title-k" class="titles-summary-link">Title k</a> <ul class="titles-summary-subentry"> <li class="titles-summary-entry"> <a href="#title-l" class="titles-summary-link">Title l</a> <ul class="titles-summary-subentry"> <li class="titles-summary-entry"> <a href="#title-m" class="titles-summary-link">Title m</a> </li> </ul> </li> <li class="titles-summary-entry"> <a href="#" class="titles-summary-link">Title n</a> </li> </ul> </li> </ul>""" self.assertEqual(expected_output, output)
def test_render_titles_hierarchy_html_custom_class(self): """ Test the ``render_titles_hierarchy_html`` utility. """ document_tree = RootTreeNode() a = document_tree.new_child('title', generate_title_cls(3), attrs={'id': 'Title a'}) a.new_child(None, TextTreeNode, content='Title a') b = document_tree.new_child('title', generate_title_cls(4), attrs={'id': 'Title b'}) b.new_child(None, TextTreeNode, content='Title b') c = document_tree.new_child('title', generate_title_cls(1), attrs={'id': 'Title c'}) c.new_child(None, TextTreeNode, content='Title c') d = document_tree.new_child('title', generate_title_cls(2), attrs={'id': 'Title d'}) d.new_child(None, TextTreeNode, content='Title d') e = document_tree.new_child('title', generate_title_cls(3), attrs={'id': 'Title e'}) e.new_child(None, TextTreeNode, content='Title e') f = document_tree.new_child('title', generate_title_cls(2), attrs={'id': 'Title f'}) f.new_child(None, TextTreeNode, content='Title f') g = document_tree.new_child('title', generate_title_cls(3), attrs={'id': 'Title g'}) g.new_child(None, TextTreeNode, content='Title g') h = document_tree.new_child('title', generate_title_cls(1), attrs={'id': 'Title h'}) h.new_child(None, TextTreeNode, content='Title h') i = document_tree.new_child('title', generate_title_cls(2), attrs={'id': 'Title i'}) i.new_child(None, TextTreeNode, content='Title i') j = document_tree.new_child('title', generate_title_cls(1), attrs={'id': 'Title j'}) j.new_child(None, TextTreeNode, content='Title j') k = document_tree.new_child('title', generate_title_cls(1), attrs={'id': 'Title k'}) k.new_child(None, TextTreeNode, content='Title k') l = document_tree.new_child('title', generate_title_cls(3), attrs={'id': 'Title l'}) l.new_child(None, TextTreeNode, content='Title l') m = document_tree.new_child('title', generate_title_cls(4), attrs={'id': 'Title m'}) m.new_child(None, TextTreeNode, content='Title m') n = document_tree.new_child('title', generate_title_cls(2)) n.new_child(None, TextTreeNode, content='Title n') titles = [a, b, c, d, e, f, g, h, i, j, k, l, m, n] titles_hierarchy = make_titles_hierarchy(titles) output = render_titles_hierarchy_html(titles_hierarchy, root_ul_class_name='custom_summary', li_class_name='custom_summary-entry', a_class_name='custom_summary-link', ul_class_name='custom_summary-subentry') expected_output = """<ul class="custom_summary"> <li class="custom_summary-entry"> <a href="#title-a" class="custom_summary-link">Title a</a> <ul class="custom_summary-subentry"> <li class="custom_summary-entry"> <a href="#title-b" class="custom_summary-link">Title b</a> </li> </ul> </li> <li class="custom_summary-entry"> <a href="#title-c" class="custom_summary-link">Title c</a> <ul class="custom_summary-subentry"> <li class="custom_summary-entry"> <a href="#title-d" class="custom_summary-link">Title d</a> <ul class="custom_summary-subentry"> <li class="custom_summary-entry"> <a href="#title-e" class="custom_summary-link">Title e</a> </li> </ul> </li> <li class="custom_summary-entry"> <a href="#title-f" class="custom_summary-link">Title f</a> <ul class="custom_summary-subentry"> <li class="custom_summary-entry"> <a href="#title-g" class="custom_summary-link">Title g</a> </li> </ul> </li> </ul> </li> <li class="custom_summary-entry"> <a href="#title-h" class="custom_summary-link">Title h</a> <ul class="custom_summary-subentry"> <li class="custom_summary-entry"> <a href="#title-i" class="custom_summary-link">Title i</a> </li> </ul> </li> <li class="custom_summary-entry"> <a href="#title-j" class="custom_summary-link">Title j</a> </li> <li class="custom_summary-entry"> <a href="#title-k" class="custom_summary-link">Title k</a> <ul class="custom_summary-subentry"> <li class="custom_summary-entry"> <a href="#title-l" class="custom_summary-link">Title l</a> <ul class="custom_summary-subentry"> <li class="custom_summary-entry"> <a href="#title-m" class="custom_summary-link">Title m</a> </li> </ul> </li> <li class="custom_summary-entry"> <a href="#" class="custom_summary-link">Title n</a> </li> </ul> </li> </ul>""" self.assertEqual(expected_output, output)
def test_render_titles_hierarchy_text(self): """ Test the ``render_titles_hierarchy_text`` utility. """ document_tree = RootTreeNode() a = document_tree.new_child('title', generate_title_cls(3), attrs={'id': 'Title a'}) a.new_child(None, TextTreeNode, content='Title a') b = document_tree.new_child('title', generate_title_cls(4), attrs={'id': 'Title b'}) b.new_child(None, TextTreeNode, content='Title b') c = document_tree.new_child('title', generate_title_cls(1), attrs={'id': 'Title c'}) c.new_child(None, TextTreeNode, content='Title c') d = document_tree.new_child('title', generate_title_cls(2), attrs={'id': 'Title d'}) d.new_child(None, TextTreeNode, content='Title d') e = document_tree.new_child('title', generate_title_cls(3), attrs={'id': 'Title e'}) e.new_child(None, TextTreeNode, content='Title e') f = document_tree.new_child('title', generate_title_cls(2), attrs={'id': 'Title f'}) f.new_child(None, TextTreeNode, content='Title f') g = document_tree.new_child('title', generate_title_cls(3), attrs={'id': 'Title g'}) g.new_child(None, TextTreeNode, content='Title g') h = document_tree.new_child('title', generate_title_cls(1), attrs={'id': 'Title h'}) h.new_child(None, TextTreeNode, content='Title h') i = document_tree.new_child('title', generate_title_cls(2), attrs={'id': 'Title i'}) i.new_child(None, TextTreeNode, content='Title i') j = document_tree.new_child('title', generate_title_cls(1), attrs={'id': 'Title j'}) j.new_child(None, TextTreeNode, content='Title j') k = document_tree.new_child('title', generate_title_cls(1), attrs={'id': 'Title k'}) k.new_child(None, TextTreeNode, content='Title k') l = document_tree.new_child('title', generate_title_cls(3), attrs={'id': 'Title l'}) l.new_child(None, TextTreeNode, content='Title l') m = document_tree.new_child('title', generate_title_cls(4), attrs={'id': 'Title m'}) m.new_child(None, TextTreeNode, content='Title m') n = document_tree.new_child('title', generate_title_cls(2)) n.new_child(None, TextTreeNode, content='Title n') titles = [a, b, c, d, e, f, g, h, i, j, k, l, m, n] titles_hierarchy = make_titles_hierarchy(titles) output = render_titles_hierarchy_text(titles_hierarchy) expected_output = """# Title a ## Title b # Title c ## Title d ### Title e ## Title f ### Title g # Title h ## Title i # Title j # Title k ## Title l ### Title m ## Title n""" self.assertEqual(expected_output, output)
def test_make_titles_hierarchy(self): """ Test the ``make_titles_hierarchy`` utility. """ document_tree = RootTreeNode() a = document_tree.new_child('title', generate_title_cls(3)) b = document_tree.new_child('title', generate_title_cls(4)) c = document_tree.new_child('title', generate_title_cls(1)) d = document_tree.new_child('title', generate_title_cls(2)) e = document_tree.new_child('title', generate_title_cls(3)) f = document_tree.new_child('title', generate_title_cls(2)) g = document_tree.new_child('title', generate_title_cls(3)) h = document_tree.new_child('title', generate_title_cls(1)) i = document_tree.new_child('title', generate_title_cls(2)) j = document_tree.new_child('title', generate_title_cls(1)) k = document_tree.new_child('title', generate_title_cls(1)) l = document_tree.new_child('title', generate_title_cls(3)) m = document_tree.new_child('title', generate_title_cls(4)) n = document_tree.new_child('title', generate_title_cls(2)) titles = [a, b, c, d, e, f, g, h, i, j, k, l, m, n] titles_hierarchy = make_titles_hierarchy(titles) self.assertEqual([ (a, [ (b, []) ]), (c, [ (d, [ (e, []) ]), (f, [ (g, []) ]) ]), (h, [ (i, []) ]), (j, []), (k, [ (l, [ (m, []) ]), (n, []) ]) ], titles_hierarchy)