summaryrefslogtreecommitdiff
path: root/tests/test_xml.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_xml.py')
-rw-r--r--tests/test_xml.py94
1 files changed, 76 insertions, 18 deletions
diff --git a/tests/test_xml.py b/tests/test_xml.py
index 5309ebce..d7611ebf 100644
--- a/tests/test_xml.py
+++ b/tests/test_xml.py
@@ -140,30 +140,88 @@ class XmlReportTest(XmlTestHelpers, CoverageTest):
class XmlPackageStructureTest(XmlTestHelpers, CoverageTest):
"""Tests about the package structure reported in the coverage.xml file."""
- def test_packages(self):
+ def package_and_class_tags(self, cov):
+ """Run an XML report on `cov`, and get the package and class tags."""
+ self.captured_stdout.truncate(0)
+ cov.xml_report(outfile="-")
+ packages_and_classes = re_lines(self.stdout(), r"<package |<class ")
+ scrubs = r' branch-rate="0"| complexity="0"| line-rate="[\d.]+"'
+ return clean("".join(packages_and_classes), scrubs)
+
+ def assert_package_and_class_tags(self, cov, result):
+ """Check the XML package and class tags from `cov` match `result`."""
+ self.assertMultiLineEqual(
+ self.package_and_class_tags(cov),
+ clean(result)
+ )
+
+ def test_package_names(self):
self.make_tree(width=1, depth=3)
self.make_file("main.py", """\
from d0.d0 import f0
""")
cov = coverage.coverage(source=".")
self.start_import_stop(cov, "main")
- cov.xml_report(outfile="-")
- xml = self.stdout()
- packages_and_classes = "".join(re_lines(xml, r"<package |<class "))
- scrubs = r' branch-rate="0"| complexity="0"| line-rate="[\d.]+"'
- self.assertMultiLineEqual(
- clean(packages_and_classes, scrubs),
- clean("""\
- <package name=".">
- <class filename="main.py" name="main.py">
- <package name="d0">
- <class filename="d0/__init__.py" name="__init__.py">
- <class filename="d0/f0.py" name="f0.py">
- <package name="d0.d0">
- <class filename="d0/d0/__init__.py" name="__init__.py">
- <class filename="d0/d0/f0.py" name="f0.py">
- """)
- )
+ self.assert_package_and_class_tags(cov, """\
+ <package name=".">
+ <class filename="main.py" name="main.py">
+ <package name="d0">
+ <class filename="d0/__init__.py" name="__init__.py">
+ <class filename="d0/f0.py" name="f0.py">
+ <package name="d0.d0">
+ <class filename="d0/d0/__init__.py" name="__init__.py">
+ <class filename="d0/d0/f0.py" name="f0.py">
+ """)
+
+ def test_package_depth(self):
+ self.make_tree(width=1, depth=4)
+ self.make_file("main.py", """\
+ from d0.d0 import f0
+ """)
+ cov = coverage.coverage(source=".")
+ self.start_import_stop(cov, "main")
+
+ cov.config["xml:package_depth"] = 1
+ self.assert_package_and_class_tags(cov, """\
+ <package name=".">
+ <class filename="main.py" name="main.py">
+ <package name="d0">
+ <class filename="d0/__init__.py" name="__init__.py">
+ <class filename="d0/d0/__init__.py" name="d0/__init__.py">
+ <class filename="d0/d0/d0/__init__.py" name="d0/d0/__init__.py">
+ <class filename="d0/d0/d0/f0.py" name="d0/d0/f0.py">
+ <class filename="d0/d0/f0.py" name="d0/f0.py">
+ <class filename="d0/f0.py" name="f0.py">
+ """)
+
+ cov.config["xml:package_depth"] = 2
+ self.assert_package_and_class_tags(cov, """\
+ <package name=".">
+ <class filename="main.py" name="main.py">
+ <package name="d0">
+ <class filename="d0/__init__.py" name="__init__.py">
+ <class filename="d0/f0.py" name="f0.py">
+ <package name="d0.d0">
+ <class filename="d0/d0/__init__.py" name="__init__.py">
+ <class filename="d0/d0/d0/__init__.py" name="d0/__init__.py">
+ <class filename="d0/d0/d0/f0.py" name="d0/f0.py">
+ <class filename="d0/d0/f0.py" name="f0.py">
+ """)
+
+ cov.config["xml:package_depth"] = 3
+ self.assert_package_and_class_tags(cov, """\
+ <package name=".">
+ <class filename="main.py" name="main.py">
+ <package name="d0">
+ <class filename="d0/__init__.py" name="__init__.py">
+ <class filename="d0/f0.py" name="f0.py">
+ <package name="d0.d0">
+ <class filename="d0/d0/__init__.py" name="__init__.py">
+ <class filename="d0/d0/f0.py" name="f0.py">
+ <package name="d0.d0.d0">
+ <class filename="d0/d0/d0/__init__.py" name="__init__.py">
+ <class filename="d0/d0/d0/f0.py" name="f0.py">
+ """)
def re_lines(text, pat):