| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- #!/usr/bin/env python
- import unittest
- from mkdocs.structure.toc import get_toc
- from mkdocs.tests.base import dedent, get_markdown_toc
- class TableOfContentsTests(unittest.TestCase):
- def test_indented_toc(self):
- md = dedent("""
- # Heading 1
- ## Heading 2
- ### Heading 3
- """)
- expected = dedent("""
- Heading 1 - #heading-1
- Heading 2 - #heading-2
- Heading 3 - #heading-3
- """)
- toc = get_toc(get_markdown_toc(md))
- self.assertEqual(str(toc).strip(), expected)
- self.assertEqual(len(toc), 1)
- def test_indented_toc_html(self):
- md = dedent("""
- # Heading 1
- ## <code>Heading</code> 2
- ## Heading 3
- """)
- expected = dedent("""
- Heading 1 - #heading-1
- Heading 2 - #heading-2
- Heading 3 - #heading-3
- """)
- toc = get_toc(get_markdown_toc(md))
- self.assertEqual(str(toc).strip(), expected)
- self.assertEqual(len(toc), 1)
- def test_flat_toc(self):
- md = dedent("""
- # Heading 1
- # Heading 2
- # Heading 3
- """)
- expected = dedent("""
- Heading 1 - #heading-1
- Heading 2 - #heading-2
- Heading 3 - #heading-3
- """)
- toc = get_toc(get_markdown_toc(md))
- self.assertEqual(str(toc).strip(), expected)
- self.assertEqual(len(toc), 3)
- def test_flat_h2_toc(self):
- md = dedent("""
- ## Heading 1
- ## Heading 2
- ## Heading 3
- """)
- expected = dedent("""
- Heading 1 - #heading-1
- Heading 2 - #heading-2
- Heading 3 - #heading-3
- """)
- toc = get_toc(get_markdown_toc(md))
- self.assertEqual(str(toc).strip(), expected)
- self.assertEqual(len(toc), 3)
- def test_mixed_toc(self):
- md = dedent("""
- # Heading 1
- ## Heading 2
- # Heading 3
- ### Heading 4
- ### Heading 5
- """)
- expected = dedent("""
- Heading 1 - #heading-1
- Heading 2 - #heading-2
- Heading 3 - #heading-3
- Heading 4 - #heading-4
- Heading 5 - #heading-5
- """)
- toc = get_toc(get_markdown_toc(md))
- self.assertEqual(str(toc).strip(), expected)
- self.assertEqual(len(toc), 2)
- def test_mixed_html(self):
- md = dedent("""
- # Heading 1
- ## Heading 2
- # Heading 3
- ### Heading 4
- ### <a>Heading 5</a>
- """)
- expected = dedent("""
- Heading 1 - #heading-1
- Heading 2 - #heading-2
- Heading 3 - #heading-3
- Heading 4 - #heading-4
- Heading 5 - #heading-5
- """)
- toc = get_toc(get_markdown_toc(md))
- self.assertEqual(str(toc).strip(), expected)
- self.assertEqual(len(toc), 2)
- def test_nested_anchor(self):
- md = dedent("""
- # Heading 1
- ## Heading 2
- # Heading 3
- ### Heading 4
- ### <a href="/">Heading 5</a>
- """)
- expected = dedent("""
- Heading 1 - #heading-1
- Heading 2 - #heading-2
- Heading 3 - #heading-3
- Heading 4 - #heading-4
- Heading 5 - #heading-5
- """)
- toc = get_toc(get_markdown_toc(md))
- self.assertEqual(str(toc).strip(), expected)
- self.assertEqual(len(toc), 2)
- def test_entityref(self):
- md = dedent("""
- # Heading & 1
- ## Heading > 2
- ### Heading < 3
- """)
- expected = dedent("""
- Heading & 1 - #heading-1
- Heading > 2 - #heading-2
- Heading < 3 - #heading-3
- """)
- toc = get_toc(get_markdown_toc(md))
- self.assertEqual(str(toc).strip(), expected)
- self.assertEqual(len(toc), 1)
- def test_charref(self):
- md = '# @Header'
- expected = '@Header - #header'
- toc = get_toc(get_markdown_toc(md))
- self.assertEqual(str(toc).strip(), expected)
- self.assertEqual(len(toc), 1)
- def test_level(self):
- md = dedent("""
- # Heading 1
- ## Heading 1.1
- ### Heading 1.1.1
- ### Heading 1.1.2
- ## Heading 1.2
- """)
- toc = get_toc(get_markdown_toc(md))
- def get_level_sequence(items):
- for item in items:
- yield item.level
- yield from get_level_sequence(item.children)
- self.assertEqual(tuple(get_level_sequence(toc)), (1, 2, 3, 3, 2))
|