1import os 2from io import StringIO 3 4import pytest 5 6from pygments.formatters import HtmlFormatter 7from pygments.lexers import PythonLexer 8 9 10TESTDIR = os.path.dirname(os.path.abspath(__file__)) 11EXPECTED_OUTPUT_DIR = os.path.join(TESTDIR, "html_linenos_expected_output") 12CODE = list(PythonLexer().get_tokens("# a\n# b\n# c")) 13 14 15def single_line(text): 16 return "".join(l.strip() for l in text.splitlines()) 17 18 19# Note: option `anchorlinenos` is currently ignored for `linenos=inline` 20@pytest.mark.parametrize("linenos", ["inline", "table"]) 21@pytest.mark.parametrize("noclasses", ["False", "True"]) 22@pytest.mark.parametrize("linenostep", ["1", "2"]) 23@pytest.mark.parametrize("linenostart", ["1", "8"]) 24@pytest.mark.parametrize("linenospecial", ["0", "3"]) 25@pytest.mark.parametrize("anchorlinenos", ["False", "True"]) 26def test_linenos_elements( 27 linenos, noclasses, linenostep, linenostart, linenospecial, anchorlinenos 28): 29 options = dict( 30 linenos=linenos, 31 noclasses=noclasses, 32 linenostep=linenostep, 33 linenostart=linenostart, 34 linenospecial=linenospecial, 35 anchorlinenos=anchorlinenos, 36 ) 37 38 output = StringIO() 39 fmt = HtmlFormatter(**options) 40 fmt.format(CODE, output) 41 html = output.getvalue() 42 43 filename_parts = [] 44 filename_parts.append(linenos) 45 filename_parts.append("nocls" if noclasses == "True" else "cls") 46 filename_parts.append("step_" + linenostep) 47 filename_parts.append("start_" + linenostart) 48 filename_parts.append("special_" + linenospecial) 49 filename_parts.append("anchor" if anchorlinenos == "True" else "noanchor") 50 expected_html_filename = "_".join(filename_parts) + ".html" 51 52 with open(os.path.join(EXPECTED_OUTPUT_DIR, expected_html_filename)) as f: 53 expected_html = f.read() 54 55 assert single_line(html) == single_line(expected_html) 56