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.py33
1 files changed, 33 insertions, 0 deletions
diff --git a/tests/test_xml.py b/tests/test_xml.py
index c21a9dd4..94b310e3 100644
--- a/tests/test_xml.py
+++ b/tests/test_xml.py
@@ -318,6 +318,39 @@ class XmlReportTest(XmlTestHelpers, CoverageTest):
"name": "รข",
}
+ def test_no_duplicate_packages(self) -> None:
+ self.make_file(
+ "namespace/package/__init__.py",
+ "from . import sample; from . import test; from .subpackage import test"
+ )
+ self.make_file("namespace/package/sample.py", "print('package.sample')")
+ self.make_file("namespace/package/test.py", "print('package.test')")
+ self.make_file("namespace/package/subpackage/test.py", "print('package.subpackage.test')")
+
+ # no source path passed to coverage!
+ # problem occurs when they are dynamically generated during xml report
+ cov = coverage.Coverage()
+
+ cov.start()
+ import_local_file("foo", "namespace/package/__init__.py") # pragma: nested
+ cov.stop() # pragma: nested
+
+ cov.xml_report()
+
+ dom = ElementTree.parse("coverage.xml")
+
+ # only two packages should be present
+ packages = dom.findall(".//package")
+ assert len(packages) == 2
+
+ # one of them is namespace.package
+ named_package = dom.findall(".//package[@name='namespace.package']")
+ assert len(named_package) == 1
+
+ # the other one namespace.package.subpackage
+ named_sub_package = dom.findall(".//package[@name='namespace.package.subpackage']")
+ assert len(named_sub_package) == 1
+
def unbackslash(v: Any) -> Any:
"""Find strings in `v`, and replace backslashes with slashes throughout."""