def test_productionlist(app, status, warning): app.builder.build_all() warnings = warning.getvalue().split("\n") assert len(warnings) == 2 assert warnings[-1] == '' assert "Dup2.rst:4: WARNING: duplicate token description of Dup, other instance in Dup1" in warnings[ 0] with (app.outdir / 'index.html').open('rb') as f: etree = HTMLParser(namespaceHTMLElements=False).parse(f) ul = list(etree.iter('ul'))[1] cases = [] for li in list(ul): assert len(list(li)) == 1 p = list(li)[0] assert p.tag == 'p' text = str(p.text).strip(' :') assert len(list(p)) == 1 a = list(p)[0] assert a.tag == 'a' link = a.get('href') assert len(list(a)) == 1 code = list(a)[0] assert code.tag == 'code' assert len(list(code)) == 1 span = list(code)[0] assert span.tag == 'span' linkText = span.text.strip() cases.append((text, link, linkText)) assert cases == [ ('A', 'Bare.html#grammar-token-A', 'A'), ('B', 'Bare.html#grammar-token-B', 'B'), ('P1:A', 'P1.html#grammar-token-P1-A', 'P1:A'), ('P1:B', 'P1.html#grammar-token-P1-B', 'P1:B'), ('P2:A', 'P1.html#grammar-token-P1-A', 'P1:A'), ('P2:B', 'P2.html#grammar-token-P2-B', 'P2:B'), ('Explicit title A, plain', 'Bare.html#grammar-token-A', 'MyTitle'), ('Explicit title A, colon', 'Bare.html#grammar-token-A', 'My:Title'), ('Explicit title P1:A, plain', 'P1.html#grammar-token-P1-A', 'MyTitle'), ('Explicit title P1:A, colon', 'P1.html#grammar-token-P1-A', 'My:Title'), ('Tilde A', 'Bare.html#grammar-token-A', 'A'), ('Tilde P1:A', 'P1.html#grammar-token-P1-A', 'A'), ('Tilde explicit title P1:A', 'P1.html#grammar-token-P1-A', '~MyTitle'), ('Tilde, explicit title P1:A', 'P1.html#grammar-token-P1-A', 'MyTitle'), ('Dup', 'Dup2.html#grammar-token-Dup', 'Dup'), ('FirstLine', 'firstLineRule.html#grammar-token-FirstLine', 'FirstLine'), ('SecondLine', 'firstLineRule.html#grammar-token-SecondLine', 'SecondLine'), ] text = (app.outdir / 'LineContinuation.html').read_text() assert "A</strong> ::= B C D E F G" in text
def test_literals(app, status, warning): app.build() with (app.outdir / 'literals.html').open() as html_file: etree = HTMLParser(namespaceHTMLElements=False).parse(html_file) for code_element in etree.iter('code'): code_text = ''.join(code_element.itertext()) if code_text.startswith('code role'): assert "'quotes'" in code_text elif code_text.startswith('{'): assert code_text == "{'code': 'role', 'with': 'quotes'}" elif code_text.startswith('literal'): assert code_text == "literal with 'quotes'"