Skip to content

Commit

Permalink
tests: Run teardown for Handlers, refactor into contextmanager
Browse files Browse the repository at this point in the history
This fixes random test failures that for some reason showed up only on Windows Python 3.6
  • Loading branch information
oprypin authored Dec 31, 2020
1 parent a963564 commit 75722f2
Showing 1 changed file with 45 additions and 47 deletions.
92 changes: 45 additions & 47 deletions tests/test_extension.py
Original file line number Diff line number Diff line change
@@ -1,95 +1,93 @@
"""Tests for the extension module."""
from contextlib import contextmanager
from textwrap import dedent

from markdown import Markdown

from mkdocstrings.extension import MkdocstringsExtension
from mkdocstrings.handlers.base import Handlers

_DEFAULT_CONFIG = { # noqa: WPS407 (mutable constant)
"theme_name": "material",
"mdx": [],
"mdx_configs": {},
"mkdocstrings": {"default_handler": "python", "custom_templates": None, "watch": [], "handlers": {}},
}

@contextmanager
def ext_markdown(**kwargs):
"""Yield a Markdown instance with MkdocstringsExtension, with config adjustments from **kwargs.
Arguments:
**kwargs: Changes to apply to the config, on top of the default config.
Yields:
A `markdown.Markdown` instance.
"""
config = {
"theme_name": "material",
"mdx": [],
"mdx_configs": {},
"mkdocstrings": {"default_handler": "python", "custom_templates": None, "watch": [], "handlers": {}},
}
config.update(kwargs)
handlers = Handlers(config)
config["mdx"].append(MkdocstringsExtension(config, handlers))
yield Markdown(extensions=config["mdx"], extension_configs=config["mdx_configs"])
handlers.teardown()


def test_render_html_escaped_sequences():
"""Assert HTML-escaped sequences are correctly parsed as XML."""
config = dict(_DEFAULT_CONFIG)
config["mdx"] = [MkdocstringsExtension(config, Handlers(config))]
md = Markdown(extensions=config["mdx"])

md.convert("::: tests.fixtures.html_escaped_sequences")
with ext_markdown() as md:
md.convert("::: tests.fixtures.html_escaped_sequences")


def test_multiple_footnotes():
"""Assert footnotes don't get added to subsequent docstrings."""
config = dict(_DEFAULT_CONFIG, mdx=["footnotes"])
config["mdx"] = [MkdocstringsExtension(config, Handlers(config))]
md = Markdown(extensions=config["mdx"])

output = md.convert(
dedent(
"""
Top.[^aaa]
with ext_markdown(mdx=["footnotes"]) as md:
output = md.convert(
dedent(
"""
Top.[^aaa]
::: tests.fixtures.footnotes.func_a
::: tests.fixtures.footnotes.func_a
::: tests.fixtures.footnotes.func_b
::: tests.fixtures.footnotes.func_b
::: tests.fixtures.footnotes.func_c
::: tests.fixtures.footnotes.func_c
[^aaa]: Top footnote
""",
),
)
[^aaa]: Top footnote
""",
),
)
assert output.count("Footnote A") == 1
assert output.count("Footnote B") == 1
assert output.count("Top footnote") == 1


def test_markdown_heading_level():
"""Assert that Markdown headings' level doesn't exceed heading_level."""
config = dict(_DEFAULT_CONFIG)
config["mdx"] = [MkdocstringsExtension(config, Handlers(config))]
md = Markdown(extensions=config["mdx"])

output = md.convert("::: tests.fixtures.headings\n rendering:\n show_root_heading: true")
with ext_markdown() as md:
output = md.convert("::: tests.fixtures.headings\n rendering:\n show_root_heading: true")
assert "<h3>Foo</h3>" in output
assert "<h5>Bar</h5>" in output
assert "<h6>Baz</h6>" in output


def test_keeps_preceding_text():
"""Assert that autodoc is recognized in the middle of a block and preceding text is kept."""
config = dict(_DEFAULT_CONFIG)
config["mdx"] = [MkdocstringsExtension(config, Handlers(config))]
md = Markdown(extensions=config["mdx"])

output = md.convert("**preceding**\n::: tests.fixtures.headings")
with ext_markdown() as md:
output = md.convert("**preceding**\n::: tests.fixtures.headings")
assert "<strong>preceding</strong>" in output
assert "<h2>Foo</h2>" in output
assert ":::" not in output


def test_reference_inside_autodoc():
"""Assert cross-reference Markdown extension works correctly."""
config = dict(_DEFAULT_CONFIG)
config["mdx"] = [MkdocstringsExtension(config, Handlers(config))]
md = Markdown(extensions=config["mdx"])

output = md.convert("::: tests.fixtures.cross_reference")
with ext_markdown() as md:
output = md.convert("::: tests.fixtures.cross_reference")
snippet = 'Link to <span data-mkdocstrings-identifier="something.Else">something.Else</span>.'
assert snippet in output


def test_no_double_toc():
"""Asserts that the 'toc' extension doesn't apply its modification twice."""
config = dict(_DEFAULT_CONFIG)
config["mdx_configs"] = {"toc": {"permalink": "@@@"}}
config["mdx"] = ["toc", MkdocstringsExtension(config, Handlers(config))]
md = Markdown(extensions=config["mdx"], extension_configs=config["mdx_configs"])

output = md.convert("::: tests.fixtures.headings")
with ext_markdown(mdx=["toc"], mdx_configs={"toc": {"permalink": "@@@"}}) as md:
output = md.convert("::: tests.fixtures.headings")
assert 3 <= output.count("@@@") < 6

0 comments on commit 75722f2

Please sign in to comment.