Source code for test_basics

import pytest
import os
from xml.etree import ElementTree
from html.parser import HTMLParser


[docs]@pytest.mark.sphinx(buildername="xml", testroot="basics") @pytest.mark.filterwarnings("ignore: no traceable with tag") def test_xml_basics(app, warning): """Verify definition of and linking between traceables .. traceable:: TEST-TRACEDEF :title: Verify definition of and linking between traceables :category: Test :test_type: auto :parents: REQ-TRACEDIRECTIVE, REQ-ERRORMESSAGES :format: table This test case verifies that traceable directives result in the expected output using the XML builder. It also checks that links between traceables are output as expected, including that a helpful error message is generated when the input references a nonexistent traceable. .. traceable-graph:: :tags: TEST-TRACEDEF :relationships: parents """ app.builder.build_all() tree = ElementTree.parse(os.path.join(app.outdir, "index.xml")) # print pretty_print_xml(tree.getroot()) # Verify that 2 traceables are found. assert len(tree.findall(".//target")) == 2 assert len(tree.findall(".//index")) == 2 assert len(tree.findall(".//admonition")) == 2 assert len(tree.findall(".//admonition")) == 2 # Verify that children-parents relationship are made. assert len(tree.findall(".//field_list")) == 2 parents_fields, children_fields = tree.findall(".//field_list") for field in parents_fields: field_name = field.findall("./field_name")[0] if field_name.text == "children": break else: assert False, "Parent's children field not found!" for field in children_fields: field_name = field.findall("./field_name")[0] if field_name.text == "parents": break else: assert False, "Child's parents field not found!" # Verify that a warning is emitted for unknown traceable tag. assert (warning.getvalue().find( "WARNING: Traceables: no traceable with tag" " 'NONEXISTENT' found!") > 0)
[docs]@pytest.mark.sphinx(buildername="html", testroot="basics") def test_html_builder(app): """Verify that html builder runs without errors .. traceable:: TEST-HTMLBUILD :title: Verify that html builder runs without errors :category: Test :test_type: auto :format: table This test case verifies that the html builder can be run for basic usage of this extension. This test case also checks some basic aspects of the output HTML. .. traceable-graph:: :tags: TEST-HTMLBUILD :relationships: parents """ app.builder.build_all() with open(os.path.join(app.outdir, "index.html")) as index_file: index_html = index_file.read() # Verify that all traceable's have an ID. verifier = HTMLTraceableIdVerifier() verifier.feed(index_html)
[docs]class HTMLTraceableIdVerifier(HTMLParser):
[docs] def handle_starttag(self, tag, attribute_list): # Process only the divs of traceable definitions. if tag != "div": return attributes = dict(attribute_list) classes = attributes.get("class", "").split() if "admonition" not in classes or "traceable" not in classes: return # Verify that the traceable's div has an ID attribute. assert "id" in attributes, ( 'Expected traceable directive div to have an "id" ' 'attribute, but none found: {0!r}' .format(self.get_starttag_text()))
[docs]@pytest.mark.sphinx(buildername="latex", testroot="basics") def test_latex_builder(app): """Verify that latex builder runs without errors .. traceable:: TEST-LATEXBUILD :title: Verify that latex builder runs without errors :category: Test :test_type: auto :format: table This test case verifies that the latex builder can be run for basic usage of this extension. This test case only checks that the builder runs without error; it does not check any of the output. .. traceable-graph:: :tags: TEST-LATEXBUILD :relationships: parents """ app.builder.build_all()
# with open(os.path.join(app.outdir, "Python.tex")) as index_file: # index_tex = index_file.read()