blob: 6fcc36c51d7a440575ec3bbe88f6021f398110eb [file] [log] [blame]
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])