| from markdown_it import MarkdownIt | |
| from markdown_it.token import Token | |
| from markdown_it.rules_core import StateCore | |
| from markdown_it.utils import AttrDict | |
| def test_get_rules(): | |
| md = MarkdownIt("zero") | |
| # print(md.get_all_rules()) | |
| assert md.get_all_rules() == { | |
| "core": [ | |
| "normalize", | |
| "block", | |
| "inline", | |
| "linkify", | |
| "replacements", | |
| "smartquotes", | |
| ], | |
| "block": [ | |
| "table", | |
| "code", | |
| "fence", | |
| "blockquote", | |
| "hr", | |
| "list", | |
| "reference", | |
| "heading", | |
| "lheading", | |
| "html_block", | |
| "paragraph", | |
| ], | |
| "inline": [ | |
| "text", | |
| "newline", | |
| "escape", | |
| "backticks", | |
| "strikethrough", | |
| "emphasis", | |
| "link", | |
| "image", | |
| "autolink", | |
| "html_inline", | |
| "entity", | |
| ], | |
| "inline2": ["balance_pairs", "strikethrough", "emphasis", "text_collapse"], | |
| } | |
| def test_load_presets(): | |
| md = MarkdownIt("zero") | |
| assert md.get_active_rules() == { | |
| "block": ["paragraph"], | |
| "core": ["normalize", "block", "inline"], | |
| "inline": ["text"], | |
| "inline2": ["balance_pairs", "text_collapse"], | |
| } | |
| md = MarkdownIt("commonmark") | |
| assert md.get_active_rules() == { | |
| "core": ["normalize", "block", "inline"], | |
| "block": [ | |
| "code", | |
| "fence", | |
| "blockquote", | |
| "hr", | |
| "list", | |
| "reference", | |
| "heading", | |
| "lheading", | |
| "html_block", | |
| "paragraph", | |
| ], | |
| "inline": [ | |
| "text", | |
| "newline", | |
| "escape", | |
| "backticks", | |
| "emphasis", | |
| "link", | |
| "image", | |
| "autolink", | |
| "html_inline", | |
| "entity", | |
| ], | |
| "inline2": ["balance_pairs", "emphasis", "text_collapse"], | |
| } | |
| def test_override_options(): | |
| md = MarkdownIt("zero") | |
| assert md.options["maxNesting"] == 20 | |
| md = MarkdownIt("zero", {"maxNesting": 99}) | |
| assert md.options["maxNesting"] == 99 | |
| def test_enable(): | |
| md = MarkdownIt("zero").enable("heading") | |
| assert md.get_active_rules() == { | |
| "block": ["heading", "paragraph"], | |
| "core": ["normalize", "block", "inline"], | |
| "inline": ["text"], | |
| "inline2": ["balance_pairs", "text_collapse"], | |
| } | |
| md.enable(["backticks", "autolink"]) | |
| assert md.get_active_rules() == { | |
| "block": ["heading", "paragraph"], | |
| "core": ["normalize", "block", "inline"], | |
| "inline": ["text", "backticks", "autolink"], | |
| "inline2": ["balance_pairs", "text_collapse"], | |
| } | |
| def test_disable(): | |
| md = MarkdownIt("zero").disable("inline") | |
| assert md.get_active_rules() == { | |
| "block": ["paragraph"], | |
| "core": ["normalize", "block"], | |
| "inline": ["text"], | |
| "inline2": ["balance_pairs", "text_collapse"], | |
| } | |
| md.disable(["text"]) | |
| assert md.get_active_rules() == { | |
| "block": ["paragraph"], | |
| "core": ["normalize", "block"], | |
| "inline": [], | |
| "inline2": ["balance_pairs", "text_collapse"], | |
| } | |
| def test_reset(): | |
| md = MarkdownIt("zero") | |
| with md.reset_rules(): | |
| md.disable("inline") | |
| assert md.get_active_rules() == { | |
| "block": ["paragraph"], | |
| "core": ["normalize", "block"], | |
| "inline": ["text"], | |
| "inline2": ["balance_pairs", "text_collapse"], | |
| } | |
| assert md.get_active_rules() == { | |
| "block": ["paragraph"], | |
| "core": ["normalize", "block", "inline"], | |
| "inline": ["text"], | |
| "inline2": ["balance_pairs", "text_collapse"], | |
| } | |
| def test_parseInline(): | |
| md = MarkdownIt() | |
| tokens = md.parseInline("abc\n\n> xyz") | |
| assert tokens == [ | |
| Token( | |
| type="inline", | |
| tag="", | |
| nesting=0, | |
| attrs=None, | |
| map=[0, 1], | |
| level=0, | |
| children=[ | |
| Token( | |
| type="text", | |
| tag="", | |
| nesting=0, | |
| attrs=None, | |
| map=None, | |
| level=0, | |
| children=None, | |
| content="abc", | |
| markup="", | |
| info="", | |
| meta={}, | |
| block=False, | |
| hidden=False, | |
| ), | |
| Token( | |
| type="softbreak", | |
| tag="br", | |
| nesting=0, | |
| attrs=None, | |
| map=None, | |
| level=0, | |
| children=None, | |
| content="", | |
| markup="", | |
| info="", | |
| meta={}, | |
| block=False, | |
| hidden=False, | |
| ), | |
| Token( | |
| type="softbreak", | |
| tag="br", | |
| nesting=0, | |
| attrs=None, | |
| map=None, | |
| level=0, | |
| children=None, | |
| content="", | |
| markup="", | |
| info="", | |
| meta={}, | |
| block=False, | |
| hidden=False, | |
| ), | |
| Token( | |
| type="text", | |
| tag="", | |
| nesting=0, | |
| attrs=None, | |
| map=None, | |
| level=0, | |
| children=None, | |
| content="> xyz", | |
| markup="", | |
| info="", | |
| meta={}, | |
| block=False, | |
| hidden=False, | |
| ), | |
| ], | |
| content="abc\n\n> xyz", | |
| markup="", | |
| info="", | |
| meta={}, | |
| block=False, | |
| hidden=False, | |
| ) | |
| ] | |
| def test_renderInline(): | |
| md = MarkdownIt("zero") | |
| tokens = md.renderInline("abc\n\n*xyz*") | |
| assert tokens == "abc\n\n*xyz*" | |
| def test_emptyStr(): | |
| md = MarkdownIt() | |
| tokens = md.parseInline("") | |
| assert tokens == [ | |
| Token( | |
| type="inline", | |
| tag="", | |
| nesting=0, | |
| attrs=None, | |
| map=[0, 1], | |
| level=0, | |
| children=[], | |
| content="", | |
| markup="", | |
| info="", | |
| meta={}, | |
| block=False, | |
| hidden=False, | |
| ) | |
| ] | |
| def test_noneState(): | |
| md = MarkdownIt() | |
| state = StateCore(None, md, {}, []) | |
| # Remove normalizing rule | |
| rules = md.core.ruler.get_active_rules() | |
| md.core.ruler.enableOnly(rules[rules.index("inline") :]) | |
| # Check that we can process None str with empty env and block_tokens | |
| md.core.process(state) | |
| def test_empty_env(): | |
| """Test that an empty `env` is mutated, not copied and mutated.""" | |
| md = MarkdownIt() | |
| env = AttrDict() | |
| md.render("[foo]: /url\n[foo]", env) | |
| assert "references" in env | |
| env = AttrDict() | |
| md.parse("[foo]: /url\n[foo]", env) | |
| assert "references" in env | |
| def test_table_tokens(data_regression): | |
| md = MarkdownIt("js-default") | |
| tokens = md.parse( | |
| """ | |
| | Heading 1 | Heading 2 | |
| | --------- | --------- | |
| | Cell 1 | Cell 2 | |
| | Cell 3 | Cell 4 | |
| """ | |
| ) | |
| data_regression.check([t.as_dict() for t in tokens]) |