summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--coverage/xmlreport.py2
-rw-r--r--tests/test_xml.py15
2 files changed, 16 insertions, 1 deletions
diff --git a/coverage/xmlreport.py b/coverage/xmlreport.py
index 2c8fd0cc..b2180266 100644
--- a/coverage/xmlreport.py
+++ b/coverage/xmlreport.py
@@ -69,6 +69,8 @@ class XmlReporter:
if os.path.exists(src):
if not self.config.relative_files:
src = files.canonical_filename(src)
+ else:
+ src = src.rstrip(r"\/")
self.source_paths.add(src)
self.packages: Dict[str, PackageData] = {}
self.xml_out: xml.dom.minidom.Document
diff --git a/tests/test_xml.py b/tests/test_xml.py
index 94b310e3..0f2cff41 100644
--- a/tests/test_xml.py
+++ b/tests/test_xml.py
@@ -320,7 +320,7 @@ class XmlReportTest(XmlTestHelpers, CoverageTest):
def test_no_duplicate_packages(self) -> None:
self.make_file(
- "namespace/package/__init__.py",
+ "namespace/package/__init__.py",
"from . import sample; from . import test; from .subpackage import test"
)
self.make_file("namespace/package/sample.py", "print('package.sample')")
@@ -489,6 +489,19 @@ class XmlPackageStructureTest(XmlTestHelpers, CoverageTest):
elts = dom.findall(".//sources/source")
assert [elt.text for elt in elts] == ["src"]
+ def test_relative_source_trailing_slash(self) -> None:
+ self.make_file("src/mod.py", "print(17)")
+ cov = coverage.Coverage(source=["src/"])
+ cov.set_option("run:relative_files", True)
+ self.start_import_stop(cov, "mod", modfile="src/mod.py")
+ cov.xml_report()
+
+ with open("coverage.xml") as x:
+ print(x.read())
+ dom = ElementTree.parse("coverage.xml")
+ elts = dom.findall(".//sources/source")
+ assert [elt.text for elt in elts] == ["src"]
+
def compare_xml(expected: str, actual: str, actual_extra: bool = False) -> None:
"""Specialized compare function for our XML files."""