toc_tests.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. #!/usr/bin/env python
  2. import unittest
  3. from mkdocs.structure.toc import get_toc
  4. from mkdocs.tests.base import dedent, get_markdown_toc
  5. class TableOfContentsTests(unittest.TestCase):
  6. def test_indented_toc(self):
  7. md = dedent("""
  8. # Heading 1
  9. ## Heading 2
  10. ### Heading 3
  11. """)
  12. expected = dedent("""
  13. Heading 1 - #heading-1
  14. Heading 2 - #heading-2
  15. Heading 3 - #heading-3
  16. """)
  17. toc = get_toc(get_markdown_toc(md))
  18. self.assertEqual(str(toc).strip(), expected)
  19. self.assertEqual(len(toc), 1)
  20. def test_indented_toc_html(self):
  21. md = dedent("""
  22. # Heading 1
  23. ## <code>Heading</code> 2
  24. ## Heading 3
  25. """)
  26. expected = dedent("""
  27. Heading 1 - #heading-1
  28. Heading 2 - #heading-2
  29. Heading 3 - #heading-3
  30. """)
  31. toc = get_toc(get_markdown_toc(md))
  32. self.assertEqual(str(toc).strip(), expected)
  33. self.assertEqual(len(toc), 1)
  34. def test_flat_toc(self):
  35. md = dedent("""
  36. # Heading 1
  37. # Heading 2
  38. # Heading 3
  39. """)
  40. expected = dedent("""
  41. Heading 1 - #heading-1
  42. Heading 2 - #heading-2
  43. Heading 3 - #heading-3
  44. """)
  45. toc = get_toc(get_markdown_toc(md))
  46. self.assertEqual(str(toc).strip(), expected)
  47. self.assertEqual(len(toc), 3)
  48. def test_flat_h2_toc(self):
  49. md = dedent("""
  50. ## Heading 1
  51. ## Heading 2
  52. ## Heading 3
  53. """)
  54. expected = dedent("""
  55. Heading 1 - #heading-1
  56. Heading 2 - #heading-2
  57. Heading 3 - #heading-3
  58. """)
  59. toc = get_toc(get_markdown_toc(md))
  60. self.assertEqual(str(toc).strip(), expected)
  61. self.assertEqual(len(toc), 3)
  62. def test_mixed_toc(self):
  63. md = dedent("""
  64. # Heading 1
  65. ## Heading 2
  66. # Heading 3
  67. ### Heading 4
  68. ### Heading 5
  69. """)
  70. expected = dedent("""
  71. Heading 1 - #heading-1
  72. Heading 2 - #heading-2
  73. Heading 3 - #heading-3
  74. Heading 4 - #heading-4
  75. Heading 5 - #heading-5
  76. """)
  77. toc = get_toc(get_markdown_toc(md))
  78. self.assertEqual(str(toc).strip(), expected)
  79. self.assertEqual(len(toc), 2)
  80. def test_mixed_html(self):
  81. md = dedent("""
  82. # Heading 1
  83. ## Heading 2
  84. # Heading 3
  85. ### Heading 4
  86. ### <a>Heading 5</a>
  87. """)
  88. expected = dedent("""
  89. Heading 1 - #heading-1
  90. Heading 2 - #heading-2
  91. Heading 3 - #heading-3
  92. Heading 4 - #heading-4
  93. Heading 5 - #heading-5
  94. """)
  95. toc = get_toc(get_markdown_toc(md))
  96. self.assertEqual(str(toc).strip(), expected)
  97. self.assertEqual(len(toc), 2)
  98. def test_nested_anchor(self):
  99. md = dedent("""
  100. # Heading 1
  101. ## Heading 2
  102. # Heading 3
  103. ### Heading 4
  104. ### <a href="/">Heading 5</a>
  105. """)
  106. expected = dedent("""
  107. Heading 1 - #heading-1
  108. Heading 2 - #heading-2
  109. Heading 3 - #heading-3
  110. Heading 4 - #heading-4
  111. Heading 5 - #heading-5
  112. """)
  113. toc = get_toc(get_markdown_toc(md))
  114. self.assertEqual(str(toc).strip(), expected)
  115. self.assertEqual(len(toc), 2)
  116. def test_entityref(self):
  117. md = dedent("""
  118. # Heading & 1
  119. ## Heading > 2
  120. ### Heading < 3
  121. """)
  122. expected = dedent("""
  123. Heading &amp; 1 - #heading-1
  124. Heading &gt; 2 - #heading-2
  125. Heading &lt; 3 - #heading-3
  126. """)
  127. toc = get_toc(get_markdown_toc(md))
  128. self.assertEqual(str(toc).strip(), expected)
  129. self.assertEqual(len(toc), 1)
  130. def test_charref(self):
  131. md = '# &#64;Header'
  132. expected = '&#64;Header - #header'
  133. toc = get_toc(get_markdown_toc(md))
  134. self.assertEqual(str(toc).strip(), expected)
  135. self.assertEqual(len(toc), 1)
  136. def test_level(self):
  137. md = dedent("""
  138. # Heading 1
  139. ## Heading 1.1
  140. ### Heading 1.1.1
  141. ### Heading 1.1.2
  142. ## Heading 1.2
  143. """)
  144. toc = get_toc(get_markdown_toc(md))
  145. def get_level_sequence(items):
  146. for item in items:
  147. yield item.level
  148. yield from get_level_sequence(item.children)
  149. self.assertEqual(tuple(get_level_sequence(toc)), (1, 2, 3, 3, 2))