from unittest.mock import patch import markdown from django.test import TestCase from wiki.core.markdown import ArticleMarkdown from wiki.core.markdown.mdx.codehilite import WikiCodeHiliteExtension from wiki.core.markdown.mdx.responsivetable import ResponsiveTableExtension from wiki.models import URLPath from ..base import ArticleTestBase try: import pygments pygments = True # NOQA except ImportError: pygments = False class ArticleMarkdownTests(ArticleTestBase): @patch("wiki.core.markdown.settings") def test_do_not_modify_extensions(self, settings): extensions = ["footnotes", "attr_list", "sane_lists"] settings.MARKDOWN_KWARGS = {"extensions": extensions} number_of_extensions = len(extensions) ArticleMarkdown(None) self.assertEqual(len(extensions), number_of_extensions) def test_html_removal(self): urlpath = URLPath.create_urlpath( self.root, "html_removal", title="Test 1", content="only_this", ) self.assertEqual(urlpath.article.render(), "

only_this

") class ResponsiveTableExtensionTests(TestCase): def setUp(self): super().setUp() self.md = markdown.Markdown( extensions=["extra", ResponsiveTableExtension()] ) self.md_without = markdown.Markdown(extensions=["extra"]) def test_wrapping(self): text = "|th|th|\n|--|--|\n|td|td|" expected = ( '
\n' + self.md_without.convert(text) + "\n
" ) self.assertEqual(self.md.convert(text), expected) class CodehiliteTests(TestCase): def test_fenced_code(self): md = markdown.Markdown(extensions=["extra", WikiCodeHiliteExtension()]) text = ( "Code:\n" "\n" "```python\n" "echo 'line 1'\n" "echo 'line 2'\n" "```\n" ) result = ( ( """

Code:

\n""" """
echo 'line 1'\n"""
                """echo 'line 2'\n"""
                """
\n""" """
""" ) if pygments else ( """

Code:

\n""" """
echo 'line 1'\n"""
                """echo 'line 2'\n
\n""" """
""" ) ) self.assertEqual( md.convert(text), result, ) def test_indented_code(self): md = markdown.Markdown(extensions=["extra", WikiCodeHiliteExtension()]) text = ( "Code:\n" "\n" " #!/usr/bin/python\n" " print('line 1')\n" " print('line 2')\n" " print('æøå')\n" "\n" ) result = ( ( """

Code:

\n""" """
1\n"""
                """2\n"""
                """3\n"""
                """4
#!/usr/bin/python\n"""
                """print('line 1')\n"""
                """print('line 2')\n"""
                """print('æøå')\n"""
                """
\n""" """
""" ) if pygments else ( """

Code:

\n""" """
#!/usr/bin/python\n"""
                """print('line 1')\n"""
                """print('line 2')\n"""
                """print('æøå')\n
\n""" """
""" ) ) self.assertEqual( md.convert(text), result, )