64 lines
2.2 KiB
Python
64 lines
2.2 KiB
Python
import os
|
|
from io import StringIO
|
|
|
|
import pytest
|
|
|
|
from pygments.formatters import HtmlFormatter
|
|
from pygments.lexers import PythonLexer
|
|
|
|
from .support import structural_diff
|
|
|
|
TESTDIR = os.path.dirname(os.path.abspath(__file__))
|
|
EXPECTED_OUTPUT_DIR = os.path.join(TESTDIR, "html_linenos_expected_output")
|
|
CODE = list(PythonLexer().get_tokens("# a\n# b\n# c"))
|
|
|
|
|
|
def single_line(text):
|
|
return "".join(line.strip() for line in text.splitlines())
|
|
|
|
|
|
# Note: option `anchorlinenos` is currently ignored for `linenos=inline`
|
|
@pytest.mark.parametrize("linenos", ["inline", "table"])
|
|
@pytest.mark.parametrize("noclasses", ["False", "True"])
|
|
@pytest.mark.parametrize("linenostep", ["1", "2"])
|
|
@pytest.mark.parametrize("linenostart", ["1", "8"])
|
|
@pytest.mark.parametrize("linenospecial", ["0", "3"])
|
|
@pytest.mark.parametrize("anchorlinenos", ["False", "True"])
|
|
@pytest.mark.parametrize("filename", ["", "testfilename"])
|
|
def test_linenos_elements(
|
|
linenos, noclasses, linenostep, linenostart, linenospecial, anchorlinenos, filename
|
|
):
|
|
options = dict(
|
|
linenos=linenos,
|
|
noclasses=noclasses,
|
|
linenostep=linenostep,
|
|
linenostart=linenostart,
|
|
linenospecial=linenospecial,
|
|
anchorlinenos=anchorlinenos,
|
|
filename=filename,
|
|
)
|
|
|
|
output = StringIO()
|
|
fmt = HtmlFormatter(**options)
|
|
fmt.format(CODE, output)
|
|
html = output.getvalue()
|
|
|
|
filename_parts = []
|
|
filename_parts.append(linenos)
|
|
filename_parts.append("nocls" if noclasses == "True" else "cls")
|
|
filename_parts.append("step_" + linenostep)
|
|
filename_parts.append("start_" + linenostart)
|
|
filename_parts.append("special_" + linenospecial)
|
|
filename_parts.append("anchor" if anchorlinenos == "True" else "noanchor")
|
|
filename_parts.append("filename" if filename else "nofilename")
|
|
expected_html_filename = "_".join(filename_parts) + ".html"
|
|
|
|
# with open(os.path.join(EXPECTED_OUTPUT_DIR, expected_html_filename), 'w') as f:
|
|
# import bs4 as BeautifulSoup
|
|
# f.write(str(BeautifulSoup.BeautifulSoup(html, 'html.parser')))
|
|
|
|
with open(os.path.join(EXPECTED_OUTPUT_DIR, expected_html_filename),
|
|
encoding="utf-8") as f:
|
|
expected_html = f.read()
|
|
|
|
structural_diff.structural_diff(html, expected_html)
|