from pathlib import Path
from shutil import which

import pytest


@pytest.fixture
def spec_text():
    return Path(__file__).parent.joinpath("samples", "spec.md").read_text()


@pytest.mark.benchmark(group="packages")
def test_markdown_it_py(benchmark, spec_text):
    import markdown_it

    parser = markdown_it.MarkdownIt("commonmark")
    benchmark.extra_info["version"] = markdown_it.__version__
    benchmark(parser.render, spec_text)


@pytest.mark.benchmark(group="packages")
def test_markdown_it_pyrs(benchmark, spec_text):
    import markdown_it_pyrs

    parser = markdown_it_pyrs.MarkdownIt("commonmark")
    benchmark.extra_info["version"] = markdown_it_pyrs.__version__
    benchmark(parser.render, spec_text)


@pytest.mark.benchmark(group="packages")
def test_mistune(benchmark, spec_text):
    import mistune

    benchmark.extra_info["version"] = mistune.__version__
    benchmark(mistune.markdown, spec_text)


@pytest.mark.benchmark(group="packages")
def test_commonmark_py(benchmark, spec_text):
    import commonmark

    benchmark.extra_info["version"] = "0.9.1"
    benchmark(commonmark.commonmark, spec_text)


@pytest.mark.benchmark(group="packages")
def test_pymarkdown(benchmark, spec_text):
    import markdown

    benchmark.extra_info["version"] = markdown.__version__
    benchmark(markdown.markdown, spec_text)


@pytest.mark.benchmark(group="packages")
def test_pymarkdown_extra(benchmark, spec_text):
    import markdown

    benchmark.extra_info["version"] = markdown.__version__
    benchmark(markdown.markdown, spec_text, extensions=["extra"])


@pytest.mark.benchmark(group="packages")
def test_mistletoe(benchmark, spec_text):
    import mistletoe

    benchmark.extra_info["version"] = mistletoe.__version__
    benchmark(mistletoe.markdown, spec_text)


@pytest.mark.skipif(which("pandoc") is None, reason="pandoc executable not found")
@pytest.mark.benchmark(group="packages")
def test_panflute(benchmark, spec_text):
    import panflute

    benchmark.extra_info["version"] = panflute.__version__
    benchmark(
        panflute.convert_text, spec_text, input_format="markdown", output_format="html"
    )
