1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
from pathlib import Path
from textwrap import dedent
from markdown_it import MarkdownIt
from markdown_it.rules_block import StateBlock
from markdown_it.rules_inline import StateInline
from markdown_it.utils import read_fixture_file
import pytest
from mdit_py_plugins.dollarmath import dollarmath_plugin
from mdit_py_plugins.dollarmath import index as main
FIXTURE_PATH = Path(__file__).parent.joinpath("fixtures")
def test_inline_func():
inline_func = main.math_inline_dollar()
md = MarkdownIt()
src = r"$a=1$ $b=2$"
tokens = []
state = StateInline(src, md, {}, tokens)
inline_func(state, False)
assert tokens[0].as_dict() == {
"type": "math_inline",
"tag": "math",
"nesting": 0,
"attrs": None,
"map": None,
"level": 0,
"children": None,
"content": "a=1",
"markup": "$",
"info": "",
"meta": {},
"block": False,
"hidden": False,
}
assert state.pos == 5
def test_block_func():
block_func = main.math_block_dollar()
md = MarkdownIt()
src = r"$$\na=1\n\nc\nb=2$$ (abc)"
tokens = []
state = StateBlock(src, md, {}, tokens)
block_func(state, 0, 10, False)
print(tokens[0].as_dict())
assert tokens[0].as_dict() == {
"type": "math_block_label",
"tag": "math",
"nesting": 0,
"attrs": None,
"map": [0, 1],
"level": 0,
"children": None,
"content": "\\na=1\\n\\nc\\nb=2",
"markup": "$$",
"info": "abc",
"meta": {},
"block": True,
"hidden": False,
}
def test_plugin_parse(data_regression):
md = MarkdownIt().use(dollarmath_plugin)
tokens = md.parse(
dedent(
"""\
$$
a=1
b=2
$$ (abc)
- ab $c=1$ d
"""
)
)
data_regression.check([t.as_dict() for t in tokens])
def test_custom_renderer(data_regression):
md = MarkdownIt().use(dollarmath_plugin, renderer=lambda x, y: x)
assert md.render("$x$").strip() == '<p><span class="math inline">x</span></p>'
@pytest.mark.parametrize(
"line,title,input,expected",
read_fixture_file(FIXTURE_PATH.joinpath("dollar_math.md")),
)
def test_dollarmath_fixtures(line, title, input, expected):
md = MarkdownIt("commonmark").use(
dollarmath_plugin,
allow_space=False,
allow_digits=False,
double_inline=True,
allow_blank_lines=False,
)
if "DISABLE-CODEBLOCKS" in title:
md.disable("code")
md.options.xhtmlOut = False
text = md.render(input)
print(text)
assert text.rstrip() == expected.rstrip()
|