# remove when we don't support py38 anymore from __future__ import annotations from datetime import datetime from typing import Any import pytest import markdown from blag.markdown import convert_markdown, markdown_factory @pytest.mark.parametrize( "input_, expected", [ # inline ('[test](test.md)', 'test.html'), ('[test](test.md "test")', 'test.html'), ('[test](a/test.md)', 'a/test.html'), ('[test](a/test.md "test")', 'a/test.html'), ('[test](/test.md)', '/test.html'), ('[test](/test.md "test")', '/test.html'), ('[test](/a/test.md)', '/a/test.html'), ('[test](/a/test.md "test")', '/a/test.html'), # reference ('[test][]\n[test]: test.md ' '', 'test.html'), ('[test][]\n[test]: test.md "test"', 'test.html'), ('[test][]\n[test]: a/test.md', 'a/test.html'), ('[test][]\n[test]: a/test.md "test"', 'a/test.html'), ('[test][]\n[test]: /test.md', '/test.html'), ('[test][]\n[test]: /test.md "test"', '/test.html'), ('[test][]\n[test]: /a/test.md', '/a/test.html'), ('[test][]\n[test]: /a/test.md "test"', '/a/test.html'), ], ) def test_convert_markdown_links(input_: str, expected: str) -> None: md = markdown_factory() html, _ = convert_markdown(md, input_) assert expected in html @pytest.mark.parametrize( "input_, expected", [ # scheme ('[test](https://)', 'https://'), # netloc ('[test](//test.md)', '//test.md'), # no path ('[test]()', ''), ], ) def test_dont_convert_normal_links(input_: str, expected: str) -> None: md = markdown_factory() html, _ = convert_markdown(md, input_) assert expected in html @pytest.mark.parametrize( "input_, expected", [ ('foo: bar', {'foo': 'bar'}), ('foo: those are several words', {'foo': 'those are several words'}), ('tags: this, is, a, test\n', {'tags': ['this', 'is', 'a', 'test']}), ('tags: this, IS, a, test', {'tags': ['this', 'is', 'a', 'test']}), ( 'date: 2020-01-01 12:10', {'date': datetime(2020, 1, 1, 12, 10).astimezone()}, ), ], ) def test_convert_metadata(input_: str, expected: dict[str, Any]) -> None: md = markdown_factory() _, meta = convert_markdown(md, input_) assert expected == meta def test_markdown_factory() -> None: md = markdown_factory() assert isinstance(md, markdown.Markdown) def test_smarty() -> None: md = markdown_factory() md1 = """ this --- is -- a test ... """ html, meta = convert_markdown(md, md1) assert 'mdash' in html assert 'ndash' in html assert 'hellip' in html def test_smarty_code() -> None: md = markdown_factory() md1 = """ ``` this --- is -- a test ... ``` """ html, meta = convert_markdown(md, md1) assert 'mdash' not in html assert 'ndash' not in html assert 'hellip' not in html