diff options
Diffstat (limited to 'tests/test_xml.py')
-rw-r--r-- | tests/test_xml.py | 33 |
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.""" |